text: /* Office JavaScript API library */
  /* Version: 16.0.9119.3000 */
  /*
  	Copyright (c) Microsoft Corporation.  All rights reserved.
  */
  
  
  /*
  	Your use of this file is governed by the Microsoft Services Agreement http://go.microsoft.com/fwlink/?LinkId=266419.
  */
  
  var OSF = OSF || {};
  OSF.HostSpecificFileVersionDefault = "16.00";
  OSF.HostSpecificFileVersionMap = {
      "access": {
          "web": "16.00"
      },
      "agavito": {
          "winrt": "16.00"
      },
      "excel": {
          "ios": "16.00",
          "mac": "16.00",
          "web": "16.00",
          "win32": "16.01",
          "winrt": "16.00"
      },
      "onenote": {
          "web": "16.00",
          "win32": "16.00",
          "winrt": "16.00"
      },
      "outlook": {
          "ios": "16.00",
          "mac": "16.00",
          "web": "16.01",
          "win32": "16.02"
      },
      "powerpoint": {
          "ios": "16.00",
          "mac": "16.00",
          "web": "16.00",
          "win32": "16.01",
          "winrt": "16.00"
      },
      "project": {
          "win32": "16.00"
      },
      "sway": {
          "web": "16.00"
      },
      "word": {
          "ios": "16.00",
          "mac": "16.00",
          "web": "16.00",
          "win32": "16.01",
          "winrt": "16.00"
      }
  };
  OSF.SupportedLocales = {
      "ar-sa": true,
      "bg-bg": true,
      "bn-in": true,
      "ca-es": true,
      "cs-cz": true,
      "da-dk": true,
      "de-de": true,
      "el-gr": true,
      "en-us": true,
      "es-es": true,
      "et-ee": true,
      "eu-es": true,
      "fa-ir": true,
      "fi-fi": true,
      "fr-fr": true,
      "gl-es": true,
      "he-il": true,
      "hi-in": true,
      "hr-hr": true,
      "hu-hu": true,
      "id-id": true,
      "it-it": true,
      "ja-jp": true,
      "kk-kz": true,
      "ko-kr": true,
      "lt-lt": true,
      "lv-lv": true,
      "ms-my": true,
      "nb-no": true,
      "nl-nl": true,
      "nn-no": true,
      "pl-pl": true,
      "pt-br": true,
      "pt-pt": true,
      "ro-ro": true,
      "ru-ru": true,
      "sk-sk": true,
      "sl-si": true,
      "sr-cyrl-cs": true,
      "sr-cyrl-rs": true,
      "sr-latn-cs": true,
      "sr-latn-rs": true,
      "sv-se": true,
      "th-th": true,
      "tr-tr": true,
      "uk-ua": true,
      "ur-pk": true,
      "vi-vn": true,
      "zh-cn": true,
      "zh-tw": true
  };
  OSF.AssociatedLocales = {
      ar: "ar-sa",
      bg: "bg-bg",
      bn: "bn-in",
      ca: "ca-es",
      cs: "cs-cz",
      da: "da-dk",
      de: "de-de",
      el: "el-gr",
      en: "en-us",
      es: "es-es",
      et: "et-ee",
      eu: "eu-es",
      fa: "fa-ir",
      fi: "fi-fi",
      fr: "fr-fr",
      gl: "gl-es",
      he: "he-il",
      hi: "hi-in",
      hr: "hr-hr",
      hu: "hu-hu",
      id: "id-id",
      it: "it-it",
      ja: "ja-jp",
      kk: "kk-kz",
      ko: "ko-kr",
      lt: "lt-lt",
      lv: "lv-lv",
      ms: "ms-my",
      nb: "nb-no",
      nl: "nl-nl",
      nn: "nn-no",
      pl: "pl-pl",
      pt: "pt-br",
      ro: "ro-ro",
      ru: "ru-ru",
      sk: "sk-sk",
      sl: "sl-si",
      sr: "sr-cyrl-cs",
      sv: "sv-se",
      th: "th-th",
      tr: "tr-tr",
      uk: "uk-ua",
      ur: "ur-pk",
      vi: "vi-vn",
      zh: "zh-cn"
  };
  OSF.getSupportedLocale = function OSF$getSupportedLocale(locale, defaultLocale) {
      if (defaultLocale === void 0) { defaultLocale = "en-us"; }
      if (!locale) {
          return defaultLocale;
      }
      var supportedLocale;
      locale = locale.toLowerCase();
      if (locale in OSF.SupportedLocales) {
          supportedLocale = locale;
      }
      else {
          var localeParts = locale.split('-', 1);
          if (localeParts && localeParts.length > 0) {
              supportedLocale = OSF.AssociatedLocales[localeParts[0]];
          }
      }
      if (!supportedLocale) {
          supportedLocale = defaultLocale;
      }
      return supportedLocale;
  };
  var ScriptLoading;
  (function (ScriptLoading) {
      var ScriptInfo = (function () {
          function ScriptInfo(url, isReady, hasStarted, timer, pendingCallback) {
              this.url = url;
              this.isReady = isReady;
              this.hasStarted = hasStarted;
              this.timer = timer;
              this.hasError = false;
              this.pendingCallbacks = [];
              this.pendingCallbacks.push(pendingCallback);
          }
          return ScriptInfo;
      })();
      var ScriptTelemetry = (function () {
          function ScriptTelemetry(scriptId, startTime, msResponseTime) {
              this.scriptId = scriptId;
              this.startTime = startTime;
              this.msResponseTime = msResponseTime;
          }
          return ScriptTelemetry;
      })();
      var LoadScriptHelper = (function () {
          function LoadScriptHelper() {
              this.defaultScriptLoadingTimeout = 10000;
              this.loadedScriptByIds = {};
              this.scriptTelemetryBuffer = [];
              this.osfControlAppCorrelationId = "";
              this.basePath = null;
              this.constantNames = {
                  OfficeJS: "office.js",
                  OfficeDebugJS: "office.debug.js"
              };
          }
          LoadScriptHelper.prototype.isScriptLoading = function (id) {
              return !!(this.loadedScriptByIds[id] && this.loadedScriptByIds[id].hasStarted);
          };
          LoadScriptHelper.prototype.getOfficeJsBasePath = function () {
              if (this.basePath) {
                  return this.basePath;
              }
              else {
                  var getScriptBase = function (scriptSrc, scriptNameToCheck) {
                      var scriptBase, indexOfJS, scriptSrcLowerCase;
                      scriptSrcLowerCase = scriptSrc.toLowerCase();
                      indexOfJS = scriptSrcLowerCase.indexOf(scriptNameToCheck);
                      if (indexOfJS >= 0 && indexOfJS === (scriptSrc.length - scriptNameToCheck.length) && (indexOfJS === 0 || scriptSrc.charAt(indexOfJS - 1) === '/' || scriptSrc.charAt(indexOfJS - 1) === '\\')) {
                          scriptBase = scriptSrc.substring(0, indexOfJS);
                      }
                      else if (indexOfJS >= 0
                          && indexOfJS < (scriptSrc.length - scriptNameToCheck.length)
                          && scriptSrc.charAt(indexOfJS + scriptNameToCheck.length) === '?'
                          && (indexOfJS === 0 || scriptSrc.charAt(indexOfJS - 1) === '/' || scriptSrc.charAt(indexOfJS - 1) === '\\')) {
                          scriptBase = scriptSrc.substring(0, indexOfJS);
                      }
                      return scriptBase;
                  };
                  var scripts = document.getElementsByTagName("script");
                  var scriptsCount = scripts.length;
                  var officeScripts = [this.constantNames.OfficeJS, this.constantNames.OfficeDebugJS];
                  var officeScriptsCount = officeScripts.length;
                  var i, j;
                  for (i = 0; !this.basePath && i < scriptsCount; i++) {
                      if (scripts[i].src) {
                          for (j = 0; !this.basePath && j < officeScriptsCount; j++) {
                              this.basePath = getScriptBase(scripts[i].src, officeScripts[j]);
                          }
                      }
                  }
                  return this.basePath;
              }
          };
          LoadScriptHelper.prototype.loadScript = function (url, scriptId, callback, highPriority, timeoutInMs) {
              this.loadScriptInternal(url, scriptId, callback, highPriority, timeoutInMs);
          };
          LoadScriptHelper.prototype.loadScriptParallel = function (url, scriptId, timeoutInMs) {
              this.loadScriptInternal(url, scriptId, null, false, timeoutInMs);
          };
          LoadScriptHelper.prototype.waitForFunction = function (scriptLoadTest, callback, numberOfTries, delay) {
              var attemptsRemaining = numberOfTries;
              var timerId;
              var validateFunction = function () {
                  attemptsRemaining--;
                  if (scriptLoadTest()) {
                      callback(true);
                      return;
                  }
                  else if (attemptsRemaining > 0) {
                      timerId = window.setTimeout(validateFunction, delay);
                      attemptsRemaining--;
                  }
                  else {
                      window.clearTimeout(timerId);
                      callback(false);
                  }
              };
              validateFunction();
          };
          LoadScriptHelper.prototype.waitForScripts = function (ids, callback) {
              var _this = this;
              if (this.invokeCallbackIfScriptsReady(ids, callback) == false) {
                  for (var i = 0; i < ids.length; i++) {
                      var id = ids[i];
                      var loadedScriptEntry = this.loadedScriptByIds[id];
                      if (loadedScriptEntry) {
                          loadedScriptEntry.pendingCallbacks.push(function () {
                              _this.invokeCallbackIfScriptsReady(ids, callback);
                          });
                      }
                  }
              }
          };
          LoadScriptHelper.prototype.logScriptLoading = function (scriptId, startTime, msResponseTime) {
              startTime = Math.floor(startTime);
              if (OSF.AppTelemetry && OSF.AppTelemetry.onScriptDone) {
                  if (OSF.AppTelemetry.onScriptDone.length == 3) {
                      OSF.AppTelemetry.onScriptDone(scriptId, startTime, msResponseTime);
                  }
                  else {
                      OSF.AppTelemetry.onScriptDone(scriptId, startTime, msResponseTime, this.osfControlAppCorrelationId);
                  }
              }
              else {
                  var scriptTelemetry = new ScriptTelemetry(scriptId, startTime, msResponseTime);
                  this.scriptTelemetryBuffer.push(scriptTelemetry);
              }
          };
          LoadScriptHelper.prototype.setAppCorrelationId = function (appCorrelationId) {
              this.osfControlAppCorrelationId = appCorrelationId;
          };
          LoadScriptHelper.prototype.invokeCallbackIfScriptsReady = function (ids, callback) {
              var hasError = false;
              for (var i = 0; i < ids.length; i++) {
                  var id = ids[i];
                  var loadedScriptEntry = this.loadedScriptByIds[id];
                  if (!loadedScriptEntry) {
                      loadedScriptEntry = new ScriptInfo("", false, false, null, null);
                      this.loadedScriptByIds[id] = loadedScriptEntry;
                  }
                  if (loadedScriptEntry.isReady == false) {
                      return false;
                  }
                  else if (loadedScriptEntry.hasError) {
                      hasError = true;
                  }
              }
              callback(!hasError);
              return true;
          };
          LoadScriptHelper.prototype.getScriptEntryByUrl = function (url) {
              for (var key in this.loadedScriptByIds) {
                  var scriptEntry = this.loadedScriptByIds[key];
                  if (this.loadedScriptByIds.hasOwnProperty(key) && scriptEntry.url === url) {
                      return scriptEntry;
                  }
              }
              return null;
          };
          LoadScriptHelper.prototype.loadScriptInternal = function (url, scriptId, callback, highPriority, timeoutInMs) {
              if (url) {
                  var self = this;
                  var doc = window.document;
                  var loadedScriptEntry = (scriptId && this.loadedScriptByIds[scriptId]) ? this.loadedScriptByIds[scriptId] : this.getScriptEntryByUrl(url);
                  if (!loadedScriptEntry || loadedScriptEntry.hasError || loadedScriptEntry.url.toLowerCase() != url.toLowerCase()) {
                      var script = doc.createElement("script");
                      script.type = "text/javascript";
                      if (scriptId) {
                          script.id = scriptId;
                      }
                      if (!loadedScriptEntry) {
                          loadedScriptEntry = new ScriptInfo(url, false, false, null, null);
                          this.loadedScriptByIds[(scriptId ? scriptId : url)] = loadedScriptEntry;
                      }
                      else {
                          loadedScriptEntry.url = url;
                          loadedScriptEntry.hasError = false;
                          loadedScriptEntry.isReady = false;
                      }
                      if (callback) {
                          if (highPriority) {
                              loadedScriptEntry.pendingCallbacks.unshift(callback);
                          }
                          else {
                              loadedScriptEntry.pendingCallbacks.push(callback);
                          }
                      }
                      var timeFromPageInit = -1;
                      if (window.performance && window.performance.now) {
                          timeFromPageInit = window.performance.now();
                      }
                      var startTime = (new Date()).getTime();
                      var logTelemetry = function (succeeded) {
                          if (scriptId) {
                              var totalTime = (new Date()).getTime() - startTime;
                              if (!succeeded) {
                                  totalTime = -totalTime;
                              }
                              self.logScriptLoading(scriptId, timeFromPageInit, totalTime);
                          }
                          self.flushTelemetryBuffer();
                      };
                      var onLoadCallback = function OSF_OUtil_loadScript$onLoadCallback() {
                          if (OSF._OfficeAppFactory.getHostInfo().hostType == "onenote" && (typeof OSF.AppTelemetry !== 'undefined') && (typeof OSF.AppTelemetry.enableTelemetry !== 'undefined')) {
                              OSF.AppTelemetry.enableTelemetry = false;
                          }
                          if (!OSF._OfficeAppFactory.getLoggingAllowed() && (typeof OSF.AppTelemetry !== 'undefined')) {
                              OSF.AppTelemetry.enableTelemetry = false;
                          }
                          logTelemetry(true);
                          loadedScriptEntry.isReady = true;
                          if (loadedScriptEntry.timer != null) {
                              clearTimeout(loadedScriptEntry.timer);
                              delete loadedScriptEntry.timer;
                          }
                          var pendingCallbackCount = loadedScriptEntry.pendingCallbacks.length;
                          for (var i = 0; i < pendingCallbackCount; i++) {
                              var currentCallback = loadedScriptEntry.pendingCallbacks.shift();
                              if (currentCallback) {
                                  var result = currentCallback(true);
                                  if (result === false) {
                                      break;
                                  }
                              }
                          }
                      };
                      var onLoadError = function () {
                          logTelemetry(false);
                          loadedScriptEntry.hasError = true;
                          loadedScriptEntry.isReady = true;
                          if (loadedScriptEntry.timer != null) {
                              clearTimeout(loadedScriptEntry.timer);
                              delete loadedScriptEntry.timer;
                          }
                          var pendingCallbackCount = loadedScriptEntry.pendingCallbacks.length;
                          for (var i = 0; i < pendingCallbackCount; i++) {
                              var currentCallback = loadedScriptEntry.pendingCallbacks.shift();
                              if (currentCallback) {
                                  var result = currentCallback(false);
                                  if (result === false) {
                                      break;
                                  }
                              }
                          }
                      };
                      if (script.readyState) {
                          script.onreadystatechange = function () {
                              if (script.readyState == "loaded" || script.readyState == "complete") {
                                  script.onreadystatechange = null;
                                  onLoadCallback();
                              }
                          };
                      }
                      else {
                          script.onload = onLoadCallback;
                      }
                      script.onerror = onLoadError;
                      timeoutInMs = timeoutInMs || this.defaultScriptLoadingTimeout;
                      loadedScriptEntry.timer = setTimeout(onLoadError, timeoutInMs);
                      loadedScriptEntry.hasStarted = true;
                      script.setAttribute("crossOrigin", "anonymous");
                      script.src = url;
                      doc.getElementsByTagName("head")[0].appendChild(script);
                  }
                  else if (loadedScriptEntry.isReady) {
                      callback(true);
                  }
                  else {
                      if (highPriority) {
                          loadedScriptEntry.pendingCallbacks.unshift(callback);
                      }
                      else {
                          loadedScriptEntry.pendingCallbacks.push(callback);
                      }
                  }
              }
          };
          LoadScriptHelper.prototype.flushTelemetryBuffer = function () {
              if (OSF.AppTelemetry && OSF.AppTelemetry.onScriptDone) {
                  for (var i = 0; i < this.scriptTelemetryBuffer.length; i++) {
                      var scriptTelemetry = this.scriptTelemetryBuffer[i];
                      if (OSF.AppTelemetry.onScriptDone.length == 3) {
                          OSF.AppTelemetry.onScriptDone(scriptTelemetry.scriptId, scriptTelemetry.startTime, scriptTelemetry.msResponseTime);
                      }
                      else {
                          OSF.AppTelemetry.onScriptDone(scriptTelemetry.scriptId, scriptTelemetry.startTime, scriptTelemetry.msResponseTime, this.osfControlAppCorrelationId);
                      }
                  }
                  this.scriptTelemetryBuffer = [];
              }
          };
          return LoadScriptHelper;
      })();
      ScriptLoading.LoadScriptHelper = LoadScriptHelper;
  })(ScriptLoading || (ScriptLoading = {}));
  OSF.ConstantNames = {
      FileVersion: "16.0.9119.3000",
      OfficeJS: "office.js",
      OfficeDebugJS: "office.debug.js",
      DefaultLocale: "en-us",
      LocaleStringLoadingTimeout: 5000,
      MicrosoftAjaxId: "MSAJAX",
      OfficeStringsId: "OFFICESTRINGS",
      OfficeJsId: "OFFICEJS",
      HostFileId: "HOST",
      O15MappingId: "O15Mapping",
      OfficeStringJS: "office_strings.debug.js",
      O15InitHelper: "o15apptofilemappingtable.debug.js",
      SupportedLocales: OSF.SupportedLocales,
      AssociatedLocales: OSF.AssociatedLocales
  };
  OSF.InitializationHelper = function OSF_InitializationHelper(hostInfo, webAppState, context, settings, hostFacade) {
      this._hostInfo = hostInfo;
      this._webAppState = webAppState;
      this._context = context;
      this._settings = settings;
      this._hostFacade = hostFacade;
  };
  OSF.InitializationHelper.prototype.saveAndSetDialogInfo = function OSF_InitializationHelper$saveAndSetDialogInfo(hostInfoValue) {
  };
  OSF.InitializationHelper.prototype.getAppContext = function OSF_InitializationHelper$getAppContext(wnd, gotAppContext) {
  };
  OSF.InitializationHelper.prototype.setAgaveHostCommunication = function OSF_InitializationHelper$setAgaveHostCommunication() {
  };
  OSF.InitializationHelper.prototype.prepareRightBeforeWebExtensionInitialize = function OSF_InitializationHelper$prepareRightBeforeWebExtensionInitialize(appContext) {
  };
  OSF.InitializationHelper.prototype.loadAppSpecificScriptAndCreateOM = function OSF_InitializationHelper$loadAppSpecificScriptAndCreateOM(appContext, appReady, basePath) {
  };
  OSF.InitializationHelper.prototype.prepareRightAfterWebExtensionInitialize = function OSF_InitializationHelper$prepareRightAfterWebExtensionInitialize() {
  };
  OSF._OfficeAppFactory = (function OSF__OfficeAppFactory() {
      var _setNamespace = function OSF_OUtil$_setNamespace(name, parent) {
          if (parent && name && !parent[name]) {
              parent[name] = {};
          }
      };
      _setNamespace("Office", window);
      _setNamespace("Microsoft", window);
      _setNamespace("Office", Microsoft);
      _setNamespace("WebExtension", Microsoft.Office);
      window.Office = Microsoft.Office.WebExtension;
      var _context = {};
      var _settings = {};
      var _hostFacade = {};
      var _WebAppState = { id: null, webAppUrl: null, conversationID: null, clientEndPoint: null, wnd: window.parent, focused: false };
      var _hostInfo = { isO15: true, isRichClient: true, hostType: "", hostPlatform: "", hostSpecificFileVersion: "", hostLocale: "", osfControlAppCorrelationId: "", isDialog: false };
      var _isLoggingAllowed = true;
      var _initializationHelper = {};
      var _appInstanceId = null;
      var _loadScriptHelper = new ScriptLoading.LoadScriptHelper();
      if (window.performance && window.performance.now) {
          _loadScriptHelper.logScriptLoading(OSF.ConstantNames.OfficeJsId, -1, window.performance.now());
      }
      var _windowLocationHash = window.location.hash;
      var _windowLocationSearch = window.location.search;
      var _windowName = window.name;
      var getQueryStringValue = function OSF__OfficeAppFactory$getQueryStringValue(paramName) {
          var hostInfoValue;
          var searchString = window.location.search;
          if (searchString) {
              var hostInfoParts = searchString.split(paramName + "=");
              if (hostInfoParts.length > 1) {
                  var hostInfoValueRestString = hostInfoParts[1];
                  var separatorRegex = new RegExp("[&#]", "g");
                  var hostInfoValueParts = hostInfoValueRestString.split(separatorRegex);
                  if (hostInfoValueParts.length > 0) {
                      hostInfoValue = hostInfoValueParts[0];
                  }
              }
          }
          return hostInfoValue;
      };
      var compareVersions = function _compareVersions(version1, version2) {
          var splitVersion1 = version1.split(".");
          var splitVersion2 = version2.split(".");
          var iter;
          for (iter in splitVersion1) {
              if (parseInt(splitVersion1[iter]) < parseInt(splitVersion2[iter])) {
                  return false;
              }
              else if (parseInt(splitVersion1[iter]) > parseInt(splitVersion2[iter])) {
                  return true;
              }
          }
          return false;
      };
      var shouldLoadOldMacJs = function _shouldLoadOldMacJs() {
          var versionToUseNewJS = "15.30.1128.0";
          var currentHostVersion = window.external.GetContext().GetHostFullVersion();
          return !!compareVersions(versionToUseNewJS, currentHostVersion);
      };
      var _retrieveLoggingAllowed = function OSF__OfficeAppFactory$_retrieveLoggingAllowed() {
          _isLoggingAllowed = true;
          try {
              window.external = window.external || {};
              if (typeof window.external.GetLoggingAllowed === 'undefined') {
                  _isLoggingAllowed = true;
              }
              else {
                  _isLoggingAllowed = window.external.GetLoggingAllowed();
              }
          }
          catch (Exception) {
          }
      };
      var _retrieveHostInfo = function OSF__OfficeAppFactory$_retrieveHostInfo() {
          var hostInfoParaName = "_host_Info";
          var hostInfoValue = getQueryStringValue(hostInfoParaName);
          if (!hostInfoValue) {
              try {
                  var windowNameObj = JSON.parse(_windowName);
                  hostInfoValue = windowNameObj ? windowNameObj["hostInfo"] : null;
              }
              catch (Exception) {
              }
          }
          if (!hostInfoValue) {
              try {
                  window.external = window.external || {};
                  if (typeof agaveHost !== "undefined" && agaveHost.GetHostInfo) {
                      window.external.GetHostInfo = function () {
                          return agaveHost.GetHostInfo();
                      };
                  }
                  var fallbackHostInfo = window.external.GetHostInfo();
                  if (fallbackHostInfo == "isDialog") {
                      _hostInfo.isO15 = true;
                      _hostInfo.isDialog = true;
                  }
                  else if (fallbackHostInfo.toLowerCase().indexOf("mac") !== -1 && fallbackHostInfo.toLowerCase().indexOf("outlook") !== -1 && shouldLoadOldMacJs()) {
                      _hostInfo.isO15 = true;
                  }
                  else {
                      var hostInfoParts = fallbackHostInfo.split(hostInfoParaName + "=");
                      if (hostInfoParts.length > 1) {
                          hostInfoValue = hostInfoParts[1];
                      }
                      else {
                          hostInfoValue = fallbackHostInfo;
                      }
                  }
              }
              catch (Exception) {
              }
          }
          var getSessionStorage = function OSF__OfficeAppFactory$_retrieveHostInfo$getSessionStorage() {
              var osfSessionStorage = null;
              try {
                  if (window.sessionStorage) {
                      osfSessionStorage = window.sessionStorage;
                  }
              }
              catch (ex) {
              }
              return osfSessionStorage;
          };
          var osfSessionStorage = getSessionStorage();
          if (!hostInfoValue && osfSessionStorage && osfSessionStorage.getItem("hostInfoValue")) {
              hostInfoValue = osfSessionStorage.getItem("hostInfoValue");
          }
          if (hostInfoValue) {
              hostInfoValue = decodeURIComponent(hostInfoValue);
              _hostInfo.isO15 = false;
              var items = hostInfoValue.split("$");
              if (typeof items[2] == "undefined") {
                  items = hostInfoValue.split("|");
              }
              _hostInfo.hostType = (typeof items[0] == "undefined") ? "" : items[0].toLowerCase();
              _hostInfo.hostPlatform = (typeof items[1] == "undefined") ? "" : items[1].toLowerCase();
              ;
              _hostInfo.hostSpecificFileVersion = (typeof items[2] == "undefined") ? "" : items[2].toLowerCase();
              _hostInfo.hostLocale = (typeof items[3] == "undefined") ? "" : items[3].toLowerCase();
              _hostInfo.osfControlAppCorrelationId = (typeof items[4] == "undefined") ? "" : items[4];
              if (_hostInfo.osfControlAppCorrelationId == "telemetry") {
                  _hostInfo.osfControlAppCorrelationId = "";
              }
              _hostInfo.isDialog = (((typeof items[5]) != "undefined") && items[5] == "isDialog") ? true : false;
              var hostSpecificFileVersionValue = parseFloat(_hostInfo.hostSpecificFileVersion);
              var fallbackVersion = OSF.HostSpecificFileVersionDefault;
              if (OSF.HostSpecificFileVersionMap[_hostInfo.hostType] && OSF.HostSpecificFileVersionMap[_hostInfo.hostType][_hostInfo.hostPlatform]) {
                  fallbackVersion = OSF.HostSpecificFileVersionMap[_hostInfo.hostType][_hostInfo.hostPlatform];
              }
              if (hostSpecificFileVersionValue > parseFloat(fallbackVersion)) {
                  _hostInfo.hostSpecificFileVersion = fallbackVersion;
              }
              if (osfSessionStorage) {
                  try {
                      osfSessionStorage.setItem("hostInfoValue", hostInfoValue);
                  }
                  catch (e) {
                  }
              }
          }
          else {
              _hostInfo.isO15 = true;
              _hostInfo.hostLocale = getQueryStringValue("locale");
          }
      };
      var getAppContextAsync = function OSF__OfficeAppFactory$getAppContextAsync(wnd, gotAppContext) {
          if (OSF.AppTelemetry && OSF.AppTelemetry.logAppCommonMessage) {
              OSF.AppTelemetry.logAppCommonMessage("getAppContextAsync starts");
          }
          _initializationHelper.getAppContext(wnd, gotAppContext);
      };
      var initialize = function OSF__OfficeAppFactory$initialize() {
          _retrieveHostInfo();
          _retrieveLoggingAllowed();
          if (_hostInfo.hostPlatform == "web" && _hostInfo.isDialog && window == window.top && window.opener == null) {
              window.open('', '_self', '');
              window.close();
          }
          _loadScriptHelper.setAppCorrelationId(_hostInfo.osfControlAppCorrelationId);
          var basePath = _loadScriptHelper.getOfficeJsBasePath();
          var requiresMsAjax = false;
          if (!basePath)
              throw "Office Web Extension script library file name should be " + OSF.ConstantNames.OfficeJS + " or " + OSF.ConstantNames.OfficeDebugJS + ".";
          var isMicrosftAjaxLoaded = function OSF$isMicrosftAjaxLoaded() {
              if ((typeof (Sys) !== 'undefined' && typeof (Type) !== 'undefined' &&
                  Sys.StringBuilder && typeof (Sys.StringBuilder) === "function" &&
                  Type.registerNamespace && typeof (Type.registerNamespace) === "function" &&
                  Type.registerClass && typeof (Type.registerClass) === "function") ||
                  (typeof (OfficeExt) !== "undefined" && OfficeExt.MsAjaxError)) {
                  return true;
              }
              else {
                  return false;
              }
          };
          var officeStrings = null;
          var loadLocaleStrings = function OSF__OfficeAppFactory_initialize$loadLocaleStrings(appLocale) {
              var fallbackLocaleTried = false;
              var loadLocaleStringCallback = function OSF__OfficeAppFactory_initialize$loadLocaleStringCallback() {
                  if (typeof Strings == 'undefined' || typeof Strings.OfficeOM == 'undefined') {
                      if (!fallbackLocaleTried) {
                          fallbackLocaleTried = true;
                          var fallbackLocaleStringFile = basePath + OSF.ConstantNames.DefaultLocale + "/" + OSF.ConstantNames.OfficeStringJS;
                          _loadScriptHelper.loadScript(fallbackLocaleStringFile, OSF.ConstantNames.OfficeStringsId, loadLocaleStringCallback, true, OSF.ConstantNames.LocaleStringLoadingTimeout);
                          return false;
                      }
                      else {
                          throw "Neither the locale, " + appLocale.toLowerCase() + ", provided by the host app nor the fallback locale " + OSF.ConstantNames.DefaultLocale + " are supported.";
                      }
                  }
                  else {
                      fallbackLocaleTried = false;
                      officeStrings = Strings.OfficeOM;
                  }
              };
              if (!isMicrosftAjaxLoaded()) {
                  window.Type = Function;
                  Type.registerNamespace = function (ns) {
                      window[ns] = window[ns] || {};
                  };
                  Type.prototype.registerClass = function (cls) {
                      cls = {};
                  };
              }
              var localeStringFile = basePath + OSF.getSupportedLocale(appLocale, OSF.ConstantNames.DefaultLocale) + "/" + OSF.ConstantNames.OfficeStringJS;
              _loadScriptHelper.loadScript(localeStringFile, OSF.ConstantNames.OfficeStringsId, loadLocaleStringCallback, true, OSF.ConstantNames.LocaleStringLoadingTimeout);
          };
          var onAppCodeAndMSAjaxReady = function OSF__OfficeAppFactory_initialize$onAppCodeAndMSAjaxReady(loadSuccess) {
              if (loadSuccess) {
                  _initializationHelper = new OSF.InitializationHelper(_hostInfo, _WebAppState, _context, _settings, _hostFacade);
                  if (_hostInfo.hostPlatform == "web" && _initializationHelper.saveAndSetDialogInfo) {
                      _initializationHelper.saveAndSetDialogInfo(getQueryStringValue("_host_Info"));
                  }
                  _initializationHelper.setAgaveHostCommunication();
                  getAppContextAsync(_WebAppState.wnd, function (appContext) {
                      if (OSF.AppTelemetry && OSF.AppTelemetry.logAppCommonMessage) {
                          OSF.AppTelemetry.logAppCommonMessage("getAppContextAsync callback start");
                      }
                      _appInstanceId = appContext._appInstanceId;
                      var updateVersionInfo = function updateVersionInfo() {
                          var hostVersionItems = _hostInfo.hostSpecificFileVersion.split(".");
                          if (appContext.get_appMinorVersion) {
                              var isIOS = _hostInfo.hostPlatform == "ios";
                              if (!isIOS) {
                                  if (isNaN(appContext.get_appMinorVersion())) {
                                      appContext._appMinorVersion = parseInt(hostVersionItems[1]);
                                  }
                                  else if (hostVersionItems.length > 1 && !isNaN(Number(hostVersionItems[1]))) {
                                      appContext._appMinorVersion = parseInt(hostVersionItems[1]);
                                  }
                              }
                          }
                          if (_hostInfo.isDialog) {
                              appContext._isDialog = _hostInfo.isDialog;
                          }
                      };
                      updateVersionInfo();
                      var appReady = function appReady() {
                          _initializationHelper.prepareApiSurface && _initializationHelper.prepareApiSurface(appContext);
                          _loadScriptHelper.waitForFunction(function () { return Microsoft.Office.WebExtension.initialize != undefined; }, function (initializedDeclared) {
                              if (initializedDeclared) {
                                  if (_initializationHelper.prepareApiSurface) {
                                      Microsoft.Office.WebExtension.initialize(_initializationHelper.getInitializationReason(appContext));
                                  }
                                  else {
                                      _initializationHelper.prepareRightBeforeWebExtensionInitialize(appContext);
                                  }
                                  _initializationHelper.prepareRightAfterWebExtensionInitialize && _initializationHelper.prepareRightAfterWebExtensionInitialize();
                              }
                              else {
                                  throw "Office.js has not been fully loaded yet. Please try again later or make sure to add your initialization code on the Office.initialize function.";
                              }
                          }, 400, 50);
                      };
                      if (!_loadScriptHelper.isScriptLoading(OSF.ConstantNames.OfficeStringsId)) {
                          loadLocaleStrings(appContext.get_appUILocale());
                      }
                      _loadScriptHelper.waitForScripts([OSF.ConstantNames.OfficeStringsId], function () {
                          if (officeStrings && !Strings.OfficeOM) {
                              Strings.OfficeOM = officeStrings;
                          }
                          _initializationHelper.loadAppSpecificScriptAndCreateOM(appContext, appReady, basePath);
                      });
                  });
              }
              else {
                  var errorMsg = "MicrosoftAjax.js is not loaded successfully.";
                  if (OSF.AppTelemetry && OSF.AppTelemetry.logAppException) {
                      OSF.AppTelemetry.logAppException(errorMsg);
                  }
                  throw errorMsg;
              }
          };
          var onAppCodeReady = function OSF__OfficeAppFactory_initialize$onAppCodeReady() {
              if (OSF.AppTelemetry && OSF.AppTelemetry.setOsfControlAppCorrelationId) {
                  OSF.AppTelemetry.setOsfControlAppCorrelationId(_hostInfo.osfControlAppCorrelationId);
              }
              if (_loadScriptHelper.isScriptLoading(OSF.ConstantNames.MicrosoftAjaxId)) {
                  _loadScriptHelper.waitForScripts([OSF.ConstantNames.MicrosoftAjaxId], onAppCodeAndMSAjaxReady);
              }
              else {
                  _loadScriptHelper.waitForFunction(isMicrosftAjaxLoaded, onAppCodeAndMSAjaxReady, 500, 100);
              }
          };
          if (_hostInfo.isO15) {
              _loadScriptHelper.loadScript(basePath + OSF.ConstantNames.O15InitHelper, OSF.ConstantNames.O15MappingId, onAppCodeReady);
          }
          else {
              var hostSpecificFileName;
              hostSpecificFileName = _hostInfo.hostType + "-" + _hostInfo.hostPlatform + "-" + _hostInfo.hostSpecificFileVersion + ".debug.js";
              _loadScriptHelper.loadScript(basePath + hostSpecificFileName.toLowerCase(), OSF.ConstantNames.HostFileId, onAppCodeReady);
          }
          if (_hostInfo.hostLocale) {
              loadLocaleStrings(_hostInfo.hostLocale);
          }
          if (requiresMsAjax && !isMicrosftAjaxLoaded()) {
              var msAjaxCDNPath = (window.location.protocol.toLowerCase() === 'https:' ? 'https:' : 'http:') + '//ajax.aspnetcdn.com/ajax/3.5/MicrosoftAjax.js';
              _loadScriptHelper.loadScriptParallel(msAjaxCDNPath, OSF.ConstantNames.MicrosoftAjaxId);
          }
          window.confirm = function OSF__OfficeAppFactory_initialize$confirm(message) {
              throw 'Function window.confirm is not supported.';
              return false;
          };
          window.alert = function OSF__OfficeAppFactory_initialize$alert(message) {
              throw 'Function window.alert is not supported.';
          };
          window.prompt = function OSF__OfficeAppFactory_initialize$prompt(message, defaultvalue) {
              throw 'Function window.prompt is not supported.';
              return null;
          };
          var isOutlookAndroid = _hostInfo.hostType == "outlook" && _hostInfo.hostPlatform == "android";
          if (!isOutlookAndroid) {
              window.history.replaceState = null;
              window.history.pushState = null;
          }
      };
      initialize();
      return {
          getId: function OSF__OfficeAppFactory$getId() { return _WebAppState.id; },
          getClientEndPoint: function OSF__OfficeAppFactory$getClientEndPoint() { return _WebAppState.clientEndPoint; },
          getContext: function OSF__OfficeAppFactory$getContext() { return _context; },
          setContext: function OSF__OfficeAppFactory$setContext(context) { _context = context; },
          getHostInfo: function OSF_OfficeAppFactory$getHostInfo() { return _hostInfo; },
          getLoggingAllowed: function OSF_OfficeAppFactory$getLoggingAllowed() { return _isLoggingAllowed; },
          getHostFacade: function OSF__OfficeAppFactory$getHostFacade() { return _hostFacade; },
          setHostFacade: function setHostFacade(hostFacade) { _hostFacade = hostFacade; },
          getInitializationHelper: function OSF__OfficeAppFactory$getInitializationHelper() { return _initializationHelper; },
          getCachedSessionSettingsKey: function OSF__OfficeAppFactory$getCachedSessionSettingsKey() {
              return (_WebAppState.conversationID != null ? _WebAppState.conversationID : _appInstanceId) + "CachedSessionSettings";
          },
          getWebAppState: function OSF__OfficeAppFactory$getWebAppState() { return _WebAppState; },
          getWindowLocationHash: function OSF__OfficeAppFactory$getHash() { return _windowLocationHash; },
          getWindowLocationSearch: function OSF__OfficeAppFactory$getSearch() { return _windowLocationSearch; },
          getLoadScriptHelper: function OSF__OfficeAppFactory$getLoadScriptHelper() { return _loadScriptHelper; },
          getWindowName: function OSF__OfficeAppFactory$getWindowName() { return _windowName; }
      };
  })();
  