// Copyright (c) The NodeRT Contributors
// All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the ""License""); you may
// not use this file except in compliance with the License. You may obtain a
// copy of the License at http://www.apache.org/licenses/LICENSE-2.0
//
// THIS CODE IS PROVIDED ON AN  *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS
// OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
// IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
// MERCHANTABLITY OR NON-INFRINGEMENT.
//
// See the Apache Version 2.0 License for specific language governing permissions
// and limitations under the License.

// TODO: Verify that this is is still needed..
#define NTDDI_VERSION 0x06010000

#include <v8.h>
#include "nan.h"
#include <string>
#include <ppltasks.h>
#include "CollectionsConverter.h"
#include "CollectionsWrap.h"
#include "node-async.h"
#include "NodeRtUtils.h"
#include "OpaqueWrapper.h"
#include "WrapperBase.h"

#using <Windows.WinMD>

// this undefs fixes the issues of compiling Windows.Data.Json, Windows.Storag.FileProperties, and Windows.Stroage.Search
// Some of the node header files brings windows definitions with the same names as some of the WinRT methods
#undef DocumentProperties
#undef GetObject
#undef CreateEvent
#undef FindText
#undef SendMessage

const char* REGISTRATION_TOKEN_MAP_PROPERTY_NAME = "__registrationTokenMap__";

using v8::Array;
using v8::String;
using v8::Value;
using v8::Boolean;
using v8::Integer;
using v8::FunctionTemplate;
using v8::Object;
using v8::Local;
using v8::Function;
using v8::Date;
using v8::Number;
using v8::PropertyAttribute;
using v8::Primitive;
using Nan::HandleScope;
using Nan::Persistent;
using Nan::Undefined;
using Nan::True;
using Nan::False;
using Nan::Null;
using Nan::MaybeLocal;
using Nan::EscapableHandleScope;
using Nan::HandleScope;
using Nan::TryCatch;
using namespace concurrency;

namespace NodeRT { namespace Windows { namespace UI { namespace Xaml { namespace Controls { namespace Maps { 
  v8::Local<v8::Value> WrapMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ UnwrapMapTileDataSource(Local<Value> value);
  
  v8::Local<v8::Value> WrapCustomMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ UnwrapCustomMapTileDataSource(Local<Value> value);
  
  v8::Local<v8::Value> WrapHttpMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ UnwrapHttpMapTileDataSource(Local<Value> value);
  
  v8::Local<v8::Value> WrapLocalMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ UnwrapLocalMapTileDataSource(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapActualCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ UnwrapMapActualCameraChangedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapActualCameraChangingEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ UnwrapMapActualCameraChangingEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElement(::Windows::UI::Xaml::Controls::Maps::MapElement^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElement^ UnwrapMapElement(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapBillboard(::Windows::UI::Xaml::Controls::Maps::MapBillboard^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapBillboard^ UnwrapMapBillboard(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapCamera(::Windows::UI::Xaml::Controls::Maps::MapCamera^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapCamera^ UnwrapMapCamera(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ UnwrapMapContextRequestedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControl(::Windows::UI::Xaml::Controls::Maps::MapControl^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControl^ UnwrapMapControl(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlBusinessLandmarkClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ UnwrapMapControlBusinessLandmarkClickEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlBusinessLandmarkPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ UnwrapMapControlBusinessLandmarkPointerEnteredEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlBusinessLandmarkPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ UnwrapMapControlBusinessLandmarkPointerExitedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlBusinessLandmarkRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ UnwrapMapControlBusinessLandmarkRightTappedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlDataHelper(::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ UnwrapMapControlDataHelper(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlTransitFeatureClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ UnwrapMapControlTransitFeatureClickEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlTransitFeaturePointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ UnwrapMapControlTransitFeaturePointerEnteredEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlTransitFeaturePointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ UnwrapMapControlTransitFeaturePointerExitedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapControlTransitFeatureRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ UnwrapMapControlTransitFeatureRightTappedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapCustomExperience(::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ UnwrapMapCustomExperience(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapCustomExperienceChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ UnwrapMapCustomExperienceChangedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElement3D(::Windows::UI::Xaml::Controls::Maps::MapElement3D^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElement3D^ UnwrapMapElement3D(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ UnwrapMapElementClickEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ UnwrapMapElementPointerEnteredEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ UnwrapMapElementPointerExitedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapLayer(::Windows::UI::Xaml::Controls::Maps::MapLayer^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapLayer^ UnwrapMapLayer(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementsLayer(::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ UnwrapMapElementsLayer(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementsLayerClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ UnwrapMapElementsLayerClickEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementsLayerContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ UnwrapMapElementsLayerContextRequestedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementsLayerPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ UnwrapMapElementsLayerPointerEnteredEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapElementsLayerPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ UnwrapMapElementsLayerPointerExitedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapIcon(::Windows::UI::Xaml::Controls::Maps::MapIcon^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapIcon^ UnwrapMapIcon(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapInputEventArgs(::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ UnwrapMapInputEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapItemsControl(::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ UnwrapMapItemsControl(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapModel3D(::Windows::UI::Xaml::Controls::Maps::MapModel3D^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ UnwrapMapModel3D(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapPolygon(::Windows::UI::Xaml::Controls::Maps::MapPolygon^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapPolygon^ UnwrapMapPolygon(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapPolyline(::Windows::UI::Xaml::Controls::Maps::MapPolyline^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapPolyline^ UnwrapMapPolyline(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ UnwrapMapRightTappedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapRouteView(::Windows::UI::Xaml::Controls::Maps::MapRouteView^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapRouteView^ UnwrapMapRouteView(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapScene(::Windows::UI::Xaml::Controls::Maps::MapScene^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapScene^ UnwrapMapScene(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapStyleSheet(::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ UnwrapMapStyleSheet(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapStyleSheetEntries(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ UnwrapMapStyleSheetEntries(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapStyleSheetEntryStates(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ UnwrapMapStyleSheetEntryStates(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTargetCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ UnwrapMapTargetCameraChangedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTileBitmapRequest(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ UnwrapMapTileBitmapRequest(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTileBitmapRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ UnwrapMapTileBitmapRequestDeferral(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTileBitmapRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ UnwrapMapTileBitmapRequestedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTileSource(::Windows::UI::Xaml::Controls::Maps::MapTileSource^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileSource^ UnwrapMapTileSource(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTileUriRequest(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ UnwrapMapTileUriRequest(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTileUriRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ UnwrapMapTileUriRequestDeferral(Local<Value> value);
  
  v8::Local<v8::Value> WrapMapTileUriRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ UnwrapMapTileUriRequestedEventArgs(Local<Value> value);
  
  v8::Local<v8::Value> WrapStreetsideExperience(::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ UnwrapStreetsideExperience(Local<Value> value);
  
  v8::Local<v8::Value> WrapStreetsidePanorama(::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ wintRtInstance);
  ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ UnwrapStreetsidePanorama(Local<Value> value);
  



  static void InitMapAnimationKindEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapAnimationKind").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("default").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapAnimationKind::Default)));
    Nan::Set(enumObject, Nan::New<String>("none").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapAnimationKind::None)));
    Nan::Set(enumObject, Nan::New<String>("linear").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapAnimationKind::Linear)));
    Nan::Set(enumObject, Nan::New<String>("bow").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapAnimationKind::Bow)));
  }

  static void InitMapCameraChangeReasonEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapCameraChangeReason").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("system").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapCameraChangeReason::System)));
    Nan::Set(enumObject, Nan::New<String>("userInteraction").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapCameraChangeReason::UserInteraction)));
    Nan::Set(enumObject, Nan::New<String>("programmatic").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapCameraChangeReason::Programmatic)));
  }

  static void InitMapColorSchemeEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapColorScheme").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("light").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapColorScheme::Light)));
    Nan::Set(enumObject, Nan::New<String>("dark").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapColorScheme::Dark)));
  }

  static void InitMapElementCollisionBehaviorEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapElementCollisionBehavior").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("hide").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior::Hide)));
    Nan::Set(enumObject, Nan::New<String>("remainVisible").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior::RemainVisible)));
  }

  static void InitMapInteractionModeEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapInteractionMode").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("auto").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::Auto)));
    Nan::Set(enumObject, Nan::New<String>("disabled").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::Disabled)));
    Nan::Set(enumObject, Nan::New<String>("gestureOnly").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::GestureOnly)));
    Nan::Set(enumObject, Nan::New<String>("pointerAndKeyboard").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::PointerAndKeyboard)));
    Nan::Set(enumObject, Nan::New<String>("controlOnly").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::ControlOnly)));
    Nan::Set(enumObject, Nan::New<String>("gestureAndControl").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::GestureAndControl)));
    Nan::Set(enumObject, Nan::New<String>("pointerKeyboardAndControl").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::PointerKeyboardAndControl)));
    Nan::Set(enumObject, Nan::New<String>("pointerOnly").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapInteractionMode::PointerOnly)));
  }

  static void InitMapLoadingStatusEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapLoadingStatus").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("loading").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapLoadingStatus::Loading)));
    Nan::Set(enumObject, Nan::New<String>("loaded").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapLoadingStatus::Loaded)));
    Nan::Set(enumObject, Nan::New<String>("dataUnavailable").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapLoadingStatus::DataUnavailable)));
    Nan::Set(enumObject, Nan::New<String>("downloadedMapsManagerUnavailable").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapLoadingStatus::DownloadedMapsManagerUnavailable)));
  }

  static void InitMapModel3DShadingOptionEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapModel3DShadingOption").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("default").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapModel3DShadingOption::Default)));
    Nan::Set(enumObject, Nan::New<String>("flat").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapModel3DShadingOption::Flat)));
    Nan::Set(enumObject, Nan::New<String>("smooth").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapModel3DShadingOption::Smooth)));
  }

  static void InitMapPanInteractionModeEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapPanInteractionMode").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("auto").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapPanInteractionMode::Auto)));
    Nan::Set(enumObject, Nan::New<String>("disabled").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapPanInteractionMode::Disabled)));
  }

  static void InitMapProjectionEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapProjection").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("webMercator").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapProjection::WebMercator)));
    Nan::Set(enumObject, Nan::New<String>("globe").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapProjection::Globe)));
  }

  static void InitMapStyleEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapStyle").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("none").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::None)));
    Nan::Set(enumObject, Nan::New<String>("road").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::Road)));
    Nan::Set(enumObject, Nan::New<String>("aerial").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::Aerial)));
    Nan::Set(enumObject, Nan::New<String>("aerialWithRoads").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::AerialWithRoads)));
    Nan::Set(enumObject, Nan::New<String>("terrain").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::Terrain)));
    Nan::Set(enumObject, Nan::New<String>("aerial3D").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::Aerial3D)));
    Nan::Set(enumObject, Nan::New<String>("aerial3DWithRoads").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::Aerial3DWithRoads)));
    Nan::Set(enumObject, Nan::New<String>("custom").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapStyle::Custom)));
  }

  static void InitMapTileAnimationStateEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapTileAnimationState").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("stopped").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileAnimationState::Stopped)));
    Nan::Set(enumObject, Nan::New<String>("paused").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileAnimationState::Paused)));
    Nan::Set(enumObject, Nan::New<String>("playing").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileAnimationState::Playing)));
  }

  static void InitMapTileLayerEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapTileLayer").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("labelOverlay").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileLayer::LabelOverlay)));
    Nan::Set(enumObject, Nan::New<String>("roadOverlay").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileLayer::RoadOverlay)));
    Nan::Set(enumObject, Nan::New<String>("areaOverlay").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileLayer::AreaOverlay)));
    Nan::Set(enumObject, Nan::New<String>("backgroundOverlay").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileLayer::BackgroundOverlay)));
    Nan::Set(enumObject, Nan::New<String>("backgroundReplacement").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapTileLayer::BackgroundReplacement)));
  }

  static void InitMapVisibleRegionKindEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapVisibleRegionKind").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("near").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapVisibleRegionKind::Near)));
    Nan::Set(enumObject, Nan::New<String>("full").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapVisibleRegionKind::Full)));
  }

  static void InitMapWatermarkModeEnum(const Local<Object> exports) {
    HandleScope scope;

    Local<Object> enumObject = Nan::New<Object>();

    Nan::Set(exports, Nan::New<String>("MapWatermarkMode").ToLocalChecked(), enumObject);
    Nan::Set(enumObject, Nan::New<String>("automatic").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapWatermarkMode::Automatic)));
    Nan::Set(enumObject, Nan::New<String>("on").ToLocalChecked(), Nan::New<Integer>(static_cast<int>(::Windows::UI::Xaml::Controls::Maps::MapWatermarkMode::On)));
  }

  static bool IsMapZoomLevelRangeJsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    symbol = Nan::New<String>("min").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("max").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    return true;
  }

  ::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange MapZoomLevelRangeFromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    symbol = Nan::New<String>("min").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.Min = Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0);
    }
    
    symbol = Nan::New<String>("max").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.Max = Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0);
    }
    
    return returnValue;
  }

  Local<Value> MapZoomLevelRangeToJsObject(::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();

    Nan::Set(obj, Nan::New<String>("min").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.Min)));
    Nan::Set(obj, Nan::New<String>("max").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.Max)));

    return scope.Escape(obj);
  }

  static bool IsPointJsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    return true;
  }

  ::Windows::Foundation::Point PointFromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Windows::Foundation::Point returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    return returnValue;
  }

  Local<Value> PointToJsObject(::Windows::Foundation::Point value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();


    return scope.Escape(obj);
  }
  static bool IsThicknessJsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    return true;
  }

  ::Windows::UI::Xaml::Thickness ThicknessFromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Windows::UI::Xaml::Thickness returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    return returnValue;
  }

  Local<Value> ThicknessToJsObject(::Windows::UI::Xaml::Thickness value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();


    return scope.Escape(obj);
  }
  static bool IsFontWeightJsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    symbol = Nan::New<String>("weight").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsInt32()) {
        return false;
      }
    }
    
    return true;
  }

  ::Windows::UI::Text::FontWeight FontWeightFromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Windows::UI::Text::FontWeight returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    symbol = Nan::New<String>("weight").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.Weight = static_cast<unsigned short>(Nan::To<int32_t>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0));
    }
    
    return returnValue;
  }

  Local<Value> FontWeightToJsObject(::Windows::UI::Text::FontWeight value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();

    Nan::Set(obj, Nan::New<String>("weight").ToLocalChecked(), Nan::New<Integer>(value.Weight));

    return scope.Escape(obj);
  }
  static bool IsCornerRadiusJsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    return true;
  }

  ::Windows::UI::Xaml::CornerRadius CornerRadiusFromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Windows::UI::Xaml::CornerRadius returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    return returnValue;
  }

  Local<Value> CornerRadiusToJsObject(::Windows::UI::Xaml::CornerRadius value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();


    return scope.Escape(obj);
  }
  static bool IsSizeJsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    return true;
  }

  ::Windows::Foundation::Size SizeFromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Windows::Foundation::Size returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    return returnValue;
  }

  Local<Value> SizeToJsObject(::Windows::Foundation::Size value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();


    return scope.Escape(obj);
  }
  static bool IsVector3JsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    symbol = Nan::New<String>("x").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("y").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("z").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    return true;
  }

  ::Platform::Numerics::Vector3 Vector3FromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Platform::Numerics::Vector3 returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    symbol = Nan::New<String>("x").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.X = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("y").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.Y = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("z").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.Z = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    return returnValue;
  }

  Local<Value> Vector3ToJsObject(::Platform::Numerics::Vector3 value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();

    Nan::Set(obj, Nan::New<String>("x").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.X)));
    Nan::Set(obj, Nan::New<String>("y").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.Y)));
    Nan::Set(obj, Nan::New<String>("z").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.Z)));

    return scope.Escape(obj);
  }
  static bool IsVector2JsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    symbol = Nan::New<String>("x").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("y").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    return true;
  }

  ::Platform::Numerics::Vector2 Vector2FromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Platform::Numerics::Vector2 returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    symbol = Nan::New<String>("x").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.X = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("y").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.Y = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    return returnValue;
  }

  Local<Value> Vector2ToJsObject(::Platform::Numerics::Vector2 value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();

    Nan::Set(obj, Nan::New<String>("x").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.X)));
    Nan::Set(obj, Nan::New<String>("y").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.Y)));

    return scope.Escape(obj);
  }
  static bool IsMatrix4x4JsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    symbol = Nan::New<String>("m11").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m12").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m13").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m14").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m21").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m22").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m23").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m24").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m31").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m32").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m33").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m34").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m41").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m42").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m43").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    symbol = Nan::New<String>("m44").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      if (!Nan::Get(obj,symbol).ToLocalChecked()->IsNumber()) {
        return false;
      }
    }
    
    return true;
  }

  ::Platform::Numerics::Matrix4x4 Matrix4x4FromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Platform::Numerics::Matrix4x4 returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    symbol = Nan::New<String>("m11").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M11 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m12").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M12 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m13").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M13 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m14").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M14 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m21").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M21 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m22").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M22 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m23").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M23 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m24").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M24 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m31").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M31 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m32").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M32 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m33").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M33 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m34").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M34 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m41").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M41 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m42").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M42 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m43").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M43 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    symbol = Nan::New<String>("m44").ToLocalChecked();
    if (Nan::Has(obj, symbol).FromMaybe(false)) {
      returnValue.M44 = static_cast<float>(Nan::To<double>(Nan::Get(obj,symbol).ToLocalChecked()).FromMaybe(0.0));
    }
    
    return returnValue;
  }

  Local<Value> Matrix4x4ToJsObject(::Platform::Numerics::Matrix4x4 value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();

    Nan::Set(obj, Nan::New<String>("m11").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M11)));
    Nan::Set(obj, Nan::New<String>("m12").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M12)));
    Nan::Set(obj, Nan::New<String>("m13").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M13)));
    Nan::Set(obj, Nan::New<String>("m14").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M14)));
    Nan::Set(obj, Nan::New<String>("m21").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M21)));
    Nan::Set(obj, Nan::New<String>("m22").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M22)));
    Nan::Set(obj, Nan::New<String>("m23").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M23)));
    Nan::Set(obj, Nan::New<String>("m24").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M24)));
    Nan::Set(obj, Nan::New<String>("m31").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M31)));
    Nan::Set(obj, Nan::New<String>("m32").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M32)));
    Nan::Set(obj, Nan::New<String>("m33").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M33)));
    Nan::Set(obj, Nan::New<String>("m34").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M34)));
    Nan::Set(obj, Nan::New<String>("m41").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M41)));
    Nan::Set(obj, Nan::New<String>("m42").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M42)));
    Nan::Set(obj, Nan::New<String>("m43").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M43)));
    Nan::Set(obj, Nan::New<String>("m44").ToLocalChecked(), Nan::New<Number>(static_cast<double>(value.M44)));

    return scope.Escape(obj);
  }
  static bool IsColorJsObject(Local<Value> value) {
    if (!value->IsObject()) {
      return false;
    }

    Local<String> symbol;
    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();

    return true;
  }

  ::Windows::UI::Color ColorFromJsObject(Local<Value> value) {
    HandleScope scope;
    ::Windows::UI::Color returnValue;

    if (!value->IsObject()) {
      Nan::ThrowError(Nan::TypeError(NodeRT::Utils::NewString(L"Unexpected type, expected an object")));
      return returnValue;
    }

    Local<Object> obj = Nan::To<Object>(value).ToLocalChecked();
    Local<String> symbol;

    return returnValue;
  }

  Local<Value> ColorToJsObject(::Windows::UI::Color value) {
    EscapableHandleScope scope;

    Local<Object> obj = Nan::New<Object>();


    return scope.Escape(obj);
  }

  class MapTileDataSource : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileDataSource").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTileDataSource").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileDataSource(::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileDataSource *wrapperInstance = new MapTileDataSource(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileDataSource(winRtInstance));
    }





    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ UnwrapMapTileDataSource(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileDataSource::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileDataSource::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ UnwrapMapTileDataSource(Local<Value> value) {
     return MapTileDataSource::Unwrap<MapTileDataSource>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileDataSource(Local<Object> exports) {
    MapTileDataSource::Init(exports);
  }

  class CustomMapTileDataSource : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("CustomMapTileDataSource").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);




          
          Nan::SetPrototypeMethod(localRef,"addListener", AddListener);
          Nan::SetPrototypeMethod(localRef,"on", AddListener);
          Nan::SetPrototypeMethod(localRef,"removeListener", RemoveListener);
          Nan::SetPrototypeMethod(localRef, "off", RemoveListener);

          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("CustomMapTileDataSource").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      CustomMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      CustomMapTileDataSource *wrapperInstance = new CustomMapTileDataSource(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapCustomMapTileDataSource(winRtInstance));
    }





    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void AddListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected arguments are eventName(string),callback(function)")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      Local<Function> callback = info[1].As<Function>();

      ::Windows::Foundation::EventRegistrationToken registrationToken;
      if (NodeRT::Utils::CaseInsenstiveEquals(L"bitmapRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        CustomMapTileDataSource *wrapper = CustomMapTileDataSource::Unwrap<CustomMapTileDataSource>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->BitmapRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^, ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapCustomMapTileDataSource(arg0);
                  wrappedArg1 = WrapMapTileBitmapRequestedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
 else  {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Value> tokenMapVal = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());
      Local<Object> tokenMap;

      if (tokenMapVal.IsEmpty() || Nan::Equals(tokenMapVal, Undefined()).FromMaybe(false)) {
        tokenMap = Nan::New<Object>();
        NodeRT::Utils::SetHiddenValueWithObject(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked(), tokenMap);
      } else {
        tokenMap = Nan::To<Object>(tokenMapVal).ToLocalChecked();
      }

      Nan::Set(tokenMap, info[0], CreateOpaqueWrapper(::Windows::Foundation::PropertyValue::CreateInt64(registrationToken.Value)));
    }

    static void RemoveListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected a string and a callback")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      if ((!NodeRT::Utils::CaseInsenstiveEquals(L"bitmapRequested", str))) {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Function> callback = info[1].As<Function>();
      Local<Value> tokenMap = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());

      if (tokenMap.IsEmpty() || Nan::Equals(tokenMap, Undefined()).FromMaybe(false)) {
        return;
      }

      Local<Value> opaqueWrapperObj =  Nan::Get(Nan::To<Object>(tokenMap).ToLocalChecked(), info[0]).ToLocalChecked();

      if (opaqueWrapperObj.IsEmpty() || Nan::Equals(opaqueWrapperObj,Undefined()).FromMaybe(false)) {
        return;
      }

      OpaqueWrapper *opaqueWrapper = OpaqueWrapper::Unwrap<OpaqueWrapper>(opaqueWrapperObj.As<Object>());

      long long tokenValue = (long long) opaqueWrapper->GetObjectInstance();
      ::Windows::Foundation::EventRegistrationToken registrationToken;
      registrationToken.Value = tokenValue;

      try  {
        if (NodeRT::Utils::CaseInsenstiveEquals(L"bitmapRequested", str)) {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          CustomMapTileDataSource *wrapper = CustomMapTileDataSource::Unwrap<CustomMapTileDataSource>(info.This());
          wrapper->_instance->BitmapRequested::remove(registrationToken);
        }
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }

      Nan::Delete(Nan::To<Object>(tokenMap).ToLocalChecked(), Nan::To<String>(info[0]).ToLocalChecked());
    }
    private:
      ::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapCustomMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ UnwrapCustomMapTileDataSource(Local<Value> value);
  };

  Persistent<FunctionTemplate> CustomMapTileDataSource::s_constructorTemplate;

  v8::Local<v8::Value> WrapCustomMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(CustomMapTileDataSource::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::CustomMapTileDataSource^ UnwrapCustomMapTileDataSource(Local<Value> value) {
     return CustomMapTileDataSource::Unwrap<CustomMapTileDataSource>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitCustomMapTileDataSource(Local<Object> exports) {
    CustomMapTileDataSource::Init(exports);
  }

  class HttpMapTileDataSource : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("HttpMapTileDataSource").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);




          
          Nan::SetPrototypeMethod(localRef,"addListener", AddListener);
          Nan::SetPrototypeMethod(localRef,"on", AddListener);
          Nan::SetPrototypeMethod(localRef,"removeListener", RemoveListener);
          Nan::SetPrototypeMethod(localRef, "off", RemoveListener);

          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("uriFormatString").ToLocalChecked(), UriFormatStringGetter, UriFormatStringSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("allowCaching").ToLocalChecked(), AllowCachingGetter, AllowCachingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("additionalRequestHeaders").ToLocalChecked(), AdditionalRequestHeadersGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("HttpMapTileDataSource").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      HttpMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && info[0]->IsString())
      {
        try {
          Platform::String^ arg0 = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), info[0])));
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      HttpMapTileDataSource *wrapperInstance = new HttpMapTileDataSource(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapHttpMapTileDataSource(winRtInstance));
    }





    static void UriFormatStringGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info.This())) {
        return;
      }

      HttpMapTileDataSource *wrapper = HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->UriFormatString;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void UriFormatStringSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info.This())) {
        return;
      }

      HttpMapTileDataSource *wrapper = HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->UriFormatString = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AllowCachingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info.This())) {
        return;
      }

      HttpMapTileDataSource *wrapper = HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(info.This());

      try  {
        bool result = wrapper->_instance->AllowCaching;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AllowCachingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info.This())) {
        return;
      }

      HttpMapTileDataSource *wrapper = HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->AllowCaching = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AdditionalRequestHeadersGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info.This())) {
        return;
      }

      HttpMapTileDataSource *wrapper = HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(info.This());

      try  {
        ::Windows::Foundation::Collections::IMap<::Platform::String^, ::Platform::String^>^ result = wrapper->_instance->AdditionalRequestHeaders;
        info.GetReturnValue().Set(NodeRT::Collections::MapWrapper<::Platform::String^,::Platform::String^>::CreateMapWrapper(result, 
            [](::Platform::String^ val) -> Local<Value> {
              return NodeRT::Utils::NewString(val->Data());
            },
            [](Local<Value> value) -> bool {
              return value->IsString();
            },
            [](Local<Value> value) -> ::Platform::String^ {
              return ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));
            },
            [](::Platform::String^ val) -> Local<Value> {
              return NodeRT::Utils::NewString(val->Data());
            },
            [](Local<Value> value) -> bool {
              return value->IsString();
            },
            [](Local<Value> value) -> ::Platform::String^ {
              return ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void AddListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected arguments are eventName(string),callback(function)")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      Local<Function> callback = info[1].As<Function>();

      ::Windows::Foundation::EventRegistrationToken registrationToken;
      if (NodeRT::Utils::CaseInsenstiveEquals(L"uriRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        HttpMapTileDataSource *wrapper = HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->UriRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^, ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapHttpMapTileDataSource(arg0);
                  wrappedArg1 = WrapMapTileUriRequestedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
 else  {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Value> tokenMapVal = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());
      Local<Object> tokenMap;

      if (tokenMapVal.IsEmpty() || Nan::Equals(tokenMapVal, Undefined()).FromMaybe(false)) {
        tokenMap = Nan::New<Object>();
        NodeRT::Utils::SetHiddenValueWithObject(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked(), tokenMap);
      } else {
        tokenMap = Nan::To<Object>(tokenMapVal).ToLocalChecked();
      }

      Nan::Set(tokenMap, info[0], CreateOpaqueWrapper(::Windows::Foundation::PropertyValue::CreateInt64(registrationToken.Value)));
    }

    static void RemoveListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected a string and a callback")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      if ((!NodeRT::Utils::CaseInsenstiveEquals(L"uriRequested", str))) {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Function> callback = info[1].As<Function>();
      Local<Value> tokenMap = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());

      if (tokenMap.IsEmpty() || Nan::Equals(tokenMap, Undefined()).FromMaybe(false)) {
        return;
      }

      Local<Value> opaqueWrapperObj =  Nan::Get(Nan::To<Object>(tokenMap).ToLocalChecked(), info[0]).ToLocalChecked();

      if (opaqueWrapperObj.IsEmpty() || Nan::Equals(opaqueWrapperObj,Undefined()).FromMaybe(false)) {
        return;
      }

      OpaqueWrapper *opaqueWrapper = OpaqueWrapper::Unwrap<OpaqueWrapper>(opaqueWrapperObj.As<Object>());

      long long tokenValue = (long long) opaqueWrapper->GetObjectInstance();
      ::Windows::Foundation::EventRegistrationToken registrationToken;
      registrationToken.Value = tokenValue;

      try  {
        if (NodeRT::Utils::CaseInsenstiveEquals(L"uriRequested", str)) {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          HttpMapTileDataSource *wrapper = HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(info.This());
          wrapper->_instance->UriRequested::remove(registrationToken);
        }
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }

      Nan::Delete(Nan::To<Object>(tokenMap).ToLocalChecked(), Nan::To<String>(info[0]).ToLocalChecked());
    }
    private:
      ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapHttpMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ UnwrapHttpMapTileDataSource(Local<Value> value);
  };

  Persistent<FunctionTemplate> HttpMapTileDataSource::s_constructorTemplate;

  v8::Local<v8::Value> WrapHttpMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(HttpMapTileDataSource::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::HttpMapTileDataSource^ UnwrapHttpMapTileDataSource(Local<Value> value) {
     return HttpMapTileDataSource::Unwrap<HttpMapTileDataSource>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitHttpMapTileDataSource(Local<Object> exports) {
    HttpMapTileDataSource::Init(exports);
  }

  class LocalMapTileDataSource : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("LocalMapTileDataSource").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);




          
          Nan::SetPrototypeMethod(localRef,"addListener", AddListener);
          Nan::SetPrototypeMethod(localRef,"on", AddListener);
          Nan::SetPrototypeMethod(localRef,"removeListener", RemoveListener);
          Nan::SetPrototypeMethod(localRef, "off", RemoveListener);

          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("uriFormatString").ToLocalChecked(), UriFormatStringGetter, UriFormatStringSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("LocalMapTileDataSource").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      LocalMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && info[0]->IsString())
      {
        try {
          Platform::String^ arg0 = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), info[0])));
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      LocalMapTileDataSource *wrapperInstance = new LocalMapTileDataSource(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapLocalMapTileDataSource(winRtInstance));
    }





    static void UriFormatStringGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^>(info.This())) {
        return;
      }

      LocalMapTileDataSource *wrapper = LocalMapTileDataSource::Unwrap<LocalMapTileDataSource>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->UriFormatString;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void UriFormatStringSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^>(info.This())) {
        return;
      }

      LocalMapTileDataSource *wrapper = LocalMapTileDataSource::Unwrap<LocalMapTileDataSource>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->UriFormatString = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void AddListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected arguments are eventName(string),callback(function)")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      Local<Function> callback = info[1].As<Function>();

      ::Windows::Foundation::EventRegistrationToken registrationToken;
      if (NodeRT::Utils::CaseInsenstiveEquals(L"uriRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        LocalMapTileDataSource *wrapper = LocalMapTileDataSource::Unwrap<LocalMapTileDataSource>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->UriRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^, ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapLocalMapTileDataSource(arg0);
                  wrappedArg1 = WrapMapTileUriRequestedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
 else  {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Value> tokenMapVal = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());
      Local<Object> tokenMap;

      if (tokenMapVal.IsEmpty() || Nan::Equals(tokenMapVal, Undefined()).FromMaybe(false)) {
        tokenMap = Nan::New<Object>();
        NodeRT::Utils::SetHiddenValueWithObject(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked(), tokenMap);
      } else {
        tokenMap = Nan::To<Object>(tokenMapVal).ToLocalChecked();
      }

      Nan::Set(tokenMap, info[0], CreateOpaqueWrapper(::Windows::Foundation::PropertyValue::CreateInt64(registrationToken.Value)));
    }

    static void RemoveListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected a string and a callback")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      if ((!NodeRT::Utils::CaseInsenstiveEquals(L"uriRequested", str))) {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Function> callback = info[1].As<Function>();
      Local<Value> tokenMap = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());

      if (tokenMap.IsEmpty() || Nan::Equals(tokenMap, Undefined()).FromMaybe(false)) {
        return;
      }

      Local<Value> opaqueWrapperObj =  Nan::Get(Nan::To<Object>(tokenMap).ToLocalChecked(), info[0]).ToLocalChecked();

      if (opaqueWrapperObj.IsEmpty() || Nan::Equals(opaqueWrapperObj,Undefined()).FromMaybe(false)) {
        return;
      }

      OpaqueWrapper *opaqueWrapper = OpaqueWrapper::Unwrap<OpaqueWrapper>(opaqueWrapperObj.As<Object>());

      long long tokenValue = (long long) opaqueWrapper->GetObjectInstance();
      ::Windows::Foundation::EventRegistrationToken registrationToken;
      registrationToken.Value = tokenValue;

      try  {
        if (NodeRT::Utils::CaseInsenstiveEquals(L"uriRequested", str)) {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          LocalMapTileDataSource *wrapper = LocalMapTileDataSource::Unwrap<LocalMapTileDataSource>(info.This());
          wrapper->_instance->UriRequested::remove(registrationToken);
        }
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }

      Nan::Delete(Nan::To<Object>(tokenMap).ToLocalChecked(), Nan::To<String>(info[0]).ToLocalChecked());
    }
    private:
      ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapLocalMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ UnwrapLocalMapTileDataSource(Local<Value> value);
  };

  Persistent<FunctionTemplate> LocalMapTileDataSource::s_constructorTemplate;

  v8::Local<v8::Value> WrapLocalMapTileDataSource(::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(LocalMapTileDataSource::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::LocalMapTileDataSource^ UnwrapLocalMapTileDataSource(Local<Value> value) {
     return LocalMapTileDataSource::Unwrap<LocalMapTileDataSource>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitLocalMapTileDataSource(Local<Object> exports) {
    LocalMapTileDataSource::Init(exports);
  }

  class MapActualCameraChangedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapActualCameraChangedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("camera").ToLocalChecked(), CameraGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("changeReason").ToLocalChecked(), ChangeReasonGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapActualCameraChangedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapActualCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapActualCameraChangedEventArgs *wrapperInstance = new MapActualCameraChangedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapActualCameraChangedEventArgs(winRtInstance));
    }





    static void CameraGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^>(info.This())) {
        return;
      }

      MapActualCameraChangedEventArgs *wrapper = MapActualCameraChangedEventArgs::Unwrap<MapActualCameraChangedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCamera^ result = wrapper->_instance->Camera;
        info.GetReturnValue().Set(WrapMapCamera(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ChangeReasonGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^>(info.This())) {
        return;
      }

      MapActualCameraChangedEventArgs *wrapper = MapActualCameraChangedEventArgs::Unwrap<MapActualCameraChangedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCameraChangeReason result = wrapper->_instance->ChangeReason;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapActualCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ UnwrapMapActualCameraChangedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapActualCameraChangedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapActualCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapActualCameraChangedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ UnwrapMapActualCameraChangedEventArgs(Local<Value> value) {
     return MapActualCameraChangedEventArgs::Unwrap<MapActualCameraChangedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapActualCameraChangedEventArgs(Local<Object> exports) {
    MapActualCameraChangedEventArgs::Init(exports);
  }

  class MapActualCameraChangingEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapActualCameraChangingEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("camera").ToLocalChecked(), CameraGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("changeReason").ToLocalChecked(), ChangeReasonGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapActualCameraChangingEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapActualCameraChangingEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapActualCameraChangingEventArgs *wrapperInstance = new MapActualCameraChangingEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapActualCameraChangingEventArgs(winRtInstance));
    }





    static void CameraGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^>(info.This())) {
        return;
      }

      MapActualCameraChangingEventArgs *wrapper = MapActualCameraChangingEventArgs::Unwrap<MapActualCameraChangingEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCamera^ result = wrapper->_instance->Camera;
        info.GetReturnValue().Set(WrapMapCamera(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ChangeReasonGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^>(info.This())) {
        return;
      }

      MapActualCameraChangingEventArgs *wrapper = MapActualCameraChangingEventArgs::Unwrap<MapActualCameraChangingEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCameraChangeReason result = wrapper->_instance->ChangeReason;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapActualCameraChangingEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ UnwrapMapActualCameraChangingEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapActualCameraChangingEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapActualCameraChangingEventArgs(::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapActualCameraChangingEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ UnwrapMapActualCameraChangingEventArgs(Local<Value> value) {
     return MapActualCameraChangingEventArgs::Unwrap<MapActualCameraChangingEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapActualCameraChangingEventArgs(Local<Object> exports) {
    MapActualCameraChangingEventArgs::Init(exports);
  }

  class MapElement : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElement").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tag").ToLocalChecked(), TagGetter, TagSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntryState").ToLocalChecked(), MapStyleSheetEntryStateGetter, MapStyleSheetEntryStateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntry").ToLocalChecked(), MapStyleSheetEntryGetter, MapStyleSheetEntrySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isEnabled").ToLocalChecked(), IsEnabledGetter, IsEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryProperty").ToLocalChecked(), MapStyleSheetEntryPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryStateProperty").ToLocalChecked(), MapStyleSheetEntryStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tagProperty").ToLocalChecked(), TagPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isEnabledProperty").ToLocalChecked(), IsEnabledPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapElement").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElement(::Windows::UI::Xaml::Controls::Maps::MapElement^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElement^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElement^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElement();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElement *wrapperInstance = new MapElement(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElement^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElement^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElement(winRtInstance));
    }





    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TagGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->Tag;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TagSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Tag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntryState;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntryStateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntryState = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntry;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntrySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntry = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TagPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::TagProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::IsEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElement^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElement(::Windows::UI::Xaml::Controls::Maps::MapElement^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElement^ UnwrapMapElement(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElement::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElement(::Windows::UI::Xaml::Controls::Maps::MapElement^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElement::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElement^ UnwrapMapElement(Local<Value> value) {
     return MapElement::Unwrap<MapElement>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElement(Local<Object> exports) {
    MapElement::Init(exports);
  }

  class MapBillboard : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapBillboard").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("normalizedAnchorPoint").ToLocalChecked(), NormalizedAnchorPointGetter, NormalizedAnchorPointSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter, LocationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("image").ToLocalChecked(), ImageGetter, ImageSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("collisionBehaviorDesired").ToLocalChecked(), CollisionBehaviorDesiredGetter, CollisionBehaviorDesiredSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("referenceCamera").ToLocalChecked(), ReferenceCameraGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tag").ToLocalChecked(), TagGetter, TagSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntryState").ToLocalChecked(), MapStyleSheetEntryStateGetter, MapStyleSheetEntryStateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntry").ToLocalChecked(), MapStyleSheetEntryGetter, MapStyleSheetEntrySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isEnabled").ToLocalChecked(), IsEnabledGetter, IsEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("collisionBehaviorDesiredProperty").ToLocalChecked(), CollisionBehaviorDesiredPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("locationProperty").ToLocalChecked(), LocationPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("normalizedAnchorPointProperty").ToLocalChecked(), NormalizedAnchorPointPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryProperty").ToLocalChecked(), MapStyleSheetEntryPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryStateProperty").ToLocalChecked(), MapStyleSheetEntryStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tagProperty").ToLocalChecked(), TagPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isEnabledProperty").ToLocalChecked(), IsEnabledPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapBillboard").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapBillboard(::Windows::UI::Xaml::Controls::Maps::MapBillboard^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapBillboard^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapBillboard^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info[0]))
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::MapCamera^ arg0 = UnwrapMapCamera(info[0]);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapBillboard(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapBillboard *wrapperInstance = new MapBillboard(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapBillboard^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapBillboard^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapBillboard(winRtInstance));
    }





    static void NormalizedAnchorPointGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->NormalizedAnchorPoint;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void NormalizedAnchorPointSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsPoint(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try {

        ::Windows::Foundation::Point winRtValue = NodeRT::Utils::PointFromJs(value);

        wrapper->_instance->NormalizedAnchorPoint = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try {

        ::Windows::Devices::Geolocation::Geopoint^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Location = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ImageGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try  {
        ::Windows::Storage::Streams::IRandomAccessStreamReference^ result = wrapper->_instance->Image;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Storage.Streams", "IRandomAccessStreamReference", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ImageSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Storage::Streams::IRandomAccessStreamReference^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try {

        ::Windows::Storage::Streams::IRandomAccessStreamReference^ winRtValue = dynamic_cast<::Windows::Storage::Streams::IRandomAccessStreamReference^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Image = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CollisionBehaviorDesiredGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior result = wrapper->_instance->CollisionBehaviorDesired;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CollisionBehaviorDesiredSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->CollisionBehaviorDesired = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ReferenceCameraGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapBillboard^>(info.This())) {
        return;
      }

      MapBillboard *wrapper = MapBillboard::Unwrap<MapBillboard>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCamera^ result = wrapper->_instance->ReferenceCamera;
        info.GetReturnValue().Set(WrapMapCamera(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TagGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->Tag;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TagSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Tag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntryState;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntryStateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntryState = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntry;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntrySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntry = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void CollisionBehaviorDesiredPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapBillboard::CollisionBehaviorDesiredProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LocationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapBillboard::LocationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NormalizedAnchorPointPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapBillboard::NormalizedAnchorPointProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TagPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::TagProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::IsEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapBillboard^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapBillboard(::Windows::UI::Xaml::Controls::Maps::MapBillboard^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapBillboard^ UnwrapMapBillboard(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapBillboard::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapBillboard(::Windows::UI::Xaml::Controls::Maps::MapBillboard^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapBillboard::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapBillboard^ UnwrapMapBillboard(Local<Value> value) {
     return MapBillboard::Unwrap<MapBillboard>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapBillboard(Local<Object> exports) {
    MapBillboard::Init(exports);
  }

  class MapCamera : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapCamera").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("roll").ToLocalChecked(), RollGetter, RollSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("pitch").ToLocalChecked(), PitchGetter, PitchSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter, LocationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("heading").ToLocalChecked(), HeadingGetter, HeadingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("fieldOfView").ToLocalChecked(), FieldOfViewGetter, FieldOfViewSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapCamera").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapCamera(::Windows::UI::Xaml::Controls::Maps::MapCamera^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapCamera^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapCamera^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0]))
      {
        try {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapCamera(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber())
      {
        try {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapCamera(arg0,arg1);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 3
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber())
      {
        try {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          double arg2 = Nan::To<double>(info[2]).FromMaybe(0.0);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapCamera(arg0,arg1,arg2);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 5
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber()
        && info[3]->IsNumber()
        && info[4]->IsNumber())
      {
        try {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          double arg2 = Nan::To<double>(info[2]).FromMaybe(0.0);
          double arg3 = Nan::To<double>(info[3]).FromMaybe(0.0);
          double arg4 = Nan::To<double>(info[4]).FromMaybe(0.0);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapCamera(arg0,arg1,arg2,arg3,arg4);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapCamera *wrapperInstance = new MapCamera(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapCamera^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapCamera^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapCamera(winRtInstance));
    }





    static void RollGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try  {
        double result = wrapper->_instance->Roll;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RollSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Roll = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void PitchGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try  {
        double result = wrapper->_instance->Pitch;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PitchSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Pitch = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try {

        ::Windows::Devices::Geolocation::Geopoint^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Location = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void HeadingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try  {
        double result = wrapper->_instance->Heading;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void HeadingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Heading = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FieldOfViewGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try  {
        double result = wrapper->_instance->FieldOfView;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FieldOfViewSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info.This())) {
        return;
      }

      MapCamera *wrapper = MapCamera::Unwrap<MapCamera>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->FieldOfView = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapCamera^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapCamera(::Windows::UI::Xaml::Controls::Maps::MapCamera^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapCamera^ UnwrapMapCamera(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapCamera::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapCamera(::Windows::UI::Xaml::Controls::Maps::MapCamera^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapCamera::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapCamera^ UnwrapMapCamera(Local<Value> value) {
     return MapCamera::Unwrap<MapCamera>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapCamera(Local<Object> exports) {
    MapCamera::Init(exports);
  }

  class MapContextRequestedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapContextRequestedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElements").ToLocalChecked(), MapElementsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapContextRequestedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapContextRequestedEventArgs *wrapperInstance = new MapContextRequestedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapContextRequestedEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^>(info.This())) {
        return;
      }

      MapContextRequestedEventArgs *wrapper = MapContextRequestedEventArgs::Unwrap<MapContextRequestedEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^>(info.This())) {
        return;
      }

      MapContextRequestedEventArgs *wrapper = MapContextRequestedEventArgs::Unwrap<MapContextRequestedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVectorView<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result = wrapper->_instance->MapElements;
        info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorViewWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^>(info.This())) {
        return;
      }

      MapContextRequestedEventArgs *wrapper = MapContextRequestedEventArgs::Unwrap<MapContextRequestedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ UnwrapMapContextRequestedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapContextRequestedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapContextRequestedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ UnwrapMapContextRequestedEventArgs(Local<Value> value) {
     return MapContextRequestedEventArgs::Unwrap<MapContextRequestedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapContextRequestedEventArgs(Local<Object> exports) {
    MapContextRequestedEventArgs::Init(exports);
  }

  class MapControl : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControl").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);

        Local<Function> func;
        Local<FunctionTemplate> funcTemplate;

          
            Nan::SetPrototypeMethod(localRef, "getVisibleRegion", GetVisibleRegion);
            Nan::SetPrototypeMethod(localRef, "findMapElementsAtOffset", FindMapElementsAtOffset);
            Nan::SetPrototypeMethod(localRef, "getLocationFromOffset", GetLocationFromOffset);
            Nan::SetPrototypeMethod(localRef, "startContinuousPan", StartContinuousPan);
            Nan::SetPrototypeMethod(localRef, "stopContinuousPan", StopContinuousPan);
            Nan::SetPrototypeMethod(localRef, "tryGetLocationFromOffset", TryGetLocationFromOffset);
            Nan::SetPrototypeMethod(localRef, "getOffsetFromLocation", GetOffsetFromLocation);
            Nan::SetPrototypeMethod(localRef, "isLocationInView", IsLocationInView);
            Nan::SetPrototypeMethod(localRef, "startContinuousRotate", StartContinuousRotate);
            Nan::SetPrototypeMethod(localRef, "stopContinuousRotate", StopContinuousRotate);
            Nan::SetPrototypeMethod(localRef, "startContinuousTilt", StartContinuousTilt);
            Nan::SetPrototypeMethod(localRef, "stopContinuousTilt", StopContinuousTilt);
            Nan::SetPrototypeMethod(localRef, "startContinuousZoom", StartContinuousZoom);
            Nan::SetPrototypeMethod(localRef, "stopContinuousZoom", StopContinuousZoom);
          

          
            Nan::SetPrototypeMethod(localRef, "tryTiltAsync", TryTiltAsync);
            Nan::SetPrototypeMethod(localRef, "tryTiltToAsync", TryTiltToAsync);
            Nan::SetPrototypeMethod(localRef, "tryZoomInAsync", TryZoomInAsync);
            Nan::SetPrototypeMethod(localRef, "tryZoomOutAsync", TryZoomOutAsync);
            Nan::SetPrototypeMethod(localRef, "tryZoomToAsync", TryZoomToAsync);
            Nan::SetPrototypeMethod(localRef, "trySetSceneAsync", TrySetSceneAsync);
            Nan::SetPrototypeMethod(localRef, "tryPanAsync", TryPanAsync);
            Nan::SetPrototypeMethod(localRef, "tryPanToAsync", TryPanToAsync);
            Nan::SetPrototypeMethod(localRef, "trySetViewBoundsAsync", TrySetViewBoundsAsync);
            Nan::SetPrototypeMethod(localRef, "trySetViewAsync", TrySetViewAsync);
            Nan::SetPrototypeMethod(localRef, "tryRotateAsync", TryRotateAsync);
            Nan::SetPrototypeMethod(localRef, "tryRotateToAsync", TryRotateToAsync);
          

          
          Nan::SetPrototypeMethod(localRef,"addListener", AddListener);
          Nan::SetPrototypeMethod(localRef,"on", AddListener);
          Nan::SetPrototypeMethod(localRef,"removeListener", RemoveListener);
          Nan::SetPrototypeMethod(localRef, "off", RemoveListener);

          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zoomLevel").ToLocalChecked(), ZoomLevelGetter, ZoomLevelSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("watermarkMode").ToLocalChecked(), WatermarkModeGetter, WatermarkModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transformOrigin").ToLocalChecked(), TransformOriginGetter, TransformOriginSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("trafficFlowVisible").ToLocalChecked(), TrafficFlowVisibleGetter, TrafficFlowVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("style").ToLocalChecked(), StyleGetter, StyleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("pedestrianFeaturesVisible").ToLocalChecked(), PedestrianFeaturesVisibleGetter, PedestrianFeaturesVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapServiceToken").ToLocalChecked(), MapServiceTokenGetter, MapServiceTokenSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("center").ToLocalChecked(), CenterGetter, CenterSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("heading").ToLocalChecked(), HeadingGetter, HeadingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("desiredPitch").ToLocalChecked(), DesiredPitchGetter, DesiredPitchSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("colorScheme").ToLocalChecked(), ColorSchemeGetter, ColorSchemeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("landmarksVisible").ToLocalChecked(), LandmarksVisibleGetter, LandmarksVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("children").ToLocalChecked(), ChildrenGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("loadingStatus").ToLocalChecked(), LoadingStatusGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElements").ToLocalChecked(), MapElementsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("maxZoomLevel").ToLocalChecked(), MaxZoomLevelGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("minZoomLevel").ToLocalChecked(), MinZoomLevelGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("pitch").ToLocalChecked(), PitchGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("routes").ToLocalChecked(), RoutesGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tileSources").ToLocalChecked(), TileSourcesGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("rotateInteractionMode").ToLocalChecked(), RotateInteractionModeGetter, RotateInteractionModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zoomInteractionMode").ToLocalChecked(), ZoomInteractionModeGetter, ZoomInteractionModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transitFeaturesVisible").ToLocalChecked(), TransitFeaturesVisibleGetter, TransitFeaturesVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tiltInteractionMode").ToLocalChecked(), TiltInteractionModeGetter, TiltInteractionModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("scene").ToLocalChecked(), SceneGetter, SceneSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("businessLandmarksVisible").ToLocalChecked(), BusinessLandmarksVisibleGetter, BusinessLandmarksVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("panInteractionMode").ToLocalChecked(), PanInteractionModeGetter, PanInteractionModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("customExperience").ToLocalChecked(), CustomExperienceGetter, CustomExperienceSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("actualCamera").ToLocalChecked(), ActualCameraGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("is3DSupported").ToLocalChecked(), Is3DSupportedGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isStreetsideSupported").ToLocalChecked(), IsStreetsideSupportedGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("targetCamera").ToLocalChecked(), TargetCameraGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transitFeaturesEnabled").ToLocalChecked(), TransitFeaturesEnabledGetter, TransitFeaturesEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("businessLandmarksEnabled").ToLocalChecked(), BusinessLandmarksEnabledGetter, BusinessLandmarksEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("viewPadding").ToLocalChecked(), ViewPaddingGetter, ViewPaddingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("styleSheet").ToLocalChecked(), StyleSheetGetter, StyleSheetSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapProjection").ToLocalChecked(), MapProjectionGetter, MapProjectionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("layers").ToLocalChecked(), LayersGetter, LayersSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("region").ToLocalChecked(), RegionGetter, RegionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("canTiltDown").ToLocalChecked(), CanTiltDownGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("canTiltUp").ToLocalChecked(), CanTiltUpGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("canZoomIn").ToLocalChecked(), CanZoomInGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("canZoomOut").ToLocalChecked(), CanZoomOutGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("padding").ToLocalChecked(), PaddingGetter, PaddingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isTabStop").ToLocalChecked(), IsTabStopGetter, IsTabStopSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isEnabled").ToLocalChecked(), IsEnabledGetter, IsEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("horizontalContentAlignment").ToLocalChecked(), HorizontalContentAlignmentGetter, HorizontalContentAlignmentSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("foreground").ToLocalChecked(), ForegroundGetter, ForegroundSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("fontWeight").ToLocalChecked(), FontWeightGetter, FontWeightSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("fontStyle").ToLocalChecked(), FontStyleGetter, FontStyleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("fontStretch").ToLocalChecked(), FontStretchGetter, FontStretchSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("fontSize").ToLocalChecked(), FontSizeGetter, FontSizeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("fontFamily").ToLocalChecked(), FontFamilyGetter, FontFamilySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tabIndex").ToLocalChecked(), TabIndexGetter, TabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("characterSpacing").ToLocalChecked(), CharacterSpacingGetter, CharacterSpacingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("borderThickness").ToLocalChecked(), BorderThicknessGetter, BorderThicknessSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("borderBrush").ToLocalChecked(), BorderBrushGetter, BorderBrushSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tabNavigation").ToLocalChecked(), TabNavigationGetter, TabNavigationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("background").ToLocalChecked(), BackgroundGetter, BackgroundSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("verticalContentAlignment").ToLocalChecked(), VerticalContentAlignmentGetter, VerticalContentAlignmentSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("template").ToLocalChecked(), TemplateGetter, TemplateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("focusState").ToLocalChecked(), FocusStateGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isTextScaleFactorEnabled").ToLocalChecked(), IsTextScaleFactorEnabledGetter, IsTextScaleFactorEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("useSystemFocusVisuals").ToLocalChecked(), UseSystemFocusVisualsGetter, UseSystemFocusVisualsSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusUp").ToLocalChecked(), XYFocusUpGetter, XYFocusUpSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusRight").ToLocalChecked(), XYFocusRightGetter, XYFocusRightSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusLeft").ToLocalChecked(), XYFocusLeftGetter, XYFocusLeftSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusDown").ToLocalChecked(), XYFocusDownGetter, XYFocusDownSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("requiresPointer").ToLocalChecked(), RequiresPointerGetter, RequiresPointerSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isFocusEngagementEnabled").ToLocalChecked(), IsFocusEngagementEnabledGetter, IsFocusEngagementEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isFocusEngaged").ToLocalChecked(), IsFocusEngagedGetter, IsFocusEngagedSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("elementSoundMode").ToLocalChecked(), ElementSoundModeGetter, ElementSoundModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("defaultStyleResourceUri").ToLocalChecked(), DefaultStyleResourceUriGetter, DefaultStyleResourceUriSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("cornerRadius").ToLocalChecked(), CornerRadiusGetter, CornerRadiusSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("backgroundSizing").ToLocalChecked(), BackgroundSizingGetter, BackgroundSizingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("width").ToLocalChecked(), WidthGetter, WidthSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("verticalAlignment").ToLocalChecked(), VerticalAlignmentGetter, VerticalAlignmentSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tag").ToLocalChecked(), TagGetter, TagSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("style").ToLocalChecked(), StyleGetter, StyleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("resources").ToLocalChecked(), ResourcesGetter, ResourcesSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("name").ToLocalChecked(), NameGetter, NameSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("minWidth").ToLocalChecked(), MinWidthGetter, MinWidthSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("minHeight").ToLocalChecked(), MinHeightGetter, MinHeightSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("maxWidth").ToLocalChecked(), MaxWidthGetter, MaxWidthSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("maxHeight").ToLocalChecked(), MaxHeightGetter, MaxHeightSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("margin").ToLocalChecked(), MarginGetter, MarginSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("language").ToLocalChecked(), LanguageGetter, LanguageSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("horizontalAlignment").ToLocalChecked(), HorizontalAlignmentGetter, HorizontalAlignmentSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("height").ToLocalChecked(), HeightGetter, HeightSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("flowDirection").ToLocalChecked(), FlowDirectionGetter, FlowDirectionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dataContext").ToLocalChecked(), DataContextGetter, DataContextSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("actualHeight").ToLocalChecked(), ActualHeightGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("actualWidth").ToLocalChecked(), ActualWidthGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("baseUri").ToLocalChecked(), BaseUriGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("parent").ToLocalChecked(), ParentGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("triggers").ToLocalChecked(), TriggersGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("requestedTheme").ToLocalChecked(), RequestedThemeGetter, RequestedThemeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("focusVisualSecondaryThickness").ToLocalChecked(), FocusVisualSecondaryThicknessGetter, FocusVisualSecondaryThicknessSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("focusVisualSecondaryBrush").ToLocalChecked(), FocusVisualSecondaryBrushGetter, FocusVisualSecondaryBrushSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("focusVisualPrimaryThickness").ToLocalChecked(), FocusVisualPrimaryThicknessGetter, FocusVisualPrimaryThicknessSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("focusVisualPrimaryBrush").ToLocalChecked(), FocusVisualPrimaryBrushGetter, FocusVisualPrimaryBrushSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("focusVisualMargin").ToLocalChecked(), FocusVisualMarginGetter, FocusVisualMarginSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("allowFocusWhenDisabled").ToLocalChecked(), AllowFocusWhenDisabledGetter, AllowFocusWhenDisabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("allowFocusOnInteraction").ToLocalChecked(), AllowFocusOnInteractionGetter, AllowFocusOnInteractionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("actualTheme").ToLocalChecked(), ActualThemeGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isLoaded").ToLocalChecked(), IsLoadedGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transitions").ToLocalChecked(), TransitionsGetter, TransitionsSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("projection").ToLocalChecked(), ProjectionGetter, ProjectionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("renderTransformOrigin").ToLocalChecked(), RenderTransformOriginGetter, RenderTransformOriginSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("opacity").ToLocalChecked(), OpacityGetter, OpacitySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("manipulationMode").ToLocalChecked(), ManipulationModeGetter, ManipulationModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isTapEnabled").ToLocalChecked(), IsTapEnabledGetter, IsTapEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isRightTapEnabled").ToLocalChecked(), IsRightTapEnabledGetter, IsRightTapEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isHoldingEnabled").ToLocalChecked(), IsHoldingEnabledGetter, IsHoldingEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isHitTestVisible").ToLocalChecked(), IsHitTestVisibleGetter, IsHitTestVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isDoubleTapEnabled").ToLocalChecked(), IsDoubleTapEnabledGetter, IsDoubleTapEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("allowDrop").ToLocalChecked(), AllowDropGetter, AllowDropSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("clip").ToLocalChecked(), ClipGetter, ClipSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("cacheMode").ToLocalChecked(), CacheModeGetter, CacheModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("useLayoutRounding").ToLocalChecked(), UseLayoutRoundingGetter, UseLayoutRoundingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("renderTransform").ToLocalChecked(), RenderTransformGetter, RenderTransformSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visibility").ToLocalChecked(), VisibilityGetter, VisibilitySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("desiredSize").ToLocalChecked(), DesiredSizeGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("pointerCaptures").ToLocalChecked(), PointerCapturesGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("renderSize").ToLocalChecked(), RenderSizeGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xamlRoot").ToLocalChecked(), XamlRootGetter, XamlRootSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("shadow").ToLocalChecked(), ShadowGetter, ShadowSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("actualOffset").ToLocalChecked(), ActualOffsetGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("actualSize").ToLocalChecked(), ActualSizeGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("uIContext").ToLocalChecked(), UIContextGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("compositeMode").ToLocalChecked(), CompositeModeGetter, CompositeModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transform3D").ToLocalChecked(), Transform3DGetter, Transform3DSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("canDrag").ToLocalChecked(), CanDragGetter, CanDragSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isAccessKeyScope").ToLocalChecked(), IsAccessKeyScopeGetter, IsAccessKeyScopeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("exitDisplayModeOnAccessKeyInvoked").ToLocalChecked(), ExitDisplayModeOnAccessKeyInvokedGetter, ExitDisplayModeOnAccessKeyInvokedSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("contextFlyout").ToLocalChecked(), ContextFlyoutGetter, ContextFlyoutSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("accessKeyScopeOwner").ToLocalChecked(), AccessKeyScopeOwnerGetter, AccessKeyScopeOwnerSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("accessKey").ToLocalChecked(), AccessKeyGetter, AccessKeySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("keyTipHorizontalOffset").ToLocalChecked(), KeyTipHorizontalOffsetGetter, KeyTipHorizontalOffsetSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("highContrastAdjustment").ToLocalChecked(), HighContrastAdjustmentGetter, HighContrastAdjustmentSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusRightNavigationStrategy").ToLocalChecked(), XYFocusRightNavigationStrategyGetter, XYFocusRightNavigationStrategySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusKeyboardNavigation").ToLocalChecked(), XYFocusKeyboardNavigationGetter, XYFocusKeyboardNavigationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusDownNavigationStrategy").ToLocalChecked(), XYFocusDownNavigationStrategyGetter, XYFocusDownNavigationStrategySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tabFocusNavigation").ToLocalChecked(), TabFocusNavigationGetter, TabFocusNavigationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("keyTipVerticalOffset").ToLocalChecked(), KeyTipVerticalOffsetGetter, KeyTipVerticalOffsetSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusUpNavigationStrategy").ToLocalChecked(), XYFocusUpNavigationStrategyGetter, XYFocusUpNavigationStrategySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("keyTipPlacementMode").ToLocalChecked(), KeyTipPlacementModeGetter, KeyTipPlacementModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("xYFocusLeftNavigationStrategy").ToLocalChecked(), XYFocusLeftNavigationStrategyGetter, XYFocusLeftNavigationStrategySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("lights").ToLocalChecked(), LightsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("keyboardAccelerators").ToLocalChecked(), KeyboardAcceleratorsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("keyboardAcceleratorPlacementTarget").ToLocalChecked(), KeyboardAcceleratorPlacementTargetGetter, KeyboardAcceleratorPlacementTargetSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("keyboardAcceleratorPlacementMode").ToLocalChecked(), KeyboardAcceleratorPlacementModeGetter, KeyboardAcceleratorPlacementModeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("keyTipTarget").ToLocalChecked(), KeyTipTargetGetter, KeyTipTargetSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("translationTransition").ToLocalChecked(), TranslationTransitionGetter, TranslationTransitionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("opacityTransition").ToLocalChecked(), OpacityTransitionGetter, OpacityTransitionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transformMatrix").ToLocalChecked(), TransformMatrixGetter, TransformMatrixSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("scaleTransition").ToLocalChecked(), ScaleTransitionGetter, ScaleTransitionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("scale").ToLocalChecked(), ScaleGetter, ScaleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("rotationTransition").ToLocalChecked(), RotationTransitionGetter, RotationTransitionSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("rotationAxis").ToLocalChecked(), RotationAxisGetter, RotationAxisSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("rotation").ToLocalChecked(), RotationGetter, RotationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("translation").ToLocalChecked(), TranslationGetter, TranslationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("centerPoint").ToLocalChecked(), CenterPointGetter, CenterPointSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("canBeScrollAnchor").ToLocalChecked(), CanBeScrollAnchorGetter, CanBeScrollAnchorSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetMethod(constructor, "getLocation", GetLocation);
        Nan::SetMethod(constructor, "setLocation", SetLocation);
        Nan::SetMethod(constructor, "getNormalizedAnchorPoint", GetNormalizedAnchorPoint);
        Nan::SetMethod(constructor, "setNormalizedAnchorPoint", SetNormalizedAnchorPoint);
        Nan::SetAccessor(constructor, Nan::New<String>("centerProperty").ToLocalChecked(), CenterPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zoomLevelProperty").ToLocalChecked(), ZoomLevelPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("childrenProperty").ToLocalChecked(), ChildrenPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("colorSchemeProperty").ToLocalChecked(), ColorSchemePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("desiredPitchProperty").ToLocalChecked(), DesiredPitchPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("headingProperty").ToLocalChecked(), HeadingPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("landmarksVisibleProperty").ToLocalChecked(), LandmarksVisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("loadingStatusProperty").ToLocalChecked(), LoadingStatusPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("locationProperty").ToLocalChecked(), LocationPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapElementsProperty").ToLocalChecked(), MapElementsPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapServiceTokenProperty").ToLocalChecked(), MapServiceTokenPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("normalizedAnchorPointProperty").ToLocalChecked(), NormalizedAnchorPointPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pedestrianFeaturesVisibleProperty").ToLocalChecked(), PedestrianFeaturesVisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pitchProperty").ToLocalChecked(), PitchPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("routesProperty").ToLocalChecked(), RoutesPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("styleProperty").ToLocalChecked(), StylePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tileSourcesProperty").ToLocalChecked(), TileSourcesPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("trafficFlowVisibleProperty").ToLocalChecked(), TrafficFlowVisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transformOriginProperty").ToLocalChecked(), TransformOriginPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("watermarkModeProperty").ToLocalChecked(), WatermarkModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("businessLandmarksVisibleProperty").ToLocalChecked(), BusinessLandmarksVisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("is3DSupportedProperty").ToLocalChecked(), Is3DSupportedPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isStreetsideSupportedProperty").ToLocalChecked(), IsStreetsideSupportedPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("panInteractionModeProperty").ToLocalChecked(), PanInteractionModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("rotateInteractionModeProperty").ToLocalChecked(), RotateInteractionModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("sceneProperty").ToLocalChecked(), ScenePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tiltInteractionModeProperty").ToLocalChecked(), TiltInteractionModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transitFeaturesVisibleProperty").ToLocalChecked(), TransitFeaturesVisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zoomInteractionModeProperty").ToLocalChecked(), ZoomInteractionModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("businessLandmarksEnabledProperty").ToLocalChecked(), BusinessLandmarksEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transitFeaturesEnabledProperty").ToLocalChecked(), TransitFeaturesEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapProjectionProperty").ToLocalChecked(), MapProjectionPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("styleSheetProperty").ToLocalChecked(), StyleSheetPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("viewPaddingProperty").ToLocalChecked(), ViewPaddingPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("layersProperty").ToLocalChecked(), LayersPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("regionProperty").ToLocalChecked(), RegionPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("canTiltUpProperty").ToLocalChecked(), CanTiltUpPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("canZoomInProperty").ToLocalChecked(), CanZoomInPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("canZoomOutProperty").ToLocalChecked(), CanZoomOutPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("canTiltDownProperty").ToLocalChecked(), CanTiltDownPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("borderThicknessProperty").ToLocalChecked(), BorderThicknessPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("focusStateProperty").ToLocalChecked(), FocusStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("fontFamilyProperty").ToLocalChecked(), FontFamilyPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("fontSizeProperty").ToLocalChecked(), FontSizePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("fontStretchProperty").ToLocalChecked(), FontStretchPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("fontStyleProperty").ToLocalChecked(), FontStylePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("fontWeightProperty").ToLocalChecked(), FontWeightPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("foregroundProperty").ToLocalChecked(), ForegroundPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("horizontalContentAlignmentProperty").ToLocalChecked(), HorizontalContentAlignmentPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isEnabledProperty").ToLocalChecked(), IsEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isTabStopProperty").ToLocalChecked(), IsTabStopPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("paddingProperty").ToLocalChecked(), PaddingPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tabIndexProperty").ToLocalChecked(), TabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tabNavigationProperty").ToLocalChecked(), TabNavigationPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("templateProperty").ToLocalChecked(), TemplatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("backgroundProperty").ToLocalChecked(), BackgroundPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("borderBrushProperty").ToLocalChecked(), BorderBrushPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("verticalContentAlignmentProperty").ToLocalChecked(), VerticalContentAlignmentPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("characterSpacingProperty").ToLocalChecked(), CharacterSpacingPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("defaultStyleKeyProperty").ToLocalChecked(), DefaultStyleKeyPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isTextScaleFactorEnabledProperty").ToLocalChecked(), IsTextScaleFactorEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isTemplateFocusTargetProperty").ToLocalChecked(), IsTemplateFocusTargetPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("useSystemFocusVisualsProperty").ToLocalChecked(), UseSystemFocusVisualsPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("elementSoundModeProperty").ToLocalChecked(), ElementSoundModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isFocusEngagedProperty").ToLocalChecked(), IsFocusEngagedPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isFocusEngagementEnabledProperty").ToLocalChecked(), IsFocusEngagementEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("requiresPointerProperty").ToLocalChecked(), RequiresPointerPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusDownProperty").ToLocalChecked(), XYFocusDownPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusLeftProperty").ToLocalChecked(), XYFocusLeftPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusRightProperty").ToLocalChecked(), XYFocusRightPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusUpProperty").ToLocalChecked(), XYFocusUpPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("defaultStyleResourceUriProperty").ToLocalChecked(), DefaultStyleResourceUriPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isTemplateKeyTipTargetProperty").ToLocalChecked(), IsTemplateKeyTipTargetPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("cornerRadiusProperty").ToLocalChecked(), CornerRadiusPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("backgroundSizingProperty").ToLocalChecked(), BackgroundSizingPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("actualHeightProperty").ToLocalChecked(), ActualHeightPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("actualWidthProperty").ToLocalChecked(), ActualWidthPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("dataContextProperty").ToLocalChecked(), DataContextPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("flowDirectionProperty").ToLocalChecked(), FlowDirectionPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("heightProperty").ToLocalChecked(), HeightPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("horizontalAlignmentProperty").ToLocalChecked(), HorizontalAlignmentPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("languageProperty").ToLocalChecked(), LanguagePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("marginProperty").ToLocalChecked(), MarginPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("maxHeightProperty").ToLocalChecked(), MaxHeightPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("maxWidthProperty").ToLocalChecked(), MaxWidthPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("minHeightProperty").ToLocalChecked(), MinHeightPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("minWidthProperty").ToLocalChecked(), MinWidthPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("nameProperty").ToLocalChecked(), NamePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tagProperty").ToLocalChecked(), TagPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("verticalAlignmentProperty").ToLocalChecked(), VerticalAlignmentPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("widthProperty").ToLocalChecked(), WidthPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("requestedThemeProperty").ToLocalChecked(), RequestedThemePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("allowFocusOnInteractionProperty").ToLocalChecked(), AllowFocusOnInteractionPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("allowFocusWhenDisabledProperty").ToLocalChecked(), AllowFocusWhenDisabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("focusVisualMarginProperty").ToLocalChecked(), FocusVisualMarginPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("focusVisualPrimaryBrushProperty").ToLocalChecked(), FocusVisualPrimaryBrushPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("focusVisualPrimaryThicknessProperty").ToLocalChecked(), FocusVisualPrimaryThicknessPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("focusVisualSecondaryBrushProperty").ToLocalChecked(), FocusVisualSecondaryBrushPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("focusVisualSecondaryThicknessProperty").ToLocalChecked(), FocusVisualSecondaryThicknessPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("actualThemeProperty").ToLocalChecked(), ActualThemePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("holdingEvent").ToLocalChecked(), HoldingEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isDoubleTapEnabledProperty").ToLocalChecked(), IsDoubleTapEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isHitTestVisibleProperty").ToLocalChecked(), IsHitTestVisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isHoldingEnabledProperty").ToLocalChecked(), IsHoldingEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isRightTapEnabledProperty").ToLocalChecked(), IsRightTapEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyDownEvent").ToLocalChecked(), KeyDownEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyUpEvent").ToLocalChecked(), KeyUpEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("manipulationCompletedEvent").ToLocalChecked(), ManipulationCompletedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("manipulationDeltaEvent").ToLocalChecked(), ManipulationDeltaEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isTapEnabledProperty").ToLocalChecked(), IsTapEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("manipulationInertiaStartingEvent").ToLocalChecked(), ManipulationInertiaStartingEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("manipulationModeProperty").ToLocalChecked(), ManipulationModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("manipulationStartedEvent").ToLocalChecked(), ManipulationStartedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("manipulationStartingEvent").ToLocalChecked(), ManipulationStartingEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("opacityProperty").ToLocalChecked(), OpacityPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerCanceledEvent").ToLocalChecked(), PointerCanceledEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerCaptureLostEvent").ToLocalChecked(), PointerCaptureLostEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerCapturesProperty").ToLocalChecked(), PointerCapturesPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerEnteredEvent").ToLocalChecked(), PointerEnteredEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerExitedEvent").ToLocalChecked(), PointerExitedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerMovedEvent").ToLocalChecked(), PointerMovedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerPressedEvent").ToLocalChecked(), PointerPressedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerWheelChangedEvent").ToLocalChecked(), PointerWheelChangedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("projectionProperty").ToLocalChecked(), ProjectionPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("renderTransformOriginProperty").ToLocalChecked(), RenderTransformOriginPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("renderTransformProperty").ToLocalChecked(), RenderTransformPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("rightTappedEvent").ToLocalChecked(), RightTappedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("dragEnterEvent").ToLocalChecked(), DragEnterEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tappedEvent").ToLocalChecked(), TappedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transitionsProperty").ToLocalChecked(), TransitionsPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("useLayoutRoundingProperty").ToLocalChecked(), UseLayoutRoundingPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibilityProperty").ToLocalChecked(), VisibilityPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("allowDropProperty").ToLocalChecked(), AllowDropPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("cacheModeProperty").ToLocalChecked(), CacheModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("clipProperty").ToLocalChecked(), ClipPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("doubleTappedEvent").ToLocalChecked(), DoubleTappedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointerReleasedEvent").ToLocalChecked(), PointerReleasedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("dragLeaveEvent").ToLocalChecked(), DragLeaveEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("dragOverEvent").ToLocalChecked(), DragOverEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("dropEvent").ToLocalChecked(), DropEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("shadowProperty").ToLocalChecked(), ShadowPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("compositeModeProperty").ToLocalChecked(), CompositeModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("canDragProperty").ToLocalChecked(), CanDragPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transform3DProperty").ToLocalChecked(), Transform3DPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("accessKeyProperty").ToLocalChecked(), AccessKeyPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("accessKeyScopeOwnerProperty").ToLocalChecked(), AccessKeyScopeOwnerPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("contextFlyoutProperty").ToLocalChecked(), ContextFlyoutPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isAccessKeyScopeProperty").ToLocalChecked(), IsAccessKeyScopePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("exitDisplayModeOnAccessKeyInvokedProperty").ToLocalChecked(), ExitDisplayModeOnAccessKeyInvokedPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("highContrastAdjustmentProperty").ToLocalChecked(), HighContrastAdjustmentPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyTipHorizontalOffsetProperty").ToLocalChecked(), KeyTipHorizontalOffsetPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyTipPlacementModeProperty").ToLocalChecked(), KeyTipPlacementModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyTipVerticalOffsetProperty").ToLocalChecked(), KeyTipVerticalOffsetPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("lightsProperty").ToLocalChecked(), LightsPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusDownNavigationStrategyProperty").ToLocalChecked(), XYFocusDownNavigationStrategyPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusKeyboardNavigationProperty").ToLocalChecked(), XYFocusKeyboardNavigationPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusLeftNavigationStrategyProperty").ToLocalChecked(), XYFocusLeftNavigationStrategyPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusRightNavigationStrategyProperty").ToLocalChecked(), XYFocusRightNavigationStrategyPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("xYFocusUpNavigationStrategyProperty").ToLocalChecked(), XYFocusUpNavigationStrategyPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tabFocusNavigationProperty").ToLocalChecked(), TabFocusNavigationPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("gettingFocusEvent").ToLocalChecked(), GettingFocusEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("losingFocusEvent").ToLocalChecked(), LosingFocusEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("noFocusCandidateFoundEvent").ToLocalChecked(), NoFocusCandidateFoundEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("characterReceivedEvent").ToLocalChecked(), CharacterReceivedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("previewKeyDownEvent").ToLocalChecked(), PreviewKeyDownEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("previewKeyUpEvent").ToLocalChecked(), PreviewKeyUpEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("bringIntoViewRequestedEvent").ToLocalChecked(), BringIntoViewRequestedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("contextRequestedEvent").ToLocalChecked(), ContextRequestedEventGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyTipTargetProperty").ToLocalChecked(), KeyTipTargetPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyboardAcceleratorPlacementModeProperty").ToLocalChecked(), KeyboardAcceleratorPlacementModePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("keyboardAcceleratorPlacementTargetProperty").ToLocalChecked(), KeyboardAcceleratorPlacementTargetPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("canBeScrollAnchorProperty").ToLocalChecked(), CanBeScrollAnchorPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapControl").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControl(::Windows::UI::Xaml::Controls::Maps::MapControl^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControl^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControl^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControl();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControl *wrapperInstance = new MapControl(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControl^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControl^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControl(winRtInstance));
    }

    static void TryTiltAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          op = wrapper->_instance->TryTiltAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryTiltToAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          op = wrapper->_instance->TryTiltToAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryZoomInAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 1)
      {
        try
        {
          op = wrapper->_instance->TryZoomInAsync();
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryZoomOutAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 1)
      {
        try
        {
          op = wrapper->_instance->TryZoomOutAsync();
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryZoomToAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          op = wrapper->_instance->TryZoomToAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TrySetSceneAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(info[0]))
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ arg0 = UnwrapMapScene(info[0]);
          
          op = wrapper->_instance->TrySetSceneAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 3
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(info[0])
        && info[1]->IsInt32())
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ arg0 = UnwrapMapScene(info[0]);
          ::Windows::UI::Xaml::Controls::Maps::MapAnimationKind arg1 = static_cast<::Windows::UI::Xaml::Controls::Maps::MapAnimationKind>(Nan::To<int32_t>(info[1]).FromMaybe(0));
          
          op = wrapper->_instance->TrySetSceneAsync(arg0,arg1);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryPanAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 3
        && info[0]->IsNumber()
        && info[1]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          
          op = wrapper->_instance->TryPanAsync(arg0,arg1);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryPanToAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0]))
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          op = wrapper->_instance->TryPanToAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TrySetViewBoundsAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 4
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::GeoboundingBox^>(info[0])
        && IsThicknessJsObject(info[1])
        && info[2]->IsInt32())
      {
        try
        {
          ::Windows::Devices::Geolocation::GeoboundingBox^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::GeoboundingBox^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Platform::IBox<::Windows::UI::Xaml::Thickness>^ arg1 = ref new ::Platform::Box<::Windows::UI::Xaml::Thickness>(ThicknessFromJsObject(info[1]));
          ::Windows::UI::Xaml::Controls::Maps::MapAnimationKind arg2 = static_cast<::Windows::UI::Xaml::Controls::Maps::MapAnimationKind>(Nan::To<int32_t>(info[2]).FromMaybe(0));
          
          op = wrapper->_instance->TrySetViewBoundsAsync(arg0,arg1,arg2);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TrySetViewAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0]))
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          op = wrapper->_instance->TrySetViewAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 3
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber())
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Platform::IBox<double>^ arg1 = ref new ::Platform::Box<double>(Nan::To<double>(info[1]).FromMaybe(0.0));
          
          op = wrapper->_instance->TrySetViewAsync(arg0,arg1);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 5
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber()
        && info[3]->IsNumber())
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Platform::IBox<double>^ arg1 = ref new ::Platform::Box<double>(Nan::To<double>(info[1]).FromMaybe(0.0));
          ::Platform::IBox<double>^ arg2 = ref new ::Platform::Box<double>(Nan::To<double>(info[2]).FromMaybe(0.0));
          ::Platform::IBox<double>^ arg3 = ref new ::Platform::Box<double>(Nan::To<double>(info[3]).FromMaybe(0.0));
          
          op = wrapper->_instance->TrySetViewAsync(arg0,arg1,arg2,arg3);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 6
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber()
        && info[3]->IsNumber()
        && info[4]->IsInt32())
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Platform::IBox<double>^ arg1 = ref new ::Platform::Box<double>(Nan::To<double>(info[1]).FromMaybe(0.0));
          ::Platform::IBox<double>^ arg2 = ref new ::Platform::Box<double>(Nan::To<double>(info[2]).FromMaybe(0.0));
          ::Platform::IBox<double>^ arg3 = ref new ::Platform::Box<double>(Nan::To<double>(info[3]).FromMaybe(0.0));
          ::Windows::UI::Xaml::Controls::Maps::MapAnimationKind arg4 = static_cast<::Windows::UI::Xaml::Controls::Maps::MapAnimationKind>(Nan::To<int32_t>(info[4]).FromMaybe(0));
          
          op = wrapper->_instance->TrySetViewAsync(arg0,arg1,arg2,arg3,arg4);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryRotateAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          op = wrapper->_instance->TryRotateAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }
    static void TryRotateToAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      ::Windows::Foundation::IAsyncOperation<bool>^ op;


      if (info.Length() == 2
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          op = wrapper->_instance->TryRotateToAsync(arg0);
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<bool> t) {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = Nan::New<Boolean>(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        } catch (Platform::Exception^ exception) {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {
            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }

    static void GetVisibleRegion(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 1
        && info[0]->IsInt32())
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapVisibleRegionKind arg0 = static_cast<::Windows::UI::Xaml::Controls::Maps::MapVisibleRegionKind>(Nan::To<int32_t>(info[0]).FromMaybe(0));
          
          ::Windows::Devices::Geolocation::Geopath^ result;
          result = wrapper->_instance->GetVisibleRegion(arg0);
          info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopath", result));
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void FindMapElementsAtOffset(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 2
        && NodeRT::Utils::IsPoint(info[0])
        && info[1]->IsNumber())
      {
        try
        {
          ::Windows::Foundation::Point arg0 = NodeRT::Utils::PointFromJs(info[0]);
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          
          ::Windows::Foundation::Collections::IVectorView<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result;
          result = wrapper->_instance->FindMapElementsAtOffset(arg0, arg1);
          info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorViewWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsPoint(info[0]))
      {
        try
        {
          ::Windows::Foundation::Point arg0 = NodeRT::Utils::PointFromJs(info[0]);
          
          ::Windows::Foundation::Collections::IVectorView<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result;
          result = wrapper->_instance->FindMapElementsAtOffset(arg0);
          info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorViewWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void GetLocationFromOffset(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 2
        && NodeRT::Utils::IsPoint(info[0])
        && info[1]->IsInt32())
      {
        try
        {
          ::Windows::Foundation::Point arg0 = NodeRT::Utils::PointFromJs(info[0]);
          ::Windows::Devices::Geolocation::AltitudeReferenceSystem arg1 = static_cast<::Windows::Devices::Geolocation::AltitudeReferenceSystem>(Nan::To<int32_t>(info[1]).FromMaybe(0));
          ::Windows::Devices::Geolocation::Geopoint^ arg2;
          
          wrapper->_instance->GetLocationFromOffset(arg0, arg1, &arg2);
          Local<Object> resObj = Nan::New<Object>();
          Nan::Set(resObj, Nan::New<String>("location").ToLocalChecked(), NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", arg2));
          info.GetReturnValue().Set(resObj);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsPoint(info[0]))
      {
        try
        {
          ::Windows::Foundation::Point arg0 = NodeRT::Utils::PointFromJs(info[0]);
          ::Windows::Devices::Geolocation::Geopoint^ arg1;
          
          wrapper->_instance->GetLocationFromOffset(arg0, &arg1);
          Local<Object> resObj = Nan::New<Object>();
          Nan::Set(resObj, Nan::New<String>("location").ToLocalChecked(), NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", arg1));
          info.GetReturnValue().Set(resObj);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StartContinuousPan(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 2
        && info[0]->IsNumber()
        && info[1]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          
          wrapper->_instance->StartContinuousPan(arg0, arg1);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StopContinuousPan(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->StopContinuousPan();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void TryGetLocationFromOffset(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 1
        && NodeRT::Utils::IsPoint(info[0]))
      {
        try
        {
          ::Windows::Foundation::Point arg0 = NodeRT::Utils::PointFromJs(info[0]);
          ::Windows::Devices::Geolocation::Geopoint^ arg1;
          
          bool result;
          result = wrapper->_instance->TryGetLocationFromOffset(arg0, &arg1);
          Local<Object> resObj = Nan::New<Object>();
          Nan::Set(resObj, Nan::New<String>("boolean").ToLocalChecked(), Nan::New<Boolean>(result));
          Nan::Set(resObj, Nan::New<String>("location").ToLocalChecked(), NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", arg1));
          info.GetReturnValue().Set(resObj);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 2
        && NodeRT::Utils::IsPoint(info[0])
        && info[1]->IsInt32())
      {
        try
        {
          ::Windows::Foundation::Point arg0 = NodeRT::Utils::PointFromJs(info[0]);
          ::Windows::Devices::Geolocation::AltitudeReferenceSystem arg1 = static_cast<::Windows::Devices::Geolocation::AltitudeReferenceSystem>(Nan::To<int32_t>(info[1]).FromMaybe(0));
          ::Windows::Devices::Geolocation::Geopoint^ arg2;
          
          bool result;
          result = wrapper->_instance->TryGetLocationFromOffset(arg0, arg1, &arg2);
          Local<Object> resObj = Nan::New<Object>();
          Nan::Set(resObj, Nan::New<String>("boolean").ToLocalChecked(), Nan::New<Boolean>(result));
          Nan::Set(resObj, Nan::New<String>("location").ToLocalChecked(), NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", arg2));
          info.GetReturnValue().Set(resObj);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void GetOffsetFromLocation(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0]))
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Windows::Foundation::Point arg1;
          
          wrapper->_instance->GetOffsetFromLocation(arg0, &arg1);
          Local<Object> resObj = Nan::New<Object>();
          Nan::Set(resObj, Nan::New<String>("offset").ToLocalChecked(), NodeRT::Utils::PointToJs(arg1));
          info.GetReturnValue().Set(resObj);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void IsLocationInView(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0]))
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          bool arg1;
          
          wrapper->_instance->IsLocationInView(arg0, &arg1);
          Local<Object> resObj = Nan::New<Object>();
          Nan::Set(resObj, Nan::New<String>("isInView").ToLocalChecked(), Nan::New<Boolean>(arg1));
          info.GetReturnValue().Set(resObj);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StartContinuousRotate(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 1
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          wrapper->_instance->StartContinuousRotate(arg0);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StopContinuousRotate(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->StopContinuousRotate();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StartContinuousTilt(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 1
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          wrapper->_instance->StartContinuousTilt(arg0);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StopContinuousTilt(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->StopContinuousTilt();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StartContinuousZoom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 1
        && info[0]->IsNumber())
      {
        try
        {
          double arg0 = Nan::To<double>(info[0]).FromMaybe(0.0);
          
          wrapper->_instance->StartContinuousZoom(arg0);
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void StopContinuousZoom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->StopContinuousZoom();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }



    static void GetLocation(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info[0]))
      {
        try
        {
          ::Windows::UI::Xaml::DependencyObject^ arg0 = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          ::Windows::Devices::Geolocation::Geopoint^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapControl::GetLocation(arg0);
          info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void SetLocation(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info[0])
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[1]))
      {
        try
        {
          ::Windows::UI::Xaml::DependencyObject^ arg0 = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Windows::Devices::Geolocation::Geopoint^ arg1 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[1]));
          
          ::Windows::UI::Xaml::Controls::Maps::MapControl::SetLocation(arg0, arg1);
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void GetNormalizedAnchorPoint(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info[0]))
      {
        try
        {
          ::Windows::UI::Xaml::DependencyObject^ arg0 = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          ::Windows::Foundation::Point result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapControl::GetNormalizedAnchorPoint(arg0);
          info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void SetNormalizedAnchorPoint(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info[0])
        && NodeRT::Utils::IsPoint(info[1]))
      {
        try
        {
          ::Windows::UI::Xaml::DependencyObject^ arg0 = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Windows::Foundation::Point arg1 = NodeRT::Utils::PointFromJs(info[1]);
          
          ::Windows::UI::Xaml::Controls::Maps::MapControl::SetNormalizedAnchorPoint(arg0, arg1);
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void ZoomLevelGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        double result = wrapper->_instance->ZoomLevel;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZoomLevelSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->ZoomLevel = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void WatermarkModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapWatermarkMode result = wrapper->_instance->WatermarkMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void WatermarkModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapWatermarkMode winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapWatermarkMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->WatermarkMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TransformOriginGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->TransformOrigin;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransformOriginSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsPoint(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::Foundation::Point winRtValue = NodeRT::Utils::PointFromJs(value);

        wrapper->_instance->TransformOrigin = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TrafficFlowVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->TrafficFlowVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TrafficFlowVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->TrafficFlowVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StyleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapStyle result = wrapper->_instance->Style;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StyleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapStyle winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapStyle>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->Style = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void PedestrianFeaturesVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->PedestrianFeaturesVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PedestrianFeaturesVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->PedestrianFeaturesVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapServiceTokenGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapServiceToken;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapServiceTokenSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapServiceToken = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CenterGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Center;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CenterSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::Devices::Geolocation::Geopoint^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Center = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void HeadingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        double result = wrapper->_instance->Heading;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void HeadingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Heading = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DesiredPitchGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        double result = wrapper->_instance->DesiredPitch;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DesiredPitchSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->DesiredPitch = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ColorSchemeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapColorScheme result = wrapper->_instance->ColorScheme;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ColorSchemeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapColorScheme winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapColorScheme>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ColorScheme = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LandmarksVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->LandmarksVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LandmarksVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->LandmarksVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ChildrenGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::DependencyObject^>^ result = wrapper->_instance->Children;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::DependencyObject^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::DependencyObject^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::DependencyObject^ {
              return dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LoadingStatusGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapLoadingStatus result = wrapper->_instance->LoadingStatus;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result = wrapper->_instance->MapElements;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MaxZoomLevelGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        double result = wrapper->_instance->MaxZoomLevel;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MinZoomLevelGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        double result = wrapper->_instance->MinZoomLevel;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PitchGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        double result = wrapper->_instance->Pitch;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RoutesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>^ result = wrapper->_instance->Routes;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapRouteView^ val) -> Local<Value> {
              return WrapMapRouteView(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapRouteView^ {
              return UnwrapMapRouteView(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TileSourcesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>^ result = wrapper->_instance->TileSources;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapTileSource^ val) -> Local<Value> {
              return WrapMapTileSource(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapTileSource^ {
              return UnwrapMapTileSource(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RotateInteractionModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapInteractionMode result = wrapper->_instance->RotateInteractionMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RotateInteractionModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapInteractionMode winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapInteractionMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->RotateInteractionMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ZoomInteractionModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapInteractionMode result = wrapper->_instance->ZoomInteractionMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZoomInteractionModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapInteractionMode winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapInteractionMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZoomInteractionMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TransitFeaturesVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->TransitFeaturesVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitFeaturesVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->TransitFeaturesVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TiltInteractionModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapInteractionMode result = wrapper->_instance->TiltInteractionMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TiltInteractionModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapInteractionMode winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapInteractionMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->TiltInteractionMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void SceneGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapScene^ result = wrapper->_instance->Scene;
        info.GetReturnValue().Set(WrapMapScene(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void SceneSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapScene^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Controls::Maps::MapScene^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Scene = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void BusinessLandmarksVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->BusinessLandmarksVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BusinessLandmarksVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->BusinessLandmarksVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void PanInteractionModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapPanInteractionMode result = wrapper->_instance->PanInteractionMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PanInteractionModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapPanInteractionMode winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapPanInteractionMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->PanInteractionMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CustomExperienceGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ result = wrapper->_instance->CustomExperience;
        info.GetReturnValue().Set(WrapMapCustomExperience(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CustomExperienceSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->CustomExperience = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ActualCameraGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCamera^ result = wrapper->_instance->ActualCamera;
        info.GetReturnValue().Set(WrapMapCamera(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void Is3DSupportedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->Is3DSupported;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsStreetsideSupportedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->IsStreetsideSupported;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TargetCameraGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCamera^ result = wrapper->_instance->TargetCamera;
        info.GetReturnValue().Set(WrapMapCamera(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitFeaturesEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->TransitFeaturesEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitFeaturesEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->TransitFeaturesEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void BusinessLandmarksEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->BusinessLandmarksEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BusinessLandmarksEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->BusinessLandmarksEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ViewPaddingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Thickness result = wrapper->_instance->ViewPadding;
        info.GetReturnValue().Set(ThicknessToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ViewPaddingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsThicknessJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Thickness winRtValue = ThicknessFromJsObject(value);

        wrapper->_instance->ViewPadding = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StyleSheetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result = wrapper->_instance->StyleSheet;
        info.GetReturnValue().Set(WrapMapStyleSheet(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StyleSheetSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->StyleSheet = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapProjectionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapProjection result = wrapper->_instance->MapProjection;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapProjectionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapProjection winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapProjection>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapProjection = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LayersGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapLayer^>^ result = wrapper->_instance->Layers;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Controls::Maps::MapLayer^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapLayer^ val) -> Local<Value> {
              return WrapMapLayer(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapLayer^ {
              return UnwrapMapLayer(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LayersSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!(NodeRT::Utils::IsWinRtWrapperOf<::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapLayer^>^>(value) || value->IsArray())) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapLayer^>^ winRtValue = 
            [] (v8::Local<v8::Value> value) -> ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapLayer^>^
            {
              if (value->IsArray())
              {
                return NodeRT::Collections::JsArrayToWinrtVector<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(value.As<Array>(), 
                 [](Local<Value> value) -> bool {
                   return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(value);
                 },
                 [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapLayer^ {
                   return UnwrapMapLayer(value);
                 }
                );
              }
              else
              {
                return dynamic_cast<::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapLayer^>^>(NodeRT::Utils::GetObjectInstance(value));
              }
            } (value);

        wrapper->_instance->Layers = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RegionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->Region;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RegionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->Region = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CanTiltDownGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->CanTiltDown;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CanTiltUpGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->CanTiltUp;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CanZoomInGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->CanZoomIn;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CanZoomOutGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This())) {
        return;
      }

      MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());

      try  {
        bool result = wrapper->_instance->CanZoomOut;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PaddingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Thickness result = wrapper->_instance->Padding;
        info.GetReturnValue().Set(ThicknessToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PaddingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsThicknessJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Thickness winRtValue = ThicknessFromJsObject(value);

        wrapper->_instance->Padding = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsTabStopGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        bool result = wrapper->_instance->IsTabStop;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsTabStopSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsTabStop = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        bool result = wrapper->_instance->IsEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void HorizontalContentAlignmentGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::HorizontalAlignment result = wrapper->_instance->HorizontalContentAlignment;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void HorizontalContentAlignmentSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::HorizontalAlignment winRtValue = static_cast<::Windows::UI::Xaml::HorizontalAlignment>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->HorizontalContentAlignment = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ForegroundGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Brush^ result = wrapper->_instance->Foreground;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Brush", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ForegroundSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Brush^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Brush^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Brush^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Foreground = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FontWeightGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Text::FontWeight result = wrapper->_instance->FontWeight;
        info.GetReturnValue().Set(FontWeightToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FontWeightSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsFontWeightJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Text::FontWeight winRtValue = FontWeightFromJsObject(value);

        wrapper->_instance->FontWeight = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FontStyleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Text::FontStyle result = wrapper->_instance->FontStyle;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FontStyleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Text::FontStyle winRtValue = static_cast<::Windows::UI::Text::FontStyle>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->FontStyle = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FontStretchGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Text::FontStretch result = wrapper->_instance->FontStretch;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FontStretchSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Text::FontStretch winRtValue = static_cast<::Windows::UI::Text::FontStretch>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->FontStretch = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FontSizeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        double result = wrapper->_instance->FontSize;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FontSizeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->FontSize = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FontFamilyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::FontFamily^ result = wrapper->_instance->FontFamily;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "FontFamily", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FontFamilySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::FontFamily^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Media::FontFamily^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::FontFamily^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->FontFamily = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        int result = wrapper->_instance->TabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->TabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CharacterSpacingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        int result = wrapper->_instance->CharacterSpacing;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CharacterSpacingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->CharacterSpacing = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void BorderThicknessGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Thickness result = wrapper->_instance->BorderThickness;
        info.GetReturnValue().Set(ThicknessToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BorderThicknessSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsThicknessJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Thickness winRtValue = ThicknessFromJsObject(value);

        wrapper->_instance->BorderThickness = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void BorderBrushGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Brush^ result = wrapper->_instance->BorderBrush;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Brush", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BorderBrushSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Brush^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Brush^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Brush^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->BorderBrush = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TabNavigationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::KeyboardNavigationMode result = wrapper->_instance->TabNavigation;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TabNavigationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Input::KeyboardNavigationMode winRtValue = static_cast<::Windows::UI::Xaml::Input::KeyboardNavigationMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->TabNavigation = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void BackgroundGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Brush^ result = wrapper->_instance->Background;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Brush", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BackgroundSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Brush^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Brush^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Brush^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Background = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VerticalContentAlignmentGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::VerticalAlignment result = wrapper->_instance->VerticalContentAlignment;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VerticalContentAlignmentSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::VerticalAlignment winRtValue = static_cast<::Windows::UI::Xaml::VerticalAlignment>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->VerticalContentAlignment = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TemplateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::ControlTemplate^ result = wrapper->_instance->Template;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Controls", "ControlTemplate", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TemplateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::ControlTemplate^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::ControlTemplate^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Controls::ControlTemplate^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Template = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FocusStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::FocusState result = wrapper->_instance->FocusState;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsTextScaleFactorEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        bool result = wrapper->_instance->IsTextScaleFactorEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsTextScaleFactorEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsTextScaleFactorEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void UseSystemFocusVisualsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        bool result = wrapper->_instance->UseSystemFocusVisuals;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void UseSystemFocusVisualsSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->UseSystemFocusVisuals = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusUpGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->XYFocusUp;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusUpSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::DependencyObject^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->XYFocusUp = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusRightGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->XYFocusRight;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusRightSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::DependencyObject^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->XYFocusRight = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusLeftGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->XYFocusLeft;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusLeftSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::DependencyObject^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->XYFocusLeft = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusDownGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->XYFocusDown;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusDownSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::DependencyObject^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->XYFocusDown = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RequiresPointerGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::RequiresPointer result = wrapper->_instance->RequiresPointer;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RequiresPointerSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::RequiresPointer winRtValue = static_cast<::Windows::UI::Xaml::Controls::RequiresPointer>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->RequiresPointer = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsFocusEngagementEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        bool result = wrapper->_instance->IsFocusEngagementEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsFocusEngagementEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsFocusEngagementEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsFocusEngagedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        bool result = wrapper->_instance->IsFocusEngaged;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsFocusEngagedSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsFocusEngaged = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ElementSoundModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::ElementSoundMode result = wrapper->_instance->ElementSoundMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ElementSoundModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::ElementSoundMode winRtValue = static_cast<::Windows::UI::Xaml::ElementSoundMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ElementSoundMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DefaultStyleResourceUriGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::Foundation::Uri^ result = wrapper->_instance->DefaultStyleResourceUri;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Foundation", "Uri", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DefaultStyleResourceUriSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Foundation::Uri^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::Foundation::Uri^ winRtValue = dynamic_cast<::Windows::Foundation::Uri^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->DefaultStyleResourceUri = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CornerRadiusGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::CornerRadius result = wrapper->_instance->CornerRadius;
        info.GetReturnValue().Set(CornerRadiusToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CornerRadiusSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsCornerRadiusJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::CornerRadius winRtValue = CornerRadiusFromJsObject(value);

        wrapper->_instance->CornerRadius = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void BackgroundSizingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::BackgroundSizing result = wrapper->_instance->BackgroundSizing;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BackgroundSizingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Control^>(info.This())) {
        return;
      }

      Control *wrapper = Control::Unwrap<Control>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::BackgroundSizing winRtValue = static_cast<::Windows::UI::Xaml::Controls::BackgroundSizing>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->BackgroundSizing = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void WidthGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->Width;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void WidthSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Width = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VerticalAlignmentGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::VerticalAlignment result = wrapper->_instance->VerticalAlignment;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VerticalAlignmentSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::VerticalAlignment winRtValue = static_cast<::Windows::UI::Xaml::VerticalAlignment>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->VerticalAlignment = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TagGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->Tag;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TagSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Tag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StyleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Style^ result = wrapper->_instance->Style;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "Style", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StyleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Style^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::Style^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Style^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Style = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ResourcesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::ResourceDictionary^ result = wrapper->_instance->Resources;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "ResourceDictionary", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ResourcesSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::ResourceDictionary^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::ResourceDictionary^ winRtValue = dynamic_cast<::Windows::UI::Xaml::ResourceDictionary^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Resources = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void NameGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->Name;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void NameSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->Name = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MinWidthGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->MinWidth;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MinWidthSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->MinWidth = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MinHeightGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->MinHeight;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MinHeightSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->MinHeight = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MaxWidthGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->MaxWidth;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MaxWidthSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->MaxWidth = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MaxHeightGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->MaxHeight;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MaxHeightSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->MaxHeight = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MarginGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Thickness result = wrapper->_instance->Margin;
        info.GetReturnValue().Set(ThicknessToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MarginSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsThicknessJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::Thickness winRtValue = ThicknessFromJsObject(value);

        wrapper->_instance->Margin = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LanguageGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->Language;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LanguageSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->Language = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void HorizontalAlignmentGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::HorizontalAlignment result = wrapper->_instance->HorizontalAlignment;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void HorizontalAlignmentSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::HorizontalAlignment winRtValue = static_cast<::Windows::UI::Xaml::HorizontalAlignment>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->HorizontalAlignment = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void HeightGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->Height;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void HeightSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Height = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FlowDirectionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::FlowDirection result = wrapper->_instance->FlowDirection;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FlowDirectionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::FlowDirection winRtValue = static_cast<::Windows::UI::Xaml::FlowDirection>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->FlowDirection = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DataContextGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->DataContext;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DataContextSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->DataContext = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ActualHeightGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->ActualHeight;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ActualWidthGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        double result = wrapper->_instance->ActualWidth;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BaseUriGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::Foundation::Uri^ result = wrapper->_instance->BaseUri;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Foundation", "Uri", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ParentGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->Parent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TriggersGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::TriggerCollection^ result = wrapper->_instance->Triggers;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "TriggerCollection", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RequestedThemeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::ElementTheme result = wrapper->_instance->RequestedTheme;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RequestedThemeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::ElementTheme winRtValue = static_cast<::Windows::UI::Xaml::ElementTheme>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->RequestedTheme = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FocusVisualSecondaryThicknessGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Thickness result = wrapper->_instance->FocusVisualSecondaryThickness;
        info.GetReturnValue().Set(ThicknessToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FocusVisualSecondaryThicknessSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsThicknessJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::Thickness winRtValue = ThicknessFromJsObject(value);

        wrapper->_instance->FocusVisualSecondaryThickness = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FocusVisualSecondaryBrushGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Brush^ result = wrapper->_instance->FocusVisualSecondaryBrush;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Brush", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FocusVisualSecondaryBrushSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Brush^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Brush^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Brush^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->FocusVisualSecondaryBrush = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FocusVisualPrimaryThicknessGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Thickness result = wrapper->_instance->FocusVisualPrimaryThickness;
        info.GetReturnValue().Set(ThicknessToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FocusVisualPrimaryThicknessSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsThicknessJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::Thickness winRtValue = ThicknessFromJsObject(value);

        wrapper->_instance->FocusVisualPrimaryThickness = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FocusVisualPrimaryBrushGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Brush^ result = wrapper->_instance->FocusVisualPrimaryBrush;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Brush", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FocusVisualPrimaryBrushSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Brush^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Brush^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Brush^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->FocusVisualPrimaryBrush = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FocusVisualMarginGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Thickness result = wrapper->_instance->FocusVisualMargin;
        info.GetReturnValue().Set(ThicknessToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FocusVisualMarginSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsThicknessJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        ::Windows::UI::Xaml::Thickness winRtValue = ThicknessFromJsObject(value);

        wrapper->_instance->FocusVisualMargin = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AllowFocusWhenDisabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        bool result = wrapper->_instance->AllowFocusWhenDisabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AllowFocusWhenDisabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->AllowFocusWhenDisabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AllowFocusOnInteractionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        bool result = wrapper->_instance->AllowFocusOnInteraction;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AllowFocusOnInteractionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->AllowFocusOnInteraction = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ActualThemeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        ::Windows::UI::Xaml::ElementTheme result = wrapper->_instance->ActualTheme;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsLoadedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::FrameworkElement^>(info.This())) {
        return;
      }

      FrameworkElement *wrapper = FrameworkElement::Unwrap<FrameworkElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsLoaded;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitionsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Animation::TransitionCollection^ result = wrapper->_instance->Transitions;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media.Animation", "TransitionCollection", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitionsSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Animation::TransitionCollection^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Animation::TransitionCollection^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Animation::TransitionCollection^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Transitions = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ProjectionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Projection^ result = wrapper->_instance->Projection;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Projection", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ProjectionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Projection^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Projection^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Projection^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Projection = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RenderTransformOriginGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->RenderTransformOrigin;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RenderTransformOriginSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsPoint(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::Foundation::Point winRtValue = NodeRT::Utils::PointFromJs(value);

        wrapper->_instance->RenderTransformOrigin = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void OpacityGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        double result = wrapper->_instance->Opacity;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void OpacitySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Opacity = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ManipulationModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::ManipulationModes result = wrapper->_instance->ManipulationMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ManipulationModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::ManipulationModes winRtValue = static_cast<::Windows::UI::Xaml::Input::ManipulationModes>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ManipulationMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsTapEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsTapEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsTapEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsTapEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsRightTapEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsRightTapEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsRightTapEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsRightTapEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsHoldingEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsHoldingEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsHoldingEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsHoldingEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsHitTestVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsHitTestVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsHitTestVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsHitTestVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsDoubleTapEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsDoubleTapEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsDoubleTapEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsDoubleTapEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AllowDropGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->AllowDrop;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AllowDropSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->AllowDrop = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ClipGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::RectangleGeometry^ result = wrapper->_instance->Clip;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "RectangleGeometry", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ClipSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::RectangleGeometry^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::RectangleGeometry^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::RectangleGeometry^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Clip = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CacheModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::CacheMode^ result = wrapper->_instance->CacheMode;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "CacheMode", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CacheModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::CacheMode^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::CacheMode^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::CacheMode^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->CacheMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void UseLayoutRoundingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->UseLayoutRounding;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void UseLayoutRoundingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->UseLayoutRounding = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RenderTransformGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Transform^ result = wrapper->_instance->RenderTransform;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Transform", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RenderTransformSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Transform^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Transform^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Transform^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->RenderTransform = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibilityGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Visibility result = wrapper->_instance->Visibility;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibilitySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Visibility winRtValue = static_cast<::Windows::UI::Xaml::Visibility>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->Visibility = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DesiredSizeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::Foundation::Size result = wrapper->_instance->DesiredSize;
        info.GetReturnValue().Set(NodeRT::Utils::SizeToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PointerCapturesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVectorView<::Windows::UI::Xaml::Input::Pointer^>^ result = wrapper->_instance->PointerCaptures;
        info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::UI::Xaml::Input::Pointer^>::CreateVectorViewWrapper(result, 
            [](::Windows::UI::Xaml::Input::Pointer^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "Pointer", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Input::Pointer^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Input::Pointer^ {
              return dynamic_cast<::Windows::UI::Xaml::Input::Pointer^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RenderSizeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::Foundation::Size result = wrapper->_instance->RenderSize;
        info.GetReturnValue().Set(NodeRT::Utils::SizeToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XamlRootGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::XamlRoot^ result = wrapper->_instance->XamlRoot;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "XamlRoot", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XamlRootSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::XamlRoot^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::XamlRoot^ winRtValue = dynamic_cast<::Windows::UI::Xaml::XamlRoot^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->XamlRoot = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ShadowGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Shadow^ result = wrapper->_instance->Shadow;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "Shadow", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ShadowSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Shadow^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Shadow^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Shadow^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Shadow = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ActualOffsetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Platform::Numerics::Vector3 result = wrapper->_instance->ActualOffset;
        info.GetReturnValue().Set(Vector3ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ActualSizeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Platform::Numerics::Vector2 result = wrapper->_instance->ActualSize;
        info.GetReturnValue().Set(Vector2ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void UIContextGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::UIContext^ result = wrapper->_instance->UIContext;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI", "UIContext", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CompositeModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::ElementCompositeMode result = wrapper->_instance->CompositeMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CompositeModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::ElementCompositeMode winRtValue = static_cast<::Windows::UI::Xaml::Media::ElementCompositeMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->CompositeMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void Transform3DGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Media::Media3D::Transform3D^ result = wrapper->_instance->Transform3D;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media.Media3D", "Transform3D", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void Transform3DSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::Media3D::Transform3D^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Media::Media3D::Transform3D^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Media::Media3D::Transform3D^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Transform3D = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CanDragGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->CanDrag;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CanDragSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->CanDrag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsAccessKeyScopeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsAccessKeyScope;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsAccessKeyScopeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsAccessKeyScope = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ExitDisplayModeOnAccessKeyInvokedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->ExitDisplayModeOnAccessKeyInvoked;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ExitDisplayModeOnAccessKeyInvokedSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->ExitDisplayModeOnAccessKeyInvoked = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ContextFlyoutGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Primitives::FlyoutBase^ result = wrapper->_instance->ContextFlyout;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Controls.Primitives", "FlyoutBase", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ContextFlyoutSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Primitives::FlyoutBase^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Primitives::FlyoutBase^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Controls::Primitives::FlyoutBase^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->ContextFlyout = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AccessKeyScopeOwnerGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->AccessKeyScopeOwner;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AccessKeyScopeOwnerSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::DependencyObject^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->AccessKeyScopeOwner = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AccessKeyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->AccessKey;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AccessKeySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->AccessKey = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void KeyTipHorizontalOffsetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        double result = wrapper->_instance->KeyTipHorizontalOffset;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyTipHorizontalOffsetSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->KeyTipHorizontalOffset = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void HighContrastAdjustmentGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::ElementHighContrastAdjustment result = wrapper->_instance->HighContrastAdjustment;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void HighContrastAdjustmentSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::ElementHighContrastAdjustment winRtValue = static_cast<::Windows::UI::Xaml::ElementHighContrastAdjustment>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->HighContrastAdjustment = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusRightNavigationStrategyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy result = wrapper->_instance->XYFocusRightNavigationStrategy;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusRightNavigationStrategySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy winRtValue = static_cast<::Windows::UI::Xaml::Input::XYFocusNavigationStrategy>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->XYFocusRightNavigationStrategy = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusKeyboardNavigationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::XYFocusKeyboardNavigationMode result = wrapper->_instance->XYFocusKeyboardNavigation;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusKeyboardNavigationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::XYFocusKeyboardNavigationMode winRtValue = static_cast<::Windows::UI::Xaml::Input::XYFocusKeyboardNavigationMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->XYFocusKeyboardNavigation = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusDownNavigationStrategyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy result = wrapper->_instance->XYFocusDownNavigationStrategy;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusDownNavigationStrategySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy winRtValue = static_cast<::Windows::UI::Xaml::Input::XYFocusNavigationStrategy>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->XYFocusDownNavigationStrategy = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TabFocusNavigationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::KeyboardNavigationMode result = wrapper->_instance->TabFocusNavigation;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TabFocusNavigationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::KeyboardNavigationMode winRtValue = static_cast<::Windows::UI::Xaml::Input::KeyboardNavigationMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->TabFocusNavigation = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void KeyTipVerticalOffsetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        double result = wrapper->_instance->KeyTipVerticalOffset;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyTipVerticalOffsetSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->KeyTipVerticalOffset = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusUpNavigationStrategyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy result = wrapper->_instance->XYFocusUpNavigationStrategy;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusUpNavigationStrategySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy winRtValue = static_cast<::Windows::UI::Xaml::Input::XYFocusNavigationStrategy>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->XYFocusUpNavigationStrategy = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void KeyTipPlacementModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::KeyTipPlacementMode result = wrapper->_instance->KeyTipPlacementMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyTipPlacementModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::KeyTipPlacementMode winRtValue = static_cast<::Windows::UI::Xaml::Input::KeyTipPlacementMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->KeyTipPlacementMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void XYFocusLeftNavigationStrategyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy result = wrapper->_instance->XYFocusLeftNavigationStrategy;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XYFocusLeftNavigationStrategySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::XYFocusNavigationStrategy winRtValue = static_cast<::Windows::UI::Xaml::Input::XYFocusNavigationStrategy>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->XYFocusLeftNavigationStrategy = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LightsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Media::XamlLight^>^ result = wrapper->_instance->Lights;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Media::XamlLight^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Media::XamlLight^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Media", "XamlLight", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Media::XamlLight^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Media::XamlLight^ {
              return dynamic_cast<::Windows::UI::Xaml::Media::XamlLight^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyboardAcceleratorsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Input::KeyboardAccelerator^>^ result = wrapper->_instance->KeyboardAccelerators;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Input::KeyboardAccelerator^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Input::KeyboardAccelerator^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "KeyboardAccelerator", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Input::KeyboardAccelerator^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Input::KeyboardAccelerator^ {
              return dynamic_cast<::Windows::UI::Xaml::Input::KeyboardAccelerator^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyboardAcceleratorPlacementTargetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->KeyboardAcceleratorPlacementTarget;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyboardAcceleratorPlacementTargetSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::DependencyObject^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->KeyboardAcceleratorPlacementTarget = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void KeyboardAcceleratorPlacementModeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Input::KeyboardAcceleratorPlacementMode result = wrapper->_instance->KeyboardAcceleratorPlacementMode;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyboardAcceleratorPlacementModeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Input::KeyboardAcceleratorPlacementMode winRtValue = static_cast<::Windows::UI::Xaml::Input::KeyboardAcceleratorPlacementMode>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->KeyboardAcceleratorPlacementMode = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void KeyTipTargetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::DependencyObject^ result = wrapper->_instance->KeyTipTarget;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void KeyTipTargetSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::DependencyObject^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->KeyTipTarget = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TranslationTransitionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Vector3Transition^ result = wrapper->_instance->TranslationTransition;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "Vector3Transition", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TranslationTransitionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Vector3Transition^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Vector3Transition^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Vector3Transition^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->TranslationTransition = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void OpacityTransitionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::ScalarTransition^ result = wrapper->_instance->OpacityTransition;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "ScalarTransition", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void OpacityTransitionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::ScalarTransition^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::ScalarTransition^ winRtValue = dynamic_cast<::Windows::UI::Xaml::ScalarTransition^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->OpacityTransition = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TransformMatrixGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Platform::Numerics::Matrix4x4 result = wrapper->_instance->TransformMatrix;
        info.GetReturnValue().Set(Matrix4x4ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransformMatrixSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsMatrix4x4JsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Platform::Numerics::Matrix4x4 winRtValue = Matrix4x4FromJsObject(value);

        wrapper->_instance->TransformMatrix = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ScaleTransitionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::Vector3Transition^ result = wrapper->_instance->ScaleTransition;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "Vector3Transition", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ScaleTransitionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Vector3Transition^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::Vector3Transition^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Vector3Transition^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->ScaleTransition = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ScaleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Platform::Numerics::Vector3 result = wrapper->_instance->Scale;
        info.GetReturnValue().Set(Vector3ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ScaleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsVector3JsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Platform::Numerics::Vector3 winRtValue = Vector3FromJsObject(value);

        wrapper->_instance->Scale = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RotationTransitionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Windows::UI::Xaml::ScalarTransition^ result = wrapper->_instance->RotationTransition;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "ScalarTransition", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RotationTransitionSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::ScalarTransition^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Windows::UI::Xaml::ScalarTransition^ winRtValue = dynamic_cast<::Windows::UI::Xaml::ScalarTransition^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->RotationTransition = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RotationAxisGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Platform::Numerics::Vector3 result = wrapper->_instance->RotationAxis;
        info.GetReturnValue().Set(Vector3ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RotationAxisSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsVector3JsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Platform::Numerics::Vector3 winRtValue = Vector3FromJsObject(value);

        wrapper->_instance->RotationAxis = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RotationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        float result = wrapper->_instance->Rotation;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RotationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        float winRtValue = static_cast<float>(Nan::To<double>(value).FromMaybe(0.0));

        wrapper->_instance->Rotation = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TranslationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Platform::Numerics::Vector3 result = wrapper->_instance->Translation;
        info.GetReturnValue().Set(Vector3ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TranslationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsVector3JsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Platform::Numerics::Vector3 winRtValue = Vector3FromJsObject(value);

        wrapper->_instance->Translation = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CenterPointGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        ::Platform::Numerics::Vector3 result = wrapper->_instance->CenterPoint;
        info.GetReturnValue().Set(Vector3ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CenterPointSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsVector3JsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        ::Platform::Numerics::Vector3 winRtValue = Vector3FromJsObject(value);

        wrapper->_instance->CenterPoint = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CanBeScrollAnchorGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try  {
        bool result = wrapper->_instance->CanBeScrollAnchor;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CanBeScrollAnchorSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::UIElement^>(info.This())) {
        return;
      }

      UIElement *wrapper = UIElement::Unwrap<UIElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->CanBeScrollAnchor = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void CenterPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::CenterProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZoomLevelPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::ZoomLevelProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ChildrenPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::ChildrenProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ColorSchemePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::ColorSchemeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DesiredPitchPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::DesiredPitchProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HeadingPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::HeadingProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LandmarksVisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::LandmarksVisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LoadingStatusPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::LoadingStatusProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LocationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::LocationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapElementsPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::MapElementsProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapServiceTokenPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::MapServiceTokenProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NormalizedAnchorPointPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::NormalizedAnchorPointProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PedestrianFeaturesVisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::PedestrianFeaturesVisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PitchPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::PitchProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RoutesPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::RoutesProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StylePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::StyleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TileSourcesPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::TileSourcesProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TrafficFlowVisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::TrafficFlowVisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TransformOriginPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::TransformOriginProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void WatermarkModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::WatermarkModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BusinessLandmarksVisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::BusinessLandmarksVisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void Is3DSupportedPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::Is3DSupportedProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsStreetsideSupportedPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::IsStreetsideSupportedProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PanInteractionModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::PanInteractionModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RotateInteractionModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::RotateInteractionModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ScenePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::SceneProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TiltInteractionModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::TiltInteractionModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TransitFeaturesVisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::TransitFeaturesVisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZoomInteractionModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::ZoomInteractionModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BusinessLandmarksEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::BusinessLandmarksEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TransitFeaturesEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::TransitFeaturesEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapProjectionPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::MapProjectionProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StyleSheetPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::StyleSheetProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ViewPaddingPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::ViewPaddingProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LayersPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::LayersProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RegionPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::RegionProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CanTiltUpPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::CanTiltUpProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CanZoomInPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::CanZoomInProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CanZoomOutPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::CanZoomOutProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CanTiltDownPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapControl::CanTiltDownProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BorderThicknessPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::BorderThicknessProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FocusStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::FocusStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FontFamilyPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::FontFamilyProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FontSizePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::FontSizeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FontStretchPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::FontStretchProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FontStylePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::FontStyleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FontWeightPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::FontWeightProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ForegroundPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::ForegroundProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HorizontalContentAlignmentPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::HorizontalContentAlignmentProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::IsEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsTabStopPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::IsTabStopProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PaddingPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::PaddingProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::TabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TabNavigationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::TabNavigationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TemplatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::TemplateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BackgroundPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::BackgroundProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BorderBrushPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::BorderBrushProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VerticalContentAlignmentPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::VerticalContentAlignmentProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CharacterSpacingPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::CharacterSpacingProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DefaultStyleKeyPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::DefaultStyleKeyProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsTextScaleFactorEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::IsTextScaleFactorEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsTemplateFocusTargetPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::IsTemplateFocusTargetProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void UseSystemFocusVisualsPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::UseSystemFocusVisualsProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ElementSoundModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::ElementSoundModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsFocusEngagedPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::IsFocusEngagedProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsFocusEngagementEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::IsFocusEngagementEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RequiresPointerPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::RequiresPointerProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusDownPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::XYFocusDownProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusLeftPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::XYFocusLeftProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusRightPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::XYFocusRightProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusUpPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::XYFocusUpProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DefaultStyleResourceUriPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::DefaultStyleResourceUriProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsTemplateKeyTipTargetPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::IsTemplateKeyTipTargetProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CornerRadiusPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::CornerRadiusProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BackgroundSizingPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Control::BackgroundSizingProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ActualHeightPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::ActualHeightProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ActualWidthPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::ActualWidthProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DataContextPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::DataContextProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FlowDirectionPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::FlowDirectionProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HeightPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::HeightProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HorizontalAlignmentPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::HorizontalAlignmentProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LanguagePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::LanguageProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MarginPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::MarginProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MaxHeightPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::MaxHeightProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MaxWidthPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::MaxWidthProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MinHeightPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::MinHeightProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MinWidthPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::MinWidthProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NamePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::NameProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TagPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::TagProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VerticalAlignmentPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::VerticalAlignmentProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void WidthPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::WidthProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RequestedThemePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::RequestedThemeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AllowFocusOnInteractionPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::AllowFocusOnInteractionProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AllowFocusWhenDisabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::AllowFocusWhenDisabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FocusVisualMarginPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::FocusVisualMarginProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FocusVisualPrimaryBrushPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::FocusVisualPrimaryBrushProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FocusVisualPrimaryThicknessPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::FocusVisualPrimaryThicknessProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FocusVisualSecondaryBrushPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::FocusVisualSecondaryBrushProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FocusVisualSecondaryThicknessPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::FocusVisualSecondaryThicknessProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ActualThemePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::FrameworkElement::ActualThemeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HoldingEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::HoldingEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsDoubleTapEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::IsDoubleTapEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsHitTestVisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::IsHitTestVisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsHoldingEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::IsHoldingEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsRightTapEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::IsRightTapEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyDownEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::KeyDownEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyUpEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::KeyUpEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ManipulationCompletedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::ManipulationCompletedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ManipulationDeltaEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::ManipulationDeltaEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsTapEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::IsTapEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ManipulationInertiaStartingEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::ManipulationInertiaStartingEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ManipulationModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::ManipulationModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ManipulationStartedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::ManipulationStartedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ManipulationStartingEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::ManipulationStartingEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void OpacityPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::OpacityProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerCanceledEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerCanceledEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerCaptureLostEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerCaptureLostEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerCapturesPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::PointerCapturesProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerEnteredEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerEnteredEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerExitedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerExitedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerMovedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerMovedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerPressedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerPressedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerWheelChangedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerWheelChangedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ProjectionPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::ProjectionProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RenderTransformOriginPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::RenderTransformOriginProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RenderTransformPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::RenderTransformProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RightTappedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::RightTappedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DragEnterEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::DragEnterEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TappedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::TappedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TransitionsPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::TransitionsProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void UseLayoutRoundingPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::UseLayoutRoundingProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisibilityPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::VisibilityProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AllowDropPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::AllowDropProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CacheModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::CacheModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ClipPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::ClipProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DoubleTappedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::DoubleTappedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointerReleasedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PointerReleasedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DragLeaveEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::DragLeaveEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DragOverEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::DragOverEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DropEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::DropEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ShadowPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::ShadowProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CompositeModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::CompositeModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CanDragPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::CanDragProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void Transform3DPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::Transform3DProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AccessKeyPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::AccessKeyProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AccessKeyScopeOwnerPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::AccessKeyScopeOwnerProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ContextFlyoutPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::ContextFlyoutProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsAccessKeyScopePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::IsAccessKeyScopeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ExitDisplayModeOnAccessKeyInvokedPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::ExitDisplayModeOnAccessKeyInvokedProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HighContrastAdjustmentPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::HighContrastAdjustmentProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyTipHorizontalOffsetPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::KeyTipHorizontalOffsetProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyTipPlacementModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::KeyTipPlacementModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyTipVerticalOffsetPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::KeyTipVerticalOffsetProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LightsPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::LightsProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusDownNavigationStrategyPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::XYFocusDownNavigationStrategyProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusKeyboardNavigationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::XYFocusKeyboardNavigationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusLeftNavigationStrategyPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::XYFocusLeftNavigationStrategyProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusRightNavigationStrategyPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::XYFocusRightNavigationStrategyProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void XYFocusUpNavigationStrategyPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::XYFocusUpNavigationStrategyProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TabFocusNavigationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::TabFocusNavigationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void GettingFocusEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::GettingFocusEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LosingFocusEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::LosingFocusEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NoFocusCandidateFoundEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::NoFocusCandidateFoundEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CharacterReceivedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::CharacterReceivedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PreviewKeyDownEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PreviewKeyDownEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PreviewKeyUpEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::PreviewKeyUpEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BringIntoViewRequestedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::BringIntoViewRequestedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ContextRequestedEventGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::RoutedEvent^ result = ::Windows::UI::Xaml::UIElement::ContextRequestedEvent;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEvent", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyTipTargetPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::KeyTipTargetProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyboardAcceleratorPlacementModePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::KeyboardAcceleratorPlacementModeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void KeyboardAcceleratorPlacementTargetPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::KeyboardAcceleratorPlacementTargetProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CanBeScrollAnchorPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::UIElement::CanBeScrollAnchorProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AddListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected arguments are eventName(string),callback(function)")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      Local<Function> callback = info[1].As<Function>();

      ::Windows::Foundation::EventRegistrationToken registrationToken;
      if (NodeRT::Utils::CaseInsenstiveEquals(L"centerChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->CenterChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"headingChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->HeadingChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"loadingStatusChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->LoadingStatusChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapDoubleTapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapDoubleTapped::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapInputEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapHolding", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapHolding::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapInputEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapTapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapTapped::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapInputEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pitchChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PitchChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"transformOriginChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->TransformOriginChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"zoomLevelChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ZoomLevelChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"actualCameraChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ActualCameraChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapActualCameraChangedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"actualCameraChanging", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ActualCameraChanging::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapActualCameraChangingEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapActualCameraChangingEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"customExperienceChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->CustomExperienceChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapCustomExperienceChangedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementClick", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapElementClick::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapElementClickEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerEntered", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapElementPointerEntered::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapElementPointerEnteredEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerExited", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapElementPointerExited::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapElementPointerExitedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"targetCameraChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->TargetCameraChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapTargetCameraChangedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapRightTapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapRightTapped::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapRightTappedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapContextRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapContextRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapContextRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapContextRequestedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"isEnabledChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->IsEnabledChanged::add(
            ref new ::Windows::UI::Xaml::DependencyPropertyChangedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyPropertyChangedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"focusDisengaged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->FocusDisengaged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Control^, ::Windows::UI::Xaml::Controls::FocusDisengagedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Control^ arg0, ::Windows::UI::Xaml::Controls::FocusDisengagedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Controls", "Control", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Controls", "FocusDisengagedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"focusEngaged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->FocusEngaged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Control^, ::Windows::UI::Xaml::Controls::FocusEngagedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Control^ arg0, ::Windows::UI::Xaml::Controls::FocusEngagedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Controls", "Control", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Controls", "FocusEngagedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"layoutUpdated", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->LayoutUpdated::add(
            ref new ::Windows::Foundation::EventHandler<::Platform::Object^>(
            [callbackObjPtr](::Platform::Object^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"loaded", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->Loaded::add(
            ref new ::Windows::UI::Xaml::RoutedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::RoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"sizeChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->SizeChanged::add(
            ref new ::Windows::UI::Xaml::SizeChangedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::SizeChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "SizeChangedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"unloaded", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->Unloaded::add(
            ref new ::Windows::UI::Xaml::RoutedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::RoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"dataContextChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->DataContextChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::FrameworkElement^, ::Windows::UI::Xaml::DataContextChangedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::FrameworkElement^ arg0, ::Windows::UI::Xaml::DataContextChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "FrameworkElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DataContextChangedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"loading", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->Loading::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::FrameworkElement^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::FrameworkElement^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "FrameworkElement", arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"actualThemeChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ActualThemeChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::FrameworkElement^, ::Platform::Object^>(
            [callbackObjPtr](::Windows::UI::Xaml::FrameworkElement^ arg0, ::Platform::Object^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "FrameworkElement", arg0);
                  wrappedArg1 = CreateOpaqueWrapper(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"effectiveViewportChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->EffectiveViewportChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::FrameworkElement^, ::Windows::UI::Xaml::EffectiveViewportChangedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::FrameworkElement^ arg0, ::Windows::UI::Xaml::EffectiveViewportChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "FrameworkElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "EffectiveViewportChangedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"doubleTapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->DoubleTapped::add(
            ref new ::Windows::UI::Xaml::Input::DoubleTappedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "DoubleTappedRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragEnter", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->DragEnter::add(
            ref new ::Windows::UI::Xaml::DragEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::DragEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DragEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragLeave", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->DragLeave::add(
            ref new ::Windows::UI::Xaml::DragEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::DragEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DragEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragOver", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->DragOver::add(
            ref new ::Windows::UI::Xaml::DragEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::DragEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DragEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"drop", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->Drop::add(
            ref new ::Windows::UI::Xaml::DragEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::DragEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DragEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"gotFocus", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->GotFocus::add(
            ref new ::Windows::UI::Xaml::RoutedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::RoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"holding", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->Holding::add(
            ref new ::Windows::UI::Xaml::Input::HoldingEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::HoldingRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "HoldingRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"keyDown", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->KeyDown::add(
            ref new ::Windows::UI::Xaml::Input::KeyEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::KeyRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "KeyRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"keyUp", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->KeyUp::add(
            ref new ::Windows::UI::Xaml::Input::KeyEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::KeyRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "KeyRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"lostFocus", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->LostFocus::add(
            ref new ::Windows::UI::Xaml::RoutedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::RoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationCompleted", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ManipulationCompleted::add(
            ref new ::Windows::UI::Xaml::Input::ManipulationCompletedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::ManipulationCompletedRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "ManipulationCompletedRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationDelta", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ManipulationDelta::add(
            ref new ::Windows::UI::Xaml::Input::ManipulationDeltaEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::ManipulationDeltaRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "ManipulationDeltaRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationInertiaStarting", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ManipulationInertiaStarting::add(
            ref new ::Windows::UI::Xaml::Input::ManipulationInertiaStartingEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::ManipulationInertiaStartingRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "ManipulationInertiaStartingRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationStarted", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ManipulationStarted::add(
            ref new ::Windows::UI::Xaml::Input::ManipulationStartedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::ManipulationStartedRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "ManipulationStartedRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationStarting", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ManipulationStarting::add(
            ref new ::Windows::UI::Xaml::Input::ManipulationStartingEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::ManipulationStartingRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "ManipulationStartingRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerCanceled", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerCanceled::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerCaptureLost", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerCaptureLost::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerEntered", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerEntered::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerExited", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerExited::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerMoved", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerMoved::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerPressed", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerPressed::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerReleased", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerReleased::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerWheelChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PointerWheelChanged::add(
            ref new ::Windows::UI::Xaml::Input::PointerEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::PointerRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "PointerRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"rightTapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->RightTapped::add(
            ref new ::Windows::UI::Xaml::Input::RightTappedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::RightTappedRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "RightTappedRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"tapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->Tapped::add(
            ref new ::Windows::UI::Xaml::Input::TappedEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::TappedRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "TappedRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragStarting", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->DragStarting::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::DragStartingEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::DragStartingEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DragStartingEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"dropCompleted", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->DropCompleted::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::DropCompletedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::DropCompletedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DropCompletedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyDisplayDismissed", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->AccessKeyDisplayDismissed::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::AccessKeyDisplayDismissedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::AccessKeyDisplayDismissedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "AccessKeyDisplayDismissedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyDisplayRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->AccessKeyDisplayRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::AccessKeyDisplayRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::AccessKeyDisplayRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "AccessKeyDisplayRequestedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyInvoked", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->AccessKeyInvoked::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::AccessKeyInvokedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::AccessKeyInvokedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "AccessKeyInvokedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"contextCanceled", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ContextCanceled::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::RoutedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::RoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "RoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"contextRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ContextRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::ContextRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::ContextRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "ContextRequestedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"gettingFocus", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->GettingFocus::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::GettingFocusEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::GettingFocusEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "GettingFocusEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"losingFocus", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->LosingFocus::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::LosingFocusEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::LosingFocusEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "LosingFocusEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"noFocusCandidateFound", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->NoFocusCandidateFound::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::NoFocusCandidateFoundEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::NoFocusCandidateFoundEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "NoFocusCandidateFoundEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"characterReceived", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->CharacterReceived::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::CharacterReceivedRoutedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::CharacterReceivedRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "CharacterReceivedRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"previewKeyDown", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PreviewKeyDown::add(
            ref new ::Windows::UI::Xaml::Input::KeyEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::KeyRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "KeyRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"previewKeyUp", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->PreviewKeyUp::add(
            ref new ::Windows::UI::Xaml::Input::KeyEventHandler(
            [callbackObjPtr](::Platform::Object^ arg0, ::Windows::UI::Xaml::Input::KeyRoutedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = CreateOpaqueWrapper(arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "KeyRoutedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"processKeyboardAccelerators", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->ProcessKeyboardAccelerators::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::Input::ProcessKeyboardAcceleratorEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::Input::ProcessKeyboardAcceleratorEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Input", "ProcessKeyboardAcceleratorEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"bringIntoViewRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->BringIntoViewRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::UIElement^, ::Windows::UI::Xaml::BringIntoViewRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::UIElement^ arg0, ::Windows::UI::Xaml::BringIntoViewRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "UIElement", arg0);
                  wrappedArg1 = NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "BringIntoViewRequestedEventArgs", arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
 else  {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Value> tokenMapVal = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());
      Local<Object> tokenMap;

      if (tokenMapVal.IsEmpty() || Nan::Equals(tokenMapVal, Undefined()).FromMaybe(false)) {
        tokenMap = Nan::New<Object>();
        NodeRT::Utils::SetHiddenValueWithObject(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked(), tokenMap);
      } else {
        tokenMap = Nan::To<Object>(tokenMapVal).ToLocalChecked();
      }

      Nan::Set(tokenMap, info[0], CreateOpaqueWrapper(::Windows::Foundation::PropertyValue::CreateInt64(registrationToken.Value)));
    }

    static void RemoveListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected a string and a callback")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      if ((!NodeRT::Utils::CaseInsenstiveEquals(L"centerChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"headingChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"loadingStatusChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapDoubleTapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapHolding", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapTapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pitchChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"transformOriginChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"zoomLevelChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"actualCameraChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"actualCameraChanging", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"customExperienceChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapElementClick", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerEntered", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerExited", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"targetCameraChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapRightTapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapContextRequested", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"isEnabledChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"focusDisengaged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"focusEngaged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"layoutUpdated", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"loaded", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"sizeChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"unloaded", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"dataContextChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"loading", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"actualThemeChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"effectiveViewportChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"doubleTapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"dragEnter", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"dragLeave", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"dragOver", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"drop", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"gotFocus", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"holding", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"keyDown", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"keyUp", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"lostFocus", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"manipulationCompleted", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"manipulationDelta", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"manipulationInertiaStarting", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"manipulationStarted", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"manipulationStarting", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerCanceled", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerCaptureLost", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerEntered", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerExited", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerMoved", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerPressed", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerReleased", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"pointerWheelChanged", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"rightTapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"tapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"dragStarting", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"dropCompleted", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyDisplayDismissed", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyDisplayRequested", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyInvoked", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"contextCanceled", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"contextRequested", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"gettingFocus", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"losingFocus", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"noFocusCandidateFound", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"characterReceived", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"previewKeyDown", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"previewKeyUp", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"processKeyboardAccelerators", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"bringIntoViewRequested", str))) {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Function> callback = info[1].As<Function>();
      Local<Value> tokenMap = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());

      if (tokenMap.IsEmpty() || Nan::Equals(tokenMap, Undefined()).FromMaybe(false)) {
        return;
      }

      Local<Value> opaqueWrapperObj =  Nan::Get(Nan::To<Object>(tokenMap).ToLocalChecked(), info[0]).ToLocalChecked();

      if (opaqueWrapperObj.IsEmpty() || Nan::Equals(opaqueWrapperObj,Undefined()).FromMaybe(false)) {
        return;
      }

      OpaqueWrapper *opaqueWrapper = OpaqueWrapper::Unwrap<OpaqueWrapper>(opaqueWrapperObj.As<Object>());

      long long tokenValue = (long long) opaqueWrapper->GetObjectInstance();
      ::Windows::Foundation::EventRegistrationToken registrationToken;
      registrationToken.Value = tokenValue;

      try  {
        if (NodeRT::Utils::CaseInsenstiveEquals(L"centerChanged", str)) {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->CenterChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"headingChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->HeadingChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"loadingStatusChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->LoadingStatusChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapDoubleTapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapDoubleTapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapHolding", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapHolding::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapTapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapTapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pitchChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PitchChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"transformOriginChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->TransformOriginChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"zoomLevelChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ZoomLevelChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"actualCameraChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ActualCameraChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"actualCameraChanging", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ActualCameraChanging::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"customExperienceChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->CustomExperienceChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementClick", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapElementClick::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerEntered", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapElementPointerEntered::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerExited", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapElementPointerExited::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"targetCameraChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->TargetCameraChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapRightTapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapRightTapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapContextRequested", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->MapContextRequested::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"isEnabledChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->IsEnabledChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"focusDisengaged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->FocusDisengaged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"focusEngaged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->FocusEngaged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"layoutUpdated", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->LayoutUpdated::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"loaded", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->Loaded::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"sizeChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->SizeChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"unloaded", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->Unloaded::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"dataContextChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->DataContextChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"loading", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->Loading::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"actualThemeChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ActualThemeChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"effectiveViewportChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->EffectiveViewportChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"doubleTapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->DoubleTapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragEnter", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->DragEnter::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragLeave", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->DragLeave::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragOver", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->DragOver::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"drop", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->Drop::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"gotFocus", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->GotFocus::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"holding", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->Holding::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"keyDown", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->KeyDown::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"keyUp", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->KeyUp::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"lostFocus", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->LostFocus::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationCompleted", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ManipulationCompleted::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationDelta", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ManipulationDelta::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationInertiaStarting", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ManipulationInertiaStarting::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationStarted", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ManipulationStarted::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"manipulationStarting", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ManipulationStarting::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerCanceled", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerCanceled::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerCaptureLost", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerCaptureLost::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerEntered", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerEntered::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerExited", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerExited::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerMoved", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerMoved::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerPressed", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerPressed::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerReleased", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerReleased::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"pointerWheelChanged", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PointerWheelChanged::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"rightTapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->RightTapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"tapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->Tapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"dragStarting", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->DragStarting::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"dropCompleted", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->DropCompleted::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyDisplayDismissed", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->AccessKeyDisplayDismissed::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyDisplayRequested", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->AccessKeyDisplayRequested::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"accessKeyInvoked", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->AccessKeyInvoked::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"contextCanceled", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ContextCanceled::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"contextRequested", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ContextRequested::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"gettingFocus", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->GettingFocus::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"losingFocus", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->LosingFocus::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"noFocusCandidateFound", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->NoFocusCandidateFound::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"characterReceived", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->CharacterReceived::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"previewKeyDown", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PreviewKeyDown::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"previewKeyUp", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->PreviewKeyUp::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"processKeyboardAccelerators", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->ProcessKeyboardAccelerators::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"bringIntoViewRequested", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControl *wrapper = MapControl::Unwrap<MapControl>(info.This());
          wrapper->_instance->BringIntoViewRequested::remove(registrationToken);
        }
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }

      Nan::Delete(Nan::To<Object>(tokenMap).ToLocalChecked(), Nan::To<String>(info[0]).ToLocalChecked());
    }
    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControl^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControl(::Windows::UI::Xaml::Controls::Maps::MapControl^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControl^ UnwrapMapControl(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControl::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControl(::Windows::UI::Xaml::Controls::Maps::MapControl^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControl::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControl^ UnwrapMapControl(Local<Value> value) {
     return MapControl::Unwrap<MapControl>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControl(Local<Object> exports) {
    MapControl::Init(exports);
  }

  class MapControlBusinessLandmarkClickEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlBusinessLandmarkClickEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("localLocations").ToLocalChecked(), LocalLocationsGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlBusinessLandmarkClickEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlBusinessLandmarkClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlBusinessLandmarkClickEventArgs *wrapperInstance = new MapControlBusinessLandmarkClickEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlBusinessLandmarkClickEventArgs(winRtInstance));
    }





    static void LocalLocationsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^>(info.This())) {
        return;
      }

      MapControlBusinessLandmarkClickEventArgs *wrapper = MapControlBusinessLandmarkClickEventArgs::Unwrap<MapControlBusinessLandmarkClickEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVectorView<::Windows::Services::Maps::LocalSearch::LocalLocation^>^ result = wrapper->_instance->LocalLocations;
        info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::Services::Maps::LocalSearch::LocalLocation^>::CreateVectorViewWrapper(result, 
            [](::Windows::Services::Maps::LocalSearch::LocalLocation^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.Services.Maps.LocalSearch", "LocalLocation", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::Services::Maps::LocalSearch::LocalLocation^>(value);
            },
            [](Local<Value> value) -> ::Windows::Services::Maps::LocalSearch::LocalLocation^ {
              return dynamic_cast<::Windows::Services::Maps::LocalSearch::LocalLocation^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlBusinessLandmarkClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ UnwrapMapControlBusinessLandmarkClickEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlBusinessLandmarkClickEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlBusinessLandmarkClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlBusinessLandmarkClickEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ UnwrapMapControlBusinessLandmarkClickEventArgs(Local<Value> value) {
     return MapControlBusinessLandmarkClickEventArgs::Unwrap<MapControlBusinessLandmarkClickEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlBusinessLandmarkClickEventArgs(Local<Object> exports) {
    MapControlBusinessLandmarkClickEventArgs::Init(exports);
  }

  class MapControlBusinessLandmarkPointerEnteredEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlBusinessLandmarkPointerEnteredEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("localLocations").ToLocalChecked(), LocalLocationsGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlBusinessLandmarkPointerEnteredEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlBusinessLandmarkPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlBusinessLandmarkPointerEnteredEventArgs *wrapperInstance = new MapControlBusinessLandmarkPointerEnteredEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlBusinessLandmarkPointerEnteredEventArgs(winRtInstance));
    }





    static void LocalLocationsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapControlBusinessLandmarkPointerEnteredEventArgs *wrapper = MapControlBusinessLandmarkPointerEnteredEventArgs::Unwrap<MapControlBusinessLandmarkPointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVectorView<::Windows::Services::Maps::LocalSearch::LocalLocation^>^ result = wrapper->_instance->LocalLocations;
        info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::Services::Maps::LocalSearch::LocalLocation^>::CreateVectorViewWrapper(result, 
            [](::Windows::Services::Maps::LocalSearch::LocalLocation^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.Services.Maps.LocalSearch", "LocalLocation", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::Services::Maps::LocalSearch::LocalLocation^>(value);
            },
            [](Local<Value> value) -> ::Windows::Services::Maps::LocalSearch::LocalLocation^ {
              return dynamic_cast<::Windows::Services::Maps::LocalSearch::LocalLocation^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlBusinessLandmarkPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ UnwrapMapControlBusinessLandmarkPointerEnteredEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlBusinessLandmarkPointerEnteredEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlBusinessLandmarkPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlBusinessLandmarkPointerEnteredEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ UnwrapMapControlBusinessLandmarkPointerEnteredEventArgs(Local<Value> value) {
     return MapControlBusinessLandmarkPointerEnteredEventArgs::Unwrap<MapControlBusinessLandmarkPointerEnteredEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlBusinessLandmarkPointerEnteredEventArgs(Local<Object> exports) {
    MapControlBusinessLandmarkPointerEnteredEventArgs::Init(exports);
  }

  class MapControlBusinessLandmarkPointerExitedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlBusinessLandmarkPointerExitedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("localLocations").ToLocalChecked(), LocalLocationsGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlBusinessLandmarkPointerExitedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlBusinessLandmarkPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlBusinessLandmarkPointerExitedEventArgs *wrapperInstance = new MapControlBusinessLandmarkPointerExitedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlBusinessLandmarkPointerExitedEventArgs(winRtInstance));
    }





    static void LocalLocationsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapControlBusinessLandmarkPointerExitedEventArgs *wrapper = MapControlBusinessLandmarkPointerExitedEventArgs::Unwrap<MapControlBusinessLandmarkPointerExitedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVectorView<::Windows::Services::Maps::LocalSearch::LocalLocation^>^ result = wrapper->_instance->LocalLocations;
        info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::Services::Maps::LocalSearch::LocalLocation^>::CreateVectorViewWrapper(result, 
            [](::Windows::Services::Maps::LocalSearch::LocalLocation^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.Services.Maps.LocalSearch", "LocalLocation", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::Services::Maps::LocalSearch::LocalLocation^>(value);
            },
            [](Local<Value> value) -> ::Windows::Services::Maps::LocalSearch::LocalLocation^ {
              return dynamic_cast<::Windows::Services::Maps::LocalSearch::LocalLocation^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlBusinessLandmarkPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ UnwrapMapControlBusinessLandmarkPointerExitedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlBusinessLandmarkPointerExitedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlBusinessLandmarkPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlBusinessLandmarkPointerExitedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ UnwrapMapControlBusinessLandmarkPointerExitedEventArgs(Local<Value> value) {
     return MapControlBusinessLandmarkPointerExitedEventArgs::Unwrap<MapControlBusinessLandmarkPointerExitedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlBusinessLandmarkPointerExitedEventArgs(Local<Object> exports) {
    MapControlBusinessLandmarkPointerExitedEventArgs::Init(exports);
  }

  class MapControlBusinessLandmarkRightTappedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlBusinessLandmarkRightTappedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("localLocations").ToLocalChecked(), LocalLocationsGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlBusinessLandmarkRightTappedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlBusinessLandmarkRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlBusinessLandmarkRightTappedEventArgs *wrapperInstance = new MapControlBusinessLandmarkRightTappedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlBusinessLandmarkRightTappedEventArgs(winRtInstance));
    }





    static void LocalLocationsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^>(info.This())) {
        return;
      }

      MapControlBusinessLandmarkRightTappedEventArgs *wrapper = MapControlBusinessLandmarkRightTappedEventArgs::Unwrap<MapControlBusinessLandmarkRightTappedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVectorView<::Windows::Services::Maps::LocalSearch::LocalLocation^>^ result = wrapper->_instance->LocalLocations;
        info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::Services::Maps::LocalSearch::LocalLocation^>::CreateVectorViewWrapper(result, 
            [](::Windows::Services::Maps::LocalSearch::LocalLocation^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.Services.Maps.LocalSearch", "LocalLocation", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::Services::Maps::LocalSearch::LocalLocation^>(value);
            },
            [](Local<Value> value) -> ::Windows::Services::Maps::LocalSearch::LocalLocation^ {
              return dynamic_cast<::Windows::Services::Maps::LocalSearch::LocalLocation^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlBusinessLandmarkRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ UnwrapMapControlBusinessLandmarkRightTappedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlBusinessLandmarkRightTappedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlBusinessLandmarkRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlBusinessLandmarkRightTappedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ UnwrapMapControlBusinessLandmarkRightTappedEventArgs(Local<Value> value) {
     return MapControlBusinessLandmarkRightTappedEventArgs::Unwrap<MapControlBusinessLandmarkRightTappedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlBusinessLandmarkRightTappedEventArgs(Local<Object> exports) {
    MapControlBusinessLandmarkRightTappedEventArgs::Init(exports);
  }

  class MapControlDataHelper : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlDataHelper").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);




          
          Nan::SetPrototypeMethod(localRef,"addListener", AddListener);
          Nan::SetPrototypeMethod(localRef,"on", AddListener);
          Nan::SetPrototypeMethod(localRef,"removeListener", RemoveListener);
          Nan::SetPrototypeMethod(localRef, "off", RemoveListener);

          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetMethod(constructor, "createMapControl", CreateMapControl);


        Nan::Set(exports, Nan::New<String>("MapControlDataHelper").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlDataHelper(::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControl^>(info[0]))
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0 = UnwrapMapControl(info[0]);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlDataHelper *wrapperInstance = new MapControlDataHelper(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlDataHelper(winRtInstance));
    }





    static void CreateMapControl(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && info[0]->IsBoolean())
      {
        try
        {
          bool arg0 = Nan::To<bool>(info[0]).FromMaybe(false);
          
          ::Windows::UI::Xaml::Controls::Maps::MapControl^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper::CreateMapControl(arg0);
          info.GetReturnValue().Set(WrapMapControl(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void AddListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected arguments are eventName(string),callback(function)")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      Local<Function> callback = info[1].As<Function>();

      ::Windows::Foundation::EventRegistrationToken registrationToken;
      if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkClick", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->BusinessLandmarkClick::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkClickEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlBusinessLandmarkClickEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkRightTapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->BusinessLandmarkRightTapped::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkRightTappedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlBusinessLandmarkRightTappedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeatureClick", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->TransitFeatureClick::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlTransitFeatureClickEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeatureRightTapped", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->TransitFeatureRightTapped::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlTransitFeatureRightTappedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkPointerEntered", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->BusinessLandmarkPointerEntered::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerEnteredEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlBusinessLandmarkPointerEnteredEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkPointerExited", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->BusinessLandmarkPointerExited::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlBusinessLandmarkPointerExitedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlBusinessLandmarkPointerExitedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeaturePointerEntered", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->TransitFeaturePointerEntered::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlTransitFeaturePointerEnteredEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeaturePointerExited", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->TransitFeaturePointerExited::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapControl^, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapControl^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapControl(arg0);
                  wrappedArg1 = WrapMapControlTransitFeaturePointerExitedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
 else  {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Value> tokenMapVal = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());
      Local<Object> tokenMap;

      if (tokenMapVal.IsEmpty() || Nan::Equals(tokenMapVal, Undefined()).FromMaybe(false)) {
        tokenMap = Nan::New<Object>();
        NodeRT::Utils::SetHiddenValueWithObject(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked(), tokenMap);
      } else {
        tokenMap = Nan::To<Object>(tokenMapVal).ToLocalChecked();
      }

      Nan::Set(tokenMap, info[0], CreateOpaqueWrapper(::Windows::Foundation::PropertyValue::CreateInt64(registrationToken.Value)));
    }

    static void RemoveListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected a string and a callback")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      if ((!NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkClick", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkRightTapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"transitFeatureClick", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"transitFeatureRightTapped", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkPointerEntered", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkPointerExited", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"transitFeaturePointerEntered", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"transitFeaturePointerExited", str))) {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Function> callback = info[1].As<Function>();
      Local<Value> tokenMap = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());

      if (tokenMap.IsEmpty() || Nan::Equals(tokenMap, Undefined()).FromMaybe(false)) {
        return;
      }

      Local<Value> opaqueWrapperObj =  Nan::Get(Nan::To<Object>(tokenMap).ToLocalChecked(), info[0]).ToLocalChecked();

      if (opaqueWrapperObj.IsEmpty() || Nan::Equals(opaqueWrapperObj,Undefined()).FromMaybe(false)) {
        return;
      }

      OpaqueWrapper *opaqueWrapper = OpaqueWrapper::Unwrap<OpaqueWrapper>(opaqueWrapperObj.As<Object>());

      long long tokenValue = (long long) opaqueWrapper->GetObjectInstance();
      ::Windows::Foundation::EventRegistrationToken registrationToken;
      registrationToken.Value = tokenValue;

      try  {
        if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkClick", str)) {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->BusinessLandmarkClick::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkRightTapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->BusinessLandmarkRightTapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeatureClick", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->TransitFeatureClick::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeatureRightTapped", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->TransitFeatureRightTapped::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkPointerEntered", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->BusinessLandmarkPointerEntered::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"businessLandmarkPointerExited", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->BusinessLandmarkPointerExited::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeaturePointerEntered", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->TransitFeaturePointerEntered::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"transitFeaturePointerExited", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapControlDataHelper *wrapper = MapControlDataHelper::Unwrap<MapControlDataHelper>(info.This());
          wrapper->_instance->TransitFeaturePointerExited::remove(registrationToken);
        }
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }

      Nan::Delete(Nan::To<Object>(tokenMap).ToLocalChecked(), Nan::To<String>(info[0]).ToLocalChecked());
    }
    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlDataHelper(::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ UnwrapMapControlDataHelper(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlDataHelper::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlDataHelper(::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlDataHelper::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlDataHelper^ UnwrapMapControlDataHelper(Local<Value> value) {
     return MapControlDataHelper::Unwrap<MapControlDataHelper>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlDataHelper(Local<Object> exports) {
    MapControlDataHelper::Init(exports);
  }

  class MapControlTransitFeatureClickEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlTransitFeatureClickEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("displayName").ToLocalChecked(), DisplayNameGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transitProperties").ToLocalChecked(), TransitPropertiesGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlTransitFeatureClickEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlTransitFeatureClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlTransitFeatureClickEventArgs *wrapperInstance = new MapControlTransitFeatureClickEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlTransitFeatureClickEventArgs(winRtInstance));
    }





    static void DisplayNameGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeatureClickEventArgs *wrapper = MapControlTransitFeatureClickEventArgs::Unwrap<MapControlTransitFeatureClickEventArgs>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->DisplayName;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeatureClickEventArgs *wrapper = MapControlTransitFeatureClickEventArgs::Unwrap<MapControlTransitFeatureClickEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitPropertiesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeatureClickEventArgs *wrapper = MapControlTransitFeatureClickEventArgs::Unwrap<MapControlTransitFeatureClickEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IMapView<::Platform::String^, ::Platform::Object^>^ result = wrapper->_instance->TransitProperties;
        info.GetReturnValue().Set(NodeRT::Collections::MapViewWrapper<::Platform::String^,::Platform::Object^>::CreateMapViewWrapper(result, 
            [](::Platform::String^ val) -> Local<Value> {
              return NodeRT::Utils::NewString(val->Data());
            },
            [](Local<Value> value) -> bool {
              return value->IsString();
            },
            [](Local<Value> value) -> ::Platform::String^ {
              return ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));
            },
            [](::Platform::Object^ val) -> Local<Value> {
              return CreateOpaqueWrapper(val);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlTransitFeatureClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ UnwrapMapControlTransitFeatureClickEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlTransitFeatureClickEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlTransitFeatureClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlTransitFeatureClickEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureClickEventArgs^ UnwrapMapControlTransitFeatureClickEventArgs(Local<Value> value) {
     return MapControlTransitFeatureClickEventArgs::Unwrap<MapControlTransitFeatureClickEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlTransitFeatureClickEventArgs(Local<Object> exports) {
    MapControlTransitFeatureClickEventArgs::Init(exports);
  }

  class MapControlTransitFeaturePointerEnteredEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlTransitFeaturePointerEnteredEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("displayName").ToLocalChecked(), DisplayNameGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transitProperties").ToLocalChecked(), TransitPropertiesGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlTransitFeaturePointerEnteredEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlTransitFeaturePointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlTransitFeaturePointerEnteredEventArgs *wrapperInstance = new MapControlTransitFeaturePointerEnteredEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlTransitFeaturePointerEnteredEventArgs(winRtInstance));
    }





    static void DisplayNameGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeaturePointerEnteredEventArgs *wrapper = MapControlTransitFeaturePointerEnteredEventArgs::Unwrap<MapControlTransitFeaturePointerEnteredEventArgs>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->DisplayName;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeaturePointerEnteredEventArgs *wrapper = MapControlTransitFeaturePointerEnteredEventArgs::Unwrap<MapControlTransitFeaturePointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitPropertiesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeaturePointerEnteredEventArgs *wrapper = MapControlTransitFeaturePointerEnteredEventArgs::Unwrap<MapControlTransitFeaturePointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IMapView<::Platform::String^, ::Platform::Object^>^ result = wrapper->_instance->TransitProperties;
        info.GetReturnValue().Set(NodeRT::Collections::MapViewWrapper<::Platform::String^,::Platform::Object^>::CreateMapViewWrapper(result, 
            [](::Platform::String^ val) -> Local<Value> {
              return NodeRT::Utils::NewString(val->Data());
            },
            [](Local<Value> value) -> bool {
              return value->IsString();
            },
            [](Local<Value> value) -> ::Platform::String^ {
              return ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));
            },
            [](::Platform::Object^ val) -> Local<Value> {
              return CreateOpaqueWrapper(val);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlTransitFeaturePointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ UnwrapMapControlTransitFeaturePointerEnteredEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlTransitFeaturePointerEnteredEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlTransitFeaturePointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlTransitFeaturePointerEnteredEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerEnteredEventArgs^ UnwrapMapControlTransitFeaturePointerEnteredEventArgs(Local<Value> value) {
     return MapControlTransitFeaturePointerEnteredEventArgs::Unwrap<MapControlTransitFeaturePointerEnteredEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlTransitFeaturePointerEnteredEventArgs(Local<Object> exports) {
    MapControlTransitFeaturePointerEnteredEventArgs::Init(exports);
  }

  class MapControlTransitFeaturePointerExitedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlTransitFeaturePointerExitedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("displayName").ToLocalChecked(), DisplayNameGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transitProperties").ToLocalChecked(), TransitPropertiesGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlTransitFeaturePointerExitedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlTransitFeaturePointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlTransitFeaturePointerExitedEventArgs *wrapperInstance = new MapControlTransitFeaturePointerExitedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlTransitFeaturePointerExitedEventArgs(winRtInstance));
    }





    static void DisplayNameGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeaturePointerExitedEventArgs *wrapper = MapControlTransitFeaturePointerExitedEventArgs::Unwrap<MapControlTransitFeaturePointerExitedEventArgs>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->DisplayName;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeaturePointerExitedEventArgs *wrapper = MapControlTransitFeaturePointerExitedEventArgs::Unwrap<MapControlTransitFeaturePointerExitedEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitPropertiesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeaturePointerExitedEventArgs *wrapper = MapControlTransitFeaturePointerExitedEventArgs::Unwrap<MapControlTransitFeaturePointerExitedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IMapView<::Platform::String^, ::Platform::Object^>^ result = wrapper->_instance->TransitProperties;
        info.GetReturnValue().Set(NodeRT::Collections::MapViewWrapper<::Platform::String^,::Platform::Object^>::CreateMapViewWrapper(result, 
            [](::Platform::String^ val) -> Local<Value> {
              return NodeRT::Utils::NewString(val->Data());
            },
            [](Local<Value> value) -> bool {
              return value->IsString();
            },
            [](Local<Value> value) -> ::Platform::String^ {
              return ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));
            },
            [](::Platform::Object^ val) -> Local<Value> {
              return CreateOpaqueWrapper(val);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlTransitFeaturePointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ UnwrapMapControlTransitFeaturePointerExitedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlTransitFeaturePointerExitedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlTransitFeaturePointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlTransitFeaturePointerExitedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeaturePointerExitedEventArgs^ UnwrapMapControlTransitFeaturePointerExitedEventArgs(Local<Value> value) {
     return MapControlTransitFeaturePointerExitedEventArgs::Unwrap<MapControlTransitFeaturePointerExitedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlTransitFeaturePointerExitedEventArgs(Local<Object> exports) {
    MapControlTransitFeaturePointerExitedEventArgs::Init(exports);
  }

  class MapControlTransitFeatureRightTappedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapControlTransitFeatureRightTappedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("displayName").ToLocalChecked(), DisplayNameGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("transitProperties").ToLocalChecked(), TransitPropertiesGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapControlTransitFeatureRightTappedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapControlTransitFeatureRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapControlTransitFeatureRightTappedEventArgs *wrapperInstance = new MapControlTransitFeatureRightTappedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapControlTransitFeatureRightTappedEventArgs(winRtInstance));
    }





    static void DisplayNameGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeatureRightTappedEventArgs *wrapper = MapControlTransitFeatureRightTappedEventArgs::Unwrap<MapControlTransitFeatureRightTappedEventArgs>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->DisplayName;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeatureRightTappedEventArgs *wrapper = MapControlTransitFeatureRightTappedEventArgs::Unwrap<MapControlTransitFeatureRightTappedEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TransitPropertiesGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^>(info.This())) {
        return;
      }

      MapControlTransitFeatureRightTappedEventArgs *wrapper = MapControlTransitFeatureRightTappedEventArgs::Unwrap<MapControlTransitFeatureRightTappedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IMapView<::Platform::String^, ::Platform::Object^>^ result = wrapper->_instance->TransitProperties;
        info.GetReturnValue().Set(NodeRT::Collections::MapViewWrapper<::Platform::String^,::Platform::Object^>::CreateMapViewWrapper(result, 
            [](::Platform::String^ val) -> Local<Value> {
              return NodeRT::Utils::NewString(val->Data());
            },
            [](Local<Value> value) -> bool {
              return value->IsString();
            },
            [](Local<Value> value) -> ::Platform::String^ {
              return ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));
            },
            [](::Platform::Object^ val) -> Local<Value> {
              return CreateOpaqueWrapper(val);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapControlTransitFeatureRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ UnwrapMapControlTransitFeatureRightTappedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapControlTransitFeatureRightTappedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapControlTransitFeatureRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapControlTransitFeatureRightTappedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapControlTransitFeatureRightTappedEventArgs^ UnwrapMapControlTransitFeatureRightTappedEventArgs(Local<Value> value) {
     return MapControlTransitFeatureRightTappedEventArgs::Unwrap<MapControlTransitFeatureRightTappedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapControlTransitFeatureRightTappedEventArgs(Local<Object> exports) {
    MapControlTransitFeatureRightTappedEventArgs::Init(exports);
  }

  class MapCustomExperience : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapCustomExperience").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapCustomExperience").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapCustomExperience(::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapCustomExperience *wrapperInstance = new MapCustomExperience(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapCustomExperience(winRtInstance));
    }





    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapCustomExperience(::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ UnwrapMapCustomExperience(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapCustomExperience::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapCustomExperience(::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapCustomExperience::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapCustomExperience^ UnwrapMapCustomExperience(Local<Value> value) {
     return MapCustomExperience::Unwrap<MapCustomExperience>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapCustomExperience(Local<Object> exports) {
    MapCustomExperience::Init(exports);
  }

  class MapCustomExperienceChangedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapCustomExperienceChangedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);






        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapCustomExperienceChangedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapCustomExperienceChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapCustomExperienceChangedEventArgs *wrapperInstance = new MapCustomExperienceChangedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapCustomExperienceChangedEventArgs(winRtInstance));
    }







    private:
      ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapCustomExperienceChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ UnwrapMapCustomExperienceChangedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapCustomExperienceChangedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapCustomExperienceChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapCustomExperienceChangedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapCustomExperienceChangedEventArgs^ UnwrapMapCustomExperienceChangedEventArgs(Local<Value> value) {
     return MapCustomExperienceChangedEventArgs::Unwrap<MapCustomExperienceChangedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapCustomExperienceChangedEventArgs(Local<Object> exports) {
    MapCustomExperienceChangedEventArgs::Init(exports);
  }

  class MapElement3D : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElement3D").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("scale").ToLocalChecked(), ScaleGetter, ScaleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("roll").ToLocalChecked(), RollGetter, RollSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("pitch").ToLocalChecked(), PitchGetter, PitchSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("model").ToLocalChecked(), ModelGetter, ModelSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter, LocationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("heading").ToLocalChecked(), HeadingGetter, HeadingSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tag").ToLocalChecked(), TagGetter, TagSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntryState").ToLocalChecked(), MapStyleSheetEntryStateGetter, MapStyleSheetEntryStateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntry").ToLocalChecked(), MapStyleSheetEntryGetter, MapStyleSheetEntrySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isEnabled").ToLocalChecked(), IsEnabledGetter, IsEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("headingProperty").ToLocalChecked(), HeadingPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("locationProperty").ToLocalChecked(), LocationPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pitchProperty").ToLocalChecked(), PitchPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("rollProperty").ToLocalChecked(), RollPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("scaleProperty").ToLocalChecked(), ScalePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryProperty").ToLocalChecked(), MapStyleSheetEntryPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryStateProperty").ToLocalChecked(), MapStyleSheetEntryStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tagProperty").ToLocalChecked(), TagPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isEnabledProperty").ToLocalChecked(), IsEnabledPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapElement3D").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElement3D(::Windows::UI::Xaml::Controls::Maps::MapElement3D^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElement3D^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElement3D^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElement3D();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElement3D *wrapperInstance = new MapElement3D(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElement3D^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElement3D^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElement3D(winRtInstance));
    }





    static void ScaleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try  {
        ::Platform::Numerics::Vector3 result = wrapper->_instance->Scale;
        info.GetReturnValue().Set(Vector3ToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ScaleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsVector3JsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try {

        ::Platform::Numerics::Vector3 winRtValue = Vector3FromJsObject(value);

        wrapper->_instance->Scale = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RollGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try  {
        double result = wrapper->_instance->Roll;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RollSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Roll = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void PitchGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try  {
        double result = wrapper->_instance->Pitch;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PitchSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Pitch = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ModelGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ result = wrapper->_instance->Model;
        info.GetReturnValue().Set(WrapMapModel3D(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ModelSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapModel3D^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Controls::Maps::MapModel3D^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Model = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try {

        ::Windows::Devices::Geolocation::Geopoint^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Location = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void HeadingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try  {
        double result = wrapper->_instance->Heading;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void HeadingSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement3D^>(info.This())) {
        return;
      }

      MapElement3D *wrapper = MapElement3D::Unwrap<MapElement3D>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->Heading = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TagGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->Tag;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TagSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Tag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntryState;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntryStateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntryState = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntry;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntrySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntry = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void HeadingPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement3D::HeadingProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LocationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement3D::LocationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PitchPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement3D::PitchProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RollPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement3D::RollProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ScalePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement3D::ScaleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TagPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::TagProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::IsEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElement3D^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElement3D(::Windows::UI::Xaml::Controls::Maps::MapElement3D^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElement3D^ UnwrapMapElement3D(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElement3D::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElement3D(::Windows::UI::Xaml::Controls::Maps::MapElement3D^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElement3D::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElement3D^ UnwrapMapElement3D(Local<Value> value) {
     return MapElement3D::Unwrap<MapElement3D>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElement3D(Local<Object> exports) {
    MapElement3D::Init(exports);
  }

  class MapElementClickEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementClickEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElements").ToLocalChecked(), MapElementsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapElementClickEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementClickEventArgs *wrapperInstance = new MapElementClickEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementClickEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^>(info.This())) {
        return;
      }

      MapElementClickEventArgs *wrapper = MapElementClickEventArgs::Unwrap<MapElementClickEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^>(info.This())) {
        return;
      }

      MapElementClickEventArgs *wrapper = MapElementClickEventArgs::Unwrap<MapElementClickEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result = wrapper->_instance->MapElements;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^>(info.This())) {
        return;
      }

      MapElementClickEventArgs *wrapper = MapElementClickEventArgs::Unwrap<MapElementClickEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ UnwrapMapElementClickEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementClickEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementClickEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementClickEventArgs^ UnwrapMapElementClickEventArgs(Local<Value> value) {
     return MapElementClickEventArgs::Unwrap<MapElementClickEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementClickEventArgs(Local<Object> exports) {
    MapElementClickEventArgs::Init(exports);
  }

  class MapElementPointerEnteredEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementPointerEnteredEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElement").ToLocalChecked(), MapElementGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapElementPointerEnteredEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementPointerEnteredEventArgs *wrapperInstance = new MapElementPointerEnteredEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementPointerEnteredEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapElementPointerEnteredEventArgs *wrapper = MapElementPointerEnteredEventArgs::Unwrap<MapElementPointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapElementPointerEnteredEventArgs *wrapper = MapElementPointerEnteredEventArgs::Unwrap<MapElementPointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapElement^ result = wrapper->_instance->MapElement;
        info.GetReturnValue().Set(WrapMapElement(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapElementPointerEnteredEventArgs *wrapper = MapElementPointerEnteredEventArgs::Unwrap<MapElementPointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ UnwrapMapElementPointerEnteredEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementPointerEnteredEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementPointerEnteredEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementPointerEnteredEventArgs^ UnwrapMapElementPointerEnteredEventArgs(Local<Value> value) {
     return MapElementPointerEnteredEventArgs::Unwrap<MapElementPointerEnteredEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementPointerEnteredEventArgs(Local<Object> exports) {
    MapElementPointerEnteredEventArgs::Init(exports);
  }

  class MapElementPointerExitedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementPointerExitedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElement").ToLocalChecked(), MapElementGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapElementPointerExitedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementPointerExitedEventArgs *wrapperInstance = new MapElementPointerExitedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementPointerExitedEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapElementPointerExitedEventArgs *wrapper = MapElementPointerExitedEventArgs::Unwrap<MapElementPointerExitedEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapElementPointerExitedEventArgs *wrapper = MapElementPointerExitedEventArgs::Unwrap<MapElementPointerExitedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapElement^ result = wrapper->_instance->MapElement;
        info.GetReturnValue().Set(WrapMapElement(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapElementPointerExitedEventArgs *wrapper = MapElementPointerExitedEventArgs::Unwrap<MapElementPointerExitedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ UnwrapMapElementPointerExitedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementPointerExitedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementPointerExitedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementPointerExitedEventArgs^ UnwrapMapElementPointerExitedEventArgs(Local<Value> value) {
     return MapElementPointerExitedEventArgs::Unwrap<MapElementPointerExitedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementPointerExitedEventArgs(Local<Object> exports) {
    MapElementPointerExitedEventArgs::Init(exports);
  }

  class MapLayer : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapLayer").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapLayer").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapLayer(::Windows::UI::Xaml::Controls::Maps::MapLayer^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapLayer^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapLayer^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapLayer();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapLayer *wrapperInstance = new MapLayer(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapLayer^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapLayer^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapLayer(winRtInstance));
    }





    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapLayer::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapLayer::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapLayer::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapLayer^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapLayer(::Windows::UI::Xaml::Controls::Maps::MapLayer^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapLayer^ UnwrapMapLayer(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapLayer::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapLayer(::Windows::UI::Xaml::Controls::Maps::MapLayer^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapLayer::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapLayer^ UnwrapMapLayer(Local<Value> value) {
     return MapLayer::Unwrap<MapLayer>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapLayer(Local<Object> exports) {
    MapLayer::Init(exports);
  }

  class MapElementsLayer : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementsLayer").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);




          
          Nan::SetPrototypeMethod(localRef,"addListener", AddListener);
          Nan::SetPrototypeMethod(localRef,"on", AddListener);
          Nan::SetPrototypeMethod(localRef,"removeListener", RemoveListener);
          Nan::SetPrototypeMethod(localRef, "off", RemoveListener);

          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElements").ToLocalChecked(), MapElementsGetter, MapElementsSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("mapElementsProperty").ToLocalChecked(), MapElementsPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapElementsLayer").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementsLayer(::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementsLayer *wrapperInstance = new MapElementsLayer(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementsLayer(winRtInstance));
    }





    static void MapElementsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This())) {
        return;
      }

      MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result = wrapper->_instance->MapElements;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementsSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!(NodeRT::Utils::IsWinRtWrapperOf<::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^>(value) || value->IsArray())) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This())) {
        return;
      }

      MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());

      try {

        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ winRtValue = 
            [] (v8::Local<v8::Value> value) -> ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^
            {
              if (value->IsArray())
              {
                return NodeRT::Collections::JsArrayToWinrtVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value.As<Array>(), 
                 [](Local<Value> value) -> bool {
                   return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
                 },
                 [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
                   return UnwrapMapElement(value);
                 }
                );
              }
              else
              {
                return dynamic_cast<::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^>(NodeRT::Utils::GetObjectInstance(value));
              }
            } (value);

        wrapper->_instance->MapElements = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapLayer^>(info.This())) {
        return;
      }

      MapLayer *wrapper = MapLayer::Unwrap<MapLayer>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void MapElementsPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer::MapElementsProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapLayer::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapLayer::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapLayer::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AddListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected arguments are eventName(string),callback(function)")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      Local<Function> callback = info[1].As<Function>();

      ::Windows::Foundation::EventRegistrationToken registrationToken;
      if (NodeRT::Utils::CaseInsenstiveEquals(L"mapContextRequested", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapContextRequested::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapElementsLayer(arg0);
                  wrappedArg1 = WrapMapElementsLayerContextRequestedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementClick", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapElementClick::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapElementsLayer(arg0);
                  wrappedArg1 = WrapMapElementsLayerClickEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerEntered", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapElementPointerEntered::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapElementsLayer(arg0);
                  wrappedArg1 = WrapMapElementsLayerPointerEnteredEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
      else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerExited", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->MapElementPointerExited::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapElementsLayer(arg0);
                  wrappedArg1 = WrapMapElementsLayerPointerExitedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
 else  {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Value> tokenMapVal = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());
      Local<Object> tokenMap;

      if (tokenMapVal.IsEmpty() || Nan::Equals(tokenMapVal, Undefined()).FromMaybe(false)) {
        tokenMap = Nan::New<Object>();
        NodeRT::Utils::SetHiddenValueWithObject(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked(), tokenMap);
      } else {
        tokenMap = Nan::To<Object>(tokenMapVal).ToLocalChecked();
      }

      Nan::Set(tokenMap, info[0], CreateOpaqueWrapper(::Windows::Foundation::PropertyValue::CreateInt64(registrationToken.Value)));
    }

    static void RemoveListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected a string and a callback")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      if ((!NodeRT::Utils::CaseInsenstiveEquals(L"mapContextRequested", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapElementClick", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerEntered", str)) &&(!NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerExited", str))) {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Function> callback = info[1].As<Function>();
      Local<Value> tokenMap = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());

      if (tokenMap.IsEmpty() || Nan::Equals(tokenMap, Undefined()).FromMaybe(false)) {
        return;
      }

      Local<Value> opaqueWrapperObj =  Nan::Get(Nan::To<Object>(tokenMap).ToLocalChecked(), info[0]).ToLocalChecked();

      if (opaqueWrapperObj.IsEmpty() || Nan::Equals(opaqueWrapperObj,Undefined()).FromMaybe(false)) {
        return;
      }

      OpaqueWrapper *opaqueWrapper = OpaqueWrapper::Unwrap<OpaqueWrapper>(opaqueWrapperObj.As<Object>());

      long long tokenValue = (long long) opaqueWrapper->GetObjectInstance();
      ::Windows::Foundation::EventRegistrationToken registrationToken;
      registrationToken.Value = tokenValue;

      try  {
        if (NodeRT::Utils::CaseInsenstiveEquals(L"mapContextRequested", str)) {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
          wrapper->_instance->MapContextRequested::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementClick", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
          wrapper->_instance->MapElementClick::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerEntered", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
          wrapper->_instance->MapElementPointerEntered::remove(registrationToken);
        }
        else if (NodeRT::Utils::CaseInsenstiveEquals(L"mapElementPointerExited", str))
        {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapElementsLayer *wrapper = MapElementsLayer::Unwrap<MapElementsLayer>(info.This());
          wrapper->_instance->MapElementPointerExited::remove(registrationToken);
        }
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }

      Nan::Delete(Nan::To<Object>(tokenMap).ToLocalChecked(), Nan::To<String>(info[0]).ToLocalChecked());
    }
    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementsLayer(::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ UnwrapMapElementsLayer(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementsLayer::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementsLayer(::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementsLayer::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayer^ UnwrapMapElementsLayer(Local<Value> value) {
     return MapElementsLayer::Unwrap<MapElementsLayer>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementsLayer(Local<Object> exports) {
    MapElementsLayer::Init(exports);
  }

  class MapElementsLayerClickEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementsLayerClickEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElements").ToLocalChecked(), MapElementsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapElementsLayerClickEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementsLayerClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementsLayerClickEventArgs *wrapperInstance = new MapElementsLayerClickEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementsLayerClickEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerClickEventArgs *wrapper = MapElementsLayerClickEventArgs::Unwrap<MapElementsLayerClickEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerClickEventArgs *wrapper = MapElementsLayerClickEventArgs::Unwrap<MapElementsLayerClickEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result = wrapper->_instance->MapElements;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerClickEventArgs *wrapper = MapElementsLayerClickEventArgs::Unwrap<MapElementsLayerClickEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementsLayerClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ UnwrapMapElementsLayerClickEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementsLayerClickEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementsLayerClickEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementsLayerClickEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerClickEventArgs^ UnwrapMapElementsLayerClickEventArgs(Local<Value> value) {
     return MapElementsLayerClickEventArgs::Unwrap<MapElementsLayerClickEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementsLayerClickEventArgs(Local<Object> exports) {
    MapElementsLayerClickEventArgs::Init(exports);
  }

  class MapElementsLayerContextRequestedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementsLayerContextRequestedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElements").ToLocalChecked(), MapElementsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapElementsLayerContextRequestedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementsLayerContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementsLayerContextRequestedEventArgs *wrapperInstance = new MapElementsLayerContextRequestedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementsLayerContextRequestedEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerContextRequestedEventArgs *wrapper = MapElementsLayerContextRequestedEventArgs::Unwrap<MapElementsLayerContextRequestedEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerContextRequestedEventArgs *wrapper = MapElementsLayerContextRequestedEventArgs::Unwrap<MapElementsLayerContextRequestedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVectorView<::Windows::UI::Xaml::Controls::Maps::MapElement^>^ result = wrapper->_instance->MapElements;
        info.GetReturnValue().Set(NodeRT::Collections::VectorViewWrapper<::Windows::UI::Xaml::Controls::Maps::MapElement^>::CreateVectorViewWrapper(result, 
            [](::Windows::UI::Xaml::Controls::Maps::MapElement^ val) -> Local<Value> {
              return WrapMapElement(val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapElement^ {
              return UnwrapMapElement(value);
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerContextRequestedEventArgs *wrapper = MapElementsLayerContextRequestedEventArgs::Unwrap<MapElementsLayerContextRequestedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementsLayerContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ UnwrapMapElementsLayerContextRequestedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementsLayerContextRequestedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementsLayerContextRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementsLayerContextRequestedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerContextRequestedEventArgs^ UnwrapMapElementsLayerContextRequestedEventArgs(Local<Value> value) {
     return MapElementsLayerContextRequestedEventArgs::Unwrap<MapElementsLayerContextRequestedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementsLayerContextRequestedEventArgs(Local<Object> exports) {
    MapElementsLayerContextRequestedEventArgs::Init(exports);
  }

  class MapElementsLayerPointerEnteredEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementsLayerPointerEnteredEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElement").ToLocalChecked(), MapElementGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapElementsLayerPointerEnteredEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementsLayerPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementsLayerPointerEnteredEventArgs *wrapperInstance = new MapElementsLayerPointerEnteredEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementsLayerPointerEnteredEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerPointerEnteredEventArgs *wrapper = MapElementsLayerPointerEnteredEventArgs::Unwrap<MapElementsLayerPointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerPointerEnteredEventArgs *wrapper = MapElementsLayerPointerEnteredEventArgs::Unwrap<MapElementsLayerPointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapElement^ result = wrapper->_instance->MapElement;
        info.GetReturnValue().Set(WrapMapElement(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerPointerEnteredEventArgs *wrapper = MapElementsLayerPointerEnteredEventArgs::Unwrap<MapElementsLayerPointerEnteredEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementsLayerPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ UnwrapMapElementsLayerPointerEnteredEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementsLayerPointerEnteredEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementsLayerPointerEnteredEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementsLayerPointerEnteredEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerEnteredEventArgs^ UnwrapMapElementsLayerPointerEnteredEventArgs(Local<Value> value) {
     return MapElementsLayerPointerEnteredEventArgs::Unwrap<MapElementsLayerPointerEnteredEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementsLayerPointerEnteredEventArgs(Local<Object> exports) {
    MapElementsLayerPointerEnteredEventArgs::Init(exports);
  }

  class MapElementsLayerPointerExitedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapElementsLayerPointerExitedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapElement").ToLocalChecked(), MapElementGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapElementsLayerPointerExitedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapElementsLayerPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapElementsLayerPointerExitedEventArgs *wrapperInstance = new MapElementsLayerPointerExitedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapElementsLayerPointerExitedEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerPointerExitedEventArgs *wrapper = MapElementsLayerPointerExitedEventArgs::Unwrap<MapElementsLayerPointerExitedEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapElementGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerPointerExitedEventArgs *wrapper = MapElementsLayerPointerExitedEventArgs::Unwrap<MapElementsLayerPointerExitedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapElement^ result = wrapper->_instance->MapElement;
        info.GetReturnValue().Set(WrapMapElement(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^>(info.This())) {
        return;
      }

      MapElementsLayerPointerExitedEventArgs *wrapper = MapElementsLayerPointerExitedEventArgs::Unwrap<MapElementsLayerPointerExitedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapElementsLayerPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ UnwrapMapElementsLayerPointerExitedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapElementsLayerPointerExitedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapElementsLayerPointerExitedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapElementsLayerPointerExitedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapElementsLayerPointerExitedEventArgs^ UnwrapMapElementsLayerPointerExitedEventArgs(Local<Value> value) {
     return MapElementsLayerPointerExitedEventArgs::Unwrap<MapElementsLayerPointerExitedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapElementsLayerPointerExitedEventArgs(Local<Object> exports) {
    MapElementsLayerPointerExitedEventArgs::Init(exports);
  }

  class MapIcon : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapIcon").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("title").ToLocalChecked(), TitleGetter, TitleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("normalizedAnchorPoint").ToLocalChecked(), NormalizedAnchorPointGetter, NormalizedAnchorPointSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter, LocationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("image").ToLocalChecked(), ImageGetter, ImageSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("collisionBehaviorDesired").ToLocalChecked(), CollisionBehaviorDesiredGetter, CollisionBehaviorDesiredSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tag").ToLocalChecked(), TagGetter, TagSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntryState").ToLocalChecked(), MapStyleSheetEntryStateGetter, MapStyleSheetEntryStateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntry").ToLocalChecked(), MapStyleSheetEntryGetter, MapStyleSheetEntrySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isEnabled").ToLocalChecked(), IsEnabledGetter, IsEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("locationProperty").ToLocalChecked(), LocationPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("normalizedAnchorPointProperty").ToLocalChecked(), NormalizedAnchorPointPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("titleProperty").ToLocalChecked(), TitlePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("collisionBehaviorDesiredProperty").ToLocalChecked(), CollisionBehaviorDesiredPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryProperty").ToLocalChecked(), MapStyleSheetEntryPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryStateProperty").ToLocalChecked(), MapStyleSheetEntryStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tagProperty").ToLocalChecked(), TagPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isEnabledProperty").ToLocalChecked(), IsEnabledPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapIcon").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapIcon(::Windows::UI::Xaml::Controls::Maps::MapIcon^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapIcon^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapIcon^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapIcon();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapIcon *wrapperInstance = new MapIcon(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapIcon^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapIcon^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapIcon(winRtInstance));
    }





    static void TitleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->Title;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TitleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->Title = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void NormalizedAnchorPointGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->NormalizedAnchorPoint;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void NormalizedAnchorPointSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsPoint(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try {

        ::Windows::Foundation::Point winRtValue = NodeRT::Utils::PointFromJs(value);

        wrapper->_instance->NormalizedAnchorPoint = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LocationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try {

        ::Windows::Devices::Geolocation::Geopoint^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Location = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ImageGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try  {
        ::Windows::Storage::Streams::IRandomAccessStreamReference^ result = wrapper->_instance->Image;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Storage.Streams", "IRandomAccessStreamReference", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ImageSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Storage::Streams::IRandomAccessStreamReference^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try {

        ::Windows::Storage::Streams::IRandomAccessStreamReference^ winRtValue = dynamic_cast<::Windows::Storage::Streams::IRandomAccessStreamReference^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Image = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CollisionBehaviorDesiredGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior result = wrapper->_instance->CollisionBehaviorDesired;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CollisionBehaviorDesiredSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapIcon^>(info.This())) {
        return;
      }

      MapIcon *wrapper = MapIcon::Unwrap<MapIcon>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapElementCollisionBehavior>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->CollisionBehaviorDesired = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TagGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->Tag;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TagSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Tag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntryState;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntryStateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntryState = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntry;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntrySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntry = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void LocationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapIcon::LocationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NormalizedAnchorPointPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapIcon::NormalizedAnchorPointProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TitlePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapIcon::TitleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CollisionBehaviorDesiredPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapIcon::CollisionBehaviorDesiredProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TagPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::TagProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::IsEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapIcon^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapIcon(::Windows::UI::Xaml::Controls::Maps::MapIcon^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapIcon^ UnwrapMapIcon(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapIcon::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapIcon(::Windows::UI::Xaml::Controls::Maps::MapIcon^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapIcon::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapIcon^ UnwrapMapIcon(Local<Value> value) {
     return MapIcon::Unwrap<MapIcon>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapIcon(Local<Object> exports) {
    MapIcon::Init(exports);
  }

  class MapInputEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapInputEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapInputEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapInputEventArgs(::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapInputEventArgs *wrapperInstance = new MapInputEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapInputEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^>(info.This())) {
        return;
      }

      MapInputEventArgs *wrapper = MapInputEventArgs::Unwrap<MapInputEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^>(info.This())) {
        return;
      }

      MapInputEventArgs *wrapper = MapInputEventArgs::Unwrap<MapInputEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapInputEventArgs(::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ UnwrapMapInputEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapInputEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapInputEventArgs(::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapInputEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapInputEventArgs^ UnwrapMapInputEventArgs(Local<Value> value) {
     return MapInputEventArgs::Unwrap<MapInputEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapInputEventArgs(Local<Object> exports) {
    MapInputEventArgs::Init(exports);
  }

  class MapItemsControl : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapItemsControl").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("itemsSource").ToLocalChecked(), ItemsSourceGetter, ItemsSourceSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("itemTemplate").ToLocalChecked(), ItemTemplateGetter, ItemTemplateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("items").ToLocalChecked(), ItemsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("itemTemplateProperty").ToLocalChecked(), ItemTemplatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("itemsProperty").ToLocalChecked(), ItemsPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("itemsSourceProperty").ToLocalChecked(), ItemsSourcePropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapItemsControl").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapItemsControl(::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapItemsControl^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapItemsControl^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapItemsControl();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapItemsControl *wrapperInstance = new MapItemsControl(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapItemsControl^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapItemsControl^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapItemsControl(winRtInstance));
    }





    static void ItemsSourceGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapItemsControl^>(info.This())) {
        return;
      }

      MapItemsControl *wrapper = MapItemsControl::Unwrap<MapItemsControl>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->ItemsSource;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ItemsSourceSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapItemsControl^>(info.This())) {
        return;
      }

      MapItemsControl *wrapper = MapItemsControl::Unwrap<MapItemsControl>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->ItemsSource = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ItemTemplateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapItemsControl^>(info.This())) {
        return;
      }

      MapItemsControl *wrapper = MapItemsControl::Unwrap<MapItemsControl>(info.This());

      try  {
        ::Windows::UI::Xaml::DataTemplate^ result = wrapper->_instance->ItemTemplate;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DataTemplate", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ItemTemplateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DataTemplate^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapItemsControl^>(info.This())) {
        return;
      }

      MapItemsControl *wrapper = MapItemsControl::Unwrap<MapItemsControl>(info.This());

      try {

        ::Windows::UI::Xaml::DataTemplate^ winRtValue = dynamic_cast<::Windows::UI::Xaml::DataTemplate^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->ItemTemplate = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ItemsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapItemsControl^>(info.This())) {
        return;
      }

      MapItemsControl *wrapper = MapItemsControl::Unwrap<MapItemsControl>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::UI::Xaml::DependencyObject^>^ result = wrapper->_instance->Items;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::UI::Xaml::DependencyObject^>::CreateVectorWrapper(result, 
            [](::Windows::UI::Xaml::DependencyObject^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyObject", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(value);
            },
            [](Local<Value> value) -> ::Windows::UI::Xaml::DependencyObject^ {
              return dynamic_cast<::Windows::UI::Xaml::DependencyObject^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void ItemTemplatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapItemsControl::ItemTemplateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ItemsPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapItemsControl::ItemsProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ItemsSourcePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapItemsControl::ItemsSourceProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapItemsControl(::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ UnwrapMapItemsControl(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapItemsControl::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapItemsControl(::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapItemsControl::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapItemsControl^ UnwrapMapItemsControl(Local<Value> value) {
     return MapItemsControl::Unwrap<MapItemsControl>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapItemsControl(Local<Object> exports) {
    MapItemsControl::Init(exports);
  }

  class MapModel3D : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapModel3D").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);

        Local<Function> func;
        Local<FunctionTemplate> funcTemplate;




          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        func = Nan::GetFunction(Nan::New<FunctionTemplate>(CreateFrom3MFAsync)).ToLocalChecked();
        Nan::Set(constructor, Nan::New<String>("createFrom3MFAsync").ToLocalChecked(), func);


        Nan::Set(exports, Nan::New<String>("MapModel3D").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapModel3D(::Windows::UI::Xaml::Controls::Maps::MapModel3D^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapModel3D^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapModel3D^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapModel3D();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapModel3D *wrapperInstance = new MapModel3D(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapModel3D^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapModel3D^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapModel3D(winRtInstance));
    }




    static void CreateFrom3MFAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      ::Windows::Foundation::IAsyncOperation<::Windows::UI::Xaml::Controls::Maps::MapModel3D^>^ op;


      if (info.Length() == 2
          && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Storage::Streams::IRandomAccessStreamReference^>(info[0]))
      {
        try
        {
          ::Windows::Storage::Streams::IRandomAccessStreamReference^ arg0 = dynamic_cast<::Windows::Storage::Streams::IRandomAccessStreamReference^>(NodeRT::Utils::GetObjectInstance(info[0]));
            
          op = ::Windows::UI::Xaml::Controls::Maps::MapModel3D::CreateFrom3MFAsync(arg0);
        } catch (Platform::Exception ^exception) {
            NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
            return;
        }
      }
      else if (info.Length() == 3
          && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Storage::Streams::IRandomAccessStreamReference^>(info[0])
          && info[1]->IsInt32())
      {
        try
        {
          ::Windows::Storage::Streams::IRandomAccessStreamReference^ arg0 = dynamic_cast<::Windows::Storage::Streams::IRandomAccessStreamReference^>(NodeRT::Utils::GetObjectInstance(info[0]));
          ::Windows::UI::Xaml::Controls::Maps::MapModel3DShadingOption arg1 = static_cast<::Windows::UI::Xaml::Controls::Maps::MapModel3DShadingOption>(Nan::To<int32_t>(info[1]).FromMaybe(0));
            
          op = ::Windows::UI::Xaml::Controls::Maps::MapModel3D::CreateFrom3MFAsync(arg0,arg1);
        } catch (Platform::Exception ^exception) {
            NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
            return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<::Windows::UI::Xaml::Controls::Maps::MapModel3D^> t)
      {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = WrapMapModel3D(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        }
        catch (Platform::Exception^ exception)
        {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {

            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }


    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapModel3D(::Windows::UI::Xaml::Controls::Maps::MapModel3D^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ UnwrapMapModel3D(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapModel3D::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapModel3D(::Windows::UI::Xaml::Controls::Maps::MapModel3D^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapModel3D::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapModel3D^ UnwrapMapModel3D(Local<Value> value) {
     return MapModel3D::Unwrap<MapModel3D>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapModel3D(Local<Object> exports) {
    MapModel3D::Init(exports);
  }

  class MapPolygon : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapPolygon").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("strokeThickness").ToLocalChecked(), StrokeThicknessGetter, StrokeThicknessSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("strokeDashed").ToLocalChecked(), StrokeDashedGetter, StrokeDashedSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("strokeColor").ToLocalChecked(), StrokeColorGetter, StrokeColorSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("path").ToLocalChecked(), PathGetter, PathSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("fillColor").ToLocalChecked(), FillColorGetter, FillColorSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("paths").ToLocalChecked(), PathsGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tag").ToLocalChecked(), TagGetter, TagSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntryState").ToLocalChecked(), MapStyleSheetEntryStateGetter, MapStyleSheetEntryStateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntry").ToLocalChecked(), MapStyleSheetEntryGetter, MapStyleSheetEntrySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isEnabled").ToLocalChecked(), IsEnabledGetter, IsEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("pathProperty").ToLocalChecked(), PathPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("strokeDashedProperty").ToLocalChecked(), StrokeDashedPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("strokeThicknessProperty").ToLocalChecked(), StrokeThicknessPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryProperty").ToLocalChecked(), MapStyleSheetEntryPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryStateProperty").ToLocalChecked(), MapStyleSheetEntryStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tagProperty").ToLocalChecked(), TagPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isEnabledProperty").ToLocalChecked(), IsEnabledPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapPolygon").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapPolygon(::Windows::UI::Xaml::Controls::Maps::MapPolygon^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapPolygon^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapPolygon^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapPolygon();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapPolygon *wrapperInstance = new MapPolygon(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapPolygon^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapPolygon^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapPolygon(winRtInstance));
    }





    static void StrokeThicknessGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try  {
        double result = wrapper->_instance->StrokeThickness;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StrokeThicknessSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->StrokeThickness = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StrokeDashedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try  {
        bool result = wrapper->_instance->StrokeDashed;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StrokeDashedSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->StrokeDashed = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StrokeColorGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try  {
        ::Windows::UI::Color result = wrapper->_instance->StrokeColor;
        info.GetReturnValue().Set(NodeRT::Utils::ColorToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StrokeColorSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsColor(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try {

        ::Windows::UI::Color winRtValue = NodeRT::Utils::ColorFromJs(value);

        wrapper->_instance->StrokeColor = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void PathGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopath^ result = wrapper->_instance->Path;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopath", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PathSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopath^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try {

        ::Windows::Devices::Geolocation::Geopath^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::Geopath^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Path = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FillColorGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try  {
        ::Windows::UI::Color result = wrapper->_instance->FillColor;
        info.GetReturnValue().Set(NodeRT::Utils::ColorToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FillColorSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsColor(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try {

        ::Windows::UI::Color winRtValue = NodeRT::Utils::ColorFromJs(value);

        wrapper->_instance->FillColor = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void PathsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolygon^>(info.This())) {
        return;
      }

      MapPolygon *wrapper = MapPolygon::Unwrap<MapPolygon>(info.This());

      try  {
        ::Windows::Foundation::Collections::IVector<::Windows::Devices::Geolocation::Geopath^>^ result = wrapper->_instance->Paths;
        info.GetReturnValue().Set(NodeRT::Collections::VectorWrapper<::Windows::Devices::Geolocation::Geopath^>::CreateVectorWrapper(result, 
            [](::Windows::Devices::Geolocation::Geopath^ val) -> Local<Value> {
              return NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopath", val);
            },
            [](Local<Value> value) -> bool {
              return NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopath^>(value);
            },
            [](Local<Value> value) -> ::Windows::Devices::Geolocation::Geopath^ {
              return dynamic_cast<::Windows::Devices::Geolocation::Geopath^>(NodeRT::Utils::GetObjectInstance(value));
            }
          ));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TagGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->Tag;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TagSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Tag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntryState;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntryStateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntryState = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntry;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntrySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntry = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void PathPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapPolygon::PathProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StrokeDashedPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapPolygon::StrokeDashedProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StrokeThicknessPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapPolygon::StrokeThicknessProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TagPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::TagProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::IsEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapPolygon^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapPolygon(::Windows::UI::Xaml::Controls::Maps::MapPolygon^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapPolygon^ UnwrapMapPolygon(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapPolygon::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapPolygon(::Windows::UI::Xaml::Controls::Maps::MapPolygon^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapPolygon::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapPolygon^ UnwrapMapPolygon(Local<Value> value) {
     return MapPolygon::Unwrap<MapPolygon>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapPolygon(Local<Object> exports) {
    MapPolygon::Init(exports);
  }

  class MapPolyline : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapPolyline").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("strokeThickness").ToLocalChecked(), StrokeThicknessGetter, StrokeThicknessSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("strokeDashed").ToLocalChecked(), StrokeDashedGetter, StrokeDashedSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("strokeColor").ToLocalChecked(), StrokeColorGetter, StrokeColorSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("path").ToLocalChecked(), PathGetter, PathSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapTabIndex").ToLocalChecked(), MapTabIndexGetter, MapTabIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tag").ToLocalChecked(), TagGetter, TagSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntryState").ToLocalChecked(), MapStyleSheetEntryStateGetter, MapStyleSheetEntryStateSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("mapStyleSheetEntry").ToLocalChecked(), MapStyleSheetEntryGetter, MapStyleSheetEntrySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isEnabled").ToLocalChecked(), IsEnabledGetter, IsEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("pathProperty").ToLocalChecked(), PathPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("strokeDashedProperty").ToLocalChecked(), StrokeDashedPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapTabIndexProperty").ToLocalChecked(), MapTabIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryProperty").ToLocalChecked(), MapStyleSheetEntryPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("mapStyleSheetEntryStateProperty").ToLocalChecked(), MapStyleSheetEntryStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tagProperty").ToLocalChecked(), TagPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isEnabledProperty").ToLocalChecked(), IsEnabledPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapPolyline").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapPolyline(::Windows::UI::Xaml::Controls::Maps::MapPolyline^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapPolyline^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapPolyline^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapPolyline();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapPolyline *wrapperInstance = new MapPolyline(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapPolyline^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapPolyline^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapPolyline(winRtInstance));
    }





    static void StrokeThicknessGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try  {
        double result = wrapper->_instance->StrokeThickness;
        info.GetReturnValue().Set(Nan::New<Number>(static_cast<double>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StrokeThicknessSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try {

        double winRtValue = Nan::To<double>(value).FromMaybe(0.0);

        wrapper->_instance->StrokeThickness = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StrokeDashedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try  {
        bool result = wrapper->_instance->StrokeDashed;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StrokeDashedSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->StrokeDashed = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StrokeColorGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try  {
        ::Windows::UI::Color result = wrapper->_instance->StrokeColor;
        info.GetReturnValue().Set(NodeRT::Utils::ColorToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StrokeColorSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsColor(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try {

        ::Windows::UI::Color winRtValue = NodeRT::Utils::ColorFromJs(value);

        wrapper->_instance->StrokeColor = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void PathGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopath^ result = wrapper->_instance->Path;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopath", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PathSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopath^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapPolyline^>(info.This())) {
        return;
      }

      MapPolyline *wrapper = MapPolyline::Unwrap<MapPolyline>(info.This());

      try {

        ::Windows::Devices::Geolocation::Geopath^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::Geopath^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Path = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapTabIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        int result = wrapper->_instance->MapTabIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapTabIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->MapTabIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TagGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        ::Platform::Object^ result = wrapper->_instance->Tag;
        info.GetReturnValue().Set(CreateOpaqueWrapper(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TagSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Platform::Object^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        ::Platform::Object^ winRtValue = dynamic_cast<::Platform::Object^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Tag = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntryState;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntryStateSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntryState = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void MapStyleSheetEntryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        Platform::String^ result = wrapper->_instance->MapStyleSheetEntry;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void MapStyleSheetEntrySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsString()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        Platform::String^ winRtValue = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), value)));

        wrapper->_instance->MapStyleSheetEntry = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try  {
        bool result = wrapper->_instance->IsEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapElement^>(info.This())) {
        return;
      }

      MapElement *wrapper = MapElement::Unwrap<MapElement>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void PathPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapPolyline::PathProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StrokeDashedPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapPolyline::StrokeDashedProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapTabIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapTabIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MapStyleSheetEntryStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::MapStyleSheetEntryStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TagPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::TagProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapElement::IsEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapPolyline^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapPolyline(::Windows::UI::Xaml::Controls::Maps::MapPolyline^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapPolyline^ UnwrapMapPolyline(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapPolyline::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapPolyline(::Windows::UI::Xaml::Controls::Maps::MapPolyline^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapPolyline::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapPolyline^ UnwrapMapPolyline(Local<Value> value) {
     return MapPolyline::Unwrap<MapPolyline>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapPolyline(Local<Object> exports) {
    MapPolyline::Init(exports);
  }

  class MapRightTappedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapRightTappedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("position").ToLocalChecked(), PositionGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapRightTappedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapRightTappedEventArgs *wrapperInstance = new MapRightTappedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapRightTappedEventArgs(winRtInstance));
    }





    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^>(info.This())) {
        return;
      }

      MapRightTappedEventArgs *wrapper = MapRightTappedEventArgs::Unwrap<MapRightTappedEventArgs>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PositionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^>(info.This())) {
        return;
      }

      MapRightTappedEventArgs *wrapper = MapRightTappedEventArgs::Unwrap<MapRightTappedEventArgs>(info.This());

      try  {
        ::Windows::Foundation::Point result = wrapper->_instance->Position;
        info.GetReturnValue().Set(NodeRT::Utils::PointToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ UnwrapMapRightTappedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapRightTappedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapRightTappedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapRightTappedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapRightTappedEventArgs^ UnwrapMapRightTappedEventArgs(Local<Value> value) {
     return MapRightTappedEventArgs::Unwrap<MapRightTappedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapRightTappedEventArgs(Local<Object> exports) {
    MapRightTappedEventArgs::Init(exports);
  }

  class MapRouteView : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapRouteView").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("routeColor").ToLocalChecked(), RouteColorGetter, RouteColorSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("outlineColor").ToLocalChecked(), OutlineColorGetter, OutlineColorSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("route").ToLocalChecked(), RouteGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapRouteView").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapRouteView(::Windows::UI::Xaml::Controls::Maps::MapRouteView^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapRouteView^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapRouteView^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Services::Maps::MapRoute^>(info[0]))
      {
        try {
          ::Windows::Services::Maps::MapRoute^ arg0 = dynamic_cast<::Windows::Services::Maps::MapRoute^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapRouteView(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapRouteView *wrapperInstance = new MapRouteView(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapRouteView^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapRouteView^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapRouteView(winRtInstance));
    }





    static void RouteColorGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(info.This())) {
        return;
      }

      MapRouteView *wrapper = MapRouteView::Unwrap<MapRouteView>(info.This());

      try  {
        ::Windows::UI::Color result = wrapper->_instance->RouteColor;
        info.GetReturnValue().Set(NodeRT::Utils::ColorToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void RouteColorSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsColor(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(info.This())) {
        return;
      }

      MapRouteView *wrapper = MapRouteView::Unwrap<MapRouteView>(info.This());

      try {

        ::Windows::UI::Color winRtValue = NodeRT::Utils::ColorFromJs(value);

        wrapper->_instance->RouteColor = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void OutlineColorGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(info.This())) {
        return;
      }

      MapRouteView *wrapper = MapRouteView::Unwrap<MapRouteView>(info.This());

      try  {
        ::Windows::UI::Color result = wrapper->_instance->OutlineColor;
        info.GetReturnValue().Set(NodeRT::Utils::ColorToJs(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void OutlineColorSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsColor(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(info.This())) {
        return;
      }

      MapRouteView *wrapper = MapRouteView::Unwrap<MapRouteView>(info.This());

      try {

        ::Windows::UI::Color winRtValue = NodeRT::Utils::ColorFromJs(value);

        wrapper->_instance->OutlineColor = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void RouteGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapRouteView^>(info.This())) {
        return;
      }

      MapRouteView *wrapper = MapRouteView::Unwrap<MapRouteView>(info.This());

      try  {
        ::Windows::Services::Maps::MapRoute^ result = wrapper->_instance->Route;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Services.Maps", "MapRoute", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapRouteView^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapRouteView(::Windows::UI::Xaml::Controls::Maps::MapRouteView^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapRouteView^ UnwrapMapRouteView(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapRouteView::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapRouteView(::Windows::UI::Xaml::Controls::Maps::MapRouteView^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapRouteView::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapRouteView^ UnwrapMapRouteView(Local<Value> value) {
     return MapRouteView::Unwrap<MapRouteView>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapRouteView(Local<Object> exports) {
    MapRouteView::Init(exports);
  }

  class MapScene : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapScene").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);




          
          Nan::SetPrototypeMethod(localRef,"addListener", AddListener);
          Nan::SetPrototypeMethod(localRef,"on", AddListener);
          Nan::SetPrototypeMethod(localRef,"removeListener", RemoveListener);
          Nan::SetPrototypeMethod(localRef, "off", RemoveListener);

          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("targetCamera").ToLocalChecked(), TargetCameraGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetMethod(constructor, "createFromBoundingBox", CreateFromBoundingBox);
        Nan::SetMethod(constructor, "createFromCamera", CreateFromCamera);
        Nan::SetMethod(constructor, "createFromLocation", CreateFromLocation);
        Nan::SetMethod(constructor, "createFromLocationAndRadius", CreateFromLocationAndRadius);
        Nan::SetMethod(constructor, "createFromLocations", CreateFromLocations);


        Nan::Set(exports, Nan::New<String>("MapScene").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapScene(::Windows::UI::Xaml::Controls::Maps::MapScene^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapScene^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapScene^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapScene *wrapperInstance = new MapScene(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapScene^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapScene^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapScene(winRtInstance));
    }





    static void CreateFromBoundingBox(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::GeoboundingBox^>(info[0]))
      {
        try
        {
          ::Windows::Devices::Geolocation::GeoboundingBox^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::GeoboundingBox^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromBoundingBox(arg0);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 3
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::GeoboundingBox^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber())
      {
        try
        {
          ::Windows::Devices::Geolocation::GeoboundingBox^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::GeoboundingBox^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          double arg2 = Nan::To<double>(info[2]).FromMaybe(0.0);
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromBoundingBox(arg0, arg1, arg2);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void CreateFromCamera(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapCamera^>(info[0]))
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapCamera^ arg0 = UnwrapMapCamera(info[0]);
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromCamera(arg0);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void CreateFromLocation(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0]))
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromLocation(arg0);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 3
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber())
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          double arg2 = Nan::To<double>(info[2]).FromMaybe(0.0);
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromLocation(arg0, arg1, arg2);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void CreateFromLocationAndRadius(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber())
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromLocationAndRadius(arg0, arg1);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 4
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber()
        && info[3]->IsNumber())
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          double arg2 = Nan::To<double>(info[2]).FromMaybe(0.0);
          double arg3 = Nan::To<double>(info[3]).FromMaybe(0.0);
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromLocationAndRadius(arg0, arg1, arg2, arg3);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void CreateFromLocations(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && (NodeRT::Utils::IsWinRtWrapperOf<::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^>(info[0]) || info[0]->IsArray()))
      {
        try
        {
          ::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^ arg0 = 
            [] (v8::Local<v8::Value> value) -> ::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^
            {
              if (value->IsArray())
              {
                return NodeRT::Collections::JsArrayToWinrtVector<::Windows::Devices::Geolocation::Geopoint^>(value.As<Array>(), 
                 [](Local<Value> value) -> bool {
                   return NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(value);
                 },
                 [](Local<Value> value) -> ::Windows::Devices::Geolocation::Geopoint^ {
                   return dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(value));
                 }
                );
              }
              else
              {
                return dynamic_cast<::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^>(NodeRT::Utils::GetObjectInstance(value));
              }
            } (info[0]);
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromLocations(arg0);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 3
        && (NodeRT::Utils::IsWinRtWrapperOf<::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^>(info[0]) || info[0]->IsArray())
        && info[1]->IsNumber()
        && info[2]->IsNumber())
      {
        try
        {
          ::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^ arg0 = 
            [] (v8::Local<v8::Value> value) -> ::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^
            {
              if (value->IsArray())
              {
                return NodeRT::Collections::JsArrayToWinrtVector<::Windows::Devices::Geolocation::Geopoint^>(value.As<Array>(), 
                 [](Local<Value> value) -> bool {
                   return NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(value);
                 },
                 [](Local<Value> value) -> ::Windows::Devices::Geolocation::Geopoint^ {
                   return dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(value));
                 }
                );
              }
              else
              {
                return dynamic_cast<::Windows::Foundation::Collections::IIterable<::Windows::Devices::Geolocation::Geopoint^>^>(NodeRT::Utils::GetObjectInstance(value));
              }
            } (info[0]);
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          double arg2 = Nan::To<double>(info[2]).FromMaybe(0.0);
          
          ::Windows::UI::Xaml::Controls::Maps::MapScene^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapScene::CreateFromLocations(arg0, arg1, arg2);
          info.GetReturnValue().Set(WrapMapScene(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void TargetCameraGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(info.This())) {
        return;
      }

      MapScene *wrapper = MapScene::Unwrap<MapScene>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCamera^ result = wrapper->_instance->TargetCamera;
        info.GetReturnValue().Set(WrapMapCamera(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void AddListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected arguments are eventName(string),callback(function)")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      Local<Function> callback = info[1].As<Function>();

      ::Windows::Foundation::EventRegistrationToken registrationToken;
      if (NodeRT::Utils::CaseInsenstiveEquals(L"targetCameraChanged", str))
      {
        if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(info.This()))
        {
          Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
      return;
        }
        MapScene *wrapper = MapScene::Unwrap<MapScene>(info.This());
      
        try {
          Persistent<Object>* perstPtr = new Persistent<Object>();
          perstPtr->Reset(NodeRT::Utils::CreateCallbackObjectInDomain(callback));
          std::shared_ptr<Persistent<Object>> callbackObjPtr(perstPtr,
            [] (Persistent<Object> *ptr ) {
              NodeUtils::Async::RunOnMain([ptr]() {
                ptr->Reset();
                delete ptr;
            });
          });

          registrationToken = wrapper->_instance->TargetCameraChanged::add(
            ref new ::Windows::Foundation::TypedEventHandler<::Windows::UI::Xaml::Controls::Maps::MapScene^, ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^>(
            [callbackObjPtr](::Windows::UI::Xaml::Controls::Maps::MapScene^ arg0, ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ arg1) {
              NodeUtils::Async::RunOnMain([callbackObjPtr , arg0, arg1]() {
                HandleScope scope;


                Local<Value> wrappedArg0;
                Local<Value> wrappedArg1;

                {
                  TryCatch tryCatch;


                  wrappedArg0 = WrapMapScene(arg0);
                  wrappedArg1 = WrapMapTargetCameraChangedEventArgs(arg1);


                  if (wrappedArg0.IsEmpty()) wrappedArg0 = Undefined();
                  if (wrappedArg1.IsEmpty()) wrappedArg1 = Undefined();
                }

                Local<Value> args[] = { wrappedArg0, wrappedArg1 };
                Local<Object> callbackObjLocalRef = Nan::New<Object>(*callbackObjPtr);
                NodeRT::Utils::CallCallbackInDomain(callbackObjLocalRef, _countof(args), args);
              });
            })
          );
        }
        catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }

      }
 else  {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Value> tokenMapVal = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());
      Local<Object> tokenMap;

      if (tokenMapVal.IsEmpty() || Nan::Equals(tokenMapVal, Undefined()).FromMaybe(false)) {
        tokenMap = Nan::New<Object>();
        NodeRT::Utils::SetHiddenValueWithObject(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked(), tokenMap);
      } else {
        tokenMap = Nan::To<Object>(tokenMapVal).ToLocalChecked();
      }

      Nan::Set(tokenMap, info[0], CreateOpaqueWrapper(::Windows::Foundation::PropertyValue::CreateInt64(registrationToken.Value)));
    }

    static void RemoveListener(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() < 2 || !info[0]->IsString() || !info[1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"wrong arguments, expected a string and a callback")));
        return;
      }

      String::Value eventName(v8::Isolate::GetCurrent(), info[0]);
      auto str = *eventName;

      if ((!NodeRT::Utils::CaseInsenstiveEquals(L"targetCameraChanged", str))) {
        Nan::ThrowError(Nan::Error(String::Concat(v8::Isolate::GetCurrent(), NodeRT::Utils::NewString(L"given event name isn't supported: "), info[0].As<String>())));
        return;
      }

      Local<Function> callback = info[1].As<Function>();
      Local<Value> tokenMap = NodeRT::Utils::GetHiddenValue(callback, Nan::New<String>(REGISTRATION_TOKEN_MAP_PROPERTY_NAME).ToLocalChecked());

      if (tokenMap.IsEmpty() || Nan::Equals(tokenMap, Undefined()).FromMaybe(false)) {
        return;
      }

      Local<Value> opaqueWrapperObj =  Nan::Get(Nan::To<Object>(tokenMap).ToLocalChecked(), info[0]).ToLocalChecked();

      if (opaqueWrapperObj.IsEmpty() || Nan::Equals(opaqueWrapperObj,Undefined()).FromMaybe(false)) {
        return;
      }

      OpaqueWrapper *opaqueWrapper = OpaqueWrapper::Unwrap<OpaqueWrapper>(opaqueWrapperObj.As<Object>());

      long long tokenValue = (long long) opaqueWrapper->GetObjectInstance();
      ::Windows::Foundation::EventRegistrationToken registrationToken;
      registrationToken.Value = tokenValue;

      try  {
        if (NodeRT::Utils::CaseInsenstiveEquals(L"targetCameraChanged", str)) {
          if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapScene^>(info.This()))
          {
            Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"The caller of this method isn't of the expected type or internal WinRt object was disposed")));
            return;
          }
          MapScene *wrapper = MapScene::Unwrap<MapScene>(info.This());
          wrapper->_instance->TargetCameraChanged::remove(registrationToken);
        }
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }

      Nan::Delete(Nan::To<Object>(tokenMap).ToLocalChecked(), Nan::To<String>(info[0]).ToLocalChecked());
    }
    private:
      ::Windows::UI::Xaml::Controls::Maps::MapScene^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapScene(::Windows::UI::Xaml::Controls::Maps::MapScene^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapScene^ UnwrapMapScene(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapScene::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapScene(::Windows::UI::Xaml::Controls::Maps::MapScene^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapScene::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapScene^ UnwrapMapScene(Local<Value> value) {
     return MapScene::Unwrap<MapScene>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapScene(Local<Object> exports) {
    MapScene::Init(exports);
  }

  class MapStyleSheet : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapStyleSheet").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetMethod(constructor, "aerial", Aerial);
        Nan::SetMethod(constructor, "aerialWithOverlay", AerialWithOverlay);
        Nan::SetMethod(constructor, "roadLight", RoadLight);
        Nan::SetMethod(constructor, "roadDark", RoadDark);
        Nan::SetMethod(constructor, "roadHighContrastLight", RoadHighContrastLight);
        Nan::SetMethod(constructor, "roadHighContrastDark", RoadHighContrastDark);
        Nan::SetMethod(constructor, "combine", Combine);
        Nan::SetMethod(constructor, "parseFromJson", ParseFromJson);
        Nan::SetMethod(constructor, "tryParseFromJson", TryParseFromJson);


        Nan::Set(exports, Nan::New<String>("MapStyleSheet").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapStyleSheet(::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapStyleSheet *wrapperInstance = new MapStyleSheet(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapStyleSheet(winRtInstance));
    }





    static void Aerial(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::Aerial();
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void AerialWithOverlay(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::AerialWithOverlay();
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void RoadLight(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::RoadLight();
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void RoadDark(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::RoadDark();
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void RoadHighContrastLight(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::RoadHighContrastLight();
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void RoadHighContrastDark(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::RoadHighContrastDark();
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void Combine(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && (NodeRT::Utils::IsWinRtWrapperOf<::Windows::Foundation::Collections::IIterable<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>^>(info[0]) || info[0]->IsArray()))
      {
        try
        {
          ::Windows::Foundation::Collections::IIterable<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>^ arg0 = 
            [] (v8::Local<v8::Value> value) -> ::Windows::Foundation::Collections::IIterable<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>^
            {
              if (value->IsArray())
              {
                return NodeRT::Collections::JsArrayToWinrtVector<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>(value.As<Array>(), 
                 [](Local<Value> value) -> bool {
                   return NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>(value);
                 },
                 [](Local<Value> value) -> ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ {
                   return UnwrapMapStyleSheet(value);
                 }
                );
              }
              else
              {
                return dynamic_cast<::Windows::Foundation::Collections::IIterable<::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^>^>(NodeRT::Utils::GetObjectInstance(value));
              }
            } (info[0]);
          
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::Combine(arg0);
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void ParseFromJson(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && info[0]->IsString())
      {
        try
        {
          Platform::String^ arg0 = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), info[0])));
          
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::ParseFromJson(arg0);
          info.GetReturnValue().Set(WrapMapStyleSheet(result));
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void TryParseFromJson(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 1
        && info[0]->IsString())
      {
        try
        {
          Platform::String^ arg0 = ref new Platform::String(NodeRT::Utils::StringToWchar(v8::String::Value(v8::Isolate::GetCurrent(), info[0])));
          ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ arg1;  
          
          bool result;
          result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet::TryParseFromJson(arg0, &arg1);
          Local<Object> resObj = Nan::New<Object>();
          Nan::Set(resObj, Nan::New<String>("boolean").ToLocalChecked(), Nan::New<Boolean>(result));
          Nan::Set(resObj, Nan::New<String>("styleSheet").ToLocalChecked(), NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml.Controls.Maps", "MapStyleSheet", arg1));
          info.GetReturnValue().Set(resObj);
          return;
        }
        catch (Platform::Exception ^exception)
        {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else  {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }

    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapStyleSheet(::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ UnwrapMapStyleSheet(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapStyleSheet::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapStyleSheet(::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapStyleSheet::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapStyleSheet^ UnwrapMapStyleSheet(Local<Value> value) {
     return MapStyleSheet::Unwrap<MapStyleSheet>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapStyleSheet(Local<Object> exports) {
    MapStyleSheet::Init(exports);
  }

  class MapStyleSheetEntries : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapStyleSheetEntries").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);






        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("adminDistrict").ToLocalChecked(), AdminDistrictGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("adminDistrictCapital").ToLocalChecked(), AdminDistrictCapitalGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("airport").ToLocalChecked(), AirportGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("area").ToLocalChecked(), AreaGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("arterialRoad").ToLocalChecked(), ArterialRoadGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("building").ToLocalChecked(), BuildingGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("business").ToLocalChecked(), BusinessGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("capital").ToLocalChecked(), CapitalGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("cemetery").ToLocalChecked(), CemeteryGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("continent").ToLocalChecked(), ContinentGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("controlledAccessHighway").ToLocalChecked(), ControlledAccessHighwayGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("countryRegion").ToLocalChecked(), CountryRegionGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("countryRegionCapital").ToLocalChecked(), CountryRegionCapitalGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("district").ToLocalChecked(), DistrictGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("drivingRoute").ToLocalChecked(), DrivingRouteGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("education").ToLocalChecked(), EducationGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("educationBuilding").ToLocalChecked(), EducationBuildingGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("foodPoint").ToLocalChecked(), FoodPointGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("forest").ToLocalChecked(), ForestGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("golfCourse").ToLocalChecked(), GolfCourseGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("highSpeedRamp").ToLocalChecked(), HighSpeedRampGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("highway").ToLocalChecked(), HighwayGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("indigenousPeoplesReserve").ToLocalChecked(), IndigenousPeoplesReserveGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("island").ToLocalChecked(), IslandGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("majorRoad").ToLocalChecked(), MajorRoadGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("medical").ToLocalChecked(), MedicalGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("medicalBuilding").ToLocalChecked(), MedicalBuildingGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("military").ToLocalChecked(), MilitaryGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("naturalPoint").ToLocalChecked(), NaturalPointGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("nautical").ToLocalChecked(), NauticalGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("neighborhood").ToLocalChecked(), NeighborhoodGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("park").ToLocalChecked(), ParkGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("peak").ToLocalChecked(), PeakGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("playingField").ToLocalChecked(), PlayingFieldGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("point").ToLocalChecked(), PointGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("pointOfInterest").ToLocalChecked(), PointOfInterestGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("political").ToLocalChecked(), PoliticalGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("populatedPlace").ToLocalChecked(), PopulatedPlaceGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("railway").ToLocalChecked(), RailwayGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("ramp").ToLocalChecked(), RampGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("reserve").ToLocalChecked(), ReserveGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("river").ToLocalChecked(), RiverGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("road").ToLocalChecked(), RoadGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("roadExit").ToLocalChecked(), RoadExitGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("roadShield").ToLocalChecked(), RoadShieldGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("routeLine").ToLocalChecked(), RouteLineGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("runway").ToLocalChecked(), RunwayGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("sand").ToLocalChecked(), SandGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("shoppingCenter").ToLocalChecked(), ShoppingCenterGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("stadium").ToLocalChecked(), StadiumGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("street").ToLocalChecked(), StreetGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("structure").ToLocalChecked(), StructureGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tollRoad").ToLocalChecked(), TollRoadGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("trail").ToLocalChecked(), TrailGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transit").ToLocalChecked(), TransitGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transitBuilding").ToLocalChecked(), TransitBuildingGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("transportation").ToLocalChecked(), TransportationGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("unpavedStreet").ToLocalChecked(), UnpavedStreetGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("vegetation").ToLocalChecked(), VegetationGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("volcanicPeak").ToLocalChecked(), VolcanicPeakGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("walkingRoute").ToLocalChecked(), WalkingRouteGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("water").ToLocalChecked(), WaterGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("waterPoint").ToLocalChecked(), WaterPointGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("waterRoute").ToLocalChecked(), WaterRouteGetter);


        Nan::Set(exports, Nan::New<String>("MapStyleSheetEntries").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapStyleSheetEntries(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapStyleSheetEntries *wrapperInstance = new MapStyleSheetEntries(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapStyleSheetEntries(winRtInstance));
    }







    static void AdminDistrictGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::AdminDistrict;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AdminDistrictCapitalGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::AdminDistrictCapital;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AirportGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Airport;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AreaGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Area;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ArterialRoadGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::ArterialRoad;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BuildingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Building;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BusinessGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Business;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CapitalGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Capital;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CemeteryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Cemetery;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ContinentGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Continent;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ControlledAccessHighwayGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::ControlledAccessHighway;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CountryRegionGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::CountryRegion;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void CountryRegionCapitalGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::CountryRegionCapital;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DistrictGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::District;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DrivingRouteGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::DrivingRoute;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void EducationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Education;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void EducationBuildingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::EducationBuilding;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FoodPointGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::FoodPoint;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ForestGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Forest;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void GolfCourseGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::GolfCourse;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HighSpeedRampGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::HighSpeedRamp;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HighwayGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Highway;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IndigenousPeoplesReserveGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::IndigenousPeoplesReserve;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IslandGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Island;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MajorRoadGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::MajorRoad;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MedicalGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Medical;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MedicalBuildingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::MedicalBuilding;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void MilitaryGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Military;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NaturalPointGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::NaturalPoint;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NauticalGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Nautical;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void NeighborhoodGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Neighborhood;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ParkGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Park;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PeakGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Peak;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PlayingFieldGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::PlayingField;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Point;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PointOfInterestGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::PointOfInterest;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PoliticalGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Political;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void PopulatedPlaceGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::PopulatedPlace;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RailwayGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Railway;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RampGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Ramp;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ReserveGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Reserve;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RiverGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::River;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RoadGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Road;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RoadExitGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::RoadExit;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RoadShieldGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::RoadShield;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RouteLineGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::RouteLine;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void RunwayGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Runway;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void SandGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Sand;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ShoppingCenterGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::ShoppingCenter;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StadiumGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Stadium;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StreetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Street;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void StructureGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Structure;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TollRoadGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::TollRoad;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TrailGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Trail;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TransitGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Transit;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TransitBuildingGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::TransitBuilding;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TransportationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Transportation;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void UnpavedStreetGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::UnpavedStreet;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VegetationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Vegetation;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VolcanicPeakGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::VolcanicPeak;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void WalkingRouteGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::WalkingRoute;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void WaterGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::Water;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void WaterPointGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::WaterPoint;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void WaterRouteGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries::WaterRoute;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapStyleSheetEntries(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ UnwrapMapStyleSheetEntries(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapStyleSheetEntries::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapStyleSheetEntries(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapStyleSheetEntries::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntries^ UnwrapMapStyleSheetEntries(Local<Value> value) {
     return MapStyleSheetEntries::Unwrap<MapStyleSheetEntries>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapStyleSheetEntries(Local<Object> exports) {
    MapStyleSheetEntries::Init(exports);
  }

  class MapStyleSheetEntryStates : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapStyleSheetEntryStates").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);






        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("disabled").ToLocalChecked(), DisabledGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("hover").ToLocalChecked(), HoverGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("selected").ToLocalChecked(), SelectedGetter);


        Nan::Set(exports, Nan::New<String>("MapStyleSheetEntryStates").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapStyleSheetEntryStates(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapStyleSheetEntryStates *wrapperInstance = new MapStyleSheetEntryStates(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapStyleSheetEntryStates(winRtInstance));
    }







    static void DisabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates::Disabled;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void HoverGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates::Hover;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void SelectedGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        Platform::String^ result = ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates::Selected;
        info.GetReturnValue().Set(NodeRT::Utils::NewString(result->Data()));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapStyleSheetEntryStates(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ UnwrapMapStyleSheetEntryStates(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapStyleSheetEntryStates::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapStyleSheetEntryStates(::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapStyleSheetEntryStates::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapStyleSheetEntryStates^ UnwrapMapStyleSheetEntryStates(Local<Value> value) {
     return MapStyleSheetEntryStates::Unwrap<MapStyleSheetEntryStates>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapStyleSheetEntryStates(Local<Object> exports) {
    MapStyleSheetEntryStates::Init(exports);
  }

  class MapTargetCameraChangedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTargetCameraChangedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("camera").ToLocalChecked(), CameraGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("changeReason").ToLocalChecked(), ChangeReasonGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTargetCameraChangedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTargetCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTargetCameraChangedEventArgs *wrapperInstance = new MapTargetCameraChangedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTargetCameraChangedEventArgs(winRtInstance));
    }





    static void CameraGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^>(info.This())) {
        return;
      }

      MapTargetCameraChangedEventArgs *wrapper = MapTargetCameraChangedEventArgs::Unwrap<MapTargetCameraChangedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCamera^ result = wrapper->_instance->Camera;
        info.GetReturnValue().Set(WrapMapCamera(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ChangeReasonGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^>(info.This())) {
        return;
      }

      MapTargetCameraChangedEventArgs *wrapper = MapTargetCameraChangedEventArgs::Unwrap<MapTargetCameraChangedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapCameraChangeReason result = wrapper->_instance->ChangeReason;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTargetCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ UnwrapMapTargetCameraChangedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTargetCameraChangedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTargetCameraChangedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTargetCameraChangedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTargetCameraChangedEventArgs^ UnwrapMapTargetCameraChangedEventArgs(Local<Value> value) {
     return MapTargetCameraChangedEventArgs::Unwrap<MapTargetCameraChangedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTargetCameraChangedEventArgs(Local<Object> exports) {
    MapTargetCameraChangedEventArgs::Init(exports);
  }

  class MapTileBitmapRequest : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileBitmapRequest").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);


          
            Nan::SetPrototypeMethod(localRef, "getDeferral", GetDeferral);
          



          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("pixelData").ToLocalChecked(), PixelDataGetter, PixelDataSetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTileBitmapRequest").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileBitmapRequest(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileBitmapRequest *wrapperInstance = new MapTileBitmapRequest(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileBitmapRequest(winRtInstance));
    }


    static void GetDeferral(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^>(info.This())) {
        return;
      }

      MapTileBitmapRequest *wrapper = MapTileBitmapRequest::Unwrap<MapTileBitmapRequest>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ result;
          result = wrapper->_instance->GetDeferral();
          info.GetReturnValue().Set(WrapMapTileBitmapRequestDeferral(result));
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }



    static void PixelDataGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^>(info.This())) {
        return;
      }

      MapTileBitmapRequest *wrapper = MapTileBitmapRequest::Unwrap<MapTileBitmapRequest>(info.This());

      try  {
        ::Windows::Storage::Streams::IRandomAccessStreamReference^ result = wrapper->_instance->PixelData;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Storage.Streams", "IRandomAccessStreamReference", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void PixelDataSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Storage::Streams::IRandomAccessStreamReference^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^>(info.This())) {
        return;
      }

      MapTileBitmapRequest *wrapper = MapTileBitmapRequest::Unwrap<MapTileBitmapRequest>(info.This());

      try {

        ::Windows::Storage::Streams::IRandomAccessStreamReference^ winRtValue = dynamic_cast<::Windows::Storage::Streams::IRandomAccessStreamReference^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->PixelData = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileBitmapRequest(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ UnwrapMapTileBitmapRequest(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileBitmapRequest::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileBitmapRequest(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileBitmapRequest::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ UnwrapMapTileBitmapRequest(Local<Value> value) {
     return MapTileBitmapRequest::Unwrap<MapTileBitmapRequest>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileBitmapRequest(Local<Object> exports) {
    MapTileBitmapRequest::Init(exports);
  }

  class MapTileBitmapRequestDeferral : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileBitmapRequestDeferral").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);


          
            Nan::SetPrototypeMethod(localRef, "complete", Complete);
          




        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTileBitmapRequestDeferral").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileBitmapRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileBitmapRequestDeferral *wrapperInstance = new MapTileBitmapRequestDeferral(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileBitmapRequestDeferral(winRtInstance));
    }


    static void Complete(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^>(info.This())) {
        return;
      }

      MapTileBitmapRequestDeferral *wrapper = MapTileBitmapRequestDeferral::Unwrap<MapTileBitmapRequestDeferral>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->Complete();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }





    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileBitmapRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ UnwrapMapTileBitmapRequestDeferral(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileBitmapRequestDeferral::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileBitmapRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileBitmapRequestDeferral::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestDeferral^ UnwrapMapTileBitmapRequestDeferral(Local<Value> value) {
     return MapTileBitmapRequestDeferral::Unwrap<MapTileBitmapRequestDeferral>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileBitmapRequestDeferral(Local<Object> exports) {
    MapTileBitmapRequestDeferral::Init(exports);
  }

  class MapTileBitmapRequestedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileBitmapRequestedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("request").ToLocalChecked(), RequestGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("x").ToLocalChecked(), XGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("y").ToLocalChecked(), YGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zoomLevel").ToLocalChecked(), ZoomLevelGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("frameIndex").ToLocalChecked(), FrameIndexGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTileBitmapRequestedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileBitmapRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileBitmapRequestedEventArgs *wrapperInstance = new MapTileBitmapRequestedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileBitmapRequestedEventArgs(winRtInstance));
    }





    static void RequestGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileBitmapRequestedEventArgs *wrapper = MapTileBitmapRequestedEventArgs::Unwrap<MapTileBitmapRequestedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequest^ result = wrapper->_instance->Request;
        info.GetReturnValue().Set(WrapMapTileBitmapRequest(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileBitmapRequestedEventArgs *wrapper = MapTileBitmapRequestedEventArgs::Unwrap<MapTileBitmapRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->X;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void YGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileBitmapRequestedEventArgs *wrapper = MapTileBitmapRequestedEventArgs::Unwrap<MapTileBitmapRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->Y;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZoomLevelGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileBitmapRequestedEventArgs *wrapper = MapTileBitmapRequestedEventArgs::Unwrap<MapTileBitmapRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->ZoomLevel;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FrameIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileBitmapRequestedEventArgs *wrapper = MapTileBitmapRequestedEventArgs::Unwrap<MapTileBitmapRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->FrameIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileBitmapRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ UnwrapMapTileBitmapRequestedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileBitmapRequestedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileBitmapRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileBitmapRequestedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileBitmapRequestedEventArgs^ UnwrapMapTileBitmapRequestedEventArgs(Local<Value> value) {
     return MapTileBitmapRequestedEventArgs::Unwrap<MapTileBitmapRequestedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileBitmapRequestedEventArgs(Local<Object> exports) {
    MapTileBitmapRequestedEventArgs::Init(exports);
  }

  class MapTileSource : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileSource").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);


          
            Nan::SetPrototypeMethod(localRef, "pause", Pause);
            Nan::SetPrototypeMethod(localRef, "play", Play);
            Nan::SetPrototypeMethod(localRef, "stop", Stop);
          



          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zoomLevelRange").ToLocalChecked(), ZoomLevelRangeGetter, ZoomLevelRangeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zIndex").ToLocalChecked(), ZIndexGetter, ZIndexSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("visible").ToLocalChecked(), VisibleGetter, VisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("tilePixelSize").ToLocalChecked(), TilePixelSizeGetter, TilePixelSizeSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("layer").ToLocalChecked(), LayerGetter, LayerSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isTransparencyEnabled").ToLocalChecked(), IsTransparencyEnabledGetter, IsTransparencyEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isRetryEnabled").ToLocalChecked(), IsRetryEnabledGetter, IsRetryEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("isFadingEnabled").ToLocalChecked(), IsFadingEnabledGetter, IsFadingEnabledSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dataSource").ToLocalChecked(), DataSourceGetter, DataSourceSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("bounds").ToLocalChecked(), BoundsGetter, BoundsSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("allowOverstretch").ToLocalChecked(), AllowOverstretchGetter, AllowOverstretchSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("frameDuration").ToLocalChecked(), FrameDurationGetter, FrameDurationSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("frameCount").ToLocalChecked(), FrameCountGetter, FrameCountSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("autoPlay").ToLocalChecked(), AutoPlayGetter, AutoPlaySetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("animationState").ToLocalChecked(), AnimationStateGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        Nan::SetAccessor(constructor, Nan::New<String>("allowOverstretchProperty").ToLocalChecked(), AllowOverstretchPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("boundsProperty").ToLocalChecked(), BoundsPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("dataSourceProperty").ToLocalChecked(), DataSourcePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isFadingEnabledProperty").ToLocalChecked(), IsFadingEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isRetryEnabledProperty").ToLocalChecked(), IsRetryEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("isTransparencyEnabledProperty").ToLocalChecked(), IsTransparencyEnabledPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("layerProperty").ToLocalChecked(), LayerPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("tilePixelSizeProperty").ToLocalChecked(), TilePixelSizePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("visibleProperty").ToLocalChecked(), VisiblePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zIndexProperty").ToLocalChecked(), ZIndexPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("zoomLevelRangeProperty").ToLocalChecked(), ZoomLevelRangePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("animationStateProperty").ToLocalChecked(), AnimationStatePropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("autoPlayProperty").ToLocalChecked(), AutoPlayPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("frameCountProperty").ToLocalChecked(), FrameCountPropertyGetter);
        Nan::SetAccessor(constructor, Nan::New<String>("frameDurationProperty").ToLocalChecked(), FrameDurationPropertyGetter);


        Nan::Set(exports, Nan::New<String>("MapTileSource").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileSource(::Windows::UI::Xaml::Controls::Maps::MapTileSource^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileSource^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileSource^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileSource();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(info[0]))
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ arg0 = UnwrapMapTileDataSource(info[0]);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileSource(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 2
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(info[0])
        && IsMapZoomLevelRangeJsObject(info[1]))
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ arg0 = UnwrapMapTileDataSource(info[0]);
          ::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange arg1 = MapZoomLevelRangeFromJsObject(info[1]);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileSource(arg0,arg1);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 3
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(info[0])
        && IsMapZoomLevelRangeJsObject(info[1])
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::GeoboundingBox^>(info[2]))
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ arg0 = UnwrapMapTileDataSource(info[0]);
          ::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange arg1 = MapZoomLevelRangeFromJsObject(info[1]);
          ::Windows::Devices::Geolocation::GeoboundingBox^ arg2 = dynamic_cast<::Windows::Devices::Geolocation::GeoboundingBox^>(NodeRT::Utils::GetObjectInstance(info[2]));
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileSource(arg0,arg1,arg2);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 4
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(info[0])
        && IsMapZoomLevelRangeJsObject(info[1])
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::GeoboundingBox^>(info[2])
        && info[3]->IsInt32())
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ arg0 = UnwrapMapTileDataSource(info[0]);
          ::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange arg1 = MapZoomLevelRangeFromJsObject(info[1]);
          ::Windows::Devices::Geolocation::GeoboundingBox^ arg2 = dynamic_cast<::Windows::Devices::Geolocation::GeoboundingBox^>(NodeRT::Utils::GetObjectInstance(info[2]));
          int arg3 = static_cast<int>(Nan::To<int32_t>(info[3]).FromMaybe(0));
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileSource(arg0,arg1,arg2,arg3);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileSource *wrapperInstance = new MapTileSource(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileSource^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileSource^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileSource(winRtInstance));
    }


    static void Pause(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->Pause();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void Play(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->Play();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }
    static void Stop(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->Stop();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }



    static void ZoomLevelRangeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange result = wrapper->_instance->ZoomLevelRange;
        info.GetReturnValue().Set(MapZoomLevelRangeToJsObject(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZoomLevelRangeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!IsMapZoomLevelRangeJsObject(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapZoomLevelRange winRtValue = MapZoomLevelRangeFromJsObject(value);

        wrapper->_instance->ZoomLevelRange = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ZIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        int result = wrapper->_instance->ZIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZIndexSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->ZIndex = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void VisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        bool result = wrapper->_instance->Visible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void VisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->Visible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void TilePixelSizeGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        int result = wrapper->_instance->TilePixelSize;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void TilePixelSizeSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->TilePixelSize = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void LayerGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapTileLayer result = wrapper->_instance->Layer;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void LayerSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapTileLayer winRtValue = static_cast<::Windows::UI::Xaml::Controls::Maps::MapTileLayer>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->Layer = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsTransparencyEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        bool result = wrapper->_instance->IsTransparencyEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsTransparencyEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsTransparencyEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsRetryEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        bool result = wrapper->_instance->IsRetryEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsRetryEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsRetryEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void IsFadingEnabledGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        bool result = wrapper->_instance->IsFadingEnabled;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void IsFadingEnabledSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->IsFadingEnabled = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DataSourceGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ result = wrapper->_instance->DataSource;
        info.GetReturnValue().Set(WrapMapTileDataSource(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DataSourceSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        ::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^ winRtValue = dynamic_cast<::Windows::UI::Xaml::Controls::Maps::MapTileDataSource^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->DataSource = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void BoundsGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        ::Windows::Devices::Geolocation::GeoboundingBox^ result = wrapper->_instance->Bounds;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "GeoboundingBox", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void BoundsSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::GeoboundingBox^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        ::Windows::Devices::Geolocation::GeoboundingBox^ winRtValue = dynamic_cast<::Windows::Devices::Geolocation::GeoboundingBox^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Bounds = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AllowOverstretchGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        bool result = wrapper->_instance->AllowOverstretch;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AllowOverstretchSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->AllowOverstretch = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FrameDurationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        ::Windows::Foundation::TimeSpan result = wrapper->_instance->FrameDuration;
        info.GetReturnValue().Set(Nan::New<Number>(result.Duration/10000.0));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FrameDurationSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsNumber()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        ::Windows::Foundation::TimeSpan winRtValue = NodeRT::Utils::TimeSpanFromMilli(Nan::To<int64_t>(value).FromMaybe(0));

        wrapper->_instance->FrameDuration = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void FrameCountGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        int result = wrapper->_instance->FrameCount;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FrameCountSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsInt32()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        int winRtValue = static_cast<int>(Nan::To<int32_t>(value).FromMaybe(0));

        wrapper->_instance->FrameCount = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AutoPlayGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        bool result = wrapper->_instance->AutoPlay;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AutoPlaySetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->AutoPlay = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AnimationStateGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileSource^>(info.This())) {
        return;
      }

      MapTileSource *wrapper = MapTileSource::Unwrap<MapTileSource>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapTileAnimationState result = wrapper->_instance->AnimationState;
        info.GetReturnValue().Set(Nan::New<Integer>(static_cast<int>(result)));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    static void AllowOverstretchPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::AllowOverstretchProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void BoundsPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::BoundsProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void DataSourcePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::DataSourceProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsFadingEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::IsFadingEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsRetryEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::IsRetryEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void IsTransparencyEnabledPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::IsTransparencyEnabledProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void LayerPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::LayerProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void TilePixelSizePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::TilePixelSizeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void VisiblePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::VisibleProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZIndexPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::ZIndexProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void ZoomLevelRangePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::ZoomLevelRangeProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AnimationStatePropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::AnimationStateProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void AutoPlayPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::AutoPlayProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FrameCountPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::FrameCountProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    static void FrameDurationPropertyGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      try
      {
        ::Windows::UI::Xaml::DependencyProperty^ result = ::Windows::UI::Xaml::Controls::Maps::MapTileSource::FrameDurationProperty;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Xaml", "DependencyProperty", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      

    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileSource^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileSource(::Windows::UI::Xaml::Controls::Maps::MapTileSource^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileSource^ UnwrapMapTileSource(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileSource::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileSource(::Windows::UI::Xaml::Controls::Maps::MapTileSource^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileSource::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileSource^ UnwrapMapTileSource(Local<Value> value) {
     return MapTileSource::Unwrap<MapTileSource>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileSource(Local<Object> exports) {
    MapTileSource::Init(exports);
  }

  class MapTileUriRequest : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileUriRequest").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);


          
            Nan::SetPrototypeMethod(localRef, "getDeferral", GetDeferral);
          



          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("uri").ToLocalChecked(), UriGetter, UriSetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTileUriRequest").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileUriRequest(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileUriRequest *wrapperInstance = new MapTileUriRequest(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileUriRequest(winRtInstance));
    }


    static void GetDeferral(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^>(info.This())) {
        return;
      }

      MapTileUriRequest *wrapper = MapTileUriRequest::Unwrap<MapTileUriRequest>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ result;
          result = wrapper->_instance->GetDeferral();
          info.GetReturnValue().Set(WrapMapTileUriRequestDeferral(result));
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }



    static void UriGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^>(info.This())) {
        return;
      }

      MapTileUriRequest *wrapper = MapTileUriRequest::Unwrap<MapTileUriRequest>(info.This());

      try  {
        ::Windows::Foundation::Uri^ result = wrapper->_instance->Uri;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Foundation", "Uri", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void UriSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::Foundation::Uri^>(value)) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^>(info.This())) {
        return;
      }

      MapTileUriRequest *wrapper = MapTileUriRequest::Unwrap<MapTileUriRequest>(info.This());

      try {

        ::Windows::Foundation::Uri^ winRtValue = dynamic_cast<::Windows::Foundation::Uri^>(NodeRT::Utils::GetObjectInstance(value));

        wrapper->_instance->Uri = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileUriRequest(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ UnwrapMapTileUriRequest(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileUriRequest::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileUriRequest(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileUriRequest::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ UnwrapMapTileUriRequest(Local<Value> value) {
     return MapTileUriRequest::Unwrap<MapTileUriRequest>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileUriRequest(Local<Object> exports) {
    MapTileUriRequest::Init(exports);
  }

  class MapTileUriRequestDeferral : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileUriRequestDeferral").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);


          
            Nan::SetPrototypeMethod(localRef, "complete", Complete);
          




        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTileUriRequestDeferral").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileUriRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileUriRequestDeferral *wrapperInstance = new MapTileUriRequestDeferral(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileUriRequestDeferral(winRtInstance));
    }


    static void Complete(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^>(info.This())) {
        return;
      }

      MapTileUriRequestDeferral *wrapper = MapTileUriRequestDeferral::Unwrap<MapTileUriRequestDeferral>(info.This());

      if (info.Length() == 0)
      {
        try
        {
          wrapper->_instance->Complete();
          return;
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }
    }





    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileUriRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ UnwrapMapTileUriRequestDeferral(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileUriRequestDeferral::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileUriRequestDeferral(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileUriRequestDeferral::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestDeferral^ UnwrapMapTileUriRequestDeferral(Local<Value> value) {
     return MapTileUriRequestDeferral::Unwrap<MapTileUriRequestDeferral>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileUriRequestDeferral(Local<Object> exports) {
    MapTileUriRequestDeferral::Init(exports);
  }

  class MapTileUriRequestedEventArgs : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("MapTileUriRequestedEventArgs").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("request").ToLocalChecked(), RequestGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("x").ToLocalChecked(), XGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("y").ToLocalChecked(), YGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zoomLevel").ToLocalChecked(), ZoomLevelGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("frameIndex").ToLocalChecked(), FrameIndexGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("MapTileUriRequestedEventArgs").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      MapTileUriRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 0)
      {
        try {
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs();
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      MapTileUriRequestedEventArgs *wrapperInstance = new MapTileUriRequestedEventArgs(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapMapTileUriRequestedEventArgs(winRtInstance));
    }





    static void RequestGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileUriRequestedEventArgs *wrapper = MapTileUriRequestedEventArgs::Unwrap<MapTileUriRequestedEventArgs>(info.This());

      try  {
        ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequest^ result = wrapper->_instance->Request;
        info.GetReturnValue().Set(WrapMapTileUriRequest(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void XGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileUriRequestedEventArgs *wrapper = MapTileUriRequestedEventArgs::Unwrap<MapTileUriRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->X;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void YGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileUriRequestedEventArgs *wrapper = MapTileUriRequestedEventArgs::Unwrap<MapTileUriRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->Y;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZoomLevelGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileUriRequestedEventArgs *wrapper = MapTileUriRequestedEventArgs::Unwrap<MapTileUriRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->ZoomLevel;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void FrameIndexGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^>(info.This())) {
        return;
      }

      MapTileUriRequestedEventArgs *wrapper = MapTileUriRequestedEventArgs::Unwrap<MapTileUriRequestedEventArgs>(info.This());

      try  {
        int result = wrapper->_instance->FrameIndex;
        info.GetReturnValue().Set(Nan::New<Integer>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapMapTileUriRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ UnwrapMapTileUriRequestedEventArgs(Local<Value> value);
  };

  Persistent<FunctionTemplate> MapTileUriRequestedEventArgs::s_constructorTemplate;

  v8::Local<v8::Value> WrapMapTileUriRequestedEventArgs(::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(MapTileUriRequestedEventArgs::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::MapTileUriRequestedEventArgs^ UnwrapMapTileUriRequestedEventArgs(Local<Value> value) {
     return MapTileUriRequestedEventArgs::Unwrap<MapTileUriRequestedEventArgs>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitMapTileUriRequestedEventArgs(Local<Object> exports) {
    MapTileUriRequestedEventArgs::Init(exports);
  }

  class StreetsideExperience : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("StreetsideExperience").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);





          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("zoomButtonsVisible").ToLocalChecked(), ZoomButtonsVisibleGetter, ZoomButtonsVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("streetLabelsVisible").ToLocalChecked(), StreetLabelsVisibleGetter, StreetLabelsVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("overviewMapVisible").ToLocalChecked(), OverviewMapVisibleGetter, OverviewMapVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("exitButtonVisible").ToLocalChecked(), ExitButtonVisibleGetter, ExitButtonVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("cursorVisible").ToLocalChecked(), CursorVisibleGetter, CursorVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("addressTextVisible").ToLocalChecked(), AddressTextVisibleGetter, AddressTextVisibleSetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);



        Nan::Set(exports, Nan::New<String>("StreetsideExperience").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      StreetsideExperience(::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 1
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^>(info[0]))
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ arg0 = UnwrapStreetsidePanorama(info[0]);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience(arg0);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
      else if (info.Length() == 4
        && NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^>(info[0])
        && info[1]->IsNumber()
        && info[2]->IsNumber()
        && info[3]->IsNumber())
      {
        try {
          ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ arg0 = UnwrapStreetsidePanorama(info[0]);
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
          double arg2 = Nan::To<double>(info[2]).FromMaybe(0.0);
          double arg3 = Nan::To<double>(info[3]).FromMaybe(0.0);
          
          winRtInstance = ref new ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience(arg0,arg1,arg2,arg3);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      StreetsideExperience *wrapperInstance = new StreetsideExperience(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapStreetsideExperience(winRtInstance));
    }





    static void ZoomButtonsVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try  {
        bool result = wrapper->_instance->ZoomButtonsVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ZoomButtonsVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->ZoomButtonsVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void StreetLabelsVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try  {
        bool result = wrapper->_instance->StreetLabelsVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void StreetLabelsVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->StreetLabelsVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void OverviewMapVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try  {
        bool result = wrapper->_instance->OverviewMapVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void OverviewMapVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->OverviewMapVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void ExitButtonVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try  {
        bool result = wrapper->_instance->ExitButtonVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void ExitButtonVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->ExitButtonVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void CursorVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try  {
        bool result = wrapper->_instance->CursorVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void CursorVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->CursorVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void AddressTextVisibleGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try  {
        bool result = wrapper->_instance->AddressTextVisible;
        info.GetReturnValue().Set(Nan::New<Boolean>(result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void AddressTextVisibleSetter(Local<String> property, Local<Value> value, const Nan::PropertyCallbackInfo<void> &info) {
      HandleScope scope;

      if (!value->IsBoolean()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Value to set is of unexpected type")));
        return;
      }

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^>(info.This())) {
        return;
      }

      StreetsideExperience *wrapper = StreetsideExperience::Unwrap<StreetsideExperience>(info.This());

      try {

        bool winRtValue = Nan::To<bool>(value).FromMaybe(false);

        wrapper->_instance->AddressTextVisible = winRtValue;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapStreetsideExperience(::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ UnwrapStreetsideExperience(Local<Value> value);
  };

  Persistent<FunctionTemplate> StreetsideExperience::s_constructorTemplate;

  v8::Local<v8::Value> WrapStreetsideExperience(::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(StreetsideExperience::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::StreetsideExperience^ UnwrapStreetsideExperience(Local<Value> value) {
     return StreetsideExperience::Unwrap<StreetsideExperience>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitStreetsideExperience(Local<Object> exports) {
    StreetsideExperience::Init(exports);
  }

  class StreetsidePanorama : public WrapperBase {
    public:
      
      static void Init(const Local<Object> exports) {
        HandleScope scope;

        Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(New);
        s_constructorTemplate.Reset(localRef);
        localRef->SetClassName(Nan::New<String>("StreetsidePanorama").ToLocalChecked());
        localRef->InstanceTemplate()->SetInternalFieldCount(1);

        Local<Function> func;
        Local<FunctionTemplate> funcTemplate;




          
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("location").ToLocalChecked(), LocationGetter);
            Nan::SetAccessor(localRef->PrototypeTemplate(), Nan::New<String>("dispatcher").ToLocalChecked(), DispatcherGetter);

        Local<Object> constructor = Nan::To<Object>(Nan::GetFunction(localRef).ToLocalChecked()).ToLocalChecked();
        Nan::SetMethod(constructor, "castFrom", CastFrom);

        func = Nan::GetFunction(Nan::New<FunctionTemplate>(FindNearbyAsync)).ToLocalChecked();
        Nan::Set(constructor, Nan::New<String>("findNearbyAsync").ToLocalChecked(), func);


        Nan::Set(exports, Nan::New<String>("StreetsidePanorama").ToLocalChecked(), constructor);
      }

      virtual ::Platform::Object^ GetObjectInstance() const override {
        return _instance;
      }

    private:

      StreetsidePanorama(::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ instance) {
        _instance = instance;
      }

      
    static void New(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(s_constructorTemplate);

      // in case the constructor was called without the new operator
      if (!localRef->HasInstance(info.This())) {
        if (info.Length() > 0) {
          std::unique_ptr<Local<Value> []> constructorArgs(new Local<Value>[info.Length()]);

          Local<Value> *argsPtr = constructorArgs.get();
          for (int i = 0; i < info.Length(); i++) {
            argsPtr[i] = info[i];
          }

          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), constructorArgs.get());
          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        } else {
          MaybeLocal<Object> res = Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(), info.Length(), nullptr);

          if (res.IsEmpty()) {
            return;
          }

          info.GetReturnValue().Set(res.ToLocalChecked());
          return;
        }
      }

      ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ winRtInstance;


      if (info.Length() == 1 && OpaqueWrapper::IsOpaqueWrapper(info[0]) &&
        NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^>(info[0])) {
        try {
          winRtInstance = (::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^) NodeRT::Utils::GetObjectInstance(info[0]);
        } catch (Platform::Exception ^exception) {
          NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
          return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no suitable constructor found")));
        return;
      }

      NodeRT::Utils::SetHiddenValue(info.This(), Nan::New<String>("__winRtInstance__").ToLocalChecked(), True());

      StreetsidePanorama *wrapperInstance = new StreetsidePanorama(winRtInstance);
      wrapperInstance->Wrap(info.This());

      info.GetReturnValue().Set(info.This());
    }


      
    static void CastFrom(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;
      if (info.Length() < 1 || !NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^>(info[0])) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Invalid arguments, no object provided, or given object could not be casted to requested type")));
        return;
      }

      ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ winRtInstance;
      try {
        winRtInstance = (::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^) NodeRT::Utils::GetObjectInstance(info[0]);
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }

      info.GetReturnValue().Set(WrapStreetsidePanorama(winRtInstance));
    }




    static void FindNearbyAsync(Nan::NAN_METHOD_ARGS_TYPE info) {
      HandleScope scope;

      if (info.Length() == 0 || !info[info.Length() -1]->IsFunction()) {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: No callback was given")));
        return;
      }

      ::Windows::Foundation::IAsyncOperation<::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^>^ op;


      if (info.Length() == 2
          && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0]))
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
            
          op = ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama::FindNearbyAsync(arg0);
        } catch (Platform::Exception ^exception) {
            NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
            return;
        }
      }
      else if (info.Length() == 3
          && NodeRT::Utils::IsWinRtWrapperOf<::Windows::Devices::Geolocation::Geopoint^>(info[0])
          && info[1]->IsNumber())
      {
        try
        {
          ::Windows::Devices::Geolocation::Geopoint^ arg0 = dynamic_cast<::Windows::Devices::Geolocation::Geopoint^>(NodeRT::Utils::GetObjectInstance(info[0]));
          double arg1 = Nan::To<double>(info[1]).FromMaybe(0.0);
            
          op = ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama::FindNearbyAsync(arg0,arg1);
        } catch (Platform::Exception ^exception) {
            NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
            return;
        }
      }
 else {
        Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"Bad arguments: no suitable overload found")));
        return;
      }

      auto opTask = create_task(op);
      uv_async_t* asyncToken = NodeUtils::Async::GetAsyncToken(info[info.Length() -1].As<Function>());

      opTask.then( [asyncToken] (task<::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^> t)
      {
        try {
          auto result = t.get();
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [result](NodeUtils::InvokeCallbackDelegate invokeCallback) {


            Local<Value> error;
            Local<Value> arg1;
            {
              TryCatch tryCatch;
              arg1 = WrapStreetsidePanorama(result);
              if (tryCatch.HasCaught())
              {
                error = Nan::To<Object>(tryCatch.Exception()).ToLocalChecked();
              }
              else
              {
                error = Undefined();
              }
              if (arg1.IsEmpty()) arg1 = Undefined();
            }
            Local<Value> args[] = {error, arg1};


            invokeCallback(_countof(args), args);
          });
        }
        catch (Platform::Exception^ exception)
        {
          NodeUtils::Async::RunCallbackOnMain(asyncToken, [exception](NodeUtils::InvokeCallbackDelegate invokeCallback) {

            Local<Value> error = NodeRT::Utils::WinRtExceptionToJsError(exception);

            Local<Value> args[] = {error};
            invokeCallback(_countof(args), args);
          });
        }
      });
    }


    static void LocationGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^>(info.This())) {
        return;
      }

      StreetsidePanorama *wrapper = StreetsidePanorama::Unwrap<StreetsidePanorama>(info.This());

      try  {
        ::Windows::Devices::Geolocation::Geopoint^ result = wrapper->_instance->Location;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.Devices.Geolocation", "Geopoint", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      
    static void DispatcherGetter(Local<String> property, const Nan::PropertyCallbackInfo<v8::Value> &info) {
      HandleScope scope;

      if (!NodeRT::Utils::IsWinRtWrapperOf<::Windows::UI::Xaml::DependencyObject^>(info.This())) {
        return;
      }

      DependencyObject *wrapper = DependencyObject::Unwrap<DependencyObject>(info.This());

      try  {
        ::Windows::UI::Core::CoreDispatcher^ result = wrapper->_instance->Dispatcher;
        info.GetReturnValue().Set(NodeRT::Utils::CreateExternalWinRTObject("Windows.UI.Core", "CoreDispatcher", result));
        return;
      } catch (Platform::Exception ^exception) {
        NodeRT::Utils::ThrowWinRtExceptionInJs(exception);
        return;
      }
    }
      


    private:
      ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ _instance;
      static Persistent<FunctionTemplate> s_constructorTemplate;

      friend v8::Local<v8::Value> WrapStreetsidePanorama(::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ wintRtInstance);
      friend ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ UnwrapStreetsidePanorama(Local<Value> value);
  };

  Persistent<FunctionTemplate> StreetsidePanorama::s_constructorTemplate;

  v8::Local<v8::Value> WrapStreetsidePanorama(::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ winRtInstance) {
    EscapableHandleScope scope;

    if (winRtInstance == nullptr) {
      return scope.Escape(Undefined());
    }

    Local<Value> opaqueWrapper = CreateOpaqueWrapper(winRtInstance);
    Local<Value> args[] = {opaqueWrapper};
    Local<FunctionTemplate> localRef = Nan::New<FunctionTemplate>(StreetsidePanorama::s_constructorTemplate);
    return scope.Escape(Nan::NewInstance(Nan::GetFunction(localRef).ToLocalChecked(),_countof(args), args).ToLocalChecked());
  }

  ::Windows::UI::Xaml::Controls::Maps::StreetsidePanorama^ UnwrapStreetsidePanorama(Local<Value> value) {
     return StreetsidePanorama::Unwrap<StreetsidePanorama>(Nan::To<Object>(value).ToLocalChecked())->_instance;
  }

  void InitStreetsidePanorama(Local<Object> exports) {
    StreetsidePanorama::Init(exports);
  }


} } } } } } 

NAN_MODULE_INIT(init) {
  // We ignore failures for now since it probably means that
  // the initialization already happened for STA, and that's cool

  CoInitializeEx(nullptr, COINIT_MULTITHREADED);

  /*
  if (FAILED(CoInitializeEx(nullptr, COINIT_MULTITHREADED))) {
    Nan::ThrowError(Nan::Error(NodeRT::Utils::NewString(L"error in CoInitializeEx()")));
    return;
  }
  */

      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapAnimationKindEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapCameraChangeReasonEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapColorSchemeEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementCollisionBehaviorEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapInteractionModeEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapLoadingStatusEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapModel3DShadingOptionEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapPanInteractionModeEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapProjectionEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapStyleEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileAnimationStateEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileLayerEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapVisibleRegionKindEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapWatermarkModeEnum(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileDataSource(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitCustomMapTileDataSource(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitHttpMapTileDataSource(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitLocalMapTileDataSource(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapActualCameraChangedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapActualCameraChangingEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElement(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapBillboard(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapCamera(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapContextRequestedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControl(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlBusinessLandmarkClickEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlBusinessLandmarkPointerEnteredEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlBusinessLandmarkPointerExitedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlBusinessLandmarkRightTappedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlDataHelper(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlTransitFeatureClickEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlTransitFeaturePointerEnteredEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlTransitFeaturePointerExitedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapControlTransitFeatureRightTappedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapCustomExperience(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapCustomExperienceChangedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElement3D(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementClickEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementPointerEnteredEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementPointerExitedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapLayer(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementsLayer(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementsLayerClickEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementsLayerContextRequestedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementsLayerPointerEnteredEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapElementsLayerPointerExitedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapIcon(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapInputEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapItemsControl(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapModel3D(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapPolygon(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapPolyline(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapRightTappedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapRouteView(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapScene(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapStyleSheet(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapStyleSheetEntries(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapStyleSheetEntryStates(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTargetCameraChangedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileBitmapRequest(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileBitmapRequestDeferral(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileBitmapRequestedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileSource(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileUriRequest(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileUriRequestDeferral(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitMapTileUriRequestedEventArgs(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitStreetsideExperience(target);
      NodeRT::Windows::UI::Xaml::Controls::Maps::InitStreetsidePanorama(target);


  NodeRT::Utils::RegisterNameSpace("Windows.UI.Xaml.Controls.Maps", target);
}



NODE_MODULE(binding, init)
