text:
Qualcomm Accelerates Delivery of its WCDMA/UMTS/GSM/GPRS Multimode Solution
Jun 17, 2002SAN DIEGO
Qualcomm Incorporated (Nasdaq: QCOM), pioneer and world leader of Code Division Multiple Access (CDMA) digital wireless technology, today announced an accelerated sampling schedule for customers of its highly integrated MSM6200™ Mobile Station Modem (MSM™) solution. The MSM6200 solution begins sampling to customers this month, three months earlier than previously scheduled, following recent successful live voice and data calls in public demonstrations using MSM6200-based test terminals.
Key milestones in Qualcomm's WCDMA/UMTS/GSM/GPRS program include:
First live international WCDMA/UMTS roaming call (using a Qualcomm test terminal, December 2001)
First public demonstration of 64 kbps streaming video (3GSM World Congress, February 2002)
Only public demonstrations of WCDMA/UMTS voice calls with multiple infrastructure partners (3GSM World Congress, February 2002)
First to announce a direct conversion radioOne( solution for WCDMA/UMTS/GSM/GPRS (February 2002)
First public demonstration of wireless WCDMA/UMTS and GSM calls using a dual-mode chipset in a small form factor handset (CTIA Wireless 2002, March 2002)
First to conduct WCDMA/GSM calls using a direct conversion dual-mode chipset (June 2002)
"We are pleased to accelerate MSM6200 samples to meet the strong interest of potential customers in Europe and Asia who are eager to begin development of multimode products for 3G networks," said Johan Lodenius, senior vice president of marketing and product management for Qualcomm CDMA Technologies. "We were able to improve the schedule by a full quarter due to the progress we have made in the development and testing of our fully optimized UMTS dual-mode solution."
The MSM6200 chipset and system software, Qualcomm's second generation of WCDMA chipsets, is a highly integrated single-chip multimode solution that supports the Frequency Division Duplex (FDD) mode of WCDMA - also known as UMTS - as well as GSM and GPRS. Supporting data rates of up to 384 kbps in WCDMA/UMTS mode, the MSM6200 is targeted at manufacturers designing wireless devices for emerging 3G markets. Like all members of the MSM6xxx family, the MSM6200 chipset features Qualcomm's radioOne direct RF-to-baseband conversion technology, which eliminates the need for large IF SAW filters and additional IF circuitry to reduce handset bill of materials.
The MSM6200 solution also supports Qualcomm's Wireless Internet Launchpad™ suite of advanced multimedia, connectivity, position location, user interface and removable storage functionality. A number of key Wireless Internet Launchpad features available for the MSM6200 solution include:
Support for Multimedia Message Service (MMS)-based applications through an integrated MMS-compliant browser
Qtv( video software for the playback of previously stored MPEG-4-based video files
BREWapi, allowing handset manufacturers and developers to more quickly and easily develop both embedded and downloadable components and BREW(-based products
A fully integrated JAVA(r) virtual machine
Integrated Bluetooth support
JPEG decoder/encoder software for camera-based applications, such as sending and receiving pictures via e-mail
32-polyphony MIDI wavetable synthesizer for high-quality music playback through the MSM6200 integrated wideband codec
Qtunes( MP3 player software
2D/3D game and graphic engine
Support for location-based services by utilizing the MGP6200( Multimode Global Positioning System (GPS) Processor and system software, which directly interfaces to the MSM6200 chip
BREWapi consists of a set of interfaces that enables manufacturers and developers to create wireless applications, including browsers and user interfaces, by offering easy and consistent access to MSM chip-level functions such as graphics and bitmap display support, position location information, and the ability to play a music file or display a still image or an animation file.
Qualcomm Incorporated (www.qualcomm.com) is a leader in developing and delivering innovative digital wireless communications products and services based on the Company's CDMA digital technology. Headquartered in San Diego, Calif., Qualcomm is included in theS&P500 Index and traded on The Nasdaq Stock Market® under the ticker symbol QCOM.
Except for the historical information contained herein, this news release contains forward-looking statements that are subject to risks and uncertainties, including the Company's ability to successfully design and have manufactured significant quantities of CDMA components on a timely and profitable basis, the extent and speed to which CDMA is deployed, change in economic conditions of the various markets the Company serves, as well as the other risks detailed from time to time in the Company's SEC reports, including the report on Form 10-K for the year ended September 30, 2001 and most recent Form 10-Q.
Qualcomm is a registered trademark of Qualcomm Incorporated. MSM, MSM6200, radioOne, MGP6200, Wireless Internet Launchpad, Qtunes, Qtv and BREW are trademarks of Qualcomm Incorporated. Bluetooth and the Bluetooth logos are trademarks owned by Bluetooth SIG, Inc., U.S.A. JAVA is a registered trademark of Sun Microsystems. Globalstar is a trademark of Loral Qualcomm Satellite Services, Incorporated. All other trademarks are the property of their respective owners.


text:
/**
 * @interface
 */
Sources.TabbedEditorContainerDelegate = function() {};

Sources.TabbedEditorContainerDelegate.prototype = {
  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   * @return {!UI.Widget}
   */
  viewForFile(uiSourceCode) {},

  /**
  * @param {!Sources.UISourceCodeFrame} sourceFrame
  * @param {!Workspace.UISourceCode} uiSourceCode
  */
  recycleUISourceCodeFrame(sourceFrame, uiSourceCode) {},
};

/**
 * @unrestricted
 */
Sources.TabbedEditorContainer = class extends Common.Object {
  /**
   * @param {!Sources.TabbedEditorContainerDelegate} delegate
   * @param {!Common.Setting} setting
   * @param {!Element} placeholderElement
   */
  constructor(delegate, setting, placeholderElement) {
    super();
    this._delegate = delegate;

    this._tabbedPane = new UI.TabbedPane();
    this._tabbedPane.setPlaceholderElement(placeholderElement);
    this._tabbedPane.setTabDelegate(new Sources.EditorContainerTabDelegate(this));

    this._tabbedPane.setCloseableTabs(true);
    this._tabbedPane.setAllowTabReorder(true, true);

    this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabClosed, this._tabClosed, this);
    this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected, this._tabSelected, this);

    Persistence.persistence.addEventListener(
        Persistence.Persistence.Events.BindingCreated, this._onBindingCreated, this);
    Persistence.persistence.addEventListener(
        Persistence.Persistence.Events.BindingRemoved, this._onBindingRemoved, this);

    this._tabIds = new Map();
    this._files = {};

    this._previouslyViewedFilesSetting = setting;
    this._history = Sources.TabbedEditorContainer.History.fromObject(this._previouslyViewedFilesSetting.get());
  }

  /**
   * @param {!Common.Event} event
   */
  _onBindingCreated(event) {
    const binding = /** @type {!Persistence.PersistenceBinding} */ (event.data);
    this._updateFileTitle(binding.fileSystem);

    const networkTabId = this._tabIds.get(binding.network);
    let fileSystemTabId = this._tabIds.get(binding.fileSystem);

    const wasSelectedInNetwork = this._currentFile === binding.network;
    const currentSelectionRange = this._history.selectionRange(binding.network.url());
    const currentScrollLineNumber = this._history.scrollLineNumber(binding.network.url());
    this._history.remove(binding.network.url());

    if (!networkTabId)
      return;

    if (!fileSystemTabId) {
      const networkView = this._tabbedPane.tabView(networkTabId);
      const tabIndex = this._tabbedPane.tabIndex(networkTabId);
      if (networkView instanceof Sources.UISourceCodeFrame) {
        this._delegate.recycleUISourceCodeFrame(networkView, binding.fileSystem);
        fileSystemTabId = this._appendFileTab(binding.fileSystem, false, tabIndex, networkView);
      } else {
        fileSystemTabId = this._appendFileTab(binding.fileSystem, false, tabIndex);
        const fileSystemTabView = /** @type {!UI.Widget} */ (this._tabbedPane.tabView(fileSystemTabId));
        this._restoreEditorProperties(fileSystemTabView, currentSelectionRange, currentScrollLineNumber);
      }
    }

    this._closeTabs([networkTabId], true);
    if (wasSelectedInNetwork)
      this._tabbedPane.selectTab(fileSystemTabId, false);

    this._updateHistory();
  }

  /**
   * @param {!Common.Event} event
   */
  _onBindingRemoved(event) {
    const binding = /** @type {!Persistence.PersistenceBinding} */ (event.data);
    this._updateFileTitle(binding.fileSystem);
  }

  /**
   * @return {!UI.Widget}
   */
  get view() {
    return this._tabbedPane;
  }

  /**
   * @return {?UI.Widget}
   */
  get visibleView() {
    return this._tabbedPane.visibleView;
  }

  /**
   * @return {!Array.<!UI.Widget>}
   */
  fileViews() {
    return /** @type {!Array.<!UI.Widget>} */ (this._tabbedPane.tabViews());
  }

  /**
   * @return {!UI.Toolbar}
   */
  leftToolbar() {
    return this._tabbedPane.leftToolbar();
  }

  /**
   * @return {!UI.Toolbar}
   */
  rightToolbar() {
    return this._tabbedPane.rightToolbar();
  }

  /**
   * @param {!Element} parentElement
   */
  show(parentElement) {
    this._tabbedPane.show(parentElement);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  showFile(uiSourceCode) {
    this._innerShowFile(uiSourceCode, true);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  closeFile(uiSourceCode) {
    const tabId = this._tabIds.get(uiSourceCode);
    if (!tabId)
      return;
    this._closeTabs([tabId]);
  }

  closeAllFiles() {
    this._closeTabs(this._tabbedPane.allTabs());
  }

  /**
   * @return {!Array.<!Workspace.UISourceCode>}
   */
  historyUISourceCodes() {
    // FIXME: there should be a way to fetch UISourceCode for its uri.
    const uriToUISourceCode = {};
    for (const id in this._files) {
      const uiSourceCode = this._files[id];
      uriToUISourceCode[uiSourceCode.url()] = uiSourceCode;
    }

    const result = [];
    const uris = this._history._urls();
    for (let i = 0; i < uris.length; ++i) {
      const uiSourceCode = uriToUISourceCode[uris[i]];
      if (uiSourceCode)
        result.push(uiSourceCode);
    }
    return result;
  }

  _addViewListeners() {
    if (!this._currentView || !this._currentView.textEditor)
      return;
    this._currentView.textEditor.addEventListener(
        SourceFrame.SourcesTextEditor.Events.ScrollChanged, this._scrollChanged, this);
    this._currentView.textEditor.addEventListener(
        SourceFrame.SourcesTextEditor.Events.SelectionChanged, this._selectionChanged, this);
  }

  _removeViewListeners() {
    if (!this._currentView || !this._currentView.textEditor)
      return;
    this._currentView.textEditor.removeEventListener(
        SourceFrame.SourcesTextEditor.Events.ScrollChanged, this._scrollChanged, this);
    this._currentView.textEditor.removeEventListener(
        SourceFrame.SourcesTextEditor.Events.SelectionChanged, this._selectionChanged, this);
  }

  /**
   * @param {!Common.Event} event
   */
  _scrollChanged(event) {
    if (this._scrollTimer)
      clearTimeout(this._scrollTimer);
    const lineNumber = /** @type {number} */ (event.data);
    this._scrollTimer = setTimeout(saveHistory.bind(this), 100);
    this._history.updateScrollLineNumber(this._currentFile.url(), lineNumber);

    /**
     * @this {Sources.TabbedEditorContainer}
     */
    function saveHistory() {
      this._history.save(this._previouslyViewedFilesSetting);
    }
  }

  /**
   * @param {!Common.Event} event
   */
  _selectionChanged(event) {
    const range = /** @type {!TextUtils.TextRange} */ (event.data);
    this._history.updateSelectionRange(this._currentFile.url(), range);
    this._history.save(this._previouslyViewedFilesSetting);

    Extensions.extensionServer.sourceSelectionChanged(this._currentFile.url(), range);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   * @param {boolean=} userGesture
   */
  _innerShowFile(uiSourceCode, userGesture) {
    const binding = Persistence.persistence.binding(uiSourceCode);
    uiSourceCode = binding ? binding.fileSystem : uiSourceCode;
    if (this._currentFile === uiSourceCode)
      return;

    this._removeViewListeners();
    this._currentFile = uiSourceCode;

    const tabId = this._tabIds.get(uiSourceCode) || this._appendFileTab(uiSourceCode, userGesture);

    this._tabbedPane.selectTab(tabId, userGesture);
    if (userGesture)
      this._editorSelectedByUserAction();

    const previousView = this._currentView;
    this._currentView = this.visibleView;
    this._addViewListeners();

    const eventData = {
      currentFile: this._currentFile,
      currentView: this._currentView,
      previousView: previousView,
      userGesture: userGesture
    };
    this.dispatchEventToListeners(Sources.TabbedEditorContainer.Events.EditorSelected, eventData);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   * @return {string}
   */
  _titleForFile(uiSourceCode) {
    const maxDisplayNameLength = 30;
    let title = uiSourceCode.displayName(true).trimMiddle(maxDisplayNameLength);
    if (uiSourceCode.isDirty())
      title += '*';
    return title;
  }

  /**
   * @param {string} id
   * @param {string} nextTabId
   */
  _maybeCloseTab(id, nextTabId) {
    const uiSourceCode = this._files[id];
    const shouldPrompt = uiSourceCode.isDirty() && uiSourceCode.project().canSetFileContent();
    // FIXME: this should be replaced with common Save/Discard/Cancel dialog.
    if (!shouldPrompt ||
        confirm(Common.UIString('Are you sure you want to close unsaved file: %s?', uiSourceCode.name()))) {
      uiSourceCode.resetWorkingCopy();
      if (nextTabId)
        this._tabbedPane.selectTab(nextTabId, true);
      this._tabbedPane.closeTab(id, true);
      return true;
    }
    return false;
  }

  /**
   * @param {!Array.<string>} ids
   * @param {boolean=} forceCloseDirtyTabs
   */
  _closeTabs(ids, forceCloseDirtyTabs) {
    const dirtyTabs = [];
    const cleanTabs = [];
    for (let i = 0; i < ids.length; ++i) {
      const id = ids[i];
      const uiSourceCode = this._files[id];
      if (!forceCloseDirtyTabs && uiSourceCode.isDirty())
        dirtyTabs.push(id);
      else
        cleanTabs.push(id);
    }
    if (dirtyTabs.length)
      this._tabbedPane.selectTab(dirtyTabs[0], true);
    this._tabbedPane.closeTabs(cleanTabs, true);
    for (let i = 0; i < dirtyTabs.length; ++i) {
      const nextTabId = i + 1 < dirtyTabs.length ? dirtyTabs[i + 1] : null;
      if (!this._maybeCloseTab(dirtyTabs[i], nextTabId))
        break;
    }
  }

  /**
   * @param {string} tabId
   * @param {!UI.ContextMenu} contextMenu
   */
  _onContextMenu(tabId, contextMenu) {
    const uiSourceCode = this._files[tabId];
    if (uiSourceCode)
      contextMenu.appendApplicableItems(uiSourceCode);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  addUISourceCode(uiSourceCode) {
    const binding = Persistence.persistence.binding(uiSourceCode);
    uiSourceCode = binding ? binding.fileSystem : uiSourceCode;
    if (this._currentFile === uiSourceCode)
      return;

    const uri = uiSourceCode.url();
    const index = this._history.index(uri);
    if (index === -1)
      return;

    if (!this._tabIds.has(uiSourceCode))
      this._appendFileTab(uiSourceCode, false);

    // Select tab if this file was the last to be shown.
    if (!index) {
      this._innerShowFile(uiSourceCode, false);
      return;
    }

    if (!this._currentFile)
      return;
    const currentProjectType = this._currentFile.project().type();
    const addedProjectType = uiSourceCode.project().type();
    const snippetsProjectType = Workspace.projectTypes.Snippets;
    if (this._history.index(this._currentFile.url()) && currentProjectType === snippetsProjectType &&
        addedProjectType !== snippetsProjectType)
      this._innerShowFile(uiSourceCode, false);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  removeUISourceCode(uiSourceCode) {
    this.removeUISourceCodes([uiSourceCode]);
  }

  /**
   * @param {!Array.<!Workspace.UISourceCode>} uiSourceCodes
   */
  removeUISourceCodes(uiSourceCodes) {
    const tabIds = [];
    for (let i = 0; i < uiSourceCodes.length; ++i) {
      const uiSourceCode = uiSourceCodes[i];
      const tabId = this._tabIds.get(uiSourceCode);
      if (tabId)
        tabIds.push(tabId);
    }
    this._tabbedPane.closeTabs(tabIds);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  _editorClosedByUserAction(uiSourceCode) {
    this._history.remove(uiSourceCode.url());
    this._updateHistory();
  }

  _editorSelectedByUserAction() {
    this._updateHistory();
  }

  _updateHistory() {
    const tabIds = this._tabbedPane.lastOpenedTabIds(Sources.TabbedEditorContainer.maximalPreviouslyViewedFilesCount);

    /**
     * @param {string} tabId
     * @this {Sources.TabbedEditorContainer}
     */
    function tabIdToURI(tabId) {
      return this._files[tabId].url();
    }

    this._history.update(tabIds.map(tabIdToURI.bind(this)));
    this._history.save(this._previouslyViewedFilesSetting);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   * @return {string}
   */
  _tooltipForFile(uiSourceCode) {
    uiSourceCode = Persistence.persistence.network(uiSourceCode) || uiSourceCode;
    return uiSourceCode.url();
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   * @param {boolean=} userGesture
   * @param {number=} index
   * @param {!UI.Widget=} replaceView
   * @return {string}
   */
  _appendFileTab(uiSourceCode, userGesture, index, replaceView) {
    const view = replaceView || this._delegate.viewForFile(uiSourceCode);
    const title = this._titleForFile(uiSourceCode);
    const tooltip = this._tooltipForFile(uiSourceCode);

    const tabId = this._generateTabId();
    this._tabIds.set(uiSourceCode, tabId);
    this._files[tabId] = uiSourceCode;

    if (!replaceView) {
      const savedSelectionRange = this._history.selectionRange(uiSourceCode.url());
      const savedScrollLineNumber = this._history.scrollLineNumber(uiSourceCode.url());
      this._restoreEditorProperties(view, savedSelectionRange, savedScrollLineNumber);
    }

    this._tabbedPane.appendTab(tabId, title, view, tooltip, userGesture, undefined, index);

    this._updateFileTitle(uiSourceCode);
    this._addUISourceCodeListeners(uiSourceCode);
    return tabId;
  }

  /**
   * @param {!UI.Widget} editorView
   * @param {!TextUtils.TextRange=} selection
   * @param {number=} firstLineNumber
   */
  _restoreEditorProperties(editorView, selection, firstLineNumber) {
    const sourceFrame =
        editorView instanceof SourceFrame.SourceFrame ? /** @type {!SourceFrame.SourceFrame} */ (editorView) : null;
    if (!sourceFrame)
      return;
    if (selection)
      sourceFrame.setSelection(selection);
    if (typeof firstLineNumber === 'number')
      sourceFrame.scrollToLine(firstLineNumber);
  }

  /**
   * @param {!Common.Event} event
   */
  _tabClosed(event) {
    const tabId = /** @type {string} */ (event.data.tabId);
    const userGesture = /** @type {boolean} */ (event.data.isUserGesture);

    const uiSourceCode = this._files[tabId];
    if (this._currentFile === uiSourceCode) {
      this._removeViewListeners();
      delete this._currentView;
      delete this._currentFile;
    }
    this._tabIds.remove(uiSourceCode);
    delete this._files[tabId];

    this._removeUISourceCodeListeners(uiSourceCode);

    this.dispatchEventToListeners(Sources.TabbedEditorContainer.Events.EditorClosed, uiSourceCode);

    if (userGesture)
      this._editorClosedByUserAction(uiSourceCode);
  }

  /**
   * @param {!Common.Event} event
   */
  _tabSelected(event) {
    const tabId = /** @type {string} */ (event.data.tabId);
    const userGesture = /** @type {boolean} */ (event.data.isUserGesture);

    const uiSourceCode = this._files[tabId];
    this._innerShowFile(uiSourceCode, userGesture);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  _addUISourceCodeListeners(uiSourceCode) {
    uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this);
    uiSourceCode.addEventListener(
        Workspace.UISourceCode.Events.WorkingCopyChanged, this._uiSourceCodeWorkingCopyChanged, this);
    uiSourceCode.addEventListener(
        Workspace.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeWorkingCopyCommitted, this);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  _removeUISourceCodeListeners(uiSourceCode) {
    uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this);
    uiSourceCode.removeEventListener(
        Workspace.UISourceCode.Events.WorkingCopyChanged, this._uiSourceCodeWorkingCopyChanged, this);
    uiSourceCode.removeEventListener(
        Workspace.UISourceCode.Events.WorkingCopyCommitted, this._uiSourceCodeWorkingCopyCommitted, this);
  }

  /**
   * @param {!Workspace.UISourceCode} uiSourceCode
   */
  _updateFileTitle(uiSourceCode) {
    const tabId = this._tabIds.get(uiSourceCode);
    if (tabId) {
      const title = this._titleForFile(uiSourceCode);
      this._tabbedPane.changeTabTitle(tabId, title);
      let icon = null;
      if (Persistence.persistence.hasUnsavedCommittedChanges(uiSourceCode)) {
        icon = UI.Icon.create('smallicon-warning');
        icon.title = Common.UIString('Changes to this file were not saved to file system.');
      } else {
        icon = Persistence.PersistenceUtils.iconForUISourceCode(uiSourceCode);
      }
      this._tabbedPane.setTabIcon(tabId, icon);
    }
  }

  /**
   * @param {!Common.Event} event
   */
  _uiSourceCodeTitleChanged(event) {
    const uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
    this._updateFileTitle(uiSourceCode);
    this._updateHistory();
  }

  /**
   * @param {!Common.Event} event
   */
  _uiSourceCodeWorkingCopyChanged(event) {
    const uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
    this._updateFileTitle(uiSourceCode);
  }

  /**
   * @param {!Common.Event} event
   */
  _uiSourceCodeWorkingCopyCommitted(event) {
    const uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data.uiSourceCode);
    this._updateFileTitle(uiSourceCode);
  }

  /**
   * @return {string}
   */
  _generateTabId() {
    return 'tab_' + (Sources.TabbedEditorContainer._tabId++);
  }

  /**
   * @return {?Workspace.UISourceCode} uiSourceCode
   */
  currentFile() {
    return this._currentFile || null;
  }
};

/** @enum {symbol} */
Sources.TabbedEditorContainer.Events = {
  EditorSelected: Symbol('EditorSelected'),
  EditorClosed: Symbol('EditorClosed')
};

Sources.TabbedEditorContainer._tabId = 0;

Sources.TabbedEditorContainer.maximalPreviouslyViewedFilesCount = 30;

/**
 * @unrestricted
 */
Sources.TabbedEditorContainer.HistoryItem = class {
  /**
   * @param {string} url
   * @param {!TextUtils.TextRange=} selectionRange
   * @param {number=} scrollLineNumber
   */
  constructor(url, selectionRange, scrollLineNumber) {
    /** @const */ this.url = url;
    /** @const */ this._isSerializable =
        url.length < Sources.TabbedEditorContainer.HistoryItem.serializableUrlLengthLimit;
    this.selectionRange = selectionRange;
    this.scrollLineNumber = scrollLineNumber;
  }

  /**
   * @param {!Object} serializedHistoryItem
   * @return {!Sources.TabbedEditorContainer.HistoryItem}
   */
  static fromObject(serializedHistoryItem) {
    const selectionRange = serializedHistoryItem.selectionRange ?
        TextUtils.TextRange.fromObject(serializedHistoryItem.selectionRange) :
        undefined;
    return new Sources.TabbedEditorContainer.HistoryItem(
        serializedHistoryItem.url, selectionRange, serializedHistoryItem.scrollLineNumber);
  }

  /**
   * @return {?Object}
   */
  serializeToObject() {
    if (!this._isSerializable)
      return null;
    const serializedHistoryItem = {};
    serializedHistoryItem.url = this.url;
    serializedHistoryItem.selectionRange = this.selectionRange;
    serializedHistoryItem.scrollLineNumber = this.scrollLineNumber;
    return serializedHistoryItem;
  }
};

Sources.TabbedEditorContainer.HistoryItem.serializableUrlLengthLimit = 4096;

/**
 * @unrestricted
 */
Sources.TabbedEditorContainer.History = class {
  /**
   * @param {!Array.<!Sources.TabbedEditorContainer.HistoryItem>} items
   */
  constructor(items) {
    this._items = items;
    this._rebuildItemIndex();
  }

  /**
   * @param {!Array.<!Object>} serializedHistory
   * @return {!Sources.TabbedEditorContainer.History}
   */
  static fromObject(serializedHistory) {
    const items = [];
    for (let i = 0; i < serializedHistory.length; ++i)
      items.push(Sources.TabbedEditorContainer.HistoryItem.fromObject(serializedHistory[i]));
    return new Sources.TabbedEditorContainer.History(items);
  }

  /**
   * @param {string} url
   * @return {number}
   */
  index(url) {
    return this._itemsIndex.has(url) ? /** @type {number} */ (this._itemsIndex.get(url)) : -1;
  }

  _rebuildItemIndex() {
    /** @type {!Map<string, number>} */
    this._itemsIndex = new Map();
    for (let i = 0; i < this._items.length; ++i) {
      console.assert(!this._itemsIndex.has(this._items[i].url));
      this._itemsIndex.set(this._items[i].url, i);
    }
  }

  /**
   * @param {string} url
   * @return {!TextUtils.TextRange|undefined}
   */
  selectionRange(url) {
    const index = this.index(url);
    return index !== -1 ? this._items[index].selectionRange : undefined;
  }

  /**
   * @param {string} url
   * @param {!TextUtils.TextRange=} selectionRange
   */
  updateSelectionRange(url, selectionRange) {
    if (!selectionRange)
      return;
    const index = this.index(url);
    if (index === -1)
      return;
    this._items[index].selectionRange = selectionRange;
  }

  /**
   * @param {string} url
   * @return {number|undefined}
   */
  scrollLineNumber(url) {
    const index = this.index(url);
    return index !== -1 ? this._items[index].scrollLineNumber : undefined;
  }

  /**
   * @param {string} url
   * @param {number} scrollLineNumber
   */
  updateScrollLineNumber(url, scrollLineNumber) {
    const index = this.index(url);
    if (index === -1)
      return;
    this._items[index].scrollLineNumber = scrollLineNumber;
  }

  /**
   * @param {!Array.<string>} urls
   */
  update(urls) {
    for (let i = urls.length - 1; i >= 0; --i) {
      const index = this.index(urls[i]);
      let item;
      if (index !== -1) {
        item = this._items[index];
        this._items.splice(index, 1);
      } else {
        item = new Sources.TabbedEditorContainer.HistoryItem(urls[i]);
      }
      this._items.unshift(item);
      this._rebuildItemIndex();
    }
  }

  /**
   * @param {string} url
   */
  remove(url) {
    const index = this.index(url);
    if (index !== -1) {
      this._items.splice(index, 1);
      this._rebuildItemIndex();
    }
  }

  /**
   * @param {!Common.Setting} setting
   */
  save(setting) {
    setting.set(this._serializeToObject());
  }

  /**
   * @return {!Array.<!Object>}
   */
  _serializeToObject() {
    const serializedHistory = [];
    for (let i = 0; i < this._items.length; ++i) {
      const serializedItem = this._items[i].serializeToObject();
      if (serializedItem)
        serializedHistory.push(serializedItem);
      if (serializedHistory.length === Sources.TabbedEditorContainer.maximalPreviouslyViewedFilesCount)
        break;
    }
    return serializedHistory;
  }

  /**
   * @return {!Array.<string>}
   */
  _urls() {
    const result = [];
    for (let i = 0; i < this._items.length; ++i)
      result.push(this._items[i].url);
    return result;
  }
};

/**
 * @implements {UI.TabbedPaneTabDelegate}
 * @unrestricted
 */
Sources.EditorContainerTabDelegate = class {
  /**
   * @param {!Sources.TabbedEditorContainer} editorContainer
   */
  constructor(editorContainer) {
    this._editorContainer = editorContainer;
  }

  /**
   * @override
   * @param {!UI.TabbedPane} tabbedPane
   * @param {!Array.<string>} ids
   */
  closeTabs(tabbedPane, ids) {
    this._editorContainer._closeTabs(ids);
  }

  /**
   * @override
   * @param {string} tabId
   * @param {!UI.ContextMenu} contextMenu
   */
  onContextMenu(tabId, contextMenu) {
    this._editorContainer._onContextMenu(tabId, contextMenu);
  }
};

redpajama_set_name: RedPajamaGithub


text:
Justin Bieber and Selena Gomez dethrone Kendall Jenner with most liked Instagram photo of all time
May 05, 2016 - 12:12 BST hellomagazine.com and Justin Bieber and Selena Gomez have just been crowned King and Queen of Instagram by having the most liked post of all time.
Instagram is one of the most used social media apps in the world, and Justin Bieber and Selena Gomez have just been crowned King and Queen of the photo sharing app by having the most liked post of all time, overtaking the previous record holder, Kendall Jenner.
Justin shared a throwback photo of himself sharing a smooch with his ex-girlfriend Selena back in March, simply captioning the photo: "Feels". The picture, which is blurry and from several years ago, shows the couple kissing in a swimming pool.
A photo posted by Justin Bieber (@justinbieber) on Mar 19, 2016 at 4:07pm PDT
After eagle-eyed fans spotted that Selena had liked the photo, this sweet snap sparked speculation that the couple were back together following their break-up in 2013, which could explain the reason for its huge popularity.
The photo is now at 3,570,045 likes while previous record-holder Kendall Jenner, who's famous snap shows her dressed in white with her eyes closed and her tresses shaped in hearts is now in second place with 3,561,311 likes.
❥
A photo posted by Kendall Jenner (@kendalljenner) on May 25, 2015 at 3:51pm PDT
Selena doesn't only appear in the most liked Instagram photo of all time, she also holds the record for the most followers ever, with 69.5 million fans.
She has spoken about the app, telling E! News that she thinks she will take herself off social media eventually. She said: "I'm utilising social media right now because of my age and because, to be honest, everybody else in the world was talking about me, so I wanted a… say.
"I honestly had to, because I didn't really expect my life to be as public as it was. Is this going to destroy me or make me? I still have to make that choice on a daily basis. In a few years. I'll give all of it up. I don't understand all of that sometimes. I think about things very realistically, because I feel like some of those accounts probably don't even actually exist."
More about justin bieber
Justin Bieber shares rare photo of his lookalike sisters – see here
Exclusive: Michael Bublé on his sweet connection with other Canadian stars
Hailey and Justin Bieber's fun $7.9million house they sold with all the furniture
Selena Gomez discusses her close friendship with Taylor Swift
Check out how Justin Bieber relaxes during his hectic tour
Justin Bieber shocks fans with edgy new look: see the photos
Selena Gomez gives sneak peek at impressive Revival tour make-up
Selena Gomez has exciting news for fans going to her Revival tour
Selena Gomez unfollows everyone on Instagram - including BFF Taylor Swift and Justin Bieber

redpajama_set_name: RedPajamaCommonCrawl


text:
Center for Strategic Assessment and forecasts
Autonomous non-profit organization
Politics and geopolitics
05-12-2022 About Rosatom 22-11-2022 The digital yuan is capable of undermining the financial dominance of the United States 21-11-2022 The Russian Air Force has received new Su-34 strike fighters: why did this class become the favorite of the Ministry of Defense? 17-07-2022 29-06-2022
Home / Science and Society / Analytical work: the experience of Russian and foreign experts / Weekdays
Theorist of Russian military counterintelligence
Print version Material posted: Publication date: 09-07-2019
You can and should talk about the Russian theoretical school of military counterintelligence. If not always flawless on the form of presentation, depth of content and scope of coverage of the research problem, obscure and avoid widespread publicity, but still – school. School with a capital letter. It was and is.
The practices of counterintelligence – renowned masters of the agent combinations, tenacious operatives-"the skorokhvatov is a retired", recruiters and developers, their visionary leaders or, on the contrary, the losers are not always successful "victims" from the security services, whose name is associated with loud failures, are well known. Their names that is called for hearing. Scientists, whose intelligence and theoretical calculations owe their results of the practice, often remain in the shadows and oblivion.
A prominent theorist of Russian military intelligence, established its fundamental scientific basis, namely, the methodology of knowledge of the enemy, is a General of infantry Vladislav Klembovsky Napoleonovich.
A hereditary officer and a gentleman, he was born 28 Jun 1860 in Moscow in 1877 he graduated from the 1st Moscow military school, in 1879 – 3rd Aleksandrovskoe military school issued a warrant officer in the Izmailovsky life guards regiment.
After graduating in 1885, Nicholas Academy of the General staff in the years 1885-1886 serves as an officer of the General staff at the headquarters of the XIII army corps of the Moscow military district. In 1887-1889 serving enfranchised command of a company of the 1st Nevsky infantry and then the 2nd Sofia infantry regiment. Military service inexplicably combines with active scientific activity, being the translator and editor of "the International military-historical library", published in seven volumes in the publishing house of V. A. Berezovsky.
The tendency Lemovskogo to the military science observed: August 4, 1890, his second to the Tver cavalry cadet school for teaching military science. Unlike the service immediately in the ranks teaching gives you unlimited improvement of professional knowledge, reach a different level of analysis and synthesis as applied to the needs of military practice. The question is that not all of this opportunity can and want to use it. Klembovsky wanted and was able.
ON THE BASIS OF INTERNATIONAL EXPERIENCE
It was during the period of teaching in the formation and positioning Lemovskogo as a military intellectual, there is a significant breakthrough, instantly created him a proper reputation and recognition. In four years not so long ago turned thirty abroad officer managed to prepare and publish two profound works that have received positive feedback in a military research environment: "the Secret intelligence service (military espionage)" and "Guerrilla activities".
The analysis of the content published in the 1892 book "the Secret intelligence service (military espionage)" suggests that V. N. Klembovsky is the founder of the theory of Russian military counterintelligence.
The basis of the small in volume but rich in content of the monograph were the works of foreign and Russian generals, historians, lawyers and philosophers: Machiavelli, Montesquieu, Clausewitz, Jomini, Martens, Lavale, of Vattel, Bluntschli, Marmont, Leer, Maslovsky, Sukhotina, Suharevskaja and many others.
Guided by the principle "it's Hard to learn only from experience", the author based on a rigorous, careful, thoughtful and creative analysis of the practice of warfare outlined his vision of the theory of the operational environment, highlighting its main elements: information about the armed forces of the enemy; information about location of the theater of operations; data on the population of the enemy; information about the economy the military the enemy.
Here Klembovsky follows the key axiom of Clausewitz is "the enemy form the basis of every idea and every action in war." You must know the organization and the number of the armies of the enemy, the weapons, equipment and uniforms of the troops, the training, the methods of combat operations, material security, health status, command structure, morale, mobilization order, a plan of military action.
V. N. Klembovsky emphasizes: "the army Commanders need to embrace the whole theatre of war, to know everything that happens not only on the front of the enemy, but further into to its headquarters, inclusive. It is clear that they will have to send spies...and spies selected, i.e. skilled, experienced and well-versed in military matters."
Sources of information about the enemy Klembovsky divided into official and received through secret agents.
The author cites a variety of facts from military history of Ancient Greece and Rome, the Middle ages, armies of Richelieu, Mazarin, Frederick the Great, the Russian army of the mid-and late nineteenth century as examples of successful or unsuccessful use of spies. Considerable attention is paid to the review of the practice of espionage during the Napoleonic wars, during the Franco-Prussian war of 1870-1871 years, and during the relatively recent Russian-Turkish war of 1877-1878; highlighted the fact that "Russians are very little used spies".
Based on the comparison of legal acts of different States and declarations of international conferences, studies of foreign scientists, a lawyer Bluntschli and philosopher Montesquieu, the mapping of characteristics of espionage, the author examines well-established point of view on the actual definition of a spy, in fact, forms the basic conceptual framework of the science of espionage.
AGENTS OF THEIR OWN AND OTHERS
Another important merit of Lemovskogo is that he was able to propose a classification of agents of espionage, depending on their tasks, functions, methods of performing Rasizadeh, long-term use and motivation cooperation with the intelligence services. Classification in science, particularly the initial classification is of a fundamental nature for the science.
Classification on substantive grounds, or typology, is designed primarily for constant use in scientific and practical activities and involves splitting an existing subject, in the case of espionage on species in accordance with distinctive features.
Klembovsky klassificeret spies in eight species categories: voluntary, forced, simple, double, temporary, permanent, mobile, and stationary (local).
Motivation cooperation with the intelligence services of voluntary spies, the author divides into four kinds: the professional satisfaction and material; patriotism or hatred of foreigners; the bitterness of injustice, envy, political passions; base urges, greed, debt.
Forced spies – those who were previously subjected to intimidation and threats.
Ordinary spies are only one side double – both sides.
Regular spies are cooperating relatively long time and do a few errands, time – only one instruction.
"Two spies go in time of peace from your state to the next, and in time of war to penetrate into the area occupied by an enemy army... when you need to gather any information." After the assignments, they return to their places of permanent deployment.
Stationary, or local spies are always on the same area of land at the place of residence or work.
Messengers or couriers spies in understanding Lemovskogo, are not considered.
The author devotes considerable attention needed to spy the qualities of which are among the most important he identifies honesty, loyalty, observation, cunning, intellectual development, resourcefulness, the ability to transform, resilience, courage, bravery, composure, tenacity, knowledge of the language and customs of the population of explored States, sociability and ability to win.
Vladislav Napoleonovich puts forward the idea of formation and practical application of mass intelligence network strategic, operational and tactical levels, when spies in the enemy at the same time sending the leaders of the different competence – the army commanders, commanders of corps, divisions, regiments, the captains of the vanguard. He writes: "No part of the troops can't do a single spy because, first, such a long work is not under force to one person; secondly, the extracted information is not sufficiently full; third, if the spy does not possess quite true military look or, even worse, if it is not definitely reliable, that his testimony can be trusted only when you confirm them from other sources, including the reports of the other spies; cash several spies who do not know each other, and sent from different places gives the means to compare their reports and reduces the possibility of error".
Apparently assuming that quantity inevitably grows into quality, the author notes that specify the rate of the number of spies is impossible: "the more reliable spies, the better."
Klembovsky highlights the complexity of control "spying" and makes demands to the personality of the head of the intelligence, acumen, skill, prudence, caution (preferably an excess of caution than its lack), innate tact, people skills, the ability to exploit all human weakness, effort, consistency, experience. The main requirement is an indispensable knowledge of the personal qualities of all subordinate spies, their suitability to perform a particular task.
Pledge the same to complete the tasks successfully lies in the careful instructing of the spies until a special instruction. It is necessary to observe three rules: to tailor the difficulty of the task with the abilities of a spy; do not spray the attention of the spy, and give him a well-defined task; not to dedicate the scout in the reconnaissance plans of the organization.
Considerable attention is given to methods of communication of razvedochnaya with their spies. They are divided by the author into optical signals; conditional written reports; encrypted reports; the use of couriers.
Separately say about the use of double spies, which, according to Lemovskogo, "can only be used to deceive the enemy," as "reading double spy has no price". Generally, in his opinion, with double spies "should be treated with extreme caution and skillfully; if the head of the spies has no skill in this, it is better not to keep double spies."
Intelligence and counterintelligence are generally a single and indivisible process, so V. N. Klembovsky particularly recalls that "it is important to have good spies, but more importantly not to allow his troops to enemy spies." In his opinion, "the disclosure of the enemy's spies is the responsibility of the gendarmerie units, consisting in the army, and his own spies." The author gives a variety of positive and negative military-historical examples of revelations of spies and methods of working with them starting with Ancient Greece and Rome and ending with the little-known facts the times of the Franco-Prussian war of 1870-ies.
As a cornerstone of intelligence work V. N. Klembovsky sees the retention rate intelligence: "the head of the espionage has to be the one and the same person, why, and oversight of the spies and the results of the activities will be much more effective".
A significant place is given to the analysis of moral aspects of intelligence in General, than the opposite points of view known to philosophers, lawyers, historians and commanders, among them Vattel, Montesquieu, Pascal Fiore, Machiavelli, Napoleon, Carroz, Bujo, Martens. The dilemma of "moral – immoral" in relation to espionage work allowed Klembovsky on the basis of the doctrine of state interest Machiavelli, who claimed that to protect the Motherland from the enemy by any means. And espionage in this case is not an exception.
THE STAGES OF A CAREER
Career Lemovskogo, not only the combatant commander, some hundreds, but also the theorist and which unit further has progressed, but at the same time, consistently, without jerks and rapid jumping through mandatory job level: staff officer in the management of the rifle brigade; battalion commander; chief of staff of the division.
From 30 June 1901, Klembovsky – the commander of the 122nd Tambov infantry regiment, which participated in the Russo-Japanese war. In the fighting in Manchuria was twice wounded and shell-shocked, and after recovering returned to the front. For military distinction was awarded two combat medals, promoted to the rank of major-General.
October 21, 1904 – the chief of staff of IV army corps of the Vilna military district, February 4, 1906, appointed chief of staff of X army corps of the Kiev military district.
In 1908, claimed as military theorist, chaired the Commission for drafting the new pension regulation, in 1909, working as part of the Committee organizing the celebration of the 200th anniversary of the battle of Poltava.
29 Jun 1912 was appointed commander of the 9th infantry division of the X army corps with production in the rank of Lieutenant General.
In the initial period of the First world war from October 13, 1914 – commander of the XVI army corps 4th army South-Western front, November 4, 1914 for bravery and courage was awarded the order of St. George 4-th degree. 17 Sep 1915 became General of infantry and, on 13 December 1915 appointed chief of staff of the armies of the southwestern front.
Alexei Brusilov after the appointment on 17 March 1916 commander of the armies of the southwestern front wanted to see Lemovskogo at the head of the 8th army. Did not work, was appointed cavalry General Aleksei Maksimovich Kaledin. Klembovsky remained chief of staff of the front, played a prominent role in the planning and implementation of the famous Brusilovsky breakthrough. Later Brusilov in his memoirs, said: "Klembovsky, despite some of its shortcomings, was it sensible, smart General, quite capable of independent high command positions".
For a high command position thing did not: in October, 1916, V. N. Klembovsky was appointed commander of 11th army of the southwestern front. 20 December 1916 he again on the usual staff work as assistant to the chief of staff of the Supreme commander, where he enjoyed exceptional confidence and support of the chief of staff Mikhail Vasilevich Alekseev.
After the overthrow of the monarchy from March 11 to April 5, 1917, V. N. Klembovsky was the acting chief of staff of the Supreme commander, however, confirmed in office was not. 31 may 1917 appointed commander of the armies of the Northern front.
Provisional government and Kerensky trusted Glembovskaya so much that were willing to give him virtually all power in the army. 28 Aug 1917 commander of the Northern front General Klembovsky sent the following telegram: "Interim government You are appointed Vreede Supreme commander leaving You in the Pskov and retaining the post Glucosea. I suggest You immediately take the position of General Kornilov and me immediately to tell about it. The Minister-President Kerensky".
The response from the General Lemovskogo, which obviously did not expect neither Kerensky nor his entourage, came to Petrograd a few hours: "From the Supreme commander received a telegram that I appointed in his place. Ready to serve the Motherland to the last drop of blood, can not in the name of loyalty and love for her to take on this job, as you are neither strong enough nor sufficient ability for such a responsible work experience in a difficult time. Consider the change of the high command is extremely dangerous when the threat of an external enemy of the integrity and freedom of the country makes it imperative that speedy action to raise the discipline and efficiency of the army. Klembovsky. August 28".
In the first half of 1918, V. N. Klembovsky spent some time in prison as a hostage of the Soviet regime. After the liberation mobilized for service in the red army in the Civil war did not participate, focusing on scientific work. From August to October 1918, he held the position of Chairman of the Military-historical Commission to study the experience of world war I, and then had her lay member. In 1920 became part of a Special meeting at the Commander-in-chief of the red army.
Despite the loyalty and the willingness to cooperate demonstrated by a significant part of the tsarist generals and substantial prospects to improve the quality of military intellectual component of the new regime, a General distrust of the Bolshevik party, the KGB and the military counter-intelligence to "military experts" at that time prevailed over common sense and the need to use a unique media military thought for the defense of the state. This is fully reflected in the fate of the family Lemovskogo.
In December 1920, his elder brother major-General Arthur Oscar Klembovsky was shot by the KGB in Yalta, where he lived after the wounds received on the German front. In connection with the arrest of Arthur Lemovskogo in Yalta Cheka received a collective petition of residents of the surrounding streets with a request to release him from custody. To no avail...
Younger brother is a Colonel of the life guards Izmailovsky regiment Napoleon Napoleonovich Klembovsky under the threat of reprisals was forced to leave the country. Son V. N. Lemovskogo – military pilot Lieutenant Colonel George Klembovsky fought with the Bolsheviks in the North Russian expeditionary force, later emigrated.
In 1920, arrested himself Vladislav Napoleonovich, he was accused of belonging to counter-revolutionary monarchist organization "Union fidelity". In the documents of the Special Department of the Cheka stated that, "according to intelligence information, Klembovsky was entrusted with the General command of the uprising". Suspected him also in the support of the Polish army in the war against the Soviets. The investigation of his case led osbourneozzy Special Department of the Cheka J. agranov, who enjoyed the absolute confidence of Lenin and Dzerzhinsky.
It is unclear what you wanted to achieve with this campaign of intimidation performers from a man, long retired from the strategic analysis, planning and direct management of the troops, do not have even indirect influence on decision making at the headquarters of the red army and not support any contacts with representatives of the newly formed Polish state. What could help Klembovsky poles or other conspirators, even hypothetically? The logic of the accusers in this situation to understand, if only in isolation General they were not guided by considerations of a preventive nature.
To stand up for Lemovskogo tried Deputy Chairman of the revolutionary military Council of the RSFSR E. M. Sklyansky, chief of staff of the red army p. P. Lebedev, A. A. Brusilov. Later A. A. Brusilov recalled: "Lemovskogo... despite all my efforts... arrested so soundly that I had not seen. It is not released".
Sixty-year General long kept in prison without interrogation. The investigation took personal control of the Chairman of the Cheka, Felix Dzerzhinsky. In early July 1921 investigative file on Lemovskogo transferred from Agranova another employee. At the same time utterly exhausted and desperate Vladislav Napoleonovich out of sheer desperation went on hunger strike and two weeks after its commencement, 19 Jul 1921, died in a stifling jail cell in Butyrka prison. However, there is a version of the death Lemovskogo not because of a voluntary hunger strike, and as a result of his murder (execution).
The tragic death of the General left unnoticed, any reaction in Russia and abroad were absent. Not until he had...
Andrew Shavaev
Source: http://nvo.ng.ru/spforces/2019-05-24/10_1045_theorist.html
Tags: analytical work
RELATED MATERIALS: Science and Society
All materials...
23-08-2013Earth vs. The sun, or the change of magnetic poles
30-11--0001Physics saw the beginning of times and confirmed the expansion of the Universe
30-09-2010From Russia suggest that you escape as soon as possible
Related books:Science and Society
Most popular:DayWeek
01-12-2022 The Middle East: security and stability issues (519)
09-01-2023 The new "Turkish gambit" – from Recep Erdogan (518)
08-12-2022 Greyertz forecast: what awaits the world in 2023 (517)
18-01-2023 "They want to turn Russia into Muscovy." Nikolai Patrushev — about the West and Ukraine (517)
22-11-2022 Afghanistan in the military-political dynamics of the United States (2001 - 2021) (516)
28-11-2022 Ekranoplan "BRICS-RA 00132" (516)
05-01-2023 Russia and Iran are building a new transcontinental trade route bypassing sanctions (516)
27-12-2022 Return to the Moon, SpaceX competitors and the Chinese station:how 2022 changed cosmonautics (516)
21-11-2022 Arctic Review, No. 8, 2022 (515)
08-12-2022 Taiwan engineers have strengthened the chip industry in China. Now they are leaving Chinese production. (514)
01-12-2022The Middle East: security and stability issues (6977)
09-01-2023The new "Turkish gambit" – from Recep Erdogan (6909)
05-01-2023Russia and Iran are building a new transcontinental trade route bypassing sanctions (6904)
18-01-2023"They want to turn Russia into Muscovy." Nikolai Patrushev — about the West and Ukraine (6901)
08-12-2022Greyertz forecast: what awaits the world in 2023 (6877)
11-01-2023Too big a brother. China has been helping the countries of Central Asia for years. What will he demand in exchange for his support? (6869)
26-12-2022"Our people, our land, our truth": Deputy Chairman of the Security Council of the Russian Federation Dmitry Medvedev - on the results of 2022, which changed the world order (6857)
22-11-2022Afghanistan in the military-political dynamics of the United States (2001 - 2021) (6854)
05-12-2022Private intelligence: Kalibr solves many problems, but not all (6852)
21-11-2022Arctic Review, No. 8, 2022 (6851)
Zinchenco Sergey Nicolaevich Cyber Arzumanyan Rach'ya Kamran admin Pankratenko Igor N. Fostiychuk Juliana xenia catherine Valetskiy Oleg sokolov oleg Medvedev Dmitry Trifkovič Dragana Zarochintsev Sergey Ponomarenko Oleg J. Alhosain Eyad Hassan Ghada Adliger alex Zhuravelʹ Valery krivelskaya Engelhardt grnp13 Воронин А.Д. PolarFox Anikovich Vladimir V. Shirokov Sergey rozanov88 andrey vyacheslav lawrmax98 petr alexander vladimir igor1 Viktor Mitko Stoykov novikov dmitrij.kireev.2013@mail.ru MartinKalu Анатолий georg777 Lftgen kingartyr kingartyr Igor-Stepanovich Zlobber Bandiri tikhon Fi11 нетбез-Ж+ответада gvozdnekit gfpepe VOWK zlata Кроки Kast23 Гулов diana urpomoshua nabil kabanov Alina icore0003 jar05lav@yandex.ru tyrkin007 katya.gladysheva92@gmai.com nap1812 salyaev kokarev Алматы1956 petrovich strannik Nataly ship egorkin avanyan Eszhan.isabekov@bk.ru FullFlex bishop1985 rudinskydenisv NewsPR666 Willi obggimn 216petrov mklosch v.udiloff Gromov germanngref guleroman Ya shahrudinova Timoschuk Эльнара frcyz Dima dangvt Mondie Ira18051970 Uriil911 EminXaqan Кирилл Казаков Palstinc-78 buazovo@gmail.com Александр domets fish25ru Filipassd jm22gota jm22gota alv.ivanov Kovalev809 EkaterinaSkvortsova Tarasov Uriy Ibanovich namor Master Boris 1973Gg5 Leader Pirin Pirin kamelnar Daniil_Grunt quangvinhvna glumovalera Jevick a.sporovec@mail.ru doynikova Rfhbyf3 taurus Pavel202 Pavel12 aleks.lipless lmphuong С.И.Вукович stegnyuschin mandarinka vikmalinowa Inter2022 elena-sav@hotmail.gr 7271Lela7271 ECO vip25251 valeryr maxvakh Ромео Антон Валитов Ринат Фатехович betty2409 s.arshakyan vyazka levseverov KCH0000 Александр 2 Михаил alva Домра D1Devils Grinyaev Sergey Feel allen1337 Zafar Javed saurovds Eng577 Eng577 Rob Smith soiskatel0006 Petrov
On the national idea Russia - Germany: a new alliance? Russian-Armenian partnership Causes and nature of the current crisis New technologies in the financial markets Formation of the innovation system in Russia The future of Russia and the world: estimates and projections New in the military Causes and consequences of abnormal heat in summer 2010 China and its role in the new world order The Armed Forces of the Russian Federation: yesterday, today and tomorrow Markets: estimates and projections Russia and Belarus: estimates and projections Future of the Information Society Iraq: Lessons and Conclusions New in Science Great Arab Revolution Revolution of the XXI century: nonviolent methods Analytical work: the experience of Russian and foreign experts Present and future of Europe Arctic and Antarctic in modern geopolitics Culture and art in the geopolitical context The tragedy of Yugoslavia: Lessons and Conclusions Special Operations: Theory and capabilities Equipment and armament: yesterday, today and prospect Ukrainian myatezhevoyna The financial system of a new era Civil war in Syria: preliminary conclusions and lessons Sea policy
DARPA aviation Azerbaijan analytical work Anna Gornova Antarctica Arctic Armenia APEC Afghanistan Africa Balkans security Byelorussia Exchange bitcoin UAV Near East BRICS UK AME water war armed forces gaz geopolitics Germany hybrid warfare Georgia dolphins Eurasia Europe Egypt gold Israel India innovation information war information Society Iraq Iran irregulars artificial intelligence art Yemen Caucasus Kazakhstan Caspian Sea China climate DPRK A.Snesariev's competition coronavirus space crisis round table culture Libya pilot providing Masons medicine Sea doctrine Sea policy Marine mammals seaport soft power drugs NATO science national idea oil CSTO UN Experience of ice swimming assessment assessment missile defense forecasts winner work of a competition of A.E.Snesarev religion resources Russia fishery Saudi Arabia Singapore Syria CIS union Special Forces USSR strategy USA Tajikistan tactics tank terrorism technology Turkey coal threat Uzbekistan Ukraina physics financial center finances navy France chemistry Central Asia PMC SCO ecology economy energy Yugoslavia Japan
Sea policy
Civil war in Syria: preliminary conclusions and lessons
The financial system of a new era
Site designed by MaybeWorks


Commerce, CA – After months of informative workshops and in-depth discussions, the Central Basin Board of Directors voted today to support the California (CA) WaterFix. The vote by the Board is a monumental step in securing the future of water reliability for the region and for the state.
The CA WaterFix is a project that aims at improving the infrastructure that brings imported water from the Sacramento-San Joaquin River Delta to Southern California. Central Basin provides water from the Delta to communities in Southeast Los Angeles County.
Discussions on improving the infrastructure in Northern California have been taking place for nearly one decade.
One of the risks the Delta faces is earthquake activity.
In addition, the project will include habitat restoration.
The total cost of the project for all shareholders is estimated to be $17 billion.
The Metropolitan Water District (MWD) Board Directors are scheduled to vote on the California WaterFix on October 10. The Central Basin vote guides the District's MWD representatives to support the project on the 10th.


Having a child with an additional need and disability affects the whole family – including brothers and sisters. And they also need support to manage their feelings, information and "me" time.
Cambridge Student Community Action This provides a volunteer befriender for children from one‐parent or carer families, children that have suffered a bereavement, for children with disabilities, learning difficulties or behavioural problems, or children with family members who have disabilities, learning difficulties or behavioural problems. The Big Siblings are student volunteers from Cambridge University or Anglia Ruskin University aged 18 years upwards. For this reason, Little Siblings must be between 5 and 11 years of age.
The student acts as an 'adopted' older brother/sister to the child, taking them out (usually once a week). Families must live within walking/cycling distance of Cambridge City Centre.
This project is for children aged between five and 11 years. Visits are usually about one to two hours, once a week.
YoungSibs, is a UK-wide website for children and young people (aged 6-17) who have a brother or sister who is disabled, has special educational needs or a serious long-term condition. The site includes information and help pages as well as a forum to chat to other siblings dealing with similar issues. Visit the YoungSibs website.
STRIVE Young Adult Carers supports young people aged 16-25 across Cambridgeshire, Peterborough and Norfolk.
The county council's Young Carers Needs Assessment Team assesses the needs of young carers – a young person aged 18 or under who helps look after a relative who has a condition, such as a disability, illness, mental health condition, or a drug or alcohol problem.


text:
Montana Museum of Railroad History
MMRH Mission
MT RR History
Videos,Photos
0-4-0 Move
Speeder
UTAH & NORTHERN
The first rails reach Montana Territory, May 9, 1880.
The first rails into Montana Territory were laid over Monida Pass with the northward construction of the three-foot, narrow gage, Utah & Northern Railway Company. May 9, 1880, track laying topped the 6,823 ft. elevation pass over the Continental Divide on the Idaho/Montana border. With the objective to reach Butte City (Butte), the first train rolled into the mining city in the late evening of December 21, 1881. At last, Montana had a form of year around, dependable transportation, aiding the start of a major mining boom in Montana Territory.
Following completion of a branch to Anaconda, the line reached Garrison on September 23, 1883, the end point of the U&N. Started August 23, 1871 in Ogden, Utah Territory as the Utah Northern Railroad, and using local capital and labor, the U&N was one of the longest narrow gage railroads ever built – for a total main line of 466 miles. Needing additional funding to continue construction, the UN was taken over by the Union Pacific in 1877 under the direction of Sidney Dillon, hence, Dillon, Montana, and reincorporated as the Utah & Northern. With much preparation and manpower staged all along the line, on July 24, 1887, the UP (Oregon Short Line) widened the entire 466 miles of three-foot, narrow gage main line to standard gage (4-ft., 8 1/2 inches) in a single day!
Today, the Union Pacific still operates the line from Silver Bow, Montana to Pocatello, Utah, where it joins other UP track leading to points throughout the nation. The last scheduled passenger train on the line, The Butte Special, was dropped with the start up of Amtrak in May, 1971.
GREAT FALLS & CANADA RAILWAY
The narrow gage route to Lethbridge.
Coal had been mined near what would become Lethbridge, Alberta, Canada since the early 1870s. By the 1890s growing demand resulted in expanded mining in the region, yet, this was limited until railroad transportation reached the area. In 1883, the Canadian Pacific reached Medicine Hat, Alberta, as part of its transcontinental route. The North Western Coal & Navigation Company, having first tried river boats, set out to construct a 3-ft. gage railway connecting with the Canadian Pacific at Dunmore, just east of Medicine Hat. The 109 mile line was constructed in 1885 to haul coal from Coalbanks. adjacent to the newly laid out town of Lethbridge. Within ten years the little narrow gage was annually hauling 90,000 tons of coal.
On December 31, 1889, the Alberta Railway and Coal Company leased the North Western Coal line with a one-year option to purchase it. The AR&C, 1890, constructed a line from Lethbridge to Coutts, Alberta on the International Border, and simultaneously built a U.S. subsidiary, the Great Falls & Canada Railway Co. from Coutts to Great Falls, Montana where it connected with the Great Northern Railway. Great Falls, as of December 1890, was served by two railroads; one narrow gage (GF&C) and the other standard gage (GN).
By September, 1902, the Alberta Railway & Coal Company began to standard gage its lines. On January 1, 1903, the Great Falls & Canada and the main line in Canada to Stirling, Alberta, was standard gauged.
In 1904, the Great Falls & Canada was bought by the Great Northern Railway. The AR&C, having been renamed Alberta Railway & Irrigation Company, leased its rail operations to the Canadian Pacific in 1912. While much of today's BNSF line from Great Falls to Sweetgrass, on the International Border, has been relocated and rebuilt, portions of the old Great Falls & Canada right away can still be found meandering through pastures and fields; with one depot still standing on private land. The Great Falls & Canada yards and roundhouse in Great Falls, were located on the west bank of the Missouri, in the vicinity of the former Cascade County Shop complex.
BUTTE, ANACONDA & PACIFIC
A pioneer in heavy railroad electrification.
By 1892, Marcus Daly's Anaconda Copper Mining company was shipping larger and larger amounts of ore and materials between the mines in Butte and the smelter in Anaconda. Beset with rising freight rates from both the Northern Pacific and Union Pacific, as well as their jointly owned Montana Union, Daly determined to build his own railroad. The Butte, Anaconda & Pacific Railway was incorporated as in October, 1892. With earlier established alliances, the Great Northern Railway (Montana Central) financed and supervised construction of the BA&P for shares of stock and first mortgage bonds of the new road. ACM, in few short years bought back the majority of these securities, holding a majority ownership by 1895.
Some survey work had been done in 1891, and limited construction started in 1892. With completion of grading and bridges, laying rail was completed and limited freight service begun in December, 1893. The first passenger train rolled into Anaconda on December 26, 1893. Through service was now possible between Anaconda and points east, via the BA&P and connecting Great Northern Railway, with the GN operating the new road for the first year. Most important, ore hauling over the BA&P started in January, 1894. From the very beginning, Marcus Daly had envisioned the BA&P building its line through the mountains to the west of Anaconda, reaching the Bitterroot Valley, and heading north to intercept the Northern Pacific main line near Missoula. In fact, track was built to the Southern Cross mining district, 22 miles west of Anaconda, but never beyond.
With the rapid development of electric transmission and motor technology, the mining industry converted as rapidly as possible from steam power to electric pumps, compressors and associated mining machinery. By 1910, BA&P management were studying electrifying the line based on the costs of operating heavy ore trains with steam locomotives. The company had been replacing its first locomotives with large power to cope with increasing demands. In late 1911, a contract was made with General Electric to electrify the entire BA&P main line, yards and branches, with the exception of only a few spurs to remain steam powered. Regular electric powered freight and passenger operations began in October, 1913. Initially, GE supplied 17 freight and 2 passenger 1,200 h.p. motors (electric locomotives) operating on 2,400 volt direct current; each capable of running singly or in multiple unit combinations. Once phased in throughout the system, dramatic operating cost savings were almost immediately experienced. Heavier ore trains were being handled, increasing the capacity of the entire railroad.
This success had a direct effect on the decision to electrify the Milwaukee Road.
In 1952, the BA&P replaced its few remaining steam switching locomotives with 3 diesel electric road-switcher locomotives; followed by 4 more in 1957. In the same year, General Electric built 2 new 2,480 h.p. electric locomotives expressly for BA&P to supplement the aging (built 1913 -1917) electric fleet. By 1967, use of the heavily worn electrical system and aging electric locomotives was discontinued, with diesel-electric locomotives doing what became diminished work as foreign copper mining and low grade ore began to greatly diminish mining in Montana. Passenger service had been gone since April, 1955. In 1976, ACM was acquired by Atlantic Richfield Corporation, but by 1982 had ARCO, faced with new environmental regulations, poor copper prices and increasing foreign competition, closed all Montana operations. In 1985, now operating as a short line, the BA&P was acquired by Rarus Railway; it was bought in 2007 by Patriot Rail Corp.
NORTHERN PACIFIC RAILWAY
The first transcontinental rail route in Montana Territory.
Building west from Minnesota in 1871, Northern Pacific construction was stopped for seven years at Bismark, North Dakota Territory due to the deep financial panic of 1873. Frederick Billings' (Billings, Montana) reorganization of the line's finances allowed the NP to resume construction westward in 1880. Concerned with competition from the Union Pacific's Utah & Northern, the NP wanted to push into Montana Territory as quickly as possible. Several years earlier, NP construction had begun in western Washington. Now, the road opened multiple construction efforts to complete the line.
With plans to terminate in Tacoma, Washington, but wanting to quickly reach the Pacific, the NP struck an alliance with Henry Villard's Oregon Railway and Navigation Company, which ran east out of Portland, Oregon into Washington Territory. Villard, through a proxy battle with Billings took over the NP. Finally succeeding in linking together all of its track construction segments, Villard held a gold spike ceremony September 8, 1883, at Gold Creek, Montana Territory with former President, Ulysses S. Grant present to help celebrate completion of the nation's second transcontinental railroad. In three short years, Montana had witnessed a dramatic transportation change with major impact on its development.
Having used federal land grant financing, the NP amassed vast prairie and timbered tracts, which it used for settlement, agricultural and natural resource development. Even so, like most U.S. railroads, the NP suffered another bankruptcy resulting from the 1893 silver panic.
In 1889, with mining booming, the NP built the "Butte short line." This route branched off the main line, west of Bozeman, ran over Homestake Pass, and thru Butte to rejoin the original Helena main line at Garrison. An 1886 agreement with the UP to jointly own and operate the Silver Bow – Garrison portion of the line as the Montana Union Railway, ended with the 1893 panic, and the NP taking over this former Utah & Northern route. Though primarily used for passenger service, this gave the NP its own trackage into and out of the mining city. Yet, most freight traffic went by way of the original, shorter line over the Mullan Pass via Helena.
In 1970 the Northern Pacific Railway was merged into the Burlington Northern, which in 1996 became the Burlington Northern Santa Fe Railway. The original NP main line from Huntley, Montana to Sand Point, Idaho has been operated under lease by Montana Rail Link since 1987. The NP's North Coast Limited and Main Streeter passenger trains were replaced in 1971 by Amtrak's North Coast Hiawatha, which itself was discontinued in 1979.
GREAT NORTHERN RAILWAY
Montana's second transcontinental rail route.
James J. Hill was above all, a visionary, while at the same time having strong business and finance acumen. Having both shipping and railroad holdings, he turned his attention to the west, steering his St. Paul, Minnesota and Manitoba Railway (The Manitoba Road), to the Pacific coast. Canadian born, Jim Hill had a sound grasp of the development potential that lay along the southern Canadian and northern borders of the United States. With private financing, the Manitoba Road reached Great Falls, Montana Territory in 1887. Hill's personal friend, Paris Gibson telling of the abundant water and good land, lauded the area as a place for the new railroad to build shops and industry.
Also, having knowledge of the growing mining boom in Butte, Jim Hill visited and befriended Marcus Daly. It was readily apparent that the Manitoba Road needed to reach Butte as soon as possible, as the freight traffic potential was enormous. Shortly before Manitoba Road rails reached Great Falls, a wholly owned subsidiary, the Montana Central Railroad, was begun between Great Falls and Butte. By late 1887, the Montana Central was "ironed" to Helena, and on into Butte in 1888. The Manitoba Road had its much needed freight traffic, and central Montana Territory had dependable, year around transportation. Soon after, the last steamboats at Fort Benton, turned their bows down the Missouri River to St. Louis, and a colorful era of Montana's pioneer years came to a close.
Now, James J. Hill could once again turn his attention to his original objective to reach Puget Sound and the Pacific Ocean. Surveying several routes, and having no desire to parallel the Northern Pacific Railway west from Butte, Hill started construction west from Havre, Montana in 1890. The road had been the Great Northern Railway in 1889. John Stevens was employed to relocate Marias Pass, and with major effort from C.F.B. Haskell, the line was laid out through the Montana and Idaho Rocky Mountains. The Great Northern Railway was completed to Seattle in 1893. Branches were built in Montana to serve mining and agricultural areas, allowing settlement and development throughout the state. A second main line (the Montana Eastern) was started in 1912, running east from Lewistown, Montana to New Rockford, North Dakota, but was never completed due to economic conditions.
Always well managed, the GN never missed a dividend, nor suffered a bankruptcy.
It merged into the Burlington Northern in 1970, which became the Burlington Northern Santa Fe Railway at year end, 1996. Originally called the Oriental Limited, the Empire Builder, named in honor of James J. Hill, was the premier GN passenger train, lasting, until Amtrak in 1971. Today's "Empire Builder" is the only Amtrak long distance passenger train still carrying its original name.
CHICAGO, MILWAUKEE, ST. PAUL & PACIFIC
Montana's third and last transcontinental line.
Chartered in 1847, as the Milwaukee and Waukesha, and changed to Milwaukee and Mississippi Railroad Co. by 1850, the beginnings of what became popularly known as the Milwaukee Road played an important role in the nation's early mid-western settlement. For competitive reasons on November 28, 1905, the board of directors authorized building a westward extension of the Milwaukee Road to reach Tacoma and Seattle, Washington; thus, "Pacific" was added to the then named, Chicago, Milwaukee and St. Paul Railway Co.
This new route was about 2,300 miles, and was built without land grants. Surveying had been started in November, 1905 – prior to formal approval of the project. Interestingly, the route selected proved to be the shortest rail route to Tacoma. However, it bypassed several important cities in Montana and Washington; a fact that would haunt the Milwaukee's profitability throughout its history.
Construction along the entire route, started almost immediately. With mountain ranges crossed and the Yellowstone, Missouri and Columbia rivers bridged, the first through freight service to Tacoma began July 4, 1909. Limited local passenger service started one year later. May 28, 1911 saw the start of the daily Columbian and Olympian services. Strategic branch lines were constructed to reach some bypassed cities, including Spokane, Bozeman and Great Falls. Completed in 1913, the Great Falls branch became a major source of freight revenue. This line was so important that a second main line route was surveyed from Great Falls, through the front range of the Rockies and down the Blackfoot River drainage to Missoula. Due to WWI, and other economic factors, it was never built.
Even while under construction, Milwaukee Road management was studying electrification of the line in the Rocky and Cascade mountain regions. The 1909 electrification of Great Northern Railway's first Cascade Tunnel was noted, and in particular, that of the Butte, Anaconda & Pacific in 1913. Working with General Electric and the Montana Power Company, on November 30, 1915, the Milwaukee Road ran its first main line electric locomotive between Butte and the east side of Pipestone Pass. By early 1917, the entire 460 mile main line from Harlowton, Montana to Avery, Idaho was operating with electric locomotives, powered by clean, "white coal" (snow to water to hydroelectricity), as the Milwaukee advertised. By November, 1919, the route over the Cascades was also running on "white coal," and later into Seattle. Reports state the huge outlay of $23,000,000 to electrify was recovered in only a few years, thru savings from not running costly steam locomotives over the tough mountain terrain.
Never the less, Western Extension business, though profitable, never reached desired levels, and financial difficulties plagued the Milwaukee Road for many years. Following WWII, it saw declining traffic patterns, then, by 1970, increasing competition from railroad mergers and trucking on the Interstate highways. The road dropped the Olympian Hiawatha in 1961, and shut down the badly worn out electrification in June, 1974. Finally, the Western Extension was abandoned in 1980. Montana and the west had lost their last-to-build transcontinental railroad. Mired in bankruptcy, the remaining portion of the Milwaukee Road merged into the Soo Line in early 1985. The Soo Line now operates as a subsidiary of the Canadian Pacific Railway.
Jack Dykstra


If he will make a statement on the UK contribution to the international security assistance force in Afghanistan.
Around 740 United Kingdom personnel are currently serving with the international security assistance force (ISAF) in Afghanistan. Some 550 of them are deployed to Kabul, where they are assisting the Government of Afghanistan to maintain security. The balance of 190 personnel are serving in the UK-led multinational provincial reconstruction teams in Mazar-e Sharif and Meymaneh, and the associated forward support base in northern Afghanistan.
I thank my right hon. Friend for his answer, and I am sure that the whole House wishes to pay tribute to our troops in Afghanistan.
I welcome the progress in ISAF's work, but it would be useful to have an idea of when stage two will begin. May I also ask whether ISAF's remit still includes disposing of munitions, and in particular anti-personnel mines?
Stage two is an important next step. It will be discussed at this week's NATO ministerials, and we hope that progress will be made then. We hope to announce later this week our decision, following those discussions, on the form that stage two will take. That, I think, gives a clear indication that we are moving forward.
We plan to move beyond stage two to stage three, and the United Kingdom plans to make the headquarters of the allied rapid reaction corps ISAF's headquarters next year. This is a developing process, which is gaining momentum. As for the details of ISAF's current roles, it is probably best for me to write to my hon. and learned Friend so that he has a full picture of all the tasks that it undertakes. I appreciate his warm support for the work that is being done in Afghanistan.


No. If you have already uploaded the IRAS Export (XML) into the IRAS website, you will have to make the required amendments under File Generation > IRAS Amendment. Next, regenerate the IRAS Export (XML) as an amendment and re-submit it to IRAS.


Home » SEO Reviews » Is there an easy way to make your website searchable on the top search engines?
Is there an easy way to make your website searchable on the top search engines?
Question by marcopolo1984: Is there an easy way to make your website searchable on the top search engines?
Without all this SEO stuff can you not pay google etc to make your site the top rated?
It is completely free as well.


text:
using System;
using System.Collections.Generic;

namespace behaviac
{
    public class Variables
    {
        public Variables(Dictionary<uint, IInstantiatedVariable> vars)
        {
            this.m_variables = vars;
        }

        public Variables()
        {
            this.m_variables = new Dictionary<uint, IInstantiatedVariable>();
        }

        public bool IsExisting(uint varId)
        {
            return this.m_variables.ContainsKey(varId);
        }

        public virtual IInstantiatedVariable GetVariable(uint varId)
        {
            if (this.m_variables != null && this.m_variables.ContainsKey(varId))
            {
                return this.m_variables[varId];
            }

            return null;
        }

        public virtual void AddVariable(uint varId, IInstantiatedVariable pVar, int stackIndex)
        {
            Debug.Check(!this.m_variables.ContainsKey(varId));

            this.m_variables[varId] = pVar;
        }

        public void Log(Agent agent)
        {
#if !BEHAVIAC_RELEASE
            var e = this.m_variables.Keys.GetEnumerator();

            while (e.MoveNext())
            {
                uint id = e.Current;
                IInstantiatedVariable pVar = this.m_variables[id];

                pVar.Log(agent);
            }

#endif
        }

        public void UnLoad(string variableName)
        {
            Debug.Check(!string.IsNullOrEmpty(variableName));

            uint varId = Utils.MakeVariableId(variableName);

            if (this.m_variables.ContainsKey(varId))
            {
                this.m_variables.Remove(varId);
            }
        }

        public void Unload()
        {
        }

        public void CopyTo(Agent pAgent, Variables target)
        {
            target.m_variables.Clear();

            var e = this.m_variables.Keys.GetEnumerator();

            while (e.MoveNext())
            {
                uint id = e.Current;
                IInstantiatedVariable pVar = this.m_variables[id];
                IInstantiatedVariable pNew = pVar.clone();

                target.m_variables[id] = pNew;
            }

            if (!Object.ReferenceEquals(pAgent, null))
            {
                e = target.m_variables.Keys.GetEnumerator();

                while (e.MoveNext())
                {
                    uint id = e.Current;
                    IInstantiatedVariable pVar = this.m_variables[id];

                    pVar.CopyTo(pAgent);
                }
            }
        }

        private void Save(ISerializableNode node)
        {
            CSerializationID variablesId = new CSerializationID("vars");
            ISerializableNode varsNode = node.newChild(variablesId);

            var e = this.m_variables.Values.GetEnumerator();

            while (e.MoveNext())
            {
                e.Current.Save(varsNode);
            }
        }

        protected Dictionary<uint, IInstantiatedVariable> m_variables = new Dictionary<uint, IInstantiatedVariable>();

        public Dictionary<uint, IInstantiatedVariable> Vars
        {
            get
            {
                return this.m_variables;
            }
        }
    }

#if BEHAVIAC_USE_HTN
    public class AgentState : Variables, IDisposable
    {
        private List<AgentState> state_stack = null;

        public AgentState(Dictionary<uint, IInstantiatedVariable> vars) : base(vars)
        {

        }

        public AgentState()
        {
        }

        public AgentState(AgentState parent)
        {
            this.parent = parent;
        }

        public void Dispose()
        {
            this.Pop();
        }

        private static Stack<AgentState> pool = new Stack<AgentState>();

        private AgentState parent = null;

#if BEHAVIAC_ENABLE_PUSH_OPT
        private bool m_forced;
        private int m_pushed;
#endif

        public int Depth
        {
            get
            {
                int d = 1;

                if (this.state_stack != null && this.state_stack.Count > 0)
                {
                    for (int i = this.state_stack.Count - 1; i >= 0; --i)
                    {
                        AgentState t = this.state_stack[i];
                        d += 1 + t.m_pushed;
                    }
                }

                return d;
            }
        }

        public int Top
        {
            get
            {
                if (this.state_stack != null && this.state_stack.Count > 0)
                {
                    return this.state_stack.Count - 1;
                }

                return -1;
            }
        }

        public override void AddVariable(uint varId, IInstantiatedVariable pVar, int stackIndex)
        {
            if (this.state_stack != null && this.state_stack.Count > 0 &&
                stackIndex > 0 && stackIndex < this.state_stack.Count)
            {
                AgentState t = this.state_stack[stackIndex];
                t.AddVariable(varId, pVar, -1);
            }
            else
            {
                base.AddVariable(varId, pVar, -1);
            }
        }

        public override IInstantiatedVariable GetVariable(uint varId)
        {
            if (this.state_stack != null && this.state_stack.Count > 0)
            {
                for (int i = this.state_stack.Count - 1; i >= 0; --i)
                {
                    AgentState t = this.state_stack[i];

                    IInstantiatedVariable pVar = t.GetVariable(varId);

                    if (pVar != null)
                    {
                        return pVar;
                    }
                }
            }

            return base.GetVariable(varId);
        }

        public AgentState Push(bool bForcePush)
        {
#if BEHAVIAC_ENABLE_PUSH_OPT

            if (!bForcePush)
            {
                //if the top has nothing new added, to use it again
                if (this.state_stack != null && this.state_stack.Count > 0)
                {
                    AgentState t = this.state_stack[this.state_stack.Count - 1];

                    if (!t.m_forced && t.m_variables.Count == 0)
                    {
                        t.m_pushed++;
                        return t;
                    }
                }
            }

#endif

            AgentState newly = null;

            lock (pool)
            {
                if (pool.Count > 0)
                {
                    newly = pool.Pop();
                    //set the parent
                    newly.parent = this;
                }
                else
                {
                    newly = new AgentState(this);
                }

                newly.m_forced = bForcePush;

                if (bForcePush)
                {
                    //base.CopyTo(null, newly);
                    this.CopyTopValueTo(newly);
                }
            }

            if (this.state_stack == null)
            {
                this.state_stack = new List<AgentState>();
            }

            //add the newly one at the end of the list as the top
            this.state_stack.Add(newly);

            return newly;
        }

        private void CopyTopValueTo(AgentState newly)
        {
            var e = this.m_variables.Keys.GetEnumerator();

            while (e.MoveNext())
            {
                uint id = e.Current;

                IInstantiatedVariable pVar = this.GetVariable(id);
                IInstantiatedVariable pNew = pVar.clone();

                newly.m_variables[id] = pNew;
            }
        }

        public void Pop()
        {
#if BEHAVIAC_ENABLE_PUSH_OPT

            if (this.m_pushed > 0)
            {
                this.m_pushed--;

                if (this.m_variables.Count > 0)
                {
                    this.m_variables.Clear();
                    return;
                }

                return;
            }

#endif

            if (this.state_stack != null && this.state_stack.Count > 0)
            {
                AgentState top = this.state_stack[this.state_stack.Count - 1];
                top.Pop();
                return;
            }

#if BEHAVIAC_ENABLE_PUSH_OPT
            this.m_pushed = 0;
            this.m_forced = false;
#endif

            if (this.state_stack != null)
            {
                this.state_stack.Clear();
            }

            this.m_variables.Clear();

            Debug.Check(this.state_stack == null);
            Debug.Check(this.parent != null);

            this.parent.PopTop();
            this.parent = null;

            lock (pool)
            {
                Debug.Check(!pool.Contains(this));
                pool.Push(this);
            }
        }

        private void PopTop()
        {
            Debug.Check(this.state_stack != null);
            Debug.Check(this.state_stack.Count > 0);
            //remove the last one
            this.state_stack.RemoveAt(this.state_stack.Count - 1);
        }

    }
#endif//BEHAVIAC_USE_HTN
}


We're prepared to present you with the most effective ideas over the designs of the orders in a qualified way for Soft Winding Twister Machine , Slack Winding Twister Machine , Soft Wind Type Twister Machine , altogether will develop happy tomorrow!
"carry on to improve, to ensure merchandise quality in line with market and shopper standard prerequisites. Our firm has a high quality assurance program are actually established for Soft Winding Twister Machine , Slack Winding Twister Machine , Soft Wind Type Twister Machine , Our solutions have been obtained more and more recognition from foreign clients and established long term and cooperative relationship with them. We`ll offer the best service for every customer and sincerely welcome friends to work with us and establish the mutual benefit together.


text:
SMM - What You Need to Know
What is SMM?
Like MGUS, Smoldering myeloma (SMM) is a disorder of the blood. SMM is a more advanced stage of MGUS - it is classified as a pre-cancerous disease.
The majority of patients who have SMM show no symptoms, however, the risk with SMM is that it progresses to Multiple Myeloma - a very aggressive type of cancer. This risk is higher than in patients with MGUS, approximately half of patients with SMM will progress to Multiple Myeloma within five years.
How is SMM Currently Treated?
Despite the potential seriousness of SMM -particularly those deemed at high-risk, medical practitioners rarely advise toxic therapies due to the risks associated with these therapies. Therefore, they will often advise a "watch and wait" strategy.
This is a period of time which can be anything from one to more than twenty years, when you will have no treatment for your condition but rather you will be monitored by your treating medical practitioner. This "active monitoring" will usually be every 3-6 months.
This can be very worrying and frustrating for patients - living with the knowledge that you have your condition and waiting for it to worsen before something is actively done about it.
Is There a Better Way?
Early intervention with curcumin has been shown to improve outcomes in some patients with SMM.
MGUS Therapy's Terry Golombick has been running clinical trials for over 10 years. These trials show that key markers of the disease may improve with curcumin treatment. Patient tolerance has been good and none have developed clinical infections or toxicities. Many patients have been taking curcumin for over 5 years with some of these on curcumin therapy for more than 10 years (up to 13 years).
Book a consultation now to understand your disease better and how it can be treated.
What about curcumin and multiple myeloma?
Patients whose disease has progressed from MGUS/SMM to active myeloma require treatment with anti-myeloma therapy as determined by their treating specialist.
Treatment regimens for multiple myeloma (MM) typically involve Dexamethasone (Dex), used in combination with either an immunomodulatory drug (ImiD) or a proteasome inhibitor (PI). Dex is a challenge due to adverse effects, particularly in elderly patients.
Our most recent study (2020) has shown that curcumin, when used in a combination regimen, may be a viable alternative to corticosteroids in combination with an ImiD or PI without the side effects typically caused by Dexamethasone. This is the first reported case series of patients with MM who have been treated with adjuvant curcumin as opposed to Dex in combination with other anti-myeloma agents


text:
Disabled Oakland Vet reunites with stolen service dog
By Duncan Sinfield
Military vet has service dog stolen
KTVU's Henry Lee reports.
OAKLAND, Calif. - A disabled US Navy veteran was reunited with his stolen service dog after a KTVU viewer recognized the 3-year-old Chihuahua as one her friend had recently found.
With his Chihuahua, Bella, in a carrier in the backseat, Mark Lipton had gotten out of his car last Sunday to open a gate outside his home. That's when someone jumped into his car and took off.
Mark Lipton and Bella, a 3-year-old Chihuahua, reunite on Saturday, April 3, 2021.
Despite Lipton's best efforts to chase the thief, he got away with Lipton's car and dog. It's unclear whether the car thief realized Bella was in the back.
Lipton lives with PTSD, and relies on Bella, a rescue dog he got in San Jose. "She's able to read my body language, I'm able to read her body language. We have a connection that's indescribable," Lipton told KTVU's Henry Lee.
"She just keeps me f—level, every single aspect," he said. "I mean, good day, bad day, doesn't matter. Everything in between," Lipton said.
On Saturday, a viewer who recognized Bella from Henry Lee's report reached out to KTVU because she believed her friend recently found the stolen dog.
A friend of Lipton's positively identified the dog that the woman had as Bella, and arrangements were made for an immeidate reunion. At the reunion, Lipton was overcome with emotion.
At least 1 hurt after vehicle ends up in Orange County pond: FHP


Club Pages - British Wadokai © British Wadokai 1973. Copyright.
British Wadokai Clubs without websites will now be eligible for 'webpages' on the British Wadokai Website!
NB: In the event that clubs decide to run their own websites these pages will be removed, to assist with up-to-date information & maintenance conflicts and issues, etc.


Retailers including Amazon.co.uk, Urban Outfitters and John Lewis have signed up to a new social gifting service that launches in the UK this week.
Facebook users can use the DropGifts service to mark their online friends' special occasions by sending them gift cards from the retailers across Facebook. Gifts can be sent in one click using a range of devices, from PC and tablets to smartphone, using DropGifts' mobile app.
Senders can choose from free or paid-for gift cards, valued at between £5 and £200, and deliver them via Facebook. The service, which is also available in countries including Italy, France, Germany, Brazil, Sweden and Japan, can also be used to send gifts relevant to the home market of friends living overseas. By this autumn, says the company, the service will be live in more than 20 countries.
The receiver of the gift card can redeem the voucher online or in store. Facebook friends can also club together and contribute to a voucher through the social media site.
For retailers this is a new way to sell, says DropGifts. They benefit from the extra sales, and from the exposure on Facebook, since every time a gift is given that will appear on their news feed, acting as a recommendation. They can also give gift cards to their most loyal customers.
David Van Reyk, joint managing director of DropGifts, said: "DropGifts allows people to give and receive real gifts via social media. We have signed up numerous top-name retailers already including John Lewis , Amazon.co.uk and Hotel Chocolat and they are telling us that they see this as a tremendously exciting new sales channel for their gift cards.
Urban Outfitters' head of digital marketing Europe Aurelia Noel said: "Being part of DropGifts is an exciting prospect for Urban Outfitters. Not only will it allow us to reach audiences in the UK, we are particularly excited about the potential reach of the platform internationally.
Other retailers signed up for the launch include Hotel Chocolat, SpaFinder, luxury online retailers Boticca and Girl Meets Dress, Independent Cinema Tickets, which offers tickets to more than 230 UK cinemas, and Blurb photo books.


If you ever find yourself in need of Union Mills Bail Bonds, there is nothing to worry about! Numerous Union Mills bail bond agents can bail you (or another person) out anytime during the day or night in Union Mills. Bail Bonds Network helps you find and contact a licensed bail bonds agent in Union Mills, Indiana. At your convenience, many bail bonds companies will come pick you up privately. Payment plans are usually available depending on the situation.
Upon arrest anywhere in La Porte county, a person must be processed at the La Porte county jail. To be released from jail, several steps must occur, including being booked and posting bail. Once the bail amount is decided, a bail bond agent is sent to post the bond at the local jail. At this time the jail release process begins and typically takes anywhere from one to two hours to complete. While cash bonds are permitted, it is usually not a common practice due to it's high expense.