Переглянути джерело

Merge branch 'master' of http://git.9026.com/roobe/miao

YanaDH 7 роки тому
батько
коміт
75ddfd2432
100 змінених файлів з 27272 додано та 10028 видалено
  1. BIN
      .vs/miaomiao/v14/.suo
  2. BIN
      miaomiao/bin/Android/Debug/android-debug-unaligned.apk
  3. BIN
      miaomiao/bin/Android/Debug/android-debug.apk
  4. 0 10
      miaomiao/bin/Android/Release/VSBuildInfo.xml
  5. 6 1
      miaomiao/build.json
  6. 85 82
      miaomiao/config.xml
  7. 0 9912
      miaomiao/npm-debug.log
  8. 3 2
      miaomiao/package.json
  9. 0 17
      miaomiao/plugins/android.json
  10. 55 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/README.md
  11. 93 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/package.json
  12. 76 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/plugin.xml
  13. 109 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/android/AliPay.java
  14. 1 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/android/PayResult.java
  15. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/android/libs/alipaySdk-20160825.jar
  16. 11 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/AlipayPlugin.h
  17. 83 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/AlipayPlugin.m
  18. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/bar@2x.png
  19. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/refresh@2x.png
  20. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/refresh_click@2x.png
  21. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/shutdown@2x.png
  22. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/shutdown_click@2x.png
  23. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/AlipaySDK
  24. 33 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/Headers/APayAuthInfo.h
  25. 177 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/Headers/AlipaySDK.h
  26. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/Info.plist
  27. BIN
      miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/en.lproj/InfoPlist.strings
  28. 9 0
      miaomiao/plugins/cordova-plugin-offbye-alipay/www/AliPay.js
  29. 22 0
      miaomiao/plugins/cordova-plugin-weibosdk/LICENSE
  30. 119 0
      miaomiao/plugins/cordova-plugin-weibosdk/README.md
  31. 118 0
      miaomiao/plugins/cordova-plugin-weibosdk/README_ZH.md
  32. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/ScreenShot.png
  33. 802 0
      miaomiao/plugins/cordova-plugin-weibosdk/example_www/css/bootstrap.css
  34. 115 0
      miaomiao/plugins/cordova-plugin-weibosdk/example_www/css/index.css
  35. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/example_www/img/logo.png
  36. 31 0
      miaomiao/plugins/cordova-plugin-weibosdk/example_www/index.html
  37. 60 0
      miaomiao/plugins/cordova-plugin-weibosdk/example_www/js/index.js
  38. 104 0
      miaomiao/plugins/cordova-plugin-weibosdk/package.json
  39. 126 0
      miaomiao/plugins/cordova-plugin-weibosdk/plugin.xml
  40. 457 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/WeiboSDKPlugin.java
  41. 10 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/WeiboSDKPlugin.gradle
  42. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/openDefault-2.0.6.aar
  43. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/arm64-v8a/libweibosdkcore.so
  44. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/armeabi-v7a/libweibosdkcore.so
  45. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/armeabi/libweibosdkcore.so
  46. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/mips/libweibosdkcore.so
  47. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/mips64/libweibosdkcore.so
  48. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/x86/libweibosdkcore.so
  49. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/x86_64/libweibosdkcore.so
  50. 22 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/CDVWeiboSDK.h
  51. 314 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/CDVWeiboSDK.m
  52. 30 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WBHttpRequest+WeiboToken.h
  53. 184 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WBHttpRequest.h
  54. 89 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK+Statistics.h
  55. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/images/common_button_white@2x.png
  56. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/images/common_button_white_highlighted@2x.png
  57. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/images/empty_failed@2x.png
  58. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/others/mfp.cer
  59. 573 0
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.h
  60. BIN
      miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/libWeiboSDK.a
  61. 30 0
      miaomiao/plugins/cordova-plugin-weibosdk/www/weibo.js
  62. 9 4
      miaomiao/plugins/fetch.json
  63. 127 0
      miaomiao/plugins/jpush-phonegap-plugin/README.md
  64. 347 0
      miaomiao/plugins/jpush-phonegap-plugin/doc/Android_detail_api.md
  65. 135 0
      miaomiao/plugins/jpush-phonegap-plugin/doc/Android_handle_install.md
  66. 379 0
      miaomiao/plugins/jpush-phonegap-plugin/doc/Common_detail_api.md
  67. 865 0
      miaomiao/plugins/jpush-phonegap-plugin/doc/iOS_API.md
  68. 41 0
      miaomiao/plugins/jpush-phonegap-plugin/doc/iOS_install.md
  69. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/DismissActions_00.PNG
  70. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_00.gif
  71. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_01.png
  72. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_02.png
  73. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_03.png
  74. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_04.png
  75. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_05.png
  76. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_06.png
  77. BIN
      miaomiao/plugins/jpush-phonegap-plugin/doc/res/NotificationActions_00.png
  78. 115 0
      miaomiao/plugins/jpush-phonegap-plugin/example/css/index.css
  79. 2140 0
      miaomiao/plugins/jpush-phonegap-plugin/example/css/jquery.mobile-1.1.1.css
  80. 276 0
      miaomiao/plugins/jpush-phonegap-plugin/example/css/mobiscroll.core-2.0.1.css
  81. 47 0
      miaomiao/plugins/jpush-phonegap-plugin/example/css/mobiscroll.jqm-2.0.1.css
  82. 201 0
      miaomiao/plugins/jpush-phonegap-plugin/example/index.html
  83. 9404 0
      miaomiao/plugins/jpush-phonegap-plugin/example/js/jquery.js
  84. 7690 0
      miaomiao/plugins/jpush-phonegap-plugin/example/js/jquery.mobile-1.1.1.js
  85. 8 0
      miaomiao/plugins/jpush-phonegap-plugin/hooks/apns.entitlements
  86. 93 0
      miaomiao/plugins/jpush-phonegap-plugin/hooks/common.js
  87. 66 0
      miaomiao/plugins/jpush-phonegap-plugin/hooks/iosDisablePush.js
  88. 172 0
      miaomiao/plugins/jpush-phonegap-plugin/hooks/iosEnablePush.js
  89. 21 0
      miaomiao/plugins/jpush-phonegap-plugin/license
  90. 103 0
      miaomiao/plugins/jpush-phonegap-plugin/package.json
  91. 216 0
      miaomiao/plugins/jpush-phonegap-plugin/plugin.xml
  92. 660 0
      miaomiao/plugins/jpush-phonegap-plugin/src/android/JPushPlugin.java
  93. 95 0
      miaomiao/plugins/jpush-phonegap-plugin/src/android/MyReceiver.java
  94. BIN
      miaomiao/plugins/jpush-phonegap-plugin/src/android/libs/jpush-android_v3.0.6.jar
  95. BIN
      miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png
  96. BIN
      miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png
  97. 21 0
      miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml
  98. 20 0
      miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml
  99. 15 0
      miaomiao/plugins/jpush-phonegap-plugin/src/android/res/layout/jpush_popwin_layout.xml
  100. 59 0
      miaomiao/plugins/jpush-phonegap-plugin/src/android/res/layout/jpush_webview_layout.xml

BIN
.vs/miaomiao/v14/.suo


BIN
miaomiao/bin/Android/Debug/android-debug-unaligned.apk


BIN
miaomiao/bin/Android/Debug/android-debug.apk


+ 0 - 10
miaomiao/bin/Android/Release/VSBuildInfo.xml

xqd
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--此文件在 VS 生成进程中创建,用于遥测-->
-<VSBuildInfo xmlns="http://schemas.microsoft.com/developer/appx/2012/build">
-  <Metadata>
-    <Item Name="VisualStudio" Version="14.0" />
-    <Item Name="VisualStudioEdition" Value="Microsoft Visual Studio Professional 2015" />
-    <Item Name="OperatingSystem" Version="10.0.14393.0 (rs1_release.160715-1616)" />
-    <Item Name="ProjectGUID" Value="a0ea3796-527a-486c-a017-b40edaebb9a7" />
-  </Metadata>
-</VSBuildInfo>

+ 6 - 1
miaomiao/build.json

xqd
@@ -1,5 +1,10 @@
 {
   "android": {
-
+    "release": {
+      "keystore": "my-release-key.keystore",
+      "alias": "alias_name",
+      "storePassword": "qweqwe",
+      "password": "qweqwe"
+    }
   }
 }

+ 85 - 82
miaomiao/config.xml

xqd xqd
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <widget id="com.miaomiao.app" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
   <name>瞄喵</name>
   <description>
@@ -7,97 +7,100 @@
   <author email="you@example.com" href="http://example.com.com/">
       Mike
   </author>
-  <content src="index.html"/>
-  <access origin="*"/>
-  <allow-intent href="*"/>
-  <allow-navigation href="*"/>
-  <preference name="webviewbounce" value="false"/>
-  <preference name="UIWebViewBounce" value="false"/>
-  <preference name="DisallowOverscroll" value="true"/>
-  <preference name="android-minSdkVersion" value="16"/>
-  <preference name="BackupWebStorage" value="none"/>
-  <preference name="KeepRunning" value="True"/>
-  <preference name="ShowTitle" value="True"/>
-  <preference name="InAppBrowserStorageEnabled" value="True"/>
-  <preference name="SuppressesIncrementalRendering" value="True"/>
-  <preference name="windows-target-version" value="10.0"/>
-  <preference name="SplashScreen" value="screen"/>
-  <preference name="SplashScreenDelay" value="3000"/>
+  <content src="index.html" />
+  <access origin="*" />
+  <allow-intent href="*" />
+  <allow-navigation href="*" />
+  <preference name="webviewbounce" value="false" />
+  <preference name="UIWebViewBounce" value="false" />
+  <preference name="DisallowOverscroll" value="true" />
+  <preference name="android-minSdkVersion" value="16" />
+  <preference name="BackupWebStorage" value="none" />
+  <preference name="KeepRunning" value="True" />
+  <preference name="ShowTitle" value="True" />
+  <preference name="InAppBrowserStorageEnabled" value="True" />
+  <preference name="SuppressesIncrementalRendering" value="True" />
+  <preference name="windows-target-version" value="10.0" />
+  <preference name="SplashScreen" value="screen" />
+  <preference name="SplashScreenDelay" value="3000" />
   <feature name="StatusBar">
-    <param name="ios-package" onload="true" value="CDVStatusBar"/>
+    <param name="ios-package" onload="true" value="CDVStatusBar" />
   </feature>
   <platform name="ios">
-    <icon height="57" src="resources/ios/icon/icon.png" width="57"/>
-    <icon height="114" src="resources/ios/icon/icon@2x.png" width="114"/>
-    <icon height="40" src="resources/ios/icon/icon-40.png" width="40"/>
-    <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80"/>
-    <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120"/>
-    <icon height="50" src="resources/ios/icon/icon-50.png" width="50"/>
-    <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100"/>
-    <icon height="60" src="resources/ios/icon/icon-60.png" width="60"/>
-    <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120"/>
-    <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180"/>
-    <icon height="72" src="resources/ios/icon/icon-72.png" width="72"/>
-    <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144"/>
-    <icon height="76" src="resources/ios/icon/icon-76.png" width="76"/>
-    <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152"/>
-    <icon height="29" src="resources/ios/icon/icon-small.png" width="29"/>
-    <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58"/>
-    <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87"/>
-    <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640"/>
-    <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750"/>
-    <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242"/>
-    <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208"/>
-    <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048"/>
-    <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732"/>
-    <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024"/>
-    <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536"/>
-    <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048"/>
-    <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768"/>
-    <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640"/>
-    <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320"/>
+    <icon height="57" src="resources/ios/icon/icon.png" width="57" />
+    <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
+    <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
+    <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
+    <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
+    <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
+    <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
+    <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
+    <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
+    <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
+    <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
+    <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
+    <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
+    <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
+    <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
+    <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
+    <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
+    <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
+    <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
+    <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
+    <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
+    <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
+    <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
+    <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
+    <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
+    <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
+    <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
+    <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
+    <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
   </platform>
   <platform name="android">
-    <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png"/>
-    <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png"/>
-    <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png"/>
-    <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png"/>
-    <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png"/>
-    <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png"/>
-    <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png"/>
-    <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png"/>
-    <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png"/>
-    <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png"/>
-    <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png"/>
-    <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png"/>
-    <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png"/>
-    <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png"/>
-    <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png"/>
-    <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png"/>
-    <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png"/>
-    <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png"/>
+    <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
+    <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
+    <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
+    <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
+    <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
+    <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
+    <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
+    <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
+    <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
+    <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
+    <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
+    <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
+    <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
+    <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
+    <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
+    <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
+    <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
+    <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
   </platform>
   <chcp>
-    <config-file url="http://i.9026.com/miaomiao/chcp.json"/>
+    <config-file url="http://i.9026.com/miaomiao/chcp.json" />
   </chcp>
-  <plugin name="cordova-hot-code-push-plugin" spec="~1.5.3"/>
-  <plugin name="cordova-plugin-actionsheet" spec="2.3.3"/>
-  <plugin name="cordova-plugin-camera" spec="2.4.0"/>
-  <plugin name="cordova-plugin-compat" spec="1.1.0"/>
-  <plugin name="cordova-plugin-console" spec="~1.0.2"/>
-  <plugin name="cordova-plugin-device" spec="~1.1.1"/>
-  <plugin name="cordova-plugin-file" spec="4.3.2"/>
-  <plugin name="cordova-plugin-file-transfer" spec="1.6.2"/>
-  <plugin name="cordova-plugin-jcore" spec="1.1.5"/>
-  <plugin name="cordova-plugin-media-capture" spec="1.4.3"/>
-  <plugin name="cordova-plugin-splashscreen" spec="4.0.3"/>
-  <plugin name="cordova-plugin-statusbar" spec="~2.1.0"/>
+  <plugin name="cordova-hot-code-push-plugin" spec="~1.5.3" />
+  <plugin name="cordova-plugin-actionsheet" spec="2.3.3" />
+  <plugin name="cordova-plugin-camera" spec="2.4.0" />
+  <plugin name="cordova-plugin-compat" spec="1.1.0" />
+  <plugin name="cordova-plugin-console" spec="~1.0.2" />
+  <plugin name="cordova-plugin-device" spec="~1.1.1" />
+  <plugin name="cordova-plugin-file" spec="4.3.2" />
+  <plugin name="cordova-plugin-file-transfer" spec="1.6.2" />
+  <plugin name="cordova-plugin-jcore" spec="1.1.5" />
+  <plugin name="cordova-plugin-media-capture" spec="1.4.3" />
+  <plugin name="cordova-plugin-splashscreen" spec="4.0.3" />
+  <plugin name="cordova-plugin-statusbar" spec="~2.1.0" />
   <plugin name="cordova-plugin-wechat" spec="^1.4.0">
-    <variable name="WECHATAPPID" value="wxc5181c0d406023e6"/>
+    <variable name="WECHATAPPID" value="wxc5181c0d406023e6" />
   </plugin>
-  <plugin name="ionic-plugin-keyboard" spec="~1.0.9"/>
+  <plugin name="ionic-plugin-keyboard" spec="~1.0.9" />
   <plugin name="phonegap-plugin-barcodescanner" spec="https://github.com/phonegap/phonegap-plugin-barcodescanner.git">
-    <variable name="CAMERA_USAGE_DESCRIPTION" value="请摄像头对准条码"/>
+    <variable name="CAMERA_USAGE_DESCRIPTION" value="请摄像头对准条码" />
   </plugin>
-  <plugin name="cordova-plugin-whitelist" spec="^1.2.2"/>
+  <plugin name="cordova-plugin-whitelist" spec="^1.2.2" />
+  <plugin name="cordova-plugin-offbye-alipay" version="1.0.1" />
+  <plugin name="cordova-plugin-weibosdk" version="0.6.0" />
+  <plugin name="jpush-phonegap-plugin" version="3.2.3" />
 </widget>

+ 0 - 9912
miaomiao/npm-debug.log

xqd
@@ -1,9912 +0,0 @@
-0 info it worked if it ends with ok
-1 verbose cli [ 'D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Web\\External\\node.exe',
-1 verbose cli   'D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Web\\External\\node_modules\\npm\\bin\\npm-cli.js',
-1 verbose cli   'install' ]
-2 info using npm@3.3.4
-3 info using node@v5.4.1
-4 silly loadCurrentTree Starting
-5 silly install loadCurrentTree
-6 silly install readLocalPackageData
-7 silly install normalizeTree
-8 silly loadCurrentTree Finishing
-9 silly loadIdealTree Starting
-10 silly install loadIdealTree
-11 silly cloneCurrentTree Starting
-12 silly install cloneCurrentTreeToIdealTree
-13 silly cloneCurrentTree Finishing
-14 silly loadShrinkwrap Starting
-15 silly install loadShrinkwrap
-16 silly loadShrinkwrap Finishing
-17 silly loadAllDepsIntoIdealTree Starting
-18 silly install loadAllDepsIntoIdealTree
-19 silly fetchNamedPackageData cordova-ios
-20 silly mapToRegistry name cordova-ios
-21 silly mapToRegistry using default registry
-22 silly mapToRegistry registry https://registry.npmjs.org/
-23 silly mapToRegistry uri https://registry.npmjs.org/cordova-ios
-24 verbose request uri https://registry.npmjs.org/cordova-ios
-25 verbose request no auth needed
-26 info attempt registry request try #1 at 14:27:02
-27 verbose request id be98d52251a0a381
-28 verbose etag W/"599b9c2f-c7f1e"
-29 verbose lastModified Tue, 22 Aug 2017 02:51:27 GMT
-30 http request GET https://registry.npmjs.org/cordova-ios
-31 http 304 https://registry.npmjs.org/cordova-ios
-32 verbose headers { date: 'Mon, 28 Aug 2017 06:27:02 GMT',
-32 verbose headers   via: '1.1 varnish',
-32 verbose headers   'cache-control': 'max-age=300',
-32 verbose headers   etag: 'W/"599b9c2f-c7f1e"',
-32 verbose headers   age: '0',
-32 verbose headers   connection: 'keep-alive',
-32 verbose headers   'x-served-by': 'cache-nrt6129-NRT',
-32 verbose headers   'x-cache': 'HIT',
-32 verbose headers   'x-cache-hits': '1',
-32 verbose headers   'x-timer': 'S1503901623.821353,VS0,VE133',
-32 verbose headers   vary: 'Accept-Encoding, Accept' }
-33 silly get cb [ 304,
-33 silly get   { date: 'Mon, 28 Aug 2017 06:27:02 GMT',
-33 silly get     via: '1.1 varnish',
-33 silly get     'cache-control': 'max-age=300',
-33 silly get     etag: 'W/"599b9c2f-c7f1e"',
-33 silly get     age: '0',
-33 silly get     connection: 'keep-alive',
-33 silly get     'x-served-by': 'cache-nrt6129-NRT',
-33 silly get     'x-cache': 'HIT',
-33 silly get     'x-cache-hits': '1',
-33 silly get     'x-timer': 'S1503901623.821353,VS0,VE133',
-33 silly get     vary: 'Accept-Encoding, Accept' } ]
-34 verbose etag https://registry.npmjs.org/cordova-ios from cache
-35 verbose get saving cordova-ios to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\cordova-ios\.cache.json
-36 silly resolveWithNewModule cordova-ios@4.4.0 checking installable status
-37 silly cache add args [ 'cordova-ios@^4.4.0', null ]
-38 verbose cache add spec cordova-ios@^4.4.0
-39 silly cache add parsed spec Result {
-39 silly cache add   raw: 'cordova-ios@^4.4.0',
-39 silly cache add   scope: null,
-39 silly cache add   name: 'cordova-ios',
-39 silly cache add   rawSpec: '^4.4.0',
-39 silly cache add   spec: '>=4.4.0-0 <5.0.0-0',
-39 silly cache add   type: 'range' }
-40 silly addNamed cordova-ios@>=4.4.0-0 <5.0.0-0
-41 verbose addNamed ">=4.4.0-0 <5.0.0-0" is a valid semver range for cordova-ios
-42 silly addNameRange { name: 'cordova-ios',
-42 silly addNameRange   range: '>=4.4.0-0 <5.0.0-0',
-42 silly addNameRange   hasData: false }
-43 silly mapToRegistry name cordova-ios
-44 silly mapToRegistry using default registry
-45 silly mapToRegistry registry https://registry.npmjs.org/
-46 silly mapToRegistry uri https://registry.npmjs.org/cordova-ios
-47 verbose addNameRange registry:https://registry.npmjs.org/cordova-ios not in flight; fetching
-48 verbose get https://registry.npmjs.org/cordova-ios not expired, no request
-49 silly addNameRange number 2 { name: 'cordova-ios',
-49 silly addNameRange   range: '>=4.4.0-0 <5.0.0-0',
-49 silly addNameRange   hasData: true }
-50 silly addNameRange versions [ 'cordova-ios',
-50 silly addNameRange   [ '3.5.0',
-50 silly addNameRange     '3.6.0',
-50 silly addNameRange     '3.6.1',
-50 silly addNameRange     '3.6.3',
-50 silly addNameRange     '3.7.0',
-50 silly addNameRange     '3.8.0',
-50 silly addNameRange     '3.9.0',
-50 silly addNameRange     '3.9.1',
-50 silly addNameRange     '3.9.2',
-50 silly addNameRange     '4.0.0',
-50 silly addNameRange     '4.0.1',
-50 silly addNameRange     '4.1.0',
-50 silly addNameRange     '4.1.1',
-50 silly addNameRange     '4.2.0-nightly.2016.5.24.8ad8acb3',
-50 silly addNameRange     '4.2.0-nightly.2016.5.25.8ad8acb3',
-50 silly addNameRange     '4.2.0-nightly.2016.5.26.8ad8acb3',
-50 silly addNameRange     '4.2.0-nightly.2016.5.27.3d3a746c',
-50 silly addNameRange     '4.2.0-nightly.2016.5.28.3d3a746c',
-50 silly addNameRange     '4.2.0-nightly.2016.5.30.3d3a746c',
-50 silly addNameRange     '4.2.0-nightly.2016.5.31.3d3a746c',
-50 silly addNameRange     '4.2.0-nightly.2016.6.1.3d3a746c',
-50 silly addNameRange     '4.2.0-nightly.2016.6.2.3d3a746c',
-50 silly addNameRange     '4.2.0-nightly.2016.6.3.8e69d9e6',
-50 silly addNameRange     '4.2.0-nightly.2016.6.4.8e69d9e6',
-50 silly addNameRange     '4.2.0-nightly.2016.6.5.8e69d9e6',
-50 silly addNameRange     '4.2.0-nightly.2016.6.6.8e69d9e6',
-50 silly addNameRange     '4.2.0-nightly.2016.6.7.2e41e221',
-50 silly addNameRange     '4.2.0-nightly.2016.6.8.2e41e221',
-50 silly addNameRange     '4.2.0-nightly.2016.6.9.9fbc20fe',
-50 silly addNameRange     '4.2.0-nightly.2016.6.10.9fbc20fe',
-50 silly addNameRange     '4.2.0-nightly.2016.6.12.9fbc20fe',
-50 silly addNameRange     '4.2.0-nightly.2016.6.13.9fbc20fe',
-50 silly addNameRange     '4.2.0-nightly.2016.6.14.d16ffe23',
-50 silly addNameRange     '4.2.0-nightly.2016.6.16.d16ffe23',
-50 silly addNameRange     '4.2.0-nightly.2016.6.17.d16ffe23',
-50 silly addNameRange     '4.3.0-nightly.2016.6.18.81d15c48',
-50 silly addNameRange     '4.3.0-nightly.2016.6.20.81d15c48',
-50 silly addNameRange     '4.3.0-nightly.2016.6.21.e4d37be0',
-50 silly addNameRange     '4.3.0-nightly.2016.6.22.e4d37be0',
-50 silly addNameRange     '4.3.0-nightly.2016.6.23.08e00b68',
-50 silly addNameRange     '4.2.0',
-50 silly addNameRange     '4.3.0-nightly.2016.6.24.08e00b68',
-50 silly addNameRange     '4.3.0-nightly.2016.6.26.7d993909',
-50 silly addNameRange     '4.3.0-nightly.2016.6.27.7d993909',
-50 silly addNameRange     '4.3.0-nightly.2016.6.28.3d80c24a',
-50 silly addNameRange     '4.3.0-nightly.2016.6.29.3d80c24a',
-50 silly addNameRange     '4.3.0-nightly.2016.6.30.3d80c24a',
-50 silly addNameRange     '4.3.0-nightly.2016.7.1.3d80c24a',
-50 silly addNameRange     '4.3.0-nightly.2016.7.2.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.3.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.4.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.5.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.6.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.7.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.8.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.10.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.12.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.14.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.15.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.16.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.17.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.18.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.20.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.23.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.24.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.25.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.26.5c3885b8',
-50 silly addNameRange     '4.3.0-nightly.2016.7.28.debd4c69',
-50 silly addNameRange     '4.3.0-nightly.2016.7.29.debd4c69',
-50 silly addNameRange     '4.3.0-nightly.2016.8.2.debd4c69',
-50 silly addNameRange     '4.3.0-nightly.2016.8.4.26a997db',
-50 silly addNameRange     '4.3.0-nightly.2016.8.5.3bda0ef4',
-50 silly addNameRange     '4.3.0-nightly.2016.8.6.3bda0ef4',
-50 silly addNameRange     '4.3.0-nightly.2016.8.7.3bda0ef4',
-50 silly addNameRange     '4.3.0-nightly.2016.8.8.3bda0ef4',
-50 silly addNameRange     '4.3.0-nightly.2016.8.9.3bda0ef4',
-50 silly addNameRange     '4.3.0-nightly.2016.8.10.3bda0ef4',
-50 silly addNameRange     '4.3.0-nightly.2016.8.11.3bda0ef4',
-50 silly addNameRange     '4.3.0-nightly.2016.8.12.172349d6',
-50 silly addNameRange     '4.3.0-nightly.2016.8.13.172349d6',
-50 silly addNameRange     '4.3.0-nightly.2016.8.15.172349d6',
-50 silly addNameRange     '4.3.0-nightly.2016.8.16.a17b8706',
-50 silly addNameRange     '4.3.0-nightly.2016.8.17.689f6060',
-50 silly addNameRange     '4.3.0-nightly.2016.8.18.a06f4191',
-50 silly addNameRange     '4.3.0-nightly.2016.8.20.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.21.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.22.582e3577',
-50 silly addNameRange     '4.2.1',
-50 silly addNameRange     '4.3.0-nightly.2016.8.23.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.24.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.25.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.26.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.27.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.28.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.29.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.30.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.8.31.582e3577',
-50 silly addNameRange     '4.3.0-nightly.2016.9.1.51d70783',
-50 silly addNameRange     '4.3.0-nightly.2016.9.2.aa28508d',
-50 silly addNameRange     '4.3.0-nightly.2016.9.3.aa28508d',
-50 silly addNameRange     '4.3.0-nightly.2016.9.4.aa28508d',
-50 silly addNameRange     '4.3.0-nightly.2016.9.5.aa28508d',
-50 silly addNameRange     '4.3.0-nightly.2016.9.7.ad096866',
-50 silly addNameRange     '4.3.0-nightly.2016.9.10.4975a1fd',
-50 silly addNameRange     '4.3.0-nightly.2016.9.11.4975a1fd',
-50 silly addNameRange     '4.3.0-nightly.2016.9.12.4975a1fd',
-50 silly addNameRange     '4.3.0-nightly.2016.9.13.4975a1fd',
-50 silly addNameRange     '4.3.0-nightly.2016.9.14.4975a1fd',
-50 silly addNameRange     '4.3.0-nightly.2016.9.15.92a62997',
-50 silly addNameRange     '4.3.0-nightly.2016.9.16.0219d7cc',
-50 silly addNameRange     '4.3.0-nightly.2016.9.17.b5fb016b',
-50 silly addNameRange     '4.3.0-nightly.2016.9.18.b5fb016b',
-50 silly addNameRange     '4.3.0-nightly.2016.9.19.b5fb016b',
-50 silly addNameRange     '4.3.0-nightly.2016.9.20.b5fb016b',
-50 silly addNameRange     '4.3.0-nightly.2016.9.21.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.9.22.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.9.23.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.9.24.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.9.25.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.9.26.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.9.27.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.9.28.ff3df9b7',
-50 silly addNameRange     '4.3.0-nightly.2016.10.7.636113f0',
-50 silly addNameRange     '4.3.0-nightly.2016.10.8.a527d1a0',
-50 silly addNameRange     '4.3.0-nightly.2016.10.9.a527d1a0',
-50 silly addNameRange     '4.3.0-nightly.2016.10.10.a527d1a0',
-50 silly addNameRange     '4.3.0-nightly.2016.10.11.a527d1a0',
-50 silly addNameRange     '4.3.0-nightly.2016.10.12.2170099d',
-50 silly addNameRange     '4.3.0-nightly.2016.10.13.e17ddc12',
-50 silly addNameRange     '4.3.0-nightly.2016.10.14.e17ddc12',
-50 silly addNameRange     '4.3.0-nightly.2016.10.15.e17ddc12',
-50 silly addNameRange     '4.3.0-nightly.2016.10.16.e17ddc12',
-50 silly addNameRange     '4.3.0-nightly.2016.10.17.e17ddc12',
-50 silly addNameRange     '4.3.0-nightly.2016.10.18.aa87d308',
-50 silly addNameRange     '4.3.0-nightly.2016.10.21.deb08471',
-50 silly addNameRange     '4.3.0-nightly.2016.10.22.deb08471',
-50 silly addNameRange     '4.3.0',
-50 silly addNameRange     '4.4.0-nightly.2016.10.25.7832c02c',
-50 silly addNameRange     '4.4.0-nightly.2016.10.26.7832c02c',
-50 silly addNameRange     '4.4.0-nightly.2016.10.27.7832c02c',
-50 silly addNameRange     '4.4.0-nightly.2016.11.1.25160f34',
-50 silly addNameRange     '4.4.0-nightly.2016.11.2.fa72583e',
-50 silly addNameRange     '4.4.0-nightly.2016.11.3.fa72583e',
-50 silly addNameRange     '4.4.0-nightly.2016.11.4.fa72583e',
-50 silly addNameRange     '4.4.0-nightly.2016.11.5.fa72583e',
-50 silly addNameRange     '4.4.0-nightly.2016.11.6.fa72583e',
-50 silly addNameRange     '4.4.0-nightly.2016.11.7.fa72583e',
-50 silly addNameRange     '4.4.0-nightly.2016.11.8.fa72583e',
-50 silly addNameRange     '4.4.0-nightly.2016.11.9.4e88e35f',
-50 silly addNameRange     '4.4.0-nightly.2016.11.10.50a185a6',
-50 silly addNameRange     '4.4.0-nightly.2016.11.11.b8e855b8',
-50 silly addNameRange     '4.4.0-nightly.2016.11.12.b8e855b8',
-50 silly addNameRange     '4.4.0-nightly.2016.11.15.b8e855b8',
-50 silly addNameRange     '4.4.0-nightly.2016.11.16.14508d67',
-50 silly addNameRange     '4.4.0-nightly.2016.11.17.99219c1c',
-50 silly addNameRange     '4.4.0-nightly.2016.11.18.99219c1c',
-50 silly addNameRange     '4.4.0-nightly.2016.11.19.99219c1c',
-50 silly addNameRange     '4.4.0-nightly.2016.11.20.99219c1c',
-50 silly addNameRange     '4.4.0-nightly.2016.11.21.b8ae88d8',
-50 silly addNameRange     '4.4.0-nightly.2016.11.22.4b864624',
-50 silly addNameRange     '4.4.0-nightly.2016.11.23.4b864624',
-50 silly addNameRange     '4.4.0-nightly.2016.11.24.4b864624',
-50 silly addNameRange     '4.4.0-nightly.2016.11.25.4b864624',
-50 silly addNameRange     '4.4.0-nightly.2016.11.26.4b864624',
-50 silly addNameRange     '4.4.0-nightly.2016.11.27.4b864624',
-50 silly addNameRange     '4.4.0-nightly.2016.11.28.4b864624',
-50 silly addNameRange     '4.4.0-nightly.2016.11.29.40e35ca0',
-50 silly addNameRange     '4.4.0-nightly.2016.11.30.40e35ca0',
-50 silly addNameRange     '4.4.0-nightly.2016.12.1.0c201c42',
-50 silly addNameRange     '4.4.0-nightly.2016.12.2.0c201c42',
-50 silly addNameRange     '4.3.1',
-50 silly addNameRange     '4.4.0-nightly.2016.12.3.412b253e',
-50 silly addNameRange     '4.4.0-nightly.2016.12.4.412b253e',
-50 silly addNameRange     '4.4.0-nightly.2016.12.5.412b253e',
-50 silly addNameRange     '4.4.0-nightly.2016.12.6.412b253e',
-50 silly addNameRange     '4.4.0-nightly.2016.12.7.412b253e',
-50 silly addNameRange     '4.4.0-nightly.2016.12.8.412b253e',
-50 silly addNameRange     '4.4.0-nightly.2016.12.9.412b253e',
-50 silly addNameRange     '4.4.0-nightly.2017.3.23.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.24.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.25.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.26.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.27.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.28.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.29.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.30.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.3.31.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.4.1.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.4.2.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.4.4.d69a42ce',
-50 silly addNameRange     '4.4.0-nightly.2017.4.5.11dcc31f',
-50 silly addNameRange     '4.4.0-nightly.2017.4.6.11dcc31f',
-50 silly addNameRange     '4.4.0-nightly.2017.4.8.11dcc31f',
-50 silly addNameRange     '4.4.0-nightly.2017.4.9.11dcc31f',
-50 silly addNameRange     '4.4.0-nightly.2017.4.10.11dcc31f',
-50 silly addNameRange     '4.4.0-nightly.2017.4.11.11dcc31f',
-50 silly addNameRange     '4.4.0-nightly.2017.4.12.06c324d7',
-50 silly addNameRange     '4.4.0-nightly.2017.4.13.06c324d7',
-50 silly addNameRange     '4.4.0-nightly.2017.4.14.d7f5eefd',
-50 silly addNameRange     '4.4.0-nightly.2017.4.15.d7f5eefd',
-50 silly addNameRange     '4.4.0-nightly.2017.4.16.d7f5eefd',
-50 silly addNameRange     '4.4.0-nightly.2017.4.17.d7f5eefd',
-50 silly addNameRange     '4.4.0-nightly.2017.4.18.d7f5eefd',
-50 silly addNameRange     '4.4.0-nightly.2017.4.19.e7ed5b9f',
-50 silly addNameRange     '4.4.0-nightly.2017.4.20.1078411d',
-50 silly addNameRange     '4.4.0-nightly.2017.4.21.41008164',
-50 silly addNameRange     '4.4.0-nightly.2017.4.23.a39025b0',
-50 silly addNameRange     '4.4.0',
-50 silly addNameRange     '4.5.0-nightly.2017.4.28.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.4.30.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.1.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.2.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.3.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.5.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.6.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.7.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.8.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.9.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.10.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.11.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.13.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.14.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.15.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.16.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.17.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.18.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.19.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.20.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.21.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.22.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.23.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.24.3507af4a',
-50 silly addNameRange     '4.5.0-nightly.2017.5.25.d7ec584f',
-50 silly addNameRange     '4.5.0-nightly.2017.5.26.a9532aed',
-50 silly addNameRange     '4.5.0-nightly.2017.5.27.a9532aed',
-50 silly addNameRange     '4.5.0-nightly.2017.5.30.a9532aed',
-50 silly addNameRange     '4.5.0-nightly.2017.6.1.77b14bda',
-50 silly addNameRange     '4.5.0-nightly.2017.6.2.571c2351',
-50 silly addNameRange     '4.5.0-nightly.2017.6.3.571c2351',
-50 silly addNameRange     '4.5.0-nightly.2017.6.4.571c2351',
-50 silly addNameRange     '4.5.0-nightly.2017.6.5.571c2351',
-50 silly addNameRange     '4.5.0-nightly.2017.6.6.571c2351',
-50 silly addNameRange     '4.5.0-nightly.2017.6.7.571c2351',
-50 silly addNameRange     '4.5.0-nightly.2017.6.10.27d2919c',
-50 silly addNameRange     '4.5.0-nightly.2017.6.11.8c77a0b9',
-50 silly addNameRange     '4.5.0-nightly.2017.6.12.8c77a0b9',
-50 silly addNameRange     '4.5.0-nightly.2017.6.14.8c77a0b9',
-50 silly addNameRange     '4.5.0-nightly.2017.6.15.df5441df',
-50 silly addNameRange     '4.5.0-nightly.2017.6.16.df5441df',
-50 silly addNameRange     '4.5.0-nightly.2017.6.17.df5441df',
-50 silly addNameRange     '4.5.0-nightly.2017.6.18.df5441df',
-50 silly addNameRange     '4.5.0-nightly.2017.6.19.4490abf2',
-50 silly addNameRange     '4.5.0-nightly.2017.6.20.4490abf2',
-50 silly addNameRange     '4.5.0-nightly.2017.6.21.4490abf2',
-50 silly addNameRange     '4.5.0-nightly.2017.6.22.4490abf2',
-50 silly addNameRange     '4.5.0-nightly.2017.6.23.4490abf2',
-50 silly addNameRange     '4.5.0-nightly.2017.6.24.4490abf2',
-50 silly addNameRange     '4.5.0-nightly.2017.6.25.17d6b834',
-50 silly addNameRange     '4.5.0-nightly.2017.6.26.17d6b834',
-50 silly addNameRange     '4.5.0-nightly.2017.6.27.17d6b834',
-50 silly addNameRange     '4.5.0-nightly.2017.6.28.17d6b834',
-50 silly addNameRange     '4.5.0-nightly.2017.6.29.17d6b834',
-50 silly addNameRange     '4.5.0-nightly.2017.7.1.17d6b834',
-50 silly addNameRange     '4.5.0-nightly.2017.7.4.17d6b834',
-50 silly addNameRange     '4.5.0-nightly.2017.7.7.26beb94e',
-50 silly addNameRange     '4.5.0-nightly.2017.7.8.26beb94e',
-50 silly addNameRange     '4.5.0-nightly.2017.7.9.26beb94e',
-50 silly addNameRange     '4.5.0-nightly.2017.7.10.26beb94e',
-50 silly addNameRange     '4.5.0-nightly.2017.7.11.26beb94e',
-50 silly addNameRange     '4.5.0-nightly.2017.7.13.26beb94e',
-50 silly addNameRange     '4.5.0-nightly.2017.7.14.26beb94e',
-50 silly addNameRange     '4.5.0-nightly.2017.7.15.83435d56',
-50 silly addNameRange     '4.5.0-nightly.2017.7.18.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.7.22.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.7.24.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.7.26.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.7.27.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.7.28.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.7.29.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.7.31.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.8.1.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.8.8.8edd13aa',
-50 silly addNameRange     '4.5.0-nightly.2017.8.9.d44cec62',
-50 silly addNameRange     '4.5.0-nightly.2017.8.10.d44cec62',
-50 silly addNameRange     '4.5.0-nightly.2017.8.11.0dfe4ca5',
-50 silly addNameRange     '4.5.0-nightly.2017.8.13.077b1dc3',
-50 silly addNameRange     '4.5.0-nightly.2017.8.14.077b1dc3',
-50 silly addNameRange     '4.5.0-nightly.2017.8.15.077b1dc3',
-50 silly addNameRange     '4.5.0-nightly.2017.8.16.077b1dc3',
-50 silly addNameRange     '4.5.0-nightly.2017.8.18.077b1dc3',
-50 silly addNameRange     '4.5.0-nightly.2017.8.19.077b1dc3',
-50 silly addNameRange     '4.5.0-nightly.2017.8.21.077b1dc3',
-50 silly addNameRange     '4.5.0-nightly.2017.8.22.077b1dc3' ] ]
-51 silly addNamed cordova-ios@4.4.0
-52 verbose addNamed "4.4.0" is a plain semver version for cordova-ios
-53 silly cache afterAdd cordova-ios@4.4.0
-54 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\cordova-ios\4.4.0\package\package.json not in flight; writing
-55 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\cordova-ios\4.4.0\package\package.json written
-56 verbose addBundled extract C:\Users\Ben\AppData\Roaming\npm-cache\cordova-ios\4.4.0\package.tgz
-57 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\cordova-ios\4.4.0\package.tgz
-58 verbose tar unpacking to C:\Users\Ben\AppData\Local\Temp\npm-19320-cb1a5901\unpack-4d03a53835b50e7365c0b3e58481fe29
-59 silly gentlyRm C:\Users\Ben\AppData\Local\Temp\npm-19320-cb1a5901\unpack-4d03a53835b50e7365c0b3e58481fe29 is being purged
-60 verbose gentlyRm don't care about contents; nuking C:\Users\Ben\AppData\Local\Temp\npm-19320-cb1a5901\unpack-4d03a53835b50e7365c0b3e58481fe29
-61 silly gunzTarPerm modes [ '777', '666' ]
-62 silly gunzTarPerm extractEntry package.json
-63 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-64 silly gunzTarPerm extractEntry .npmignore
-65 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ]
-66 silly gunzTarPerm extractEntry README.md
-67 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ]
-68 silly gunzTarPerm extractEntry LICENSE
-69 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ]
-70 silly gunzTarPerm extractEntry NOTICE
-71 silly gunzTarPerm modified mode [ 'NOTICE', 420, 438 ]
-72 silly gunzTarPerm extractEntry .istanbul.yml
-73 silly gunzTarPerm modified mode [ '.istanbul.yml', 420, 438 ]
-74 silly gunzTarPerm extractEntry .jshintignore
-75 silly gunzTarPerm modified mode [ '.jshintignore', 420, 438 ]
-76 silly gunzTarPerm extractEntry .jshintrc
-77 silly gunzTarPerm modified mode [ '.jshintrc', 420, 438 ]
-78 silly gunzTarPerm extractEntry .ratignore
-79 silly gunzTarPerm modified mode [ '.ratignore', 420, 438 ]
-80 silly gunzTarPerm extractEntry .travis.yml
-81 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ]
-82 silly gunzTarPerm extractEntry CONTRIBUTING.md
-83 silly gunzTarPerm modified mode [ 'CONTRIBUTING.md', 420, 438 ]
-84 silly gunzTarPerm extractEntry CordovaLib/.npmignore
-85 silly gunzTarPerm modified mode [ 'CordovaLib/.npmignore', 493, 511 ]
-86 silly gunzTarPerm extractEntry CordovaLib/cordova.js
-87 silly gunzTarPerm modified mode [ 'CordovaLib/cordova.js', 420, 438 ]
-88 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVDebug.h
-89 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVDebug.h', 420, 438 ]
-90 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVJSON_private.h
-91 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVJSON_private.h', 420, 438 ]
-92 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVJSON_private.m
-93 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVJSON_private.m', 420, 438 ]
-94 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVPlugin+Private.h
-95 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVPlugin+Private.h', 420, 438 ]
-96 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.h
-97 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.h',
-97 silly gunzTarPerm   420,
-97 silly gunzTarPerm   438 ]
-98 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.m
-99 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.m',
-99 silly gunzTarPerm   420,
-99 silly gunzTarPerm   438 ]
-100 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.h
-101 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.h',
-101 silly gunzTarPerm   420,
-101 silly gunzTarPerm   438 ]
-102 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.m
-103 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.m',
-103 silly gunzTarPerm   420,
-103 silly gunzTarPerm   438 ]
-104 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h
-105 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h',
-105 silly gunzTarPerm   420,
-105 silly gunzTarPerm   438 ]
-106 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m
-107 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m',
-107 silly gunzTarPerm   420,
-107 silly gunzTarPerm   438 ]
-108 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.h
-109 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.h',
-109 silly gunzTarPerm   420,
-109 silly gunzTarPerm   438 ]
-110 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.m
-111 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.m',
-111 silly gunzTarPerm   420,
-111 silly gunzTarPerm   438 ]
-112 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.h
-113 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.h',
-113 silly gunzTarPerm   420,
-113 silly gunzTarPerm   438 ]
-114 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m
-115 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m',
-115 silly gunzTarPerm   420,
-115 silly gunzTarPerm   438 ]
-116 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.h
-117 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.h',
-117 silly gunzTarPerm   420,
-117 silly gunzTarPerm   438 ]
-118 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.m
-119 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.m',
-119 silly gunzTarPerm   420,
-119 silly gunzTarPerm   438 ]
-120 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.h
-121 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.h',
-121 silly gunzTarPerm   420,
-121 silly gunzTarPerm   438 ]
-122 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m
-123 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m',
-123 silly gunzTarPerm   420,
-123 silly gunzTarPerm   438 ]
-124 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPluginResult.h
-125 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPluginResult.h', 420, 438 ]
-126 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDV.h
-127 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDV.h', 420, 438 ]
-128 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAppDelegate.m
-129 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAppDelegate.m', 420, 438 ]
-130 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAvailability.h
-131 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAvailability.h', 420, 438 ]
-132 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAvailabilityDeprecated.h
-133 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAvailabilityDeprecated.h',
-133 silly gunzTarPerm   420,
-133 silly gunzTarPerm   438 ]
-134 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandDelegate.h
-135 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandDelegate.h', 420, 438 ]
-136 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandDelegateImpl.h
-137 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandDelegateImpl.h',
-137 silly gunzTarPerm   420,
-137 silly gunzTarPerm   438 ]
-138 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandDelegateImpl.m
-139 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandDelegateImpl.m',
-139 silly gunzTarPerm   420,
-139 silly gunzTarPerm   438 ]
-140 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandQueue.h
-141 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandQueue.h', 420, 438 ]
-142 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandQueue.m
-143 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandQueue.m', 420, 438 ]
-144 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVConfigParser.h
-145 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVConfigParser.h', 420, 438 ]
-146 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVConfigParser.m
-147 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVConfigParser.m', 420, 438 ]
-148 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVInvokedUrlCommand.h
-149 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVInvokedUrlCommand.h', 420, 438 ]
-150 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVInvokedUrlCommand.m
-151 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVInvokedUrlCommand.m', 420, 438 ]
-152 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin+Resources.h
-153 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin+Resources.h', 420, 438 ]
-154 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin+Resources.m
-155 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin+Resources.m', 420, 438 ]
-156 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin.h
-157 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin.h', 420, 438 ]
-158 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin.m
-159 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin.m', 420, 438 ]
-160 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAppDelegate.h
-161 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAppDelegate.h', 420, 438 ]
-162 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPluginResult.m
-163 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPluginResult.m', 420, 438 ]
-164 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVScreenOrientationDelegate.h
-165 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVScreenOrientationDelegate.h',
-165 silly gunzTarPerm   420,
-165 silly gunzTarPerm   438 ]
-166 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVTimer.h
-167 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVTimer.h', 420, 438 ]
-168 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVTimer.m
-169 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVTimer.m', 420, 438 ]
-170 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVURLProtocol.h
-171 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVURLProtocol.h', 420, 438 ]
-172 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVURLProtocol.m
-173 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVURLProtocol.m', 420, 438 ]
-174 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVUserAgentUtil.h
-175 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVUserAgentUtil.h', 420, 438 ]
-176 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVUserAgentUtil.m
-177 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVUserAgentUtil.m', 420, 438 ]
-178 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVViewController.h
-179 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVViewController.h', 420, 438 ]
-180 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVViewController.m
-181 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVViewController.m', 420, 438 ]
-182 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVWebViewEngineProtocol.h
-183 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVWebViewEngineProtocol.h',
-183 silly gunzTarPerm   420,
-183 silly gunzTarPerm   438 ]
-184 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVWhitelist.h
-185 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVWhitelist.h', 420, 438 ]
-186 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVWhitelist.m
-187 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVWhitelist.m', 420, 438 ]
-188 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.h
-189 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.h',
-189 silly gunzTarPerm   420,
-189 silly gunzTarPerm   438 ]
-190 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m
-191 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m',
-191 silly gunzTarPerm   420,
-191 silly gunzTarPerm   438 ]
-192 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.h
-193 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.h',
-193 silly gunzTarPerm   420,
-193 silly gunzTarPerm   438 ]
-194 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m
-195 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m',
-195 silly gunzTarPerm   420,
-195 silly gunzTarPerm   438 ]
-196 silly gunzTarPerm extractEntry CordovaLib/Cordova/Cordova.h
-197 silly gunzTarPerm modified mode [ 'CordovaLib/Cordova/Cordova.h', 420, 438 ]
-198 silly gunzTarPerm extractEntry CordovaLib/Cordova/Info.plist
-199 silly gunzTarPerm modified mode [ 'CordovaLib/Cordova/Info.plist', 420, 438 ]
-200 silly gunzTarPerm extractEntry CordovaLib/CordovaLib.xcodeproj/project.pbxproj
-201 silly gunzTarPerm modified mode [ 'CordovaLib/CordovaLib.xcodeproj/project.pbxproj', 420, 438 ]
-202 silly gunzTarPerm extractEntry CordovaLib/CordovaLib.xcodeproj/xcshareddata/xcschemes/Cordova.xcscheme
-203 silly gunzTarPerm modified mode [ 'CordovaLib/CordovaLib.xcodeproj/xcshareddata/xcschemes/Cordova.xcscheme',
-203 silly gunzTarPerm   420,
-203 silly gunzTarPerm   438 ]
-204 silly gunzTarPerm extractEntry CordovaLib/CordovaLib_Prefix.pch
-205 silly gunzTarPerm modified mode [ 'CordovaLib/CordovaLib_Prefix.pch', 420, 438 ]
-206 silly gunzTarPerm extractEntry CordovaLib/VERSION
-207 silly gunzTarPerm modified mode [ 'CordovaLib/VERSION', 420, 438 ]
-208 silly gunzTarPerm extractEntry .gitattributes
-209 silly gunzTarPerm modified mode [ '.gitattributes', 420, 438 ]
-210 silly gunzTarPerm extractEntry .github/PULL_REQUEST_TEMPLATE.md
-211 silly gunzTarPerm modified mode [ '.github/PULL_REQUEST_TEMPLATE.md', 420, 438 ]
-212 silly gunzTarPerm extractEntry RELEASENOTES.md
-213 silly gunzTarPerm modified mode [ 'RELEASENOTES.md', 420, 438 ]
-214 silly gunzTarPerm extractEntry appveyor.yml
-215 silly gunzTarPerm modified mode [ 'appveyor.yml', 420, 438 ]
-216 silly gunzTarPerm extractEntry bin/create
-217 silly gunzTarPerm modified mode [ 'bin/create', 493, 511 ]
-218 silly gunzTarPerm extractEntry bin/apple_ios_version
-219 silly gunzTarPerm modified mode [ 'bin/apple_ios_version', 493, 511 ]
-220 silly gunzTarPerm extractEntry bin/apple_osx_version
-221 silly gunzTarPerm modified mode [ 'bin/apple_osx_version', 493, 511 ]
-222 silly gunzTarPerm extractEntry bin/apple_osx_version.bat
-223 silly gunzTarPerm modified mode [ 'bin/apple_osx_version.bat', 420, 438 ]
-224 silly gunzTarPerm extractEntry bin/apple_xcode_version
-225 silly gunzTarPerm modified mode [ 'bin/apple_xcode_version', 493, 511 ]
-226 silly gunzTarPerm extractEntry bin/apple_xcode_version.bat
-227 silly gunzTarPerm modified mode [ 'bin/apple_xcode_version.bat', 420, 438 ]
-228 silly gunzTarPerm extractEntry bin/autotest
-229 silly gunzTarPerm modified mode [ 'bin/autotest', 493, 511 ]
-230 silly gunzTarPerm extractEntry bin/check_reqs
-231 silly gunzTarPerm modified mode [ 'bin/check_reqs', 493, 511 ]
-232 silly gunzTarPerm extractEntry bin/check_reqs.bat
-233 silly gunzTarPerm modified mode [ 'bin/check_reqs.bat', 420, 438 ]
-234 silly gunzTarPerm extractEntry bin/cordova_plist_to_config_xml
-235 silly gunzTarPerm modified mode [ 'bin/cordova_plist_to_config_xml', 493, 511 ]
-236 silly gunzTarPerm extractEntry bin/apple_ios_version.bat
-237 silly gunzTarPerm modified mode [ 'bin/apple_ios_version.bat', 420, 438 ]
-238 silly gunzTarPerm extractEntry bin/create.bat
-239 silly gunzTarPerm modified mode [ 'bin/create.bat', 420, 438 ]
-240 silly gunzTarPerm extractEntry bin/lib/check_reqs.js
-241 silly gunzTarPerm modified mode [ 'bin/lib/check_reqs.js', 420, 438 ]
-242 silly gunzTarPerm extractEntry bin/lib/create.js
-243 silly gunzTarPerm modified mode [ 'bin/lib/create.js', 493, 511 ]
-244 silly gunzTarPerm extractEntry bin/lib/versions.js
-245 silly gunzTarPerm modified mode [ 'bin/lib/versions.js', 493, 511 ]
-246 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Plugins/README
-247 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Plugins/README',
-247 silly gunzTarPerm   420,
-247 silly gunzTarPerm   438 ]
-248 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Bridging-Header.h
-249 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Bridging-Header.h',
-249 silly gunzTarPerm   420,
-249 silly gunzTarPerm   438 ]
-250 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.h
-251 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.h',
-251 silly gunzTarPerm   420,
-251 silly gunzTarPerm   438 ]
-252 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m
-253 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m',
-253 silly gunzTarPerm   420,
-253 silly gunzTarPerm   438 ]
-254 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.h
-255 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.h',
-255 silly gunzTarPerm   420,
-255 silly gunzTarPerm   438 ]
-256 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.m
-257 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.m',
-257 silly gunzTarPerm   420,
-257 silly gunzTarPerm   438 ]
-258 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.xib
-259 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.xib',
-259 silly gunzTarPerm   420,
-259 silly gunzTarPerm   438 ]
-260 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Entitlements-Debug.plist
-261 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Entitlements-Debug.plist',
-261 silly gunzTarPerm   420,
-261 silly gunzTarPerm   438 ]
-262 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Entitlements-Release.plist
-263 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Entitlements-Release.plist',
-263 silly gunzTarPerm   420,
-263 silly gunzTarPerm   438 ]
-264 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
-265 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72@2x.png',
-265 silly gunzTarPerm   420,
-265 silly gunzTarPerm   438 ]
-266 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/Contents.json
-267 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/Contents.json',
-267 silly gunzTarPerm   420,
-267 silly gunzTarPerm   438 ]
-268 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
-269 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40@2x.png',
-269 silly gunzTarPerm   420,
-269 silly gunzTarPerm   438 ]
-270 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50.png
-271 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50.png',
-271 silly gunzTarPerm   420,
-271 silly gunzTarPerm   438 ]
-272 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
-273 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50@2x.png',
-273 silly gunzTarPerm   420,
-273 silly gunzTarPerm   438 ]
-274 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
-275 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@2x.png',
-275 silly gunzTarPerm   420,
-275 silly gunzTarPerm   438 ]
-276 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
-277 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@3x.png',
-277 silly gunzTarPerm   420,
-277 silly gunzTarPerm   438 ]
-278 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72.png
-279 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72.png',
-279 silly gunzTarPerm   420,
-279 silly gunzTarPerm   438 ]
-280 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40.png
-281 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40.png',
-281 silly gunzTarPerm   420,
-281 silly gunzTarPerm   438 ]
-282 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76.png
-283 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76.png',
-283 silly gunzTarPerm   420,
-283 silly gunzTarPerm   438 ]
-284 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
-285 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76@2x.png',
-285 silly gunzTarPerm   420,
-285 silly gunzTarPerm   438 ]
-286 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
-287 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png',
-287 silly gunzTarPerm   420,
-287 silly gunzTarPerm   438 ]
-288 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small.png
-289 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small.png',
-289 silly gunzTarPerm   420,
-289 silly gunzTarPerm   438 ]
-290 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@2x.png
-291 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@2x.png',
-291 silly gunzTarPerm   420,
-291 silly gunzTarPerm   438 ]
-292 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@3x.png
-293 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@3x.png',
-293 silly gunzTarPerm   420,
-293 silly gunzTarPerm   438 ]
-294 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon.png
-295 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon.png',
-295 silly gunzTarPerm   420,
-295 silly gunzTarPerm   438 ]
-296 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon@2x.png
-297 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon@2x.png',
-297 silly gunzTarPerm   420,
-297 silly gunzTarPerm   438 ]
-298 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/Contents.json
-299 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/Contents.json',
-299 silly gunzTarPerm   420,
-299 silly gunzTarPerm   438 ]
-300 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png
-301 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png',
-301 silly gunzTarPerm   420,
-301 silly gunzTarPerm   438 ]
-302 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Contents.json
-303 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Contents.json',
-303 silly gunzTarPerm   420,
-303 silly gunzTarPerm   438 ]
-304 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-667h.png
-305 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-667h.png',
-305 silly gunzTarPerm   420,
-305 silly gunzTarPerm   438 ]
-306 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-736h.png
-307 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-736h.png',
-307 silly gunzTarPerm   420,
-307 silly gunzTarPerm   438 ]
-308 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png
-309 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png',
-309 silly gunzTarPerm   420,
-309 silly gunzTarPerm   438 ]
-310 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png
-311 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png',
-311 silly gunzTarPerm   420,
-311 silly gunzTarPerm   438 ]
-312 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png
-313 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png',
-313 silly gunzTarPerm   420,
-313 silly gunzTarPerm   438 ]
-314 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png
-315 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png',
-315 silly gunzTarPerm   420,
-315 silly gunzTarPerm   438 ]
-316 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png
-317 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png',
-317 silly gunzTarPerm   420,
-317 silly gunzTarPerm   438 ]
-318 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png
-319 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png',
-319 silly gunzTarPerm   420,
-319 silly gunzTarPerm   438 ]
-320 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default~iphone.png
-321 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default~iphone.png',
-321 silly gunzTarPerm   420,
-321 silly gunzTarPerm   438 ]
-322 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchStoryboard.imageset/Contents.json
-323 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchStoryboard.imageset/Contents.json',
-323 silly gunzTarPerm   420,
-323 silly gunzTarPerm   438 ]
-324 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/CDVLaunchScreen.storyboard
-325 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/CDVLaunchScreen.storyboard',
-325 silly gunzTarPerm   420,
-325 silly gunzTarPerm   438 ]
-326 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Info.plist
-327 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Info.plist',
-327 silly gunzTarPerm   420,
-327 silly gunzTarPerm   438 ]
-328 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Prefix.pch
-329 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Prefix.pch',
-329 silly gunzTarPerm   420,
-329 silly gunzTarPerm   438 ]
-330 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/config.xml
-331 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/config.xml', 420, 438 ]
-332 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/gitignore
-333 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/gitignore', 420, 438 ]
-334 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/main.m
-335 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/main.m', 420, 438 ]
-336 silly gunzTarPerm extractEntry bin/templates/project/__TEMP__.xcodeproj/project.pbxproj
-337 silly gunzTarPerm modified mode [ 'bin/templates/project/__TEMP__.xcodeproj/project.pbxproj',
-337 silly gunzTarPerm   493,
-337 silly gunzTarPerm   511 ]
-338 silly gunzTarPerm extractEntry bin/templates/project/__TEMP__.xcworkspace/contents.xcworkspacedata
-339 silly gunzTarPerm modified mode [ 'bin/templates/project/__TEMP__.xcworkspace/contents.xcworkspacedata',
-339 silly gunzTarPerm   420,
-339 silly gunzTarPerm   438 ]
-340 silly gunzTarPerm extractEntry bin/templates/project/__TEMP__.xcworkspace/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme
-341 silly gunzTarPerm modified mode [ 'bin/templates/project/__TEMP__.xcworkspace/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme',
-341 silly gunzTarPerm   420,
-341 silly gunzTarPerm   438 ]
-342 silly gunzTarPerm extractEntry bin/templates/project/pods-debug.xcconfig
-343 silly gunzTarPerm modified mode [ 'bin/templates/project/pods-debug.xcconfig', 420, 438 ]
-344 silly gunzTarPerm extractEntry bin/templates/project/pods-release.xcconfig
-345 silly gunzTarPerm modified mode [ 'bin/templates/project/pods-release.xcconfig', 420, 438 ]
-346 silly gunzTarPerm extractEntry bin/templates/project/www/css/index.css
-347 silly gunzTarPerm modified mode [ 'bin/templates/project/www/css/index.css', 493, 511 ]
-348 silly gunzTarPerm extractEntry bin/templates/project/www/img/logo.png
-349 silly gunzTarPerm modified mode [ 'bin/templates/project/www/img/logo.png', 493, 511 ]
-350 silly gunzTarPerm extractEntry bin/templates/project/www/index.html
-351 silly gunzTarPerm modified mode [ 'bin/templates/project/www/index.html', 493, 511 ]
-352 silly gunzTarPerm extractEntry bin/templates/project/www/js/index.js
-353 silly gunzTarPerm modified mode [ 'bin/templates/project/www/js/index.js', 493, 511 ]
-354 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/Api.js
-355 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/Api.js', 420, 438 ]
-356 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/loggingHelper.js
-357 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/loggingHelper.js', 420, 438 ]
-358 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build-debug.xcconfig
-359 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build-debug.xcconfig',
-359 silly gunzTarPerm   420,
-359 silly gunzTarPerm   438 ]
-360 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build-extras.xcconfig
-361 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build-extras.xcconfig',
-361 silly gunzTarPerm   420,
-361 silly gunzTarPerm   438 ]
-362 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build-release.xcconfig
-363 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build-release.xcconfig',
-363 silly gunzTarPerm   420,
-363 silly gunzTarPerm   438 ]
-364 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build.bat
-365 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build.bat', 420, 438 ]
-366 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build.xcconfig
-367 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build.xcconfig', 420, 438 ]
-368 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/clean
-369 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/clean', 493, 511 ]
-370 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/clean.bat
-371 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/clean.bat', 420, 438 ]
-372 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build
-373 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build', 493, 511 ]
-374 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/Podfile.js
-375 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/Podfile.js', 420, 438 ]
-376 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/build.js
-377 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/build.js', 420, 438 ]
-378 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/clean.js
-379 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/clean.js', 420, 438 ]
-380 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/copy-www-build-step.js
-381 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/copy-www-build-step.js',
-381 silly gunzTarPerm   420,
-381 silly gunzTarPerm   438 ]
-382 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/PodsJson.js
-383 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/PodsJson.js', 420, 438 ]
-384 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/prepare.js
-385 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/prepare.js', 420, 438 ]
-386 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/projectFile.js
-387 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/projectFile.js', 420, 438 ]
-388 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/run.js
-389 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/run.js', 420, 438 ]
-390 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/spawn.js
-391 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/spawn.js', 420, 438 ]
-392 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/plugman/pluginHandlers.js
-393 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/plugman/pluginHandlers.js',
-393 silly gunzTarPerm   420,
-393 silly gunzTarPerm   438 ]
-394 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-devices
-395 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-devices', 493, 511 ]
-396 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-emulator-build-targets
-397 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-emulator-build-targets',
-397 silly gunzTarPerm   493,
-397 silly gunzTarPerm   511 ]
-398 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/start-emulator
-399 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/start-emulator', 493, 511 ]
-400 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-started-emulators
-401 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-started-emulators',
-401 silly gunzTarPerm   493,
-401 silly gunzTarPerm   511 ]
-402 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-emulator-images
-403 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-emulator-images',
-403 silly gunzTarPerm   493,
-403 silly gunzTarPerm   511 ]
-404 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/log
-405 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/log', 493, 511 ]
-406 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/log.bat
-407 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/log.bat', 420, 438 ]
-408 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/version.bat
-409 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/version.bat', 420, 438 ]
-410 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/run
-411 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/run', 493, 511 ]
-412 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/run.bat
-413 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/run.bat', 420, 438 ]
-414 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/version
-415 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/version', 493, 511 ]
-416 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/defaults.xml
-417 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/defaults.xml', 420, 438 ]
-418 silly gunzTarPerm extractEntry bin/test
-419 silly gunzTarPerm modified mode [ 'bin/test', 493, 511 ]
-420 silly gunzTarPerm extractEntry bin/tests/autotest.coffee
-421 silly gunzTarPerm modified mode [ 'bin/tests/autotest.coffee', 420, 438 ]
-422 silly gunzTarPerm extractEntry bin/tests/create.coffee
-423 silly gunzTarPerm modified mode [ 'bin/tests/create.coffee', 420, 438 ]
-424 silly gunzTarPerm extractEntry bin/tests/debug.coffee
-425 silly gunzTarPerm modified mode [ 'bin/tests/debug.coffee', 420, 438 ]
-426 silly gunzTarPerm extractEntry bin/tests/test.coffee
-427 silly gunzTarPerm modified mode [ 'bin/tests/test.coffee', 420, 438 ]
-428 silly gunzTarPerm extractEntry bin/uncrustify.cfg
-429 silly gunzTarPerm modified mode [ 'bin/uncrustify.cfg', 420, 438 ]
-430 silly gunzTarPerm extractEntry bin/uncrustify.sh
-431 silly gunzTarPerm modified mode [ 'bin/uncrustify.sh', 493, 511 ]
-432 silly gunzTarPerm extractEntry bin/update
-433 silly gunzTarPerm modified mode [ 'bin/update', 493, 511 ]
-434 silly gunzTarPerm extractEntry bin/update.bat
-435 silly gunzTarPerm modified mode [ 'bin/update.bat', 420, 438 ]
-436 silly gunzTarPerm extractEntry component.json
-437 silly gunzTarPerm modified mode [ 'component.json', 420, 438 ]
-438 silly gunzTarPerm extractEntry cordova-js-src/exec.js
-439 silly gunzTarPerm modified mode [ 'cordova-js-src/exec.js', 420, 438 ]
-440 silly gunzTarPerm extractEntry cordova-js-src/platform.js
-441 silly gunzTarPerm modified mode [ 'cordova-js-src/platform.js', 420, 438 ]
-442 silly gunzTarPerm extractEntry guides/API changes in 4.0.md
-443 silly gunzTarPerm modified mode [ 'guides/API changes in 4.0.md', 420, 438 ]
-444 silly gunzTarPerm extractEntry guides/Cordova Custom URL Scheme Handling.md
-445 silly gunzTarPerm modified mode [ 'guides/Cordova Custom URL Scheme Handling.md', 420, 438 ]
-446 silly gunzTarPerm extractEntry guides/Setting Delegates, Preferences and Script Message Handlers in the WebView.md
-447 silly gunzTarPerm modified mode [ 'guides/Setting Delegates, Preferences and Script Message Handlers in the WebView.md',
-447 silly gunzTarPerm   420,
-447 silly gunzTarPerm   438 ]
-448 silly gunzTarPerm extractEntry hooks/pre-commit
-449 silly gunzTarPerm modified mode [ 'hooks/pre-commit', 493, 511 ]
-450 silly gunzTarPerm extractEntry spec/support/jasmine.json
-451 silly gunzTarPerm modified mode [ 'spec/support/jasmine.json', 420, 438 ]
-452 silly gunzTarPerm extractEntry tests/.jshintrc
-453 silly gunzTarPerm modified mode [ 'tests/.jshintrc', 420, 438 ]
-454 silly gunzTarPerm extractEntry tests/CordovaLibTests/.npmignore
-455 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/.npmignore', 420, 438 ]
-456 silly gunzTarPerm extractEntry tests/CordovaLibTests/en.lproj/InfoPlist.strings
-457 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/en.lproj/InfoPlist.strings', 420, 438 ]
-458 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVCommandDelegateTests.m
-459 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVCommandDelegateTests.m', 420, 438 ]
-460 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVFakeFileManager.h
-461 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVFakeFileManager.h', 420, 438 ]
-462 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVFakeFileManager.m
-463 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVFakeFileManager.m', 420, 438 ]
-464 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVInvokedUrlCommandTests.m
-465 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVInvokedUrlCommandTests.m', 420, 438 ]
-466 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVLocalStorageTests.m
-467 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVLocalStorageTests.m', 420, 438 ]
-468 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m
-469 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m',
-469 silly gunzTarPerm   420,
-469 silly gunzTarPerm   438 ]
-470 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVStartPageTests.m
-471 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVStartPageTests.m', 420, 438 ]
-472 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVUserAgentTest.m
-473 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVUserAgentTest.m', 420, 438 ]
-474 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVBase64Tests.m
-475 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVBase64Tests.m', 420, 438 ]
-476 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWebViewDelegateTests.m
-477 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWebViewDelegateTests.m', 420, 438 ]
-478 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWebViewTest.h
-479 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWebViewTest.h', 420, 438 ]
-480 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWebViewTest.m
-481 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWebViewTest.m', 420, 438 ]
-482 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWhitelistTests.m
-483 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWhitelistTests.m', 420, 438 ]
-484 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/AppDelegate.h
-485 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/AppDelegate.h', 420, 438 ]
-486 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/AppDelegate.m
-487 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/AppDelegate.m', 420, 438 ]
-488 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/Bridging-Header.h
-489 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/Bridging-Header.h',
-489 silly gunzTarPerm   420,
-489 silly gunzTarPerm   438 ]
-490 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/CordovaLibApp-Info.plist
-491 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/CordovaLibApp-Info.plist',
-491 silly gunzTarPerm   420,
-491 silly gunzTarPerm   438 ]
-492 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/ViewController.h
-493 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/ViewController.h',
-493 silly gunzTarPerm   420,
-493 silly gunzTarPerm   438 ]
-494 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/ViewController.m
-495 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/ViewController.m',
-495 silly gunzTarPerm   420,
-495 silly gunzTarPerm   438 ]
-496 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/config.xml
-497 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/config.xml', 420, 438 ]
-498 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/en.lproj/InfoPlist.strings
-499 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/en.lproj/InfoPlist.strings',
-499 silly gunzTarPerm   420,
-499 silly gunzTarPerm   438 ]
-500 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/main.m
-501 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/main.m', 420, 438 ]
-502 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/www/index.html
-503 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/www/index.html',
-503 silly gunzTarPerm   420,
-503 silly gunzTarPerm   438 ]
-504 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibTests-Info.plist
-505 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibTests-Info.plist', 420, 438 ]
-506 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj
-507 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj',
-507 silly gunzTarPerm   420,
-507 silly gunzTarPerm   438 ]
-508 silly gunzTarPerm extractEntry tests/CordovaLibTests/Default-568h@2x.png
-509 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/Default-568h@2x.png', 420, 438 ]
-510 silly gunzTarPerm extractEntry tests/CordovaLibTests/config-custom.xml
-511 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/config-custom.xml', 420, 438 ]
-512 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVViewControllerTest.m
-513 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVViewControllerTest.m', 420, 438 ]
-514 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/contents.xcworkspacedata
-515 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/contents.xcworkspacedata',
-515 silly gunzTarPerm   420,
-515 silly gunzTarPerm   438 ]
-516 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/cordova-ios.xccheckout
-517 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/cordova-ios.xccheckout',
-517 silly gunzTarPerm   420,
-517 silly gunzTarPerm   438 ]
-518 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaFrameworkApp.xcscheme
-519 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaFrameworkApp.xcscheme',
-519 silly gunzTarPerm   420,
-519 silly gunzTarPerm   438 ]
-520 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme
-521 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme',
-521 silly gunzTarPerm   420,
-521 silly gunzTarPerm   438 ]
-522 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibApp.xcscheme
-523 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibApp.xcscheme',
-523 silly gunzTarPerm   420,
-523 silly gunzTarPerm   438 ]
-524 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibTests.xcscheme
-525 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibTests.xcscheme',
-525 silly gunzTarPerm   420,
-525 silly gunzTarPerm   438 ]
-526 silly gunzTarPerm extractEntry tests/scripts/killsim.js
-527 silly gunzTarPerm modified mode [ 'tests/scripts/killsim.js', 493, 511 ]
-528 silly gunzTarPerm extractEntry tests/spec/create.spec.js
-529 silly gunzTarPerm modified mode [ 'tests/spec/create.spec.js', 420, 438 ]
-530 silly gunzTarPerm extractEntry tests/spec/unit/Api.spec.js
-531 silly gunzTarPerm modified mode [ 'tests/spec/unit/Api.spec.js', 420, 438 ]
-532 silly gunzTarPerm extractEntry tests/spec/unit/Podfile.spec.js
-533 silly gunzTarPerm modified mode [ 'tests/spec/unit/Podfile.spec.js', 420, 438 ]
-534 silly gunzTarPerm extractEntry tests/spec/unit/PodsJson.spec.js
-535 silly gunzTarPerm modified mode [ 'tests/spec/unit/PodsJson.spec.js', 420, 438 ]
-536 silly gunzTarPerm extractEntry tests/spec/unit/build.spec.js
-537 silly gunzTarPerm modified mode [ 'tests/spec/unit/build.spec.js', 420, 438 ]
-538 silly gunzTarPerm extractEntry tests/spec/unit/prepare.spec.js
-539 silly gunzTarPerm modified mode [ 'tests/spec/unit/prepare.spec.js', 420, 438 ]
-540 silly gunzTarPerm extractEntry tests/spec/unit/preparePlatform.spec.js
-541 silly gunzTarPerm modified mode [ 'tests/spec/unit/preparePlatform.spec.js', 420, 438 ]
-542 silly gunzTarPerm extractEntry tests/spec/unit/projectFile.spec.js
-543 silly gunzTarPerm modified mode [ 'tests/spec/unit/projectFile.spec.js', 420, 438 ]
-544 silly gunzTarPerm extractEntry tests/spec/unit/Plugman/common.spec.js
-545 silly gunzTarPerm modified mode [ 'tests/spec/unit/Plugman/common.spec.js', 420, 438 ]
-546 silly gunzTarPerm extractEntry tests/spec/unit/Plugman/pluginHandler.spec.js
-547 silly gunzTarPerm modified mode [ 'tests/spec/unit/Plugman/pluginHandler.spec.js', 420, 438 ]
-548 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/config.xml
-549 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/config.xml',
-549 silly gunzTarPerm   420,
-549 silly gunzTarPerm   438 ]
-550 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/image-1234.png
-551 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/image-1234.png',
-551 silly gunzTarPerm   420,
-551 silly gunzTarPerm   438 ]
-552 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/image-5678.png
-553 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/image-5678.png',
-553 silly gunzTarPerm   420,
-553 silly gunzTarPerm   438 ]
-554 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/image-8888.png
-555 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/image-8888.png',
-555 silly gunzTarPerm   420,
-555 silly gunzTarPerm   438 ]
-556 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/dummyProj/config.xml
-557 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/dummyProj/config.xml', 420, 438 ]
-558 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/dummyProj/platforms/.gitkeep
-559 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/dummyProj/platforms/.gitkeep',
-559 silly gunzTarPerm   420,
-559 silly gunzTarPerm   438 ]
-560 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/dummyProj/www/.gitkeep
-561 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/dummyProj/www/.gitkeep', 420, 438 ]
-562 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/legacy-only.xml
-563 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/legacy-only.xml',
-563 silly gunzTarPerm   420,
-563 silly gunzTarPerm   438 ]
-564 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-and-legacy.xml
-565 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-and-legacy.xml',
-565 silly gunzTarPerm   420,
-565 silly gunzTarPerm   438 ]
-566 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-only.xml
-567 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-only.xml',
-567 silly gunzTarPerm   420,
-567 silly gunzTarPerm   438 ]
-568 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/none.xml
-569 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/none.xml',
-569 silly gunzTarPerm   420,
-569 silly gunzTarPerm   438 ]
-570 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/empty.js
-571 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/empty.js',
-571 silly gunzTarPerm   420,
-571 silly gunzTarPerm   438 ]
-572 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/single-2xanyany.js
-573 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/single-2xanyany.js',
-573 silly gunzTarPerm   420,
-573 silly gunzTarPerm   438 ]
-574 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/typical-universal.js
-575 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/typical-universal.js',
-575 silly gunzTarPerm   420,
-575 silly gunzTarPerm   438 ]
-576 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/varied-device.js
-577 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/varied-device.js',
-577 silly gunzTarPerm   420,
-577 silly gunzTarPerm   438 ]
-578 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/empty-map.js
-579 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/empty-map.js',
-579 silly gunzTarPerm   420,
-579 silly gunzTarPerm   438 ]
-580 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/single-2xanyany-map.js
-581 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/single-2xanyany-map.js',
-581 silly gunzTarPerm   420,
-581 silly gunzTarPerm   438 ]
-582 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/typical-universal-map.js
-583 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/typical-universal-map.js',
-583 silly gunzTarPerm   420,
-583 silly gunzTarPerm   438 ]
-584 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/varied-device-map.js
-585 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/varied-device-map.js',
-585 silly gunzTarPerm   420,
-585 silly gunzTarPerm   438 ]
-586 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~anyany.png
-587 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~anyany.png',
-587 silly gunzTarPerm   420,
-587 silly gunzTarPerm   438 ]
-588 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comany.png
-589 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comany.png',
-589 silly gunzTarPerm   420,
-589 silly gunzTarPerm   438 ]
-590 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comcom.png
-591 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comcom.png',
-591 silly gunzTarPerm   420,
-591 silly gunzTarPerm   438 ]
-592 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anyany.png
-593 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anyany.png',
-593 silly gunzTarPerm   420,
-593 silly gunzTarPerm   438 ]
-594 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anycom.png
-595 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anycom.png',
-595 silly gunzTarPerm   420,
-595 silly gunzTarPerm   438 ]
-596 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~comany.png
-597 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~comany.png',
-597 silly gunzTarPerm   420,
-597 silly gunzTarPerm   438 ]
-598 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/plugin.xml
-599 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/plugin.xml',
-599 silly gunzTarPerm   420,
-599 silly gunzTarPerm   438 ]
-600 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/someFheader.h
-601 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/someFheader.h',
-601 silly gunzTarPerm   420,
-601 silly gunzTarPerm   438 ]
-602 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/somebinlib
-603 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/somebinlib',
-603 silly gunzTarPerm   420,
-603 silly gunzTarPerm   438 ]
-604 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/someFheader.h
-605 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/someFheader.h',
-605 silly gunzTarPerm   420,
-605 silly gunzTarPerm   438 ]
-606 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/somebinlib
-607 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/somebinlib',
-607 silly gunzTarPerm   420,
-607 silly gunzTarPerm   438 ]
-608 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPlugin.bundle
-609 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPlugin.bundle',
-609 silly gunzTarPerm   420,
-609 silly gunzTarPerm   438 ]
-610 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.h
-611 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.h',
-611 silly gunzTarPerm   420,
-611 silly gunzTarPerm   438 ]
-612 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.m
-613 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.m',
-613 silly gunzTarPerm   420,
-613 silly gunzTarPerm   438 ]
-614 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/SourceWithFramework.m
-615 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/SourceWithFramework.m',
-615 silly gunzTarPerm   420,
-615 silly gunzTarPerm   438 ]
-616 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.h
-617 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.h',
-617 silly gunzTarPerm   420,
-617 silly gunzTarPerm   438 ]
-618 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.m
-619 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.m',
-619 silly gunzTarPerm   420,
-619 silly gunzTarPerm   438 ]
-620 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/libsqlite3.dylib
-621 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/libsqlite3.dylib',
-621 silly gunzTarPerm   420,
-621 silly gunzTarPerm   438 ]
-622 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin.js
-623 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin.js',
-623 silly gunzTarPerm   420,
-623 silly gunzTarPerm   438 ]
-624 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin/image.jpg
-625 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin/image.jpg',
-625 silly gunzTarPerm   420,
-625 silly gunzTarPerm   438 ]
-626 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.faultyplugin/plugin.xml
-627 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.faultyplugin/plugin.xml',
-627 silly gunzTarPerm   420,
-627 silly gunzTarPerm   438 ]
-628 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.h
-629 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.h',
-629 silly gunzTarPerm   420,
-629 silly gunzTarPerm   438 ]
-630 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.m
-631 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.m',
-631 silly gunzTarPerm   420,
-631 silly gunzTarPerm   438 ]
-632 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/plugin.xml
-633 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/plugin.xml',
-633 silly gunzTarPerm   420,
-633 silly gunzTarPerm   438 ]
-634 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left.png
-635 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left.png',
-635 silly gunzTarPerm   420,
-635 silly gunzTarPerm   438 ]
-636 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left@2x.png
-637 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left@2x.png',
-637 silly gunzTarPerm   420,
-637 silly gunzTarPerm   438 ]
-638 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right.png
-639 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right.png',
-639 silly gunzTarPerm   420,
-639 silly gunzTarPerm   438 ]
-640 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right@2x.png
-641 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right@2x.png',
-641 silly gunzTarPerm   420,
-641 silly gunzTarPerm   438 ]
-642 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh.png
-643 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh.png',
-643 silly gunzTarPerm   420,
-643 silly gunzTarPerm   438 ]
-644 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh@2x.png
-645 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh@2x.png',
-645 silly gunzTarPerm   420,
-645 silly gunzTarPerm   438 ]
-646 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass.png
-647 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass.png',
-647 silly gunzTarPerm   420,
-647 silly gunzTarPerm   438 ]
-648 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass@2x.png
-649 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass@2x.png',
-649 silly gunzTarPerm   420,
-649 silly gunzTarPerm   438 ]
-650 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.h
-651 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.h',
-651 silly gunzTarPerm   420,
-651 silly gunzTarPerm   438 ]
-652 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.m
-653 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.m',
-653 silly gunzTarPerm   420,
-653 silly gunzTarPerm   438 ]
-654 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.h
-655 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.h',
-655 silly gunzTarPerm   420,
-655 silly gunzTarPerm   438 ]
-656 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.m
-657 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.m',
-657 silly gunzTarPerm   420,
-657 silly gunzTarPerm   438 ]
-658 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.xib
-659 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.xib',
-659 silly gunzTarPerm   420,
-659 silly gunzTarPerm   438 ]
-660 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
-661 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/CordovaLib/CordovaLib.xcodeproj/project.pbxproj',
-661 silly gunzTarPerm   420,
-661 silly gunzTarPerm   438 ]
-662 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/CordovaLib/VERSION
-663 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/CordovaLib/VERSION',
-663 silly gunzTarPerm   420,
-663 silly gunzTarPerm   438 ]
-664 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
-665 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72@2x.png',
-665 silly gunzTarPerm   420,
-665 silly gunzTarPerm   438 ]
-666 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/Contents.json
-667 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/Contents.json',
-667 silly gunzTarPerm   420,
-667 silly gunzTarPerm   438 ]
-668 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
-669 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40@2x.png',
-669 silly gunzTarPerm   420,
-669 silly gunzTarPerm   438 ]
-670 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50.png
-671 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50.png',
-671 silly gunzTarPerm   420,
-671 silly gunzTarPerm   438 ]
-672 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
-673 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50@2x.png',
-673 silly gunzTarPerm   420,
-673 silly gunzTarPerm   438 ]
-674 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
-675 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@2x.png',
-675 silly gunzTarPerm   420,
-675 silly gunzTarPerm   438 ]
-676 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
-677 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@3x.png',
-677 silly gunzTarPerm   420,
-677 silly gunzTarPerm   438 ]
-678 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72.png
-679 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72.png',
-679 silly gunzTarPerm   420,
-679 silly gunzTarPerm   438 ]
-680 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40.png
-681 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40.png',
-681 silly gunzTarPerm   420,
-681 silly gunzTarPerm   438 ]
-682 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76.png
-683 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76.png',
-683 silly gunzTarPerm   420,
-683 silly gunzTarPerm   438 ]
-684 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
-685 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76@2x.png',
-685 silly gunzTarPerm   420,
-685 silly gunzTarPerm   438 ]
-686 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
-687 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png',
-687 silly gunzTarPerm   420,
-687 silly gunzTarPerm   438 ]
-688 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small.png
-689 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small.png',
-689 silly gunzTarPerm   420,
-689 silly gunzTarPerm   438 ]
-690 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@2x.png
-691 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@2x.png',
-691 silly gunzTarPerm   420,
-691 silly gunzTarPerm   438 ]
-692 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@3x.png
-693 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@3x.png',
-693 silly gunzTarPerm   420,
-693 silly gunzTarPerm   438 ]
-694 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon.png
-695 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon.png',
-695 silly gunzTarPerm   420,
-695 silly gunzTarPerm   438 ]
-696 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon@2x.png
-697 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon@2x.png',
-697 silly gunzTarPerm   420,
-697 silly gunzTarPerm   438 ]
-698 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/Contents.json
-699 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/Contents.json',
-699 silly gunzTarPerm   420,
-699 silly gunzTarPerm   438 ]
-700 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png
-701 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png',
-701 silly gunzTarPerm   420,
-701 silly gunzTarPerm   438 ]
-702 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Contents.json
-703 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Contents.json',
-703 silly gunzTarPerm   420,
-703 silly gunzTarPerm   438 ]
-704 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-667h.png
-705 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-667h.png',
-705 silly gunzTarPerm   420,
-705 silly gunzTarPerm   438 ]
-706 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-736h.png
-707 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-736h.png',
-707 silly gunzTarPerm   420,
-707 silly gunzTarPerm   438 ]
-708 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png
-709 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png',
-709 silly gunzTarPerm   420,
-709 silly gunzTarPerm   438 ]
-710 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png
-711 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png',
-711 silly gunzTarPerm   420,
-711 silly gunzTarPerm   438 ]
-712 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png
-713 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png',
-713 silly gunzTarPerm   420,
-713 silly gunzTarPerm   438 ]
-714 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png
-715 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png',
-715 silly gunzTarPerm   420,
-715 silly gunzTarPerm   438 ]
-716 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png
-717 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png',
-717 silly gunzTarPerm   420,
-717 silly gunzTarPerm   438 ]
-718 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png
-719 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png',
-719 silly gunzTarPerm   420,
-719 silly gunzTarPerm   438 ]
-720 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default~iphone.png
-721 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default~iphone.png',
-721 silly gunzTarPerm   420,
-721 silly gunzTarPerm   438 ]
-722 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchStoryboard.imageset/Contents.json
-723 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchStoryboard.imageset/Contents.json',
-723 silly gunzTarPerm   420,
-723 silly gunzTarPerm   438 ]
-724 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/SampleApp-Info.plist
-725 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/SampleApp-Info.plist',
-725 silly gunzTarPerm   420,
-725 silly gunzTarPerm   438 ]
-726 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml
-727 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml',
-727 silly gunzTarPerm   420,
-727 silly gunzTarPerm   438 ]
-728 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.orig.pbxproj
-729 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.orig.pbxproj',
-729 silly gunzTarPerm   420,
-729 silly gunzTarPerm   438 ]
-730 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.pbxproj
-731 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.pbxproj',
-731 silly gunzTarPerm   420,
-731 silly gunzTarPerm   438 ]
-732 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/platform_www/.gitkeep
-733 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/platform_www/.gitkeep',
-733 silly gunzTarPerm   420,
-733 silly gunzTarPerm   438 ]
-734 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/www/.gitkeep
-735 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/www/.gitkeep',
-735 silly gunzTarPerm   420,
-735 silly gunzTarPerm   438 ]
-736 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/plugin.xml
-737 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/plugin.xml',
-737 silly gunzTarPerm   420,
-737 silly gunzTarPerm   438 ]
-738 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/www/test.js
-739 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/www/test.js',
-739 silly gunzTarPerm   420,
-739 silly gunzTarPerm   438 ]
-740 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/plugin.xml
-741 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/plugin.xml',
-741 silly gunzTarPerm   420,
-741 silly gunzTarPerm   438 ]
-742 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/www/test.js
-743 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/www/test.js',
-743 silly gunzTarPerm   420,
-743 silly gunzTarPerm   438 ]
-744 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/test-config-2.xml
-745 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/test-config-2.xml', 420, 438 ]
-746 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/test-config.xml
-747 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/test-config.xml', 420, 438 ]
-748 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/testProj/platforms/ios/.npmignore
-749 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/testProj/platforms/ios/.npmignore',
-749 silly gunzTarPerm   420,
-749 silly gunzTarPerm   438 ]
-750 silly gunzTarPerm extractEntry node_modules/os-homedir/package.json
-751 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/package.json', 420, 438 ]
-752 silly gunzTarPerm extractEntry node_modules/os-homedir/index.js
-753 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/index.js', 420, 438 ]
-754 silly gunzTarPerm extractEntry node_modules/os-homedir/license
-755 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/license', 420, 438 ]
-756 silly gunzTarPerm extractEntry node_modules/os-homedir/readme.md
-757 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/readme.md', 420, 438 ]
-758 silly gunzTarPerm extractEntry node_modules/abbrev/package.json
-759 silly gunzTarPerm modified mode [ 'node_modules/abbrev/package.json', 420, 438 ]
-760 silly gunzTarPerm extractEntry node_modules/abbrev/README.md
-761 silly gunzTarPerm modified mode [ 'node_modules/abbrev/README.md', 420, 438 ]
-762 silly gunzTarPerm extractEntry node_modules/abbrev/LICENSE
-763 silly gunzTarPerm modified mode [ 'node_modules/abbrev/LICENSE', 420, 438 ]
-764 silly gunzTarPerm extractEntry node_modules/abbrev/abbrev.js
-765 silly gunzTarPerm modified mode [ 'node_modules/abbrev/abbrev.js', 420, 438 ]
-766 silly gunzTarPerm extractEntry node_modules/balanced-match/package.json
-767 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/package.json', 420, 438 ]
-768 silly gunzTarPerm extractEntry node_modules/balanced-match/.npmignore
-769 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/.npmignore', 420, 438 ]
-770 silly gunzTarPerm extractEntry node_modules/balanced-match/README.md
-771 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/README.md', 420, 438 ]
-772 silly gunzTarPerm extractEntry node_modules/balanced-match/index.js
-773 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/index.js', 420, 438 ]
-774 silly gunzTarPerm extractEntry node_modules/balanced-match/LICENSE.md
-775 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/LICENSE.md', 420, 438 ]
-776 silly gunzTarPerm extractEntry node_modules/base64-js/package.json
-777 silly gunzTarPerm modified mode [ 'node_modules/base64-js/package.json', 420, 438 ]
-778 silly gunzTarPerm extractEntry node_modules/base64-js/README.md
-779 silly gunzTarPerm modified mode [ 'node_modules/base64-js/README.md', 420, 438 ]
-780 silly gunzTarPerm extractEntry node_modules/base64-js/.travis.yml
-781 silly gunzTarPerm modified mode [ 'node_modules/base64-js/.travis.yml', 420, 438 ]
-782 silly gunzTarPerm extractEntry node_modules/base64-js/LICENSE.MIT
-783 silly gunzTarPerm modified mode [ 'node_modules/base64-js/LICENSE.MIT', 420, 438 ]
-784 silly gunzTarPerm extractEntry node_modules/base64-js/bench/bench.js
-785 silly gunzTarPerm modified mode [ 'node_modules/base64-js/bench/bench.js', 420, 438 ]
-786 silly gunzTarPerm extractEntry node_modules/base64-js/lib/b64.js
-787 silly gunzTarPerm modified mode [ 'node_modules/base64-js/lib/b64.js', 420, 438 ]
-788 silly gunzTarPerm extractEntry node_modules/base64-js/test/convert.js
-789 silly gunzTarPerm modified mode [ 'node_modules/base64-js/test/convert.js', 420, 438 ]
-790 silly gunzTarPerm extractEntry node_modules/base64-js/test/url-safe.js
-791 silly gunzTarPerm modified mode [ 'node_modules/base64-js/test/url-safe.js', 420, 438 ]
-792 silly gunzTarPerm extractEntry node_modules/big-integer/package.json
-793 silly gunzTarPerm modified mode [ 'node_modules/big-integer/package.json', 420, 438 ]
-794 silly gunzTarPerm extractEntry node_modules/big-integer/README.md
-795 silly gunzTarPerm modified mode [ 'node_modules/big-integer/README.md', 420, 438 ]
-796 silly gunzTarPerm extractEntry node_modules/big-integer/LICENSE
-797 silly gunzTarPerm modified mode [ 'node_modules/big-integer/LICENSE', 420, 438 ]
-798 silly gunzTarPerm extractEntry node_modules/big-integer/BigInteger.js
-799 silly gunzTarPerm modified mode [ 'node_modules/big-integer/BigInteger.js', 420, 438 ]
-800 silly gunzTarPerm extractEntry node_modules/big-integer/BigInteger.min.js
-801 silly gunzTarPerm modified mode [ 'node_modules/big-integer/BigInteger.min.js', 420, 438 ]
-802 silly gunzTarPerm extractEntry node_modules/big-integer/bower.json
-803 silly gunzTarPerm modified mode [ 'node_modules/big-integer/bower.json', 420, 438 ]
-804 silly gunzTarPerm extractEntry node_modules/bplist-creator/package.json
-805 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/package.json', 420, 438 ]
-806 silly gunzTarPerm extractEntry node_modules/bplist-creator/.npmignore
-807 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/.npmignore', 420, 438 ]
-808 silly gunzTarPerm extractEntry node_modules/bplist-creator/README.md
-809 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/README.md', 420, 438 ]
-810 silly gunzTarPerm extractEntry node_modules/bplist-creator/bplistCreator.js
-811 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/bplistCreator.js', 420, 438 ]
-812 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/creatorTest.js
-813 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/creatorTest.js', 420, 438 ]
-814 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/airplay.bplist
-815 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/airplay.bplist', 420, 438 ]
-816 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/binaryData.bplist
-817 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/binaryData.bplist',
-817 silly gunzTarPerm   420,
-817 silly gunzTarPerm   438 ]
-818 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/iTunes-small.bplist
-819 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/iTunes-small.bplist',
-819 silly gunzTarPerm   420,
-819 silly gunzTarPerm   438 ]
-820 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/sample1.bplist
-821 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/sample1.bplist', 420, 438 ]
-822 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/sample2.bplist
-823 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/sample2.bplist', 420, 438 ]
-824 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/uid.bplist
-825 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/uid.bplist', 420, 438 ]
-826 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/utf16.bplist
-827 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/utf16.bplist', 420, 438 ]
-828 silly gunzTarPerm extractEntry node_modules/bplist-parser/package.json
-829 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/package.json', 420, 438 ]
-830 silly gunzTarPerm extractEntry node_modules/bplist-parser/.npmignore
-831 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/.npmignore', 420, 438 ]
-832 silly gunzTarPerm extractEntry node_modules/bplist-parser/README.md
-833 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/README.md', 420, 438 ]
-834 silly gunzTarPerm extractEntry node_modules/bplist-parser/bplistParser.js
-835 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/bplistParser.js', 420, 438 ]
-836 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/parseTest.js
-837 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/parseTest.js', 420, 438 ]
-838 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/airplay.bplist
-839 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/airplay.bplist', 420, 438 ]
-840 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/iTunes-small.bplist
-841 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/iTunes-small.bplist',
-841 silly gunzTarPerm   420,
-841 silly gunzTarPerm   438 ]
-842 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/int64.bplist
-843 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/int64.bplist', 420, 438 ]
-844 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/int64.xml
-845 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/int64.xml', 420, 438 ]
-846 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/sample1.bplist
-847 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/sample1.bplist', 420, 438 ]
-848 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/sample2.bplist
-849 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/sample2.bplist', 420, 438 ]
-850 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/uid.bplist
-851 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/uid.bplist', 420, 438 ]
-852 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/utf16.bplist
-853 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/utf16.bplist', 420, 438 ]
-854 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/utf16_chinese.plist
-855 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/utf16_chinese.plist',
-855 silly gunzTarPerm   493,
-855 silly gunzTarPerm   511 ]
-856 silly gunzTarPerm extractEntry node_modules/brace-expansion/package.json
-857 silly gunzTarPerm modified mode [ 'node_modules/brace-expansion/package.json', 420, 438 ]
-858 silly gunzTarPerm extractEntry node_modules/brace-expansion/README.md
-859 silly gunzTarPerm modified mode [ 'node_modules/brace-expansion/README.md', 420, 438 ]
-860 silly gunzTarPerm extractEntry node_modules/brace-expansion/index.js
-861 silly gunzTarPerm modified mode [ 'node_modules/brace-expansion/index.js', 420, 438 ]
-862 silly gunzTarPerm extractEntry node_modules/concat-map/package.json
-863 silly gunzTarPerm modified mode [ 'node_modules/concat-map/package.json', 420, 438 ]
-864 silly gunzTarPerm extractEntry node_modules/concat-map/LICENSE
-865 silly gunzTarPerm modified mode [ 'node_modules/concat-map/LICENSE', 420, 438 ]
-866 silly gunzTarPerm extractEntry node_modules/concat-map/index.js
-867 silly gunzTarPerm modified mode [ 'node_modules/concat-map/index.js', 420, 438 ]
-868 silly gunzTarPerm extractEntry node_modules/concat-map/.travis.yml
-869 silly gunzTarPerm modified mode [ 'node_modules/concat-map/.travis.yml', 420, 438 ]
-870 silly gunzTarPerm extractEntry node_modules/concat-map/README.markdown
-871 silly gunzTarPerm modified mode [ 'node_modules/concat-map/README.markdown', 420, 438 ]
-872 silly gunzTarPerm extractEntry node_modules/concat-map/example/map.js
-873 silly gunzTarPerm modified mode [ 'node_modules/concat-map/example/map.js', 420, 438 ]
-874 silly gunzTarPerm extractEntry node_modules/concat-map/test/map.js
-875 silly gunzTarPerm modified mode [ 'node_modules/concat-map/test/map.js', 420, 438 ]
-876 silly gunzTarPerm extractEntry node_modules/cordova-common/package.json
-877 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/package.json', 420, 438 ]
-878 silly gunzTarPerm extractEntry node_modules/cordova-common/.npmignore
-879 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.npmignore', 420, 438 ]
-880 silly gunzTarPerm extractEntry node_modules/cordova-common/README.md
-881 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/README.md', 420, 438 ]
-882 silly gunzTarPerm extractEntry node_modules/cordova-common/cordova-common.js
-883 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/cordova-common.js', 420, 438 ]
-884 silly gunzTarPerm extractEntry node_modules/cordova-common/.jscs.json
-885 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.jscs.json', 420, 438 ]
-886 silly gunzTarPerm extractEntry node_modules/cordova-common/.jshintignore
-887 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.jshintignore', 420, 438 ]
-888 silly gunzTarPerm extractEntry node_modules/cordova-common/.ratignore
-889 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.ratignore', 420, 438 ]
-890 silly gunzTarPerm extractEntry node_modules/cordova-common/RELEASENOTES.md
-891 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/RELEASENOTES.md', 420, 438 ]
-892 silly gunzTarPerm extractEntry node_modules/cordova-common/src/FileUpdater.js
-893 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/FileUpdater.js', 420, 438 ]
-894 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaCheck.js
-895 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaCheck.js', 420, 438 ]
-896 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaLogger.js
-897 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaLogger.js', 420, 438 ]
-898 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ActionStack.js
-899 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ActionStack.js', 420, 438 ]
-900 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PlatformJson.js
-901 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PlatformJson.js', 420, 438 ]
-902 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PluginManager.js
-903 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PluginManager.js', 420, 438 ]
-904 silly gunzTarPerm extractEntry node_modules/cordova-common/src/events.js
-905 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/events.js', 420, 438 ]
-906 silly gunzTarPerm extractEntry node_modules/cordova-common/src/superspawn.js
-907 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/superspawn.js', 420, 438 ]
-908 silly gunzTarPerm extractEntry node_modules/cordova-common/src/.jshintrc
-909 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/.jshintrc', 420, 438 ]
-910 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PluginInfo/PluginInfo.js
-911 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PluginInfo/PluginInfo.js',
-911 silly gunzTarPerm   420,
-911 silly gunzTarPerm   438 ]
-912 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js
-913 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js',
-913 silly gunzTarPerm   420,
-913 silly gunzTarPerm   438 ]
-914 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaError/CordovaError.js
-915 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaError/CordovaError.js',
-915 silly gunzTarPerm   420,
-915 silly gunzTarPerm   438 ]
-916 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js
-917 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js',
-917 silly gunzTarPerm   420,
-917 silly gunzTarPerm   438 ]
-918 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
-919 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js',
-919 silly gunzTarPerm   420,
-919 silly gunzTarPerm   438 ]
-920 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
-921 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/ConfigFile.js',
-921 silly gunzTarPerm   420,
-921 silly gunzTarPerm   438 ]
-922 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js
-923 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js',
-923 silly gunzTarPerm   420,
-923 silly gunzTarPerm   438 ]
-924 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/munge-util.js
-925 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/munge-util.js',
-925 silly gunzTarPerm   420,
-925 silly gunzTarPerm   438 ]
-926 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigParser/README.md
-927 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigParser/README.md',
-927 silly gunzTarPerm   420,
-927 silly gunzTarPerm   438 ]
-928 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigParser/ConfigParser.js
-929 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigParser/ConfigParser.js',
-929 silly gunzTarPerm   420,
-929 silly gunzTarPerm   438 ]
-930 silly gunzTarPerm extractEntry node_modules/cordova-common/src/util/addProperty.js
-931 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/util/addProperty.js',
-931 silly gunzTarPerm   420,
-931 silly gunzTarPerm   438 ]
-932 silly gunzTarPerm extractEntry node_modules/cordova-common/src/util/plist-helpers.js
-933 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/util/plist-helpers.js',
-933 silly gunzTarPerm   420,
-933 silly gunzTarPerm   438 ]
-934 silly gunzTarPerm extractEntry node_modules/cordova-common/src/util/xml-helpers.js
-935 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/util/xml-helpers.js',
-935 silly gunzTarPerm   420,
-935 silly gunzTarPerm   438 ]
-936 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/package.json
-937 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/package.json', 420, 438 ]
-938 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/.npmignore
-939 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/.npmignore', 420, 438 ]
-940 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/README.md
-941 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/README.md', 420, 438 ]
-942 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/index.js
-943 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/index.js', 420, 438 ]
-944 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/.travis.yml
-945 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/.travis.yml', 420, 438 ]
-946 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/tests/test.js
-947 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/tests/test.js',
-947 silly gunzTarPerm   420,
-947 silly gunzTarPerm   438 ]
-948 silly gunzTarPerm extractEntry node_modules/elementtree/package.json
-949 silly gunzTarPerm modified mode [ 'node_modules/elementtree/package.json', 420, 438 ]
-950 silly gunzTarPerm extractEntry node_modules/elementtree/.npmignore
-951 silly gunzTarPerm modified mode [ 'node_modules/elementtree/.npmignore', 420, 438 ]
-952 silly gunzTarPerm extractEntry node_modules/elementtree/README.md
-953 silly gunzTarPerm modified mode [ 'node_modules/elementtree/README.md', 420, 438 ]
-954 silly gunzTarPerm extractEntry node_modules/elementtree/.travis.yml
-955 silly gunzTarPerm modified mode [ 'node_modules/elementtree/.travis.yml', 420, 438 ]
-956 silly gunzTarPerm extractEntry node_modules/elementtree/CHANGES.md
-957 silly gunzTarPerm modified mode [ 'node_modules/elementtree/CHANGES.md', 420, 438 ]
-958 silly gunzTarPerm extractEntry node_modules/elementtree/LICENSE.txt
-959 silly gunzTarPerm modified mode [ 'node_modules/elementtree/LICENSE.txt', 420, 438 ]
-960 silly gunzTarPerm extractEntry node_modules/elementtree/Makefile
-961 silly gunzTarPerm modified mode [ 'node_modules/elementtree/Makefile', 493, 511 ]
-962 silly gunzTarPerm extractEntry node_modules/elementtree/NOTICE
-963 silly gunzTarPerm modified mode [ 'node_modules/elementtree/NOTICE', 420, 438 ]
-964 silly gunzTarPerm extractEntry node_modules/elementtree/lib/constants.js
-965 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/constants.js', 420, 438 ]
-966 silly gunzTarPerm extractEntry node_modules/elementtree/lib/elementpath.js
-967 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/elementpath.js', 420, 438 ]
-968 silly gunzTarPerm extractEntry node_modules/elementtree/lib/elementtree.js
-969 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/elementtree.js', 420, 438 ]
-970 silly gunzTarPerm extractEntry node_modules/elementtree/lib/errors.js
-971 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/errors.js', 420, 438 ]
-972 silly gunzTarPerm extractEntry node_modules/elementtree/lib/parser.js
-973 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/parser.js', 420, 438 ]
-974 silly gunzTarPerm extractEntry node_modules/elementtree/lib/sprintf.js
-975 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/sprintf.js', 420, 438 ]
-976 silly gunzTarPerm extractEntry node_modules/elementtree/lib/treebuilder.js
-977 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/treebuilder.js', 420, 438 ]
-978 silly gunzTarPerm extractEntry node_modules/elementtree/lib/utils.js
-979 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/utils.js', 420, 438 ]
-980 silly gunzTarPerm extractEntry node_modules/elementtree/lib/parsers/index.js
-981 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/parsers/index.js', 420, 438 ]
-982 silly gunzTarPerm extractEntry node_modules/elementtree/lib/parsers/sax.js
-983 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/parsers/sax.js', 420, 438 ]
-984 silly gunzTarPerm extractEntry node_modules/elementtree/tests/test-simple.js
-985 silly gunzTarPerm modified mode [ 'node_modules/elementtree/tests/test-simple.js', 420, 438 ]
-986 silly gunzTarPerm extractEntry node_modules/elementtree/tests/data/xml1.xml
-987 silly gunzTarPerm modified mode [ 'node_modules/elementtree/tests/data/xml1.xml', 420, 438 ]
-988 silly gunzTarPerm extractEntry node_modules/elementtree/tests/data/xml2.xml
-989 silly gunzTarPerm modified mode [ 'node_modules/elementtree/tests/data/xml2.xml', 420, 438 ]
-990 silly gunzTarPerm extractEntry node_modules/glob/package.json
-991 silly gunzTarPerm modified mode [ 'node_modules/glob/package.json', 420, 438 ]
-992 silly gunzTarPerm extractEntry node_modules/glob/README.md
-993 silly gunzTarPerm modified mode [ 'node_modules/glob/README.md', 420, 438 ]
-994 silly gunzTarPerm extractEntry node_modules/glob/LICENSE
-995 silly gunzTarPerm modified mode [ 'node_modules/glob/LICENSE', 420, 438 ]
-996 silly gunzTarPerm extractEntry node_modules/glob/common.js
-997 silly gunzTarPerm modified mode [ 'node_modules/glob/common.js', 420, 438 ]
-998 silly gunzTarPerm extractEntry node_modules/glob/glob.js
-999 silly gunzTarPerm modified mode [ 'node_modules/glob/glob.js', 420, 438 ]
-1000 silly gunzTarPerm extractEntry node_modules/glob/sync.js
-1001 silly gunzTarPerm modified mode [ 'node_modules/glob/sync.js', 420, 438 ]
-1002 silly gunzTarPerm extractEntry node_modules/inflight/package.json
-1003 silly gunzTarPerm modified mode [ 'node_modules/inflight/package.json', 420, 438 ]
-1004 silly gunzTarPerm extractEntry node_modules/inflight/README.md
-1005 silly gunzTarPerm modified mode [ 'node_modules/inflight/README.md', 420, 438 ]
-1006 silly gunzTarPerm extractEntry node_modules/inflight/LICENSE
-1007 silly gunzTarPerm modified mode [ 'node_modules/inflight/LICENSE', 420, 438 ]
-1008 silly gunzTarPerm extractEntry node_modules/inflight/inflight.js
-1009 silly gunzTarPerm modified mode [ 'node_modules/inflight/inflight.js', 420, 438 ]
-1010 silly gunzTarPerm extractEntry node_modules/inherits/package.json
-1011 silly gunzTarPerm modified mode [ 'node_modules/inherits/package.json', 420, 438 ]
-1012 silly gunzTarPerm extractEntry node_modules/inherits/README.md
-1013 silly gunzTarPerm modified mode [ 'node_modules/inherits/README.md', 420, 438 ]
-1014 silly gunzTarPerm extractEntry node_modules/inherits/LICENSE
-1015 silly gunzTarPerm modified mode [ 'node_modules/inherits/LICENSE', 420, 438 ]
-1016 silly gunzTarPerm extractEntry node_modules/inherits/inherits.js
-1017 silly gunzTarPerm modified mode [ 'node_modules/inherits/inherits.js', 420, 438 ]
-1018 silly gunzTarPerm extractEntry node_modules/inherits/inherits_browser.js
-1019 silly gunzTarPerm modified mode [ 'node_modules/inherits/inherits_browser.js', 420, 438 ]
-1020 silly gunzTarPerm extractEntry node_modules/ios-sim/package.json
-1021 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/package.json', 420, 438 ]
-1022 silly gunzTarPerm extractEntry node_modules/ios-sim/.npmignore
-1023 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.npmignore', 420, 438 ]
-1024 silly gunzTarPerm extractEntry node_modules/ios-sim/README.md
-1025 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/README.md', 420, 438 ]
-1026 silly gunzTarPerm extractEntry node_modules/ios-sim/LICENSE
-1027 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/LICENSE', 420, 438 ]
-1028 silly gunzTarPerm extractEntry node_modules/ios-sim/ios-sim.js
-1029 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/ios-sim.js', 420, 438 ]
-1030 silly gunzTarPerm extractEntry node_modules/ios-sim/bin/ios-sim
-1031 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/bin/ios-sim', 493, 511 ]
-1032 silly gunzTarPerm extractEntry node_modules/ios-sim/bin/ios-sim.cmd
-1033 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/bin/ios-sim.cmd', 493, 511 ]
-1034 silly gunzTarPerm extractEntry node_modules/ios-sim/appveyor.yml
-1035 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/appveyor.yml', 420, 438 ]
-1036 silly gunzTarPerm extractEntry node_modules/ios-sim/.jscsrc
-1037 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.jscsrc', 420, 438 ]
-1038 silly gunzTarPerm extractEntry node_modules/ios-sim/doc/help.txt
-1039 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/doc/help.txt', 420, 438 ]
-1040 silly gunzTarPerm extractEntry node_modules/ios-sim/.github/CONTRIBUTING.md
-1041 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.github/CONTRIBUTING.md', 420, 438 ]
-1042 silly gunzTarPerm extractEntry node_modules/ios-sim/.github/ISSUE_TEMPLATE.md
-1043 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.github/ISSUE_TEMPLATE.md', 420, 438 ]
-1044 silly gunzTarPerm extractEntry node_modules/ios-sim/spec/cli.spec.js
-1045 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/spec/cli.spec.js', 420, 438 ]
-1046 silly gunzTarPerm extractEntry node_modules/ios-sim/spec/commands.spec.js
-1047 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/spec/commands.spec.js', 420, 438 ]
-1048 silly gunzTarPerm extractEntry node_modules/ios-sim/spec/lib.spec.js
-1049 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/spec/lib.spec.js', 420, 438 ]
-1050 silly gunzTarPerm extractEntry node_modules/ios-sim/.travis.yml
-1051 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.travis.yml', 420, 438 ]
-1052 silly gunzTarPerm extractEntry node_modules/ios-sim/src/cli.js
-1053 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/cli.js', 420, 438 ]
-1054 silly gunzTarPerm extractEntry node_modules/ios-sim/src/commands.js
-1055 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/commands.js', 420, 438 ]
-1056 silly gunzTarPerm extractEntry node_modules/ios-sim/src/help.js
-1057 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/help.js', 420, 438 ]
-1058 silly gunzTarPerm extractEntry node_modules/ios-sim/src/lib.js
-1059 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/lib.js', 420, 438 ]
-1060 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/package.json
-1061 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/package.json',
-1061 silly gunzTarPerm   420,
-1061 silly gunzTarPerm   438 ]
-1062 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/.npmignore
-1063 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/.npmignore',
-1063 silly gunzTarPerm   420,
-1063 silly gunzTarPerm   438 ]
-1064 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/README.md
-1065 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/README.md',
-1065 silly gunzTarPerm   420,
-1065 silly gunzTarPerm   438 ]
-1066 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/bplistParser.js
-1067 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/bplistParser.js',
-1067 silly gunzTarPerm   420,
-1067 silly gunzTarPerm   438 ]
-1068 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/parseTest.js
-1069 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/parseTest.js',
-1069 silly gunzTarPerm   420,
-1069 silly gunzTarPerm   438 ]
-1070 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/airplay.bplist
-1071 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/airplay.bplist',
-1071 silly gunzTarPerm   420,
-1071 silly gunzTarPerm   438 ]
-1072 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/iTunes-small.bplist
-1073 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/iTunes-small.bplist',
-1073 silly gunzTarPerm   420,
-1073 silly gunzTarPerm   438 ]
-1074 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/sample1.bplist
-1075 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/sample1.bplist',
-1075 silly gunzTarPerm   420,
-1075 silly gunzTarPerm   438 ]
-1076 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/sample2.bplist
-1077 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/sample2.bplist',
-1077 silly gunzTarPerm   420,
-1077 silly gunzTarPerm   438 ]
-1078 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/uid.bplist
-1079 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/uid.bplist',
-1079 silly gunzTarPerm   420,
-1079 silly gunzTarPerm   438 ]
-1080 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/utf16.bplist
-1081 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/utf16.bplist',
-1081 silly gunzTarPerm   420,
-1081 silly gunzTarPerm   438 ]
-1082 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/package.json
-1083 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/package.json',
-1083 silly gunzTarPerm   420,
-1083 silly gunzTarPerm   438 ]
-1084 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/.npmignore
-1085 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/.npmignore', 420, 438 ]
-1086 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/README.md
-1087 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/README.md', 420, 438 ]
-1088 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/LICENSE
-1089 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/LICENSE', 420, 438 ]
-1090 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/bin/nopt.js
-1091 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/bin/nopt.js',
-1091 silly gunzTarPerm   493,
-1091 silly gunzTarPerm   511 ]
-1092 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/examples/my-program.js
-1093 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/examples/my-program.js',
-1093 silly gunzTarPerm   493,
-1093 silly gunzTarPerm   511 ]
-1094 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/lib/nopt.js
-1095 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/lib/nopt.js',
-1095 silly gunzTarPerm   420,
-1095 silly gunzTarPerm   438 ]
-1096 silly gunzTarPerm extractEntry node_modules/lodash/package.json
-1097 silly gunzTarPerm modified mode [ 'node_modules/lodash/package.json', 420, 438 ]
-1098 silly gunzTarPerm extractEntry node_modules/lodash/README.md
-1099 silly gunzTarPerm modified mode [ 'node_modules/lodash/README.md', 420, 438 ]
-1100 silly gunzTarPerm extractEntry node_modules/lodash/LICENSE
-1101 silly gunzTarPerm modified mode [ 'node_modules/lodash/LICENSE', 420, 438 ]
-1102 silly gunzTarPerm extractEntry node_modules/lodash/chain.js
-1103 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain.js', 420, 438 ]
-1104 silly gunzTarPerm extractEntry node_modules/lodash/string.js
-1105 silly gunzTarPerm modified mode [ 'node_modules/lodash/string.js', 420, 438 ]
-1106 silly gunzTarPerm extractEntry node_modules/lodash/collection.js
-1107 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection.js', 420, 438 ]
-1108 silly gunzTarPerm extractEntry node_modules/lodash/array.js
-1109 silly gunzTarPerm modified mode [ 'node_modules/lodash/array.js', 420, 438 ]
-1110 silly gunzTarPerm extractEntry node_modules/lodash/date.js
-1111 silly gunzTarPerm modified mode [ 'node_modules/lodash/date.js', 420, 438 ]
-1112 silly gunzTarPerm extractEntry node_modules/lodash/number.js
-1113 silly gunzTarPerm modified mode [ 'node_modules/lodash/number.js', 420, 438 ]
-1114 silly gunzTarPerm extractEntry node_modules/lodash/function.js
-1115 silly gunzTarPerm modified mode [ 'node_modules/lodash/function.js', 420, 438 ]
-1116 silly gunzTarPerm extractEntry node_modules/lodash/index.js
-1117 silly gunzTarPerm modified mode [ 'node_modules/lodash/index.js', 420, 438 ]
-1118 silly gunzTarPerm extractEntry node_modules/lodash/math.js
-1119 silly gunzTarPerm modified mode [ 'node_modules/lodash/math.js', 420, 438 ]
-1120 silly gunzTarPerm extractEntry node_modules/lodash/support.js
-1121 silly gunzTarPerm modified mode [ 'node_modules/lodash/support.js', 420, 438 ]
-1122 silly gunzTarPerm extractEntry node_modules/lodash/lang.js
-1123 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang.js', 420, 438 ]
-1124 silly gunzTarPerm extractEntry node_modules/lodash/object.js
-1125 silly gunzTarPerm modified mode [ 'node_modules/lodash/object.js', 420, 438 ]
-1126 silly gunzTarPerm extractEntry node_modules/lodash/utility.js
-1127 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility.js', 420, 438 ]
-1128 silly gunzTarPerm extractEntry node_modules/lodash/collection/all.js
-1129 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/all.js', 420, 438 ]
-1130 silly gunzTarPerm extractEntry node_modules/lodash/collection/forEachRight.js
-1131 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/forEachRight.js', 420, 438 ]
-1132 silly gunzTarPerm extractEntry node_modules/lodash/collection/groupBy.js
-1133 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/groupBy.js', 420, 438 ]
-1134 silly gunzTarPerm extractEntry node_modules/lodash/collection/include.js
-1135 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/include.js', 420, 438 ]
-1136 silly gunzTarPerm extractEntry node_modules/lodash/collection/includes.js
-1137 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/includes.js', 420, 438 ]
-1138 silly gunzTarPerm extractEntry node_modules/lodash/collection/forEach.js
-1139 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/forEach.js', 420, 438 ]
-1140 silly gunzTarPerm extractEntry node_modules/lodash/collection/inject.js
-1141 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/inject.js', 420, 438 ]
-1142 silly gunzTarPerm extractEntry node_modules/lodash/collection/invoke.js
-1143 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/invoke.js', 420, 438 ]
-1144 silly gunzTarPerm extractEntry node_modules/lodash/collection/map.js
-1145 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/map.js', 420, 438 ]
-1146 silly gunzTarPerm extractEntry node_modules/lodash/collection/max.js
-1147 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/max.js', 420, 438 ]
-1148 silly gunzTarPerm extractEntry node_modules/lodash/collection/min.js
-1149 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/min.js', 420, 438 ]
-1150 silly gunzTarPerm extractEntry node_modules/lodash/collection/foldr.js
-1151 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/foldr.js', 420, 438 ]
-1152 silly gunzTarPerm extractEntry node_modules/lodash/collection/partition.js
-1153 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/partition.js', 420, 438 ]
-1154 silly gunzTarPerm extractEntry node_modules/lodash/collection/foldl.js
-1155 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/foldl.js', 420, 438 ]
-1156 silly gunzTarPerm extractEntry node_modules/lodash/collection/pluck.js
-1157 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/pluck.js', 420, 438 ]
-1158 silly gunzTarPerm extractEntry node_modules/lodash/collection/findWhere.js
-1159 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/findWhere.js', 420, 438 ]
-1160 silly gunzTarPerm extractEntry node_modules/lodash/collection/reduce.js
-1161 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/reduce.js', 420, 438 ]
-1162 silly gunzTarPerm extractEntry node_modules/lodash/collection/findLast.js
-1163 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/findLast.js', 420, 438 ]
-1164 silly gunzTarPerm extractEntry node_modules/lodash/collection/reduceRight.js
-1165 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/reduceRight.js', 420, 438 ]
-1166 silly gunzTarPerm extractEntry node_modules/lodash/collection/find.js
-1167 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/find.js', 420, 438 ]
-1168 silly gunzTarPerm extractEntry node_modules/lodash/collection/reject.js
-1169 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/reject.js', 420, 438 ]
-1170 silly gunzTarPerm extractEntry node_modules/lodash/collection/filter.js
-1171 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/filter.js', 420, 438 ]
-1172 silly gunzTarPerm extractEntry node_modules/lodash/collection/sample.js
-1173 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sample.js', 420, 438 ]
-1174 silly gunzTarPerm extractEntry node_modules/lodash/collection/every.js
-1175 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/every.js', 420, 438 ]
-1176 silly gunzTarPerm extractEntry node_modules/lodash/collection/select.js
-1177 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/select.js', 420, 438 ]
-1178 silly gunzTarPerm extractEntry node_modules/lodash/collection/eachRight.js
-1179 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/eachRight.js', 420, 438 ]
-1180 silly gunzTarPerm extractEntry node_modules/lodash/collection/shuffle.js
-1181 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/shuffle.js', 420, 438 ]
-1182 silly gunzTarPerm extractEntry node_modules/lodash/collection/each.js
-1183 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/each.js', 420, 438 ]
-1184 silly gunzTarPerm extractEntry node_modules/lodash/collection/size.js
-1185 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/size.js', 420, 438 ]
-1186 silly gunzTarPerm extractEntry node_modules/lodash/collection/detect.js
-1187 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/detect.js', 420, 438 ]
-1188 silly gunzTarPerm extractEntry node_modules/lodash/collection/some.js
-1189 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/some.js', 420, 438 ]
-1190 silly gunzTarPerm extractEntry node_modules/lodash/collection/countBy.js
-1191 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/countBy.js', 420, 438 ]
-1192 silly gunzTarPerm extractEntry node_modules/lodash/collection/sortBy.js
-1193 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sortBy.js', 420, 438 ]
-1194 silly gunzTarPerm extractEntry node_modules/lodash/collection/contains.js
-1195 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/contains.js', 420, 438 ]
-1196 silly gunzTarPerm extractEntry node_modules/lodash/collection/sortByAll.js
-1197 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sortByAll.js', 420, 438 ]
-1198 silly gunzTarPerm extractEntry node_modules/lodash/collection/collect.js
-1199 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/collect.js', 420, 438 ]
-1200 silly gunzTarPerm extractEntry node_modules/lodash/collection/sortByOrder.js
-1201 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sortByOrder.js', 420, 438 ]
-1202 silly gunzTarPerm extractEntry node_modules/lodash/collection/at.js
-1203 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/at.js', 420, 438 ]
-1204 silly gunzTarPerm extractEntry node_modules/lodash/collection/sum.js
-1205 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sum.js', 420, 438 ]
-1206 silly gunzTarPerm extractEntry node_modules/lodash/collection/any.js
-1207 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/any.js', 420, 438 ]
-1208 silly gunzTarPerm extractEntry node_modules/lodash/collection/where.js
-1209 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/where.js', 420, 438 ]
-1210 silly gunzTarPerm extractEntry node_modules/lodash/collection/indexBy.js
-1211 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/indexBy.js', 420, 438 ]
-1212 silly gunzTarPerm extractEntry node_modules/lodash/math/add.js
-1213 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/add.js', 420, 438 ]
-1214 silly gunzTarPerm extractEntry node_modules/lodash/math/ceil.js
-1215 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/ceil.js', 420, 438 ]
-1216 silly gunzTarPerm extractEntry node_modules/lodash/math/floor.js
-1217 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/floor.js', 420, 438 ]
-1218 silly gunzTarPerm extractEntry node_modules/lodash/math/max.js
-1219 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/max.js', 420, 438 ]
-1220 silly gunzTarPerm extractEntry node_modules/lodash/math/min.js
-1221 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/min.js', 420, 438 ]
-1222 silly gunzTarPerm extractEntry node_modules/lodash/math/round.js
-1223 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/round.js', 420, 438 ]
-1224 silly gunzTarPerm extractEntry node_modules/lodash/math/sum.js
-1225 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/sum.js', 420, 438 ]
-1226 silly gunzTarPerm extractEntry node_modules/lodash/number/inRange.js
-1227 silly gunzTarPerm modified mode [ 'node_modules/lodash/number/inRange.js', 420, 438 ]
-1228 silly gunzTarPerm extractEntry node_modules/lodash/number/random.js
-1229 silly gunzTarPerm modified mode [ 'node_modules/lodash/number/random.js', 420, 438 ]
-1230 silly gunzTarPerm extractEntry node_modules/lodash/function/after.js
-1231 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/after.js', 420, 438 ]
-1232 silly gunzTarPerm extractEntry node_modules/lodash/function/curryRight.js
-1233 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/curryRight.js', 420, 438 ]
-1234 silly gunzTarPerm extractEntry node_modules/lodash/function/debounce.js
-1235 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/debounce.js', 420, 438 ]
-1236 silly gunzTarPerm extractEntry node_modules/lodash/function/defer.js
-1237 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/defer.js', 420, 438 ]
-1238 silly gunzTarPerm extractEntry node_modules/lodash/function/delay.js
-1239 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/delay.js', 420, 438 ]
-1240 silly gunzTarPerm extractEntry node_modules/lodash/function/curry.js
-1241 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/curry.js', 420, 438 ]
-1242 silly gunzTarPerm extractEntry node_modules/lodash/function/flowRight.js
-1243 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/flowRight.js', 420, 438 ]
-1244 silly gunzTarPerm extractEntry node_modules/lodash/function/memoize.js
-1245 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/memoize.js', 420, 438 ]
-1246 silly gunzTarPerm extractEntry node_modules/lodash/function/modArgs.js
-1247 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/modArgs.js', 420, 438 ]
-1248 silly gunzTarPerm extractEntry node_modules/lodash/function/negate.js
-1249 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/negate.js', 420, 438 ]
-1250 silly gunzTarPerm extractEntry node_modules/lodash/function/once.js
-1251 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/once.js', 420, 438 ]
-1252 silly gunzTarPerm extractEntry node_modules/lodash/function/compose.js
-1253 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/compose.js', 420, 438 ]
-1254 silly gunzTarPerm extractEntry node_modules/lodash/function/partial.js
-1255 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/partial.js', 420, 438 ]
-1256 silly gunzTarPerm extractEntry node_modules/lodash/function/bindKey.js
-1257 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/bindKey.js', 420, 438 ]
-1258 silly gunzTarPerm extractEntry node_modules/lodash/function/partialRight.js
-1259 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/partialRight.js', 420, 438 ]
-1260 silly gunzTarPerm extractEntry node_modules/lodash/function/bindAll.js
-1261 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/bindAll.js', 420, 438 ]
-1262 silly gunzTarPerm extractEntry node_modules/lodash/function/rearg.js
-1263 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/rearg.js', 420, 438 ]
-1264 silly gunzTarPerm extractEntry node_modules/lodash/function/bind.js
-1265 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/bind.js', 420, 438 ]
-1266 silly gunzTarPerm extractEntry node_modules/lodash/function/restParam.js
-1267 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/restParam.js', 420, 438 ]
-1268 silly gunzTarPerm extractEntry node_modules/lodash/function/before.js
-1269 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/before.js', 420, 438 ]
-1270 silly gunzTarPerm extractEntry node_modules/lodash/function/spread.js
-1271 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/spread.js', 420, 438 ]
-1272 silly gunzTarPerm extractEntry node_modules/lodash/function/backflow.js
-1273 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/backflow.js', 420, 438 ]
-1274 silly gunzTarPerm extractEntry node_modules/lodash/function/throttle.js
-1275 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/throttle.js', 420, 438 ]
-1276 silly gunzTarPerm extractEntry node_modules/lodash/function/ary.js
-1277 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/ary.js', 420, 438 ]
-1278 silly gunzTarPerm extractEntry node_modules/lodash/function/wrap.js
-1279 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/wrap.js', 420, 438 ]
-1280 silly gunzTarPerm extractEntry node_modules/lodash/function/flow.js
-1281 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/flow.js', 420, 438 ]
-1282 silly gunzTarPerm extractEntry node_modules/lodash/object/assign.js
-1283 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/assign.js', 420, 438 ]
-1284 silly gunzTarPerm extractEntry node_modules/lodash/object/functions.js
-1285 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/functions.js', 420, 438 ]
-1286 silly gunzTarPerm extractEntry node_modules/lodash/object/get.js
-1287 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/get.js', 420, 438 ]
-1288 silly gunzTarPerm extractEntry node_modules/lodash/object/has.js
-1289 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/has.js', 420, 438 ]
-1290 silly gunzTarPerm extractEntry node_modules/lodash/object/forOwnRight.js
-1291 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forOwnRight.js', 420, 438 ]
-1292 silly gunzTarPerm extractEntry node_modules/lodash/object/keys.js
-1293 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/keys.js', 420, 438 ]
-1294 silly gunzTarPerm extractEntry node_modules/lodash/object/keysIn.js
-1295 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/keysIn.js', 420, 438 ]
-1296 silly gunzTarPerm extractEntry node_modules/lodash/object/mapKeys.js
-1297 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/mapKeys.js', 420, 438 ]
-1298 silly gunzTarPerm extractEntry node_modules/lodash/object/mapValues.js
-1299 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/mapValues.js', 420, 438 ]
-1300 silly gunzTarPerm extractEntry node_modules/lodash/object/merge.js
-1301 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/merge.js', 420, 438 ]
-1302 silly gunzTarPerm extractEntry node_modules/lodash/object/forOwn.js
-1303 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forOwn.js', 420, 438 ]
-1304 silly gunzTarPerm extractEntry node_modules/lodash/object/methods.js
-1305 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/methods.js', 420, 438 ]
-1306 silly gunzTarPerm extractEntry node_modules/lodash/object/forInRight.js
-1307 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forInRight.js', 420, 438 ]
-1308 silly gunzTarPerm extractEntry node_modules/lodash/object/omit.js
-1309 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/omit.js', 420, 438 ]
-1310 silly gunzTarPerm extractEntry node_modules/lodash/object/forIn.js
-1311 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forIn.js', 420, 438 ]
-1312 silly gunzTarPerm extractEntry node_modules/lodash/object/pairs.js
-1313 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/pairs.js', 420, 438 ]
-1314 silly gunzTarPerm extractEntry node_modules/lodash/object/findLastKey.js
-1315 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/findLastKey.js', 420, 438 ]
-1316 silly gunzTarPerm extractEntry node_modules/lodash/object/pick.js
-1317 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/pick.js', 420, 438 ]
-1318 silly gunzTarPerm extractEntry node_modules/lodash/object/findKey.js
-1319 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/findKey.js', 420, 438 ]
-1320 silly gunzTarPerm extractEntry node_modules/lodash/object/result.js
-1321 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/result.js', 420, 438 ]
-1322 silly gunzTarPerm extractEntry node_modules/lodash/object/extend.js
-1323 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/extend.js', 420, 438 ]
-1324 silly gunzTarPerm extractEntry node_modules/lodash/object/set.js
-1325 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/set.js', 420, 438 ]
-1326 silly gunzTarPerm extractEntry node_modules/lodash/object/defaultsDeep.js
-1327 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/defaultsDeep.js', 420, 438 ]
-1328 silly gunzTarPerm extractEntry node_modules/lodash/object/transform.js
-1329 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/transform.js', 420, 438 ]
-1330 silly gunzTarPerm extractEntry node_modules/lodash/object/defaults.js
-1331 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/defaults.js', 420, 438 ]
-1332 silly gunzTarPerm extractEntry node_modules/lodash/object/values.js
-1333 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/values.js', 420, 438 ]
-1334 silly gunzTarPerm extractEntry node_modules/lodash/object/create.js
-1335 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/create.js', 420, 438 ]
-1336 silly gunzTarPerm extractEntry node_modules/lodash/object/valuesIn.js
-1337 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/valuesIn.js', 420, 438 ]
-1338 silly gunzTarPerm extractEntry node_modules/lodash/object/invert.js
-1339 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/invert.js', 420, 438 ]
-1340 silly gunzTarPerm extractEntry node_modules/lodash/date/now.js
-1341 silly gunzTarPerm modified mode [ 'node_modules/lodash/date/now.js', 420, 438 ]
-1342 silly gunzTarPerm extractEntry node_modules/lodash/internal/LazyWrapper.js
-1343 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/LazyWrapper.js', 420, 438 ]
-1344 silly gunzTarPerm extractEntry node_modules/lodash/internal/compareAscending.js
-1345 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/compareAscending.js', 420, 438 ]
-1346 silly gunzTarPerm extractEntry node_modules/lodash/internal/compareMultiple.js
-1347 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/compareMultiple.js', 420, 438 ]
-1348 silly gunzTarPerm extractEntry node_modules/lodash/internal/composeArgs.js
-1349 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/composeArgs.js', 420, 438 ]
-1350 silly gunzTarPerm extractEntry node_modules/lodash/internal/charsRightIndex.js
-1351 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/charsRightIndex.js', 420, 438 ]
-1352 silly gunzTarPerm extractEntry node_modules/lodash/internal/createAggregator.js
-1353 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createAggregator.js', 420, 438 ]
-1354 silly gunzTarPerm extractEntry node_modules/lodash/internal/createAssigner.js
-1355 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createAssigner.js', 420, 438 ]
-1356 silly gunzTarPerm extractEntry node_modules/lodash/internal/createBaseEach.js
-1357 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createBaseEach.js', 420, 438 ]
-1358 silly gunzTarPerm extractEntry node_modules/lodash/internal/createBaseFor.js
-1359 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createBaseFor.js', 420, 438 ]
-1360 silly gunzTarPerm extractEntry node_modules/lodash/internal/createBindWrapper.js
-1361 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createBindWrapper.js', 420, 438 ]
-1362 silly gunzTarPerm extractEntry node_modules/lodash/internal/charsLeftIndex.js
-1363 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/charsLeftIndex.js', 420, 438 ]
-1364 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCache.js
-1365 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCache.js', 420, 438 ]
-1366 silly gunzTarPerm extractEntry node_modules/lodash/internal/cachePush.js
-1367 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/cachePush.js', 420, 438 ]
-1368 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCompounder.js
-1369 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCompounder.js', 420, 438 ]
-1370 silly gunzTarPerm extractEntry node_modules/lodash/internal/cacheIndexOf.js
-1371 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/cacheIndexOf.js', 420, 438 ]
-1372 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCtorWrapper.js
-1373 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCtorWrapper.js', 420, 438 ]
-1374 silly gunzTarPerm extractEntry node_modules/lodash/internal/bufferClone.js
-1375 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/bufferClone.js', 420, 438 ]
-1376 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCurry.js
-1377 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCurry.js', 420, 438 ]
-1378 silly gunzTarPerm extractEntry node_modules/lodash/internal/bindCallback.js
-1379 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/bindCallback.js', 420, 438 ]
-1380 silly gunzTarPerm extractEntry node_modules/lodash/internal/createDefaults.js
-1381 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createDefaults.js', 420, 438 ]
-1382 silly gunzTarPerm extractEntry node_modules/lodash/internal/binaryIndexBy.js
-1383 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/binaryIndexBy.js', 420, 438 ]
-1384 silly gunzTarPerm extractEntry node_modules/lodash/internal/createExtremum.js
-1385 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createExtremum.js', 420, 438 ]
-1386 silly gunzTarPerm extractEntry node_modules/lodash/internal/binaryIndex.js
-1387 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/binaryIndex.js', 420, 438 ]
-1388 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFind.js
-1389 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFind.js', 420, 438 ]
-1390 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseWrapperValue.js
-1391 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseWrapperValue.js', 420, 438 ]
-1392 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFindIndex.js
-1393 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFindIndex.js', 420, 438 ]
-1394 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseWhile.js
-1395 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseWhile.js', 420, 438 ]
-1396 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFindKey.js
-1397 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFindKey.js', 420, 438 ]
-1398 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseValues.js
-1399 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseValues.js', 420, 438 ]
-1400 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFlow.js
-1401 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFlow.js', 420, 438 ]
-1402 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseUniq.js
-1403 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseUniq.js', 420, 438 ]
-1404 silly gunzTarPerm extractEntry node_modules/lodash/internal/createForEach.js
-1405 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createForEach.js', 420, 438 ]
-1406 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseToString.js
-1407 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseToString.js', 420, 438 ]
-1408 silly gunzTarPerm extractEntry node_modules/lodash/internal/createForIn.js
-1409 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createForIn.js', 420, 438 ]
-1410 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSum.js
-1411 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSum.js', 420, 438 ]
-1412 silly gunzTarPerm extractEntry node_modules/lodash/internal/createForOwn.js
-1413 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createForOwn.js', 420, 438 ]
-1414 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSortByOrder.js
-1415 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSortByOrder.js', 420, 438 ]
-1416 silly gunzTarPerm extractEntry node_modules/lodash/internal/createHybridWrapper.js
-1417 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createHybridWrapper.js',
-1417 silly gunzTarPerm   420,
-1417 silly gunzTarPerm   438 ]
-1418 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSortBy.js
-1419 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSortBy.js', 420, 438 ]
-1420 silly gunzTarPerm extractEntry node_modules/lodash/internal/createObjectMapper.js
-1421 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createObjectMapper.js',
-1421 silly gunzTarPerm   420,
-1421 silly gunzTarPerm   438 ]
-1422 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSome.js
-1423 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSome.js', 420, 438 ]
-1424 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPadDir.js
-1425 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPadDir.js', 420, 438 ]
-1426 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSlice.js
-1427 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSlice.js', 420, 438 ]
-1428 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPadding.js
-1429 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPadding.js', 420, 438 ]
-1430 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSetData.js
-1431 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSetData.js', 420, 438 ]
-1432 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPartial.js
-1433 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPartial.js', 420, 438 ]
-1434 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseReduce.js
-1435 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseReduce.js', 420, 438 ]
-1436 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPartialWrapper.js
-1437 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPartialWrapper.js',
-1437 silly gunzTarPerm   420,
-1437 silly gunzTarPerm   438 ]
-1438 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseRandom.js
-1439 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseRandom.js', 420, 438 ]
-1440 silly gunzTarPerm extractEntry node_modules/lodash/internal/createReduce.js
-1441 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createReduce.js', 420, 438 ]
-1442 silly gunzTarPerm extractEntry node_modules/lodash/internal/basePullAt.js
-1443 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/basePullAt.js', 420, 438 ]
-1444 silly gunzTarPerm extractEntry node_modules/lodash/internal/createRound.js
-1445 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createRound.js', 420, 438 ]
-1446 silly gunzTarPerm extractEntry node_modules/lodash/internal/basePropertyDeep.js
-1447 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/basePropertyDeep.js', 420, 438 ]
-1448 silly gunzTarPerm extractEntry node_modules/lodash/internal/createSortedIndex.js
-1449 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createSortedIndex.js', 420, 438 ]
-1450 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseProperty.js
-1451 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseProperty.js', 420, 438 ]
-1452 silly gunzTarPerm extractEntry node_modules/lodash/internal/createWrapper.js
-1453 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createWrapper.js', 420, 438 ]
-1454 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMergeDeep.js
-1455 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMergeDeep.js', 420, 438 ]
-1456 silly gunzTarPerm extractEntry node_modules/lodash/internal/deburrLetter.js
-1457 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/deburrLetter.js', 420, 438 ]
-1458 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMerge.js
-1459 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMerge.js', 420, 438 ]
-1460 silly gunzTarPerm extractEntry node_modules/lodash/internal/equalArrays.js
-1461 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/equalArrays.js', 420, 438 ]
-1462 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMatchesProperty.js
-1463 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMatchesProperty.js',
-1463 silly gunzTarPerm   420,
-1463 silly gunzTarPerm   438 ]
-1464 silly gunzTarPerm extractEntry node_modules/lodash/internal/equalByTag.js
-1465 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/equalByTag.js', 420, 438 ]
-1466 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMatches.js
-1467 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMatches.js', 420, 438 ]
-1468 silly gunzTarPerm extractEntry node_modules/lodash/internal/equalObjects.js
-1469 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/equalObjects.js', 420, 438 ]
-1470 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMap.js
-1471 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMap.js', 420, 438 ]
-1472 silly gunzTarPerm extractEntry node_modules/lodash/internal/escapeHtmlChar.js
-1473 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/escapeHtmlChar.js', 420, 438 ]
-1474 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseLodash.js
-1475 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseLodash.js', 420, 438 ]
-1476 silly gunzTarPerm extractEntry node_modules/lodash/internal/escapeRegExpChar.js
-1477 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/escapeRegExpChar.js', 420, 438 ]
-1478 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsMatch.js
-1479 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsMatch.js', 420, 438 ]
-1480 silly gunzTarPerm extractEntry node_modules/lodash/internal/escapeStringChar.js
-1481 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/escapeStringChar.js', 420, 438 ]
-1482 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsFunction.js
-1483 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsFunction.js', 420, 438 ]
-1484 silly gunzTarPerm extractEntry node_modules/lodash/internal/getData.js
-1485 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getData.js', 420, 438 ]
-1486 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsEqualDeep.js
-1487 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsEqualDeep.js', 420, 438 ]
-1488 silly gunzTarPerm extractEntry node_modules/lodash/internal/getFuncName.js
-1489 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getFuncName.js', 420, 438 ]
-1490 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsEqual.js
-1491 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsEqual.js', 420, 438 ]
-1492 silly gunzTarPerm extractEntry node_modules/lodash/internal/getLength.js
-1493 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getLength.js', 420, 438 ]
-1494 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIndexOf.js
-1495 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIndexOf.js', 420, 438 ]
-1496 silly gunzTarPerm extractEntry node_modules/lodash/internal/getMatchData.js
-1497 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getMatchData.js', 420, 438 ]
-1498 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseGet.js
-1499 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseGet.js', 420, 438 ]
-1500 silly gunzTarPerm extractEntry node_modules/lodash/internal/getNative.js
-1501 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getNative.js', 420, 438 ]
-1502 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFunctions.js
-1503 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFunctions.js', 420, 438 ]
-1504 silly gunzTarPerm extractEntry node_modules/lodash/internal/getView.js
-1505 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getView.js', 420, 438 ]
-1506 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForRight.js
-1507 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForRight.js', 420, 438 ]
-1508 silly gunzTarPerm extractEntry node_modules/lodash/internal/indexOfNaN.js
-1509 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/indexOfNaN.js', 420, 438 ]
-1510 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForOwnRight.js
-1511 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForOwnRight.js', 420, 438 ]
-1512 silly gunzTarPerm extractEntry node_modules/lodash/internal/initCloneArray.js
-1513 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/initCloneArray.js', 420, 438 ]
-1514 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForOwn.js
-1515 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForOwn.js', 420, 438 ]
-1516 silly gunzTarPerm extractEntry node_modules/lodash/internal/initCloneByTag.js
-1517 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/initCloneByTag.js', 420, 438 ]
-1518 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForIn.js
-1519 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForIn.js', 420, 438 ]
-1520 silly gunzTarPerm extractEntry node_modules/lodash/internal/initCloneObject.js
-1521 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/initCloneObject.js', 420, 438 ]
-1522 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFor.js
-1523 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFor.js', 420, 438 ]
-1524 silly gunzTarPerm extractEntry node_modules/lodash/internal/invokePath.js
-1525 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/invokePath.js', 420, 438 ]
-1526 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFlatten.js
-1527 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFlatten.js', 420, 438 ]
-1528 silly gunzTarPerm extractEntry node_modules/lodash/internal/isArrayLike.js
-1529 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isArrayLike.js', 420, 438 ]
-1530 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFindIndex.js
-1531 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFindIndex.js', 420, 438 ]
-1532 silly gunzTarPerm extractEntry node_modules/lodash/internal/isIndex.js
-1533 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isIndex.js', 420, 438 ]
-1534 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFind.js
-1535 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFind.js', 420, 438 ]
-1536 silly gunzTarPerm extractEntry node_modules/lodash/internal/isIterateeCall.js
-1537 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isIterateeCall.js', 420, 438 ]
-1538 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFilter.js
-1539 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFilter.js', 420, 438 ]
-1540 silly gunzTarPerm extractEntry node_modules/lodash/internal/isKey.js
-1541 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isKey.js', 420, 438 ]
-1542 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFill.js
-1543 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFill.js', 420, 438 ]
-1544 silly gunzTarPerm extractEntry node_modules/lodash/internal/isLaziable.js
-1545 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isLaziable.js', 420, 438 ]
-1546 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseExtremum.js
-1547 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseExtremum.js', 420, 438 ]
-1548 silly gunzTarPerm extractEntry node_modules/lodash/internal/isLength.js
-1549 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isLength.js', 420, 438 ]
-1550 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseEvery.js
-1551 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseEvery.js', 420, 438 ]
-1552 silly gunzTarPerm extractEntry node_modules/lodash/internal/isObjectLike.js
-1553 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isObjectLike.js', 420, 438 ]
-1554 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseEachRight.js
-1555 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseEachRight.js', 420, 438 ]
-1556 silly gunzTarPerm extractEntry node_modules/lodash/internal/isSpace.js
-1557 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isSpace.js', 420, 438 ]
-1558 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseEach.js
-1559 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseEach.js', 420, 438 ]
-1560 silly gunzTarPerm extractEntry node_modules/lodash/internal/isStrictComparable.js
-1561 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isStrictComparable.js',
-1561 silly gunzTarPerm   420,
-1561 silly gunzTarPerm   438 ]
-1562 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseDifference.js
-1563 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseDifference.js', 420, 438 ]
-1564 silly gunzTarPerm extractEntry node_modules/lodash/internal/lazyClone.js
-1565 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/lazyClone.js', 420, 438 ]
-1566 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseDelay.js
-1567 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseDelay.js', 420, 438 ]
-1568 silly gunzTarPerm extractEntry node_modules/lodash/internal/lazyReverse.js
-1569 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/lazyReverse.js', 420, 438 ]
-1570 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCreate.js
-1571 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCreate.js', 420, 438 ]
-1572 silly gunzTarPerm extractEntry node_modules/lodash/internal/lazyValue.js
-1573 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/lazyValue.js', 420, 438 ]
-1574 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCopy.js
-1575 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCopy.js', 420, 438 ]
-1576 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapDelete.js
-1577 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapDelete.js', 420, 438 ]
-1578 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCompareAscending.js
-1579 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCompareAscending.js',
-1579 silly gunzTarPerm   420,
-1579 silly gunzTarPerm   438 ]
-1580 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapGet.js
-1581 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapGet.js', 420, 438 ]
-1582 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseClone.js
-1583 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseClone.js', 420, 438 ]
-1584 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapHas.js
-1585 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapHas.js', 420, 438 ]
-1586 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCallback.js
-1587 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCallback.js', 420, 438 ]
-1588 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapSet.js
-1589 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapSet.js', 420, 438 ]
-1590 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseAt.js
-1591 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseAt.js', 420, 438 ]
-1592 silly gunzTarPerm extractEntry node_modules/lodash/internal/mergeData.js
-1593 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mergeData.js', 420, 438 ]
-1594 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseAssign.js
-1595 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseAssign.js', 420, 438 ]
-1596 silly gunzTarPerm extractEntry node_modules/lodash/internal/mergeDefaults.js
-1597 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mergeDefaults.js', 420, 438 ]
-1598 silly gunzTarPerm extractEntry node_modules/lodash/internal/assignWith.js
-1599 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/assignWith.js', 420, 438 ]
-1600 silly gunzTarPerm extractEntry node_modules/lodash/internal/metaMap.js
-1601 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/metaMap.js', 420, 438 ]
-1602 silly gunzTarPerm extractEntry node_modules/lodash/internal/assignOwnDefaults.js
-1603 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/assignOwnDefaults.js', 420, 438 ]
-1604 silly gunzTarPerm extractEntry node_modules/lodash/internal/pickByArray.js
-1605 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/pickByArray.js', 420, 438 ]
-1606 silly gunzTarPerm extractEntry node_modules/lodash/internal/assignDefaults.js
-1607 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/assignDefaults.js', 420, 438 ]
-1608 silly gunzTarPerm extractEntry node_modules/lodash/internal/pickByCallback.js
-1609 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/pickByCallback.js', 420, 438 ]
-1610 silly gunzTarPerm extractEntry node_modules/lodash/internal/arraySum.js
-1611 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arraySum.js', 420, 438 ]
-1612 silly gunzTarPerm extractEntry node_modules/lodash/internal/reEscape.js
-1613 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reEscape.js', 420, 438 ]
-1614 silly gunzTarPerm extractEntry node_modules/lodash/internal/arraySome.js
-1615 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arraySome.js', 420, 438 ]
-1616 silly gunzTarPerm extractEntry node_modules/lodash/internal/reEvaluate.js
-1617 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reEvaluate.js', 420, 438 ]
-1618 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayReduceRight.js
-1619 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayReduceRight.js', 420, 438 ]
-1620 silly gunzTarPerm extractEntry node_modules/lodash/internal/reInterpolate.js
-1621 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reInterpolate.js', 420, 438 ]
-1622 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayReduce.js
-1623 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayReduce.js', 420, 438 ]
-1624 silly gunzTarPerm extractEntry node_modules/lodash/internal/realNames.js
-1625 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/realNames.js', 420, 438 ]
-1626 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayPush.js
-1627 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayPush.js', 420, 438 ]
-1628 silly gunzTarPerm extractEntry node_modules/lodash/internal/reorder.js
-1629 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reorder.js', 420, 438 ]
-1630 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayMap.js
-1631 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayMap.js', 420, 438 ]
-1632 silly gunzTarPerm extractEntry node_modules/lodash/internal/replaceHolders.js
-1633 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/replaceHolders.js', 420, 438 ]
-1634 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayFilter.js
-1635 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayFilter.js', 420, 438 ]
-1636 silly gunzTarPerm extractEntry node_modules/lodash/internal/setData.js
-1637 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/setData.js', 420, 438 ]
-1638 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayExtremum.js
-1639 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayExtremum.js', 420, 438 ]
-1640 silly gunzTarPerm extractEntry node_modules/lodash/internal/shimKeys.js
-1641 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/shimKeys.js', 420, 438 ]
-1642 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayEvery.js
-1643 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayEvery.js', 420, 438 ]
-1644 silly gunzTarPerm extractEntry node_modules/lodash/internal/sortedUniq.js
-1645 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/sortedUniq.js', 420, 438 ]
-1646 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayEachRight.js
-1647 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayEachRight.js', 420, 438 ]
-1648 silly gunzTarPerm extractEntry node_modules/lodash/internal/toIterable.js
-1649 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/toIterable.js', 420, 438 ]
-1650 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayEach.js
-1651 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayEach.js', 420, 438 ]
-1652 silly gunzTarPerm extractEntry node_modules/lodash/internal/toObject.js
-1653 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/toObject.js', 420, 438 ]
-1654 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayCopy.js
-1655 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayCopy.js', 420, 438 ]
-1656 silly gunzTarPerm extractEntry node_modules/lodash/internal/toPath.js
-1657 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/toPath.js', 420, 438 ]
-1658 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayConcat.js
-1659 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayConcat.js', 420, 438 ]
-1660 silly gunzTarPerm extractEntry node_modules/lodash/internal/trimmedLeftIndex.js
-1661 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/trimmedLeftIndex.js', 420, 438 ]
-1662 silly gunzTarPerm extractEntry node_modules/lodash/internal/SetCache.js
-1663 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/SetCache.js', 420, 438 ]
-1664 silly gunzTarPerm extractEntry node_modules/lodash/internal/trimmedRightIndex.js
-1665 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/trimmedRightIndex.js', 420, 438 ]
-1666 silly gunzTarPerm extractEntry node_modules/lodash/internal/MapCache.js
-1667 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/MapCache.js', 420, 438 ]
-1668 silly gunzTarPerm extractEntry node_modules/lodash/internal/unescapeHtmlChar.js
-1669 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/unescapeHtmlChar.js', 420, 438 ]
-1670 silly gunzTarPerm extractEntry node_modules/lodash/internal/LodashWrapper.js
-1671 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/LodashWrapper.js', 420, 438 ]
-1672 silly gunzTarPerm extractEntry node_modules/lodash/internal/wrapperClone.js
-1673 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/wrapperClone.js', 420, 438 ]
-1674 silly gunzTarPerm extractEntry node_modules/lodash/internal/composeArgsRight.js
-1675 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/composeArgsRight.js', 420, 438 ]
-1676 silly gunzTarPerm extractEntry node_modules/lodash/string/camelCase.js
-1677 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/camelCase.js', 420, 438 ]
-1678 silly gunzTarPerm extractEntry node_modules/lodash/string/padLeft.js
-1679 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/padLeft.js', 420, 438 ]
-1680 silly gunzTarPerm extractEntry node_modules/lodash/string/padRight.js
-1681 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/padRight.js', 420, 438 ]
-1682 silly gunzTarPerm extractEntry node_modules/lodash/string/parseInt.js
-1683 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/parseInt.js', 420, 438 ]
-1684 silly gunzTarPerm extractEntry node_modules/lodash/string/pad.js
-1685 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/pad.js', 420, 438 ]
-1686 silly gunzTarPerm extractEntry node_modules/lodash/string/snakeCase.js
-1687 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/snakeCase.js', 420, 438 ]
-1688 silly gunzTarPerm extractEntry node_modules/lodash/string/startCase.js
-1689 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/startCase.js', 420, 438 ]
-1690 silly gunzTarPerm extractEntry node_modules/lodash/string/startsWith.js
-1691 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/startsWith.js', 420, 438 ]
-1692 silly gunzTarPerm extractEntry node_modules/lodash/string/template.js
-1693 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/template.js', 420, 438 ]
-1694 silly gunzTarPerm extractEntry node_modules/lodash/string/templateSettings.js
-1695 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/templateSettings.js', 420, 438 ]
-1696 silly gunzTarPerm extractEntry node_modules/lodash/string/kebabCase.js
-1697 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/kebabCase.js', 420, 438 ]
-1698 silly gunzTarPerm extractEntry node_modules/lodash/string/trim.js
-1699 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trim.js', 420, 438 ]
-1700 silly gunzTarPerm extractEntry node_modules/lodash/string/escapeRegExp.js
-1701 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/escapeRegExp.js', 420, 438 ]
-1702 silly gunzTarPerm extractEntry node_modules/lodash/string/trimLeft.js
-1703 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trimLeft.js', 420, 438 ]
-1704 silly gunzTarPerm extractEntry node_modules/lodash/string/escape.js
-1705 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/escape.js', 420, 438 ]
-1706 silly gunzTarPerm extractEntry node_modules/lodash/string/trimRight.js
-1707 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trimRight.js', 420, 438 ]
-1708 silly gunzTarPerm extractEntry node_modules/lodash/string/endsWith.js
-1709 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/endsWith.js', 420, 438 ]
-1710 silly gunzTarPerm extractEntry node_modules/lodash/string/trunc.js
-1711 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trunc.js', 420, 438 ]
-1712 silly gunzTarPerm extractEntry node_modules/lodash/string/deburr.js
-1713 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/deburr.js', 420, 438 ]
-1714 silly gunzTarPerm extractEntry node_modules/lodash/string/unescape.js
-1715 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/unescape.js', 420, 438 ]
-1716 silly gunzTarPerm extractEntry node_modules/lodash/string/capitalize.js
-1717 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/capitalize.js', 420, 438 ]
-1718 silly gunzTarPerm extractEntry node_modules/lodash/string/words.js
-1719 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/words.js', 420, 438 ]
-1720 silly gunzTarPerm extractEntry node_modules/lodash/string/repeat.js
-1721 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/repeat.js', 420, 438 ]
-1722 silly gunzTarPerm extractEntry node_modules/lodash/chain/chain.js
-1723 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/chain.js', 420, 438 ]
-1724 silly gunzTarPerm extractEntry node_modules/lodash/chain/run.js
-1725 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/run.js', 420, 438 ]
-1726 silly gunzTarPerm extractEntry node_modules/lodash/chain/tap.js
-1727 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/tap.js', 420, 438 ]
-1728 silly gunzTarPerm extractEntry node_modules/lodash/chain/thru.js
-1729 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/thru.js', 420, 438 ]
-1730 silly gunzTarPerm extractEntry node_modules/lodash/chain/toJSON.js
-1731 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/toJSON.js', 420, 438 ]
-1732 silly gunzTarPerm extractEntry node_modules/lodash/chain/reverse.js
-1733 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/reverse.js', 420, 438 ]
-1734 silly gunzTarPerm extractEntry node_modules/lodash/chain/value.js
-1735 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/value.js', 420, 438 ]
-1736 silly gunzTarPerm extractEntry node_modules/lodash/chain/valueOf.js
-1737 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/valueOf.js', 420, 438 ]
-1738 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperChain.js
-1739 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperChain.js', 420, 438 ]
-1740 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperCommit.js
-1741 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperCommit.js', 420, 438 ]
-1742 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperConcat.js
-1743 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperConcat.js', 420, 438 ]
-1744 silly gunzTarPerm extractEntry node_modules/lodash/chain/plant.js
-1745 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/plant.js', 420, 438 ]
-1746 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperPlant.js
-1747 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperPlant.js', 420, 438 ]
-1748 silly gunzTarPerm extractEntry node_modules/lodash/chain/lodash.js
-1749 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/lodash.js', 420, 438 ]
-1750 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperReverse.js
-1751 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperReverse.js', 420, 438 ]
-1752 silly gunzTarPerm extractEntry node_modules/lodash/chain/concat.js
-1753 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/concat.js', 420, 438 ]
-1754 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperToString.js
-1755 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperToString.js', 420, 438 ]
-1756 silly gunzTarPerm extractEntry node_modules/lodash/chain/commit.js
-1757 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/commit.js', 420, 438 ]
-1758 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperValue.js
-1759 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperValue.js', 420, 438 ]
-1760 silly gunzTarPerm extractEntry node_modules/lodash/chain/toString.js
-1761 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/toString.js', 420, 438 ]
-1762 silly gunzTarPerm extractEntry node_modules/lodash/array/chunk.js
-1763 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/chunk.js', 420, 438 ]
-1764 silly gunzTarPerm extractEntry node_modules/lodash/array/last.js
-1765 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/last.js', 420, 438 ]
-1766 silly gunzTarPerm extractEntry node_modules/lodash/array/lastIndexOf.js
-1767 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/lastIndexOf.js', 420, 438 ]
-1768 silly gunzTarPerm extractEntry node_modules/lodash/array/object.js
-1769 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/object.js', 420, 438 ]
-1770 silly gunzTarPerm extractEntry node_modules/lodash/array/pull.js
-1771 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/pull.js', 420, 438 ]
-1772 silly gunzTarPerm extractEntry node_modules/lodash/array/intersection.js
-1773 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/intersection.js', 420, 438 ]
-1774 silly gunzTarPerm extractEntry node_modules/lodash/array/remove.js
-1775 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/remove.js', 420, 438 ]
-1776 silly gunzTarPerm extractEntry node_modules/lodash/array/rest.js
-1777 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/rest.js', 420, 438 ]
-1778 silly gunzTarPerm extractEntry node_modules/lodash/array/slice.js
-1779 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/slice.js', 420, 438 ]
-1780 silly gunzTarPerm extractEntry node_modules/lodash/array/sortedIndex.js
-1781 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/sortedIndex.js', 420, 438 ]
-1782 silly gunzTarPerm extractEntry node_modules/lodash/array/sortedLastIndex.js
-1783 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/sortedLastIndex.js', 420, 438 ]
-1784 silly gunzTarPerm extractEntry node_modules/lodash/array/initial.js
-1785 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/initial.js', 420, 438 ]
-1786 silly gunzTarPerm extractEntry node_modules/lodash/array/tail.js
-1787 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/tail.js', 420, 438 ]
-1788 silly gunzTarPerm extractEntry node_modules/lodash/array/indexOf.js
-1789 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/indexOf.js', 420, 438 ]
-1790 silly gunzTarPerm extractEntry node_modules/lodash/array/take.js
-1791 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/take.js', 420, 438 ]
-1792 silly gunzTarPerm extractEntry node_modules/lodash/array/head.js
-1793 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/head.js', 420, 438 ]
-1794 silly gunzTarPerm extractEntry node_modules/lodash/array/takeRight.js
-1795 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/takeRight.js', 420, 438 ]
-1796 silly gunzTarPerm extractEntry node_modules/lodash/array/flattenDeep.js
-1797 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/flattenDeep.js', 420, 438 ]
-1798 silly gunzTarPerm extractEntry node_modules/lodash/array/takeRightWhile.js
-1799 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/takeRightWhile.js', 420, 438 ]
-1800 silly gunzTarPerm extractEntry node_modules/lodash/array/flatten.js
-1801 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/flatten.js', 420, 438 ]
-1802 silly gunzTarPerm extractEntry node_modules/lodash/array/takeWhile.js
-1803 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/takeWhile.js', 420, 438 ]
-1804 silly gunzTarPerm extractEntry node_modules/lodash/array/first.js
-1805 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/first.js', 420, 438 ]
-1806 silly gunzTarPerm extractEntry node_modules/lodash/array/union.js
-1807 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/union.js', 420, 438 ]
-1808 silly gunzTarPerm extractEntry node_modules/lodash/array/findLastIndex.js
-1809 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/findLastIndex.js', 420, 438 ]
-1810 silly gunzTarPerm extractEntry node_modules/lodash/array/uniq.js
-1811 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/uniq.js', 420, 438 ]
-1812 silly gunzTarPerm extractEntry node_modules/lodash/array/findIndex.js
-1813 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/findIndex.js', 420, 438 ]
-1814 silly gunzTarPerm extractEntry node_modules/lodash/array/unique.js
-1815 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/unique.js', 420, 438 ]
-1816 silly gunzTarPerm extractEntry node_modules/lodash/array/fill.js
-1817 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/fill.js', 420, 438 ]
-1818 silly gunzTarPerm extractEntry node_modules/lodash/array/unzip.js
-1819 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/unzip.js', 420, 438 ]
-1820 silly gunzTarPerm extractEntry node_modules/lodash/array/dropWhile.js
-1821 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/dropWhile.js', 420, 438 ]
-1822 silly gunzTarPerm extractEntry node_modules/lodash/array/unzipWith.js
-1823 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/unzipWith.js', 420, 438 ]
-1824 silly gunzTarPerm extractEntry node_modules/lodash/array/dropRightWhile.js
-1825 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/dropRightWhile.js', 420, 438 ]
-1826 silly gunzTarPerm extractEntry node_modules/lodash/array/without.js
-1827 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/without.js', 420, 438 ]
-1828 silly gunzTarPerm extractEntry node_modules/lodash/array/dropRight.js
-1829 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/dropRight.js', 420, 438 ]
-1830 silly gunzTarPerm extractEntry node_modules/lodash/array/xor.js
-1831 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/xor.js', 420, 438 ]
-1832 silly gunzTarPerm extractEntry node_modules/lodash/array/drop.js
-1833 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/drop.js', 420, 438 ]
-1834 silly gunzTarPerm extractEntry node_modules/lodash/array/zip.js
-1835 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/zip.js', 420, 438 ]
-1836 silly gunzTarPerm extractEntry node_modules/lodash/array/difference.js
-1837 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/difference.js', 420, 438 ]
-1838 silly gunzTarPerm extractEntry node_modules/lodash/array/zipObject.js
-1839 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/zipObject.js', 420, 438 ]
-1840 silly gunzTarPerm extractEntry node_modules/lodash/array/compact.js
-1841 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/compact.js', 420, 438 ]
-1842 silly gunzTarPerm extractEntry node_modules/lodash/array/zipWith.js
-1843 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/zipWith.js', 420, 438 ]
-1844 silly gunzTarPerm extractEntry node_modules/lodash/array/pullAt.js
-1845 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/pullAt.js', 420, 438 ]
-1846 silly gunzTarPerm extractEntry node_modules/lodash/utility/attempt.js
-1847 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/attempt.js', 420, 438 ]
-1848 silly gunzTarPerm extractEntry node_modules/lodash/utility/iteratee.js
-1849 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/iteratee.js', 420, 438 ]
-1850 silly gunzTarPerm extractEntry node_modules/lodash/utility/matches.js
-1851 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/matches.js', 420, 438 ]
-1852 silly gunzTarPerm extractEntry node_modules/lodash/utility/matchesProperty.js
-1853 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/matchesProperty.js', 420, 438 ]
-1854 silly gunzTarPerm extractEntry node_modules/lodash/utility/method.js
-1855 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/method.js', 420, 438 ]
-1856 silly gunzTarPerm extractEntry node_modules/lodash/utility/identity.js
-1857 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/identity.js', 420, 438 ]
-1858 silly gunzTarPerm extractEntry node_modules/lodash/utility/mixin.js
-1859 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/mixin.js', 420, 438 ]
-1860 silly gunzTarPerm extractEntry node_modules/lodash/utility/noop.js
-1861 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/noop.js', 420, 438 ]
-1862 silly gunzTarPerm extractEntry node_modules/lodash/utility/property.js
-1863 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/property.js', 420, 438 ]
-1864 silly gunzTarPerm extractEntry node_modules/lodash/utility/propertyOf.js
-1865 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/propertyOf.js', 420, 438 ]
-1866 silly gunzTarPerm extractEntry node_modules/lodash/utility/range.js
-1867 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/range.js', 420, 438 ]
-1868 silly gunzTarPerm extractEntry node_modules/lodash/utility/constant.js
-1869 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/constant.js', 420, 438 ]
-1870 silly gunzTarPerm extractEntry node_modules/lodash/utility/times.js
-1871 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/times.js', 420, 438 ]
-1872 silly gunzTarPerm extractEntry node_modules/lodash/utility/callback.js
-1873 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/callback.js', 420, 438 ]
-1874 silly gunzTarPerm extractEntry node_modules/lodash/utility/uniqueId.js
-1875 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/uniqueId.js', 420, 438 ]
-1876 silly gunzTarPerm extractEntry node_modules/lodash/utility/methodOf.js
-1877 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/methodOf.js', 420, 438 ]
-1878 silly gunzTarPerm extractEntry node_modules/lodash/lang/clone.js
-1879 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/clone.js', 420, 438 ]
-1880 silly gunzTarPerm extractEntry node_modules/lodash/lang/isEqual.js
-1881 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isEqual.js', 420, 438 ]
-1882 silly gunzTarPerm extractEntry node_modules/lodash/lang/isError.js
-1883 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isError.js', 420, 438 ]
-1884 silly gunzTarPerm extractEntry node_modules/lodash/lang/isFinite.js
-1885 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isFinite.js', 420, 438 ]
-1886 silly gunzTarPerm extractEntry node_modules/lodash/lang/isFunction.js
-1887 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isFunction.js', 420, 438 ]
-1888 silly gunzTarPerm extractEntry node_modules/lodash/lang/isEmpty.js
-1889 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isEmpty.js', 420, 438 ]
-1890 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNaN.js
-1891 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNaN.js', 420, 438 ]
-1892 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNative.js
-1893 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNative.js', 420, 438 ]
-1894 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNull.js
-1895 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNull.js', 420, 438 ]
-1896 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNumber.js
-1897 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNumber.js', 420, 438 ]
-1898 silly gunzTarPerm extractEntry node_modules/lodash/lang/isObject.js
-1899 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isObject.js', 420, 438 ]
-1900 silly gunzTarPerm extractEntry node_modules/lodash/lang/isElement.js
-1901 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isElement.js', 420, 438 ]
-1902 silly gunzTarPerm extractEntry node_modules/lodash/lang/isPlainObject.js
-1903 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isPlainObject.js', 420, 438 ]
-1904 silly gunzTarPerm extractEntry node_modules/lodash/lang/isDate.js
-1905 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isDate.js', 420, 438 ]
-1906 silly gunzTarPerm extractEntry node_modules/lodash/lang/isRegExp.js
-1907 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isRegExp.js', 420, 438 ]
-1908 silly gunzTarPerm extractEntry node_modules/lodash/lang/isBoolean.js
-1909 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isBoolean.js', 420, 438 ]
-1910 silly gunzTarPerm extractEntry node_modules/lodash/lang/isString.js
-1911 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isString.js', 420, 438 ]
-1912 silly gunzTarPerm extractEntry node_modules/lodash/lang/isArray.js
-1913 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isArray.js', 420, 438 ]
-1914 silly gunzTarPerm extractEntry node_modules/lodash/lang/isTypedArray.js
-1915 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isTypedArray.js', 420, 438 ]
-1916 silly gunzTarPerm extractEntry node_modules/lodash/lang/isArguments.js
-1917 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isArguments.js', 420, 438 ]
-1918 silly gunzTarPerm extractEntry node_modules/lodash/lang/isUndefined.js
-1919 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isUndefined.js', 420, 438 ]
-1920 silly gunzTarPerm extractEntry node_modules/lodash/lang/gte.js
-1921 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/gte.js', 420, 438 ]
-1922 silly gunzTarPerm extractEntry node_modules/lodash/lang/lt.js
-1923 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/lt.js', 420, 438 ]
-1924 silly gunzTarPerm extractEntry node_modules/lodash/lang/gt.js
-1925 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/gt.js', 420, 438 ]
-1926 silly gunzTarPerm extractEntry node_modules/lodash/lang/lte.js
-1927 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/lte.js', 420, 438 ]
-1928 silly gunzTarPerm extractEntry node_modules/lodash/lang/eq.js
-1929 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/eq.js', 420, 438 ]
-1930 silly gunzTarPerm extractEntry node_modules/lodash/lang/toArray.js
-1931 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/toArray.js', 420, 438 ]
-1932 silly gunzTarPerm extractEntry node_modules/lodash/lang/cloneDeep.js
-1933 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/cloneDeep.js', 420, 438 ]
-1934 silly gunzTarPerm extractEntry node_modules/lodash/lang/toPlainObject.js
-1935 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/toPlainObject.js', 420, 438 ]
-1936 silly gunzTarPerm extractEntry node_modules/lodash/lang/isMatch.js
-1937 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isMatch.js', 420, 438 ]
-1938 silly gunzTarPerm extractEntry node_modules/minimatch/package.json
-1939 silly gunzTarPerm modified mode [ 'node_modules/minimatch/package.json', 420, 438 ]
-1940 silly gunzTarPerm extractEntry node_modules/minimatch/README.md
-1941 silly gunzTarPerm modified mode [ 'node_modules/minimatch/README.md', 420, 438 ]
-1942 silly gunzTarPerm extractEntry node_modules/minimatch/LICENSE
-1943 silly gunzTarPerm modified mode [ 'node_modules/minimatch/LICENSE', 420, 438 ]
-1944 silly gunzTarPerm extractEntry node_modules/minimatch/minimatch.js
-1945 silly gunzTarPerm modified mode [ 'node_modules/minimatch/minimatch.js', 420, 438 ]
-1946 silly gunzTarPerm extractEntry node_modules/node-uuid/package.json
-1947 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/package.json', 420, 438 ]
-1948 silly gunzTarPerm extractEntry node_modules/node-uuid/.npmignore
-1949 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/.npmignore', 420, 438 ]
-1950 silly gunzTarPerm extractEntry node_modules/node-uuid/README.md
-1951 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/README.md', 420, 438 ]
-1952 silly gunzTarPerm extractEntry node_modules/node-uuid/uuid.js
-1953 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/uuid.js', 420, 438 ]
-1954 silly gunzTarPerm extractEntry node_modules/node-uuid/LICENSE.md
-1955 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/LICENSE.md', 420, 438 ]
-1956 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/README.md
-1957 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/README.md', 420, 438 ]
-1958 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/benchmark.js
-1959 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/benchmark.js', 420, 438 ]
-1960 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/bench.gnu
-1961 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/bench.gnu', 420, 438 ]
-1962 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/bench.sh
-1963 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/bench.sh', 493, 511 ]
-1964 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/benchmark-native.c
-1965 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/benchmark-native.c',
-1965 silly gunzTarPerm   420,
-1965 silly gunzTarPerm   438 ]
-1966 silly gunzTarPerm extractEntry node_modules/node-uuid/bin/uuid
-1967 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/bin/uuid', 493, 511 ]
-1968 silly gunzTarPerm extractEntry node_modules/node-uuid/bower.json
-1969 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/bower.json', 420, 438 ]
-1970 silly gunzTarPerm extractEntry node_modules/node-uuid/component.json
-1971 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/component.json', 420, 438 ]
-1972 silly gunzTarPerm extractEntry node_modules/node-uuid/test/compare_v1.js
-1973 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/test/compare_v1.js', 420, 438 ]
-1974 silly gunzTarPerm extractEntry node_modules/node-uuid/test/test.js
-1975 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/test/test.js', 420, 438 ]
-1976 silly gunzTarPerm extractEntry node_modules/node-uuid/test/test.html
-1977 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/test/test.html', 420, 438 ]
-1978 silly gunzTarPerm extractEntry node_modules/nopt/package.json
-1979 silly gunzTarPerm modified mode [ 'node_modules/nopt/package.json', 420, 438 ]
-1980 silly gunzTarPerm extractEntry node_modules/nopt/.npmignore
-1981 silly gunzTarPerm modified mode [ 'node_modules/nopt/.npmignore', 420, 438 ]
-1982 silly gunzTarPerm extractEntry node_modules/nopt/README.md
-1983 silly gunzTarPerm modified mode [ 'node_modules/nopt/README.md', 420, 438 ]
-1984 silly gunzTarPerm extractEntry node_modules/nopt/LICENSE
-1985 silly gunzTarPerm modified mode [ 'node_modules/nopt/LICENSE', 420, 438 ]
-1986 silly gunzTarPerm extractEntry node_modules/nopt/.travis.yml
-1987 silly gunzTarPerm modified mode [ 'node_modules/nopt/.travis.yml', 420, 438 ]
-1988 silly gunzTarPerm extractEntry node_modules/nopt/bin/nopt.js
-1989 silly gunzTarPerm modified mode [ 'node_modules/nopt/bin/nopt.js', 493, 511 ]
-1990 silly gunzTarPerm extractEntry node_modules/nopt/examples/my-program.js
-1991 silly gunzTarPerm modified mode [ 'node_modules/nopt/examples/my-program.js', 493, 511 ]
-1992 silly gunzTarPerm extractEntry node_modules/nopt/lib/nopt.js
-1993 silly gunzTarPerm modified mode [ 'node_modules/nopt/lib/nopt.js', 420, 438 ]
-1994 silly gunzTarPerm extractEntry node_modules/nopt/test/basic.js
-1995 silly gunzTarPerm modified mode [ 'node_modules/nopt/test/basic.js', 420, 438 ]
-1996 silly gunzTarPerm extractEntry node_modules/once/package.json
-1997 silly gunzTarPerm modified mode [ 'node_modules/once/package.json', 420, 438 ]
-1998 silly gunzTarPerm extractEntry node_modules/once/README.md
-1999 silly gunzTarPerm modified mode [ 'node_modules/once/README.md', 420, 438 ]
-2000 silly gunzTarPerm extractEntry node_modules/once/LICENSE
-2001 silly gunzTarPerm modified mode [ 'node_modules/once/LICENSE', 420, 438 ]
-2002 silly gunzTarPerm extractEntry node_modules/once/once.js
-2003 silly gunzTarPerm modified mode [ 'node_modules/once/once.js', 420, 438 ]
-2004 silly gunzTarPerm extractEntry node_modules/ansi/package.json
-2005 silly gunzTarPerm modified mode [ 'node_modules/ansi/package.json', 420, 438 ]
-2006 silly gunzTarPerm extractEntry node_modules/ansi/.npmignore
-2007 silly gunzTarPerm modified mode [ 'node_modules/ansi/.npmignore', 420, 438 ]
-2008 silly gunzTarPerm extractEntry node_modules/ansi/README.md
-2009 silly gunzTarPerm modified mode [ 'node_modules/ansi/README.md', 420, 438 ]
-2010 silly gunzTarPerm extractEntry node_modules/ansi/LICENSE
-2011 silly gunzTarPerm modified mode [ 'node_modules/ansi/LICENSE', 420, 438 ]
-2012 silly gunzTarPerm extractEntry node_modules/ansi/.jshintrc
-2013 silly gunzTarPerm modified mode [ 'node_modules/ansi/.jshintrc', 420, 438 ]
-2014 silly gunzTarPerm extractEntry node_modules/ansi/History.md
-2015 silly gunzTarPerm modified mode [ 'node_modules/ansi/History.md', 420, 438 ]
-2016 silly gunzTarPerm extractEntry node_modules/ansi/examples/cursorPosition.js
-2017 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/cursorPosition.js', 493, 511 ]
-2018 silly gunzTarPerm extractEntry node_modules/ansi/examples/beep/index.js
-2019 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/beep/index.js', 493, 511 ]
-2020 silly gunzTarPerm extractEntry node_modules/ansi/examples/clear/index.js
-2021 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/clear/index.js', 493, 511 ]
-2022 silly gunzTarPerm extractEntry node_modules/ansi/examples/progress/index.js
-2023 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/progress/index.js', 420, 438 ]
-2024 silly gunzTarPerm extractEntry node_modules/ansi/lib/ansi.js
-2025 silly gunzTarPerm modified mode [ 'node_modules/ansi/lib/ansi.js', 420, 438 ]
-2026 silly gunzTarPerm extractEntry node_modules/ansi/lib/newlines.js
-2027 silly gunzTarPerm modified mode [ 'node_modules/ansi/lib/newlines.js', 420, 438 ]
-2028 silly gunzTarPerm extractEntry node_modules/os-tmpdir/package.json
-2029 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/package.json', 420, 438 ]
-2030 silly gunzTarPerm extractEntry node_modules/os-tmpdir/index.js
-2031 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/index.js', 420, 438 ]
-2032 silly gunzTarPerm extractEntry node_modules/os-tmpdir/license
-2033 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/license', 420, 438 ]
-2034 silly gunzTarPerm extractEntry node_modules/os-tmpdir/readme.md
-2035 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/readme.md', 420, 438 ]
-2036 silly gunzTarPerm extractEntry node_modules/osenv/package.json
-2037 silly gunzTarPerm modified mode [ 'node_modules/osenv/package.json', 420, 438 ]
-2038 silly gunzTarPerm extractEntry node_modules/osenv/.npmignore
-2039 silly gunzTarPerm modified mode [ 'node_modules/osenv/.npmignore', 420, 438 ]
-2040 silly gunzTarPerm extractEntry node_modules/osenv/README.md
-2041 silly gunzTarPerm modified mode [ 'node_modules/osenv/README.md', 420, 438 ]
-2042 silly gunzTarPerm extractEntry node_modules/osenv/LICENSE
-2043 silly gunzTarPerm modified mode [ 'node_modules/osenv/LICENSE', 420, 438 ]
-2044 silly gunzTarPerm extractEntry node_modules/osenv/osenv.js
-2045 silly gunzTarPerm modified mode [ 'node_modules/osenv/osenv.js', 420, 438 ]
-2046 silly gunzTarPerm extractEntry node_modules/osenv/.travis.yml
-2047 silly gunzTarPerm modified mode [ 'node_modules/osenv/.travis.yml', 420, 438 ]
-2048 silly gunzTarPerm extractEntry node_modules/osenv/test/unix.js
-2049 silly gunzTarPerm modified mode [ 'node_modules/osenv/test/unix.js', 420, 438 ]
-2050 silly gunzTarPerm extractEntry node_modules/osenv/test/windows.js
-2051 silly gunzTarPerm modified mode [ 'node_modules/osenv/test/windows.js', 420, 438 ]
-2052 silly gunzTarPerm extractEntry node_modules/osenv/x.tap
-2053 silly gunzTarPerm modified mode [ 'node_modules/osenv/x.tap', 420, 438 ]
-2054 silly gunzTarPerm extractEntry node_modules/path-is-absolute/package.json
-2055 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/package.json', 420, 438 ]
-2056 silly gunzTarPerm extractEntry node_modules/path-is-absolute/index.js
-2057 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/index.js', 420, 438 ]
-2058 silly gunzTarPerm extractEntry node_modules/path-is-absolute/license
-2059 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/license', 420, 438 ]
-2060 silly gunzTarPerm extractEntry node_modules/path-is-absolute/readme.md
-2061 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/readme.md', 420, 438 ]
-2062 silly gunzTarPerm extractEntry node_modules/pegjs/package.json
-2063 silly gunzTarPerm modified mode [ 'node_modules/pegjs/package.json', 420, 438 ]
-2064 silly gunzTarPerm extractEntry node_modules/pegjs/README.md
-2065 silly gunzTarPerm modified mode [ 'node_modules/pegjs/README.md', 420, 438 ]
-2066 silly gunzTarPerm extractEntry node_modules/pegjs/LICENSE
-2067 silly gunzTarPerm modified mode [ 'node_modules/pegjs/LICENSE', 420, 438 ]
-2068 silly gunzTarPerm extractEntry node_modules/pegjs/CHANGELOG.md
-2069 silly gunzTarPerm modified mode [ 'node_modules/pegjs/CHANGELOG.md', 420, 438 ]
-2070 silly gunzTarPerm extractEntry node_modules/pegjs/VERSION
-2071 silly gunzTarPerm modified mode [ 'node_modules/pegjs/VERSION', 420, 438 ]
-2072 silly gunzTarPerm extractEntry node_modules/pegjs/bin/pegjs
-2073 silly gunzTarPerm modified mode [ 'node_modules/pegjs/bin/pegjs', 493, 511 ]
-2074 silly gunzTarPerm extractEntry node_modules/pegjs/examples/arithmetics.pegjs
-2075 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/arithmetics.pegjs', 420, 438 ]
-2076 silly gunzTarPerm extractEntry node_modules/pegjs/examples/css.pegjs
-2077 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/css.pegjs', 420, 438 ]
-2078 silly gunzTarPerm extractEntry node_modules/pegjs/examples/javascript.pegjs
-2079 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/javascript.pegjs', 420, 438 ]
-2080 silly gunzTarPerm extractEntry node_modules/pegjs/examples/json.pegjs
-2081 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/json.pegjs', 420, 438 ]
-2082 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler.js
-2083 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler.js', 420, 438 ]
-2084 silly gunzTarPerm extractEntry node_modules/pegjs/lib/grammar-error.js
-2085 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/grammar-error.js', 420, 438 ]
-2086 silly gunzTarPerm extractEntry node_modules/pegjs/lib/parser.js
-2087 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/parser.js', 420, 438 ]
-2088 silly gunzTarPerm extractEntry node_modules/pegjs/lib/peg.js
-2089 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/peg.js', 420, 438 ]
-2090 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/asts.js
-2091 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/asts.js', 420, 438 ]
-2092 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/javascript.js
-2093 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/javascript.js', 420, 438 ]
-2094 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/opcodes.js
-2095 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/opcodes.js', 420, 438 ]
-2096 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/visitor.js
-2097 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/visitor.js', 420, 438 ]
-2098 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/generate-bytecode.js
-2099 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/generate-bytecode.js',
-2099 silly gunzTarPerm   420,
-2099 silly gunzTarPerm   438 ]
-2100 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/generate-javascript.js
-2101 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/generate-javascript.js',
-2101 silly gunzTarPerm   420,
-2101 silly gunzTarPerm   438 ]
-2102 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/remove-proxy-rules.js
-2103 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/remove-proxy-rules.js',
-2103 silly gunzTarPerm   420,
-2103 silly gunzTarPerm   438 ]
-2104 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/report-infinite-loops.js
-2105 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/report-infinite-loops.js',
-2105 silly gunzTarPerm   420,
-2105 silly gunzTarPerm   438 ]
-2106 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/report-left-recursion.js
-2107 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/report-left-recursion.js',
-2107 silly gunzTarPerm   420,
-2107 silly gunzTarPerm   438 ]
-2108 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/report-missing-rules.js
-2109 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/report-missing-rules.js',
-2109 silly gunzTarPerm   420,
-2109 silly gunzTarPerm   438 ]
-2110 silly gunzTarPerm extractEntry node_modules/pegjs/lib/utils/arrays.js
-2111 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/utils/arrays.js', 420, 438 ]
-2112 silly gunzTarPerm extractEntry node_modules/pegjs/lib/utils/classes.js
-2113 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/utils/classes.js', 420, 438 ]
-2114 silly gunzTarPerm extractEntry node_modules/pegjs/lib/utils/objects.js
-2115 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/utils/objects.js', 420, 438 ]
-2116 silly gunzTarPerm extractEntry node_modules/plist/package.json
-2117 silly gunzTarPerm modified mode [ 'node_modules/plist/package.json', 420, 438 ]
-2118 silly gunzTarPerm extractEntry node_modules/plist/README.md
-2119 silly gunzTarPerm modified mode [ 'node_modules/plist/README.md', 420, 438 ]
-2120 silly gunzTarPerm extractEntry node_modules/plist/LICENSE
-2121 silly gunzTarPerm modified mode [ 'node_modules/plist/LICENSE', 420, 438 ]
-2122 silly gunzTarPerm extractEntry node_modules/plist/.jshintrc
-2123 silly gunzTarPerm modified mode [ 'node_modules/plist/.jshintrc', 420, 438 ]
-2124 silly gunzTarPerm extractEntry node_modules/plist/.travis.yml
-2125 silly gunzTarPerm modified mode [ 'node_modules/plist/.travis.yml', 420, 438 ]
-2126 silly gunzTarPerm extractEntry node_modules/plist/History.md
-2127 silly gunzTarPerm modified mode [ 'node_modules/plist/History.md', 420, 438 ]
-2128 silly gunzTarPerm extractEntry node_modules/plist/Makefile
-2129 silly gunzTarPerm modified mode [ 'node_modules/plist/Makefile', 420, 438 ]
-2130 silly gunzTarPerm extractEntry node_modules/plist/dist/plist-build.js
-2131 silly gunzTarPerm modified mode [ 'node_modules/plist/dist/plist-build.js', 420, 438 ]
-2132 silly gunzTarPerm extractEntry node_modules/plist/dist/plist-parse.js
-2133 silly gunzTarPerm modified mode [ 'node_modules/plist/dist/plist-parse.js', 420, 438 ]
-2134 silly gunzTarPerm extractEntry node_modules/plist/dist/plist.js
-2135 silly gunzTarPerm modified mode [ 'node_modules/plist/dist/plist.js', 420, 438 ]
-2136 silly gunzTarPerm extractEntry node_modules/plist/examples/browser/index.html
-2137 silly gunzTarPerm modified mode [ 'node_modules/plist/examples/browser/index.html', 420, 438 ]
-2138 silly gunzTarPerm extractEntry node_modules/plist/lib/build.js
-2139 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/build.js', 420, 438 ]
-2140 silly gunzTarPerm extractEntry node_modules/plist/lib/node.js
-2141 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/node.js', 420, 438 ]
-2142 silly gunzTarPerm extractEntry node_modules/plist/lib/parse.js
-2143 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/parse.js', 420, 438 ]
-2144 silly gunzTarPerm extractEntry node_modules/plist/lib/plist.js
-2145 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/plist.js', 420, 438 ]
-2146 silly gunzTarPerm extractEntry node_modules/q/package.json
-2147 silly gunzTarPerm modified mode [ 'node_modules/q/package.json', 420, 438 ]
-2148 silly gunzTarPerm extractEntry node_modules/q/README.md
-2149 silly gunzTarPerm modified mode [ 'node_modules/q/README.md', 420, 438 ]
-2150 silly gunzTarPerm extractEntry node_modules/q/LICENSE
-2151 silly gunzTarPerm modified mode [ 'node_modules/q/LICENSE', 420, 438 ]
-2152 silly gunzTarPerm extractEntry node_modules/q/q.js
-2153 silly gunzTarPerm modified mode [ 'node_modules/q/q.js', 420, 438 ]
-2154 silly gunzTarPerm extractEntry node_modules/q/queue.js
-2155 silly gunzTarPerm modified mode [ 'node_modules/q/queue.js', 420, 438 ]
-2156 silly gunzTarPerm extractEntry node_modules/q/CHANGES.md
-2157 silly gunzTarPerm modified mode [ 'node_modules/q/CHANGES.md', 420, 438 ]
-2158 silly gunzTarPerm extractEntry node_modules/sax/package.json
-2159 silly gunzTarPerm modified mode [ 'node_modules/sax/package.json', 420, 438 ]
-2160 silly gunzTarPerm extractEntry node_modules/sax/README.md
-2161 silly gunzTarPerm modified mode [ 'node_modules/sax/README.md', 420, 438 ]
-2162 silly gunzTarPerm extractEntry node_modules/sax/LICENSE
-2163 silly gunzTarPerm modified mode [ 'node_modules/sax/LICENSE', 420, 438 ]
-2164 silly gunzTarPerm extractEntry node_modules/sax/AUTHORS
-2165 silly gunzTarPerm modified mode [ 'node_modules/sax/AUTHORS', 420, 438 ]
-2166 silly gunzTarPerm extractEntry node_modules/sax/examples/pretty-print.js
-2167 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/pretty-print.js', 420, 438 ]
-2168 silly gunzTarPerm extractEntry node_modules/sax/examples/get-products.js
-2169 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/get-products.js', 420, 438 ]
-2170 silly gunzTarPerm extractEntry node_modules/sax/examples/hello-world.js
-2171 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/hello-world.js', 420, 438 ]
-2172 silly gunzTarPerm extractEntry node_modules/sax/examples/example.js
-2173 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/example.js', 420, 438 ]
-2174 silly gunzTarPerm extractEntry node_modules/sax/examples/switch-bench.js
-2175 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/switch-bench.js', 493, 511 ]
-2176 silly gunzTarPerm extractEntry node_modules/sax/examples/big-not-pretty.xml
-2177 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/big-not-pretty.xml', 420, 438 ]
-2178 silly gunzTarPerm extractEntry node_modules/sax/examples/shopping.xml
-2179 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/shopping.xml', 420, 438 ]
-2180 silly gunzTarPerm extractEntry node_modules/sax/examples/strict.dtd
-2181 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/strict.dtd', 420, 438 ]
-2182 silly gunzTarPerm extractEntry node_modules/sax/examples/not-pretty.xml
-2183 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/not-pretty.xml', 420, 438 ]
-2184 silly gunzTarPerm extractEntry node_modules/sax/examples/test.html
-2185 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/test.html', 420, 438 ]
-2186 silly gunzTarPerm extractEntry node_modules/sax/examples/test.xml
-2187 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/test.xml', 420, 438 ]
-2188 silly gunzTarPerm extractEntry node_modules/sax/lib/sax.js
-2189 silly gunzTarPerm modified mode [ 'node_modules/sax/lib/sax.js', 420, 438 ]
-2190 silly gunzTarPerm extractEntry node_modules/sax/test/buffer-overrun.js
-2191 silly gunzTarPerm modified mode [ 'node_modules/sax/test/buffer-overrun.js', 420, 438 ]
-2192 silly gunzTarPerm extractEntry node_modules/sax/test/issue-47.js
-2193 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-47.js', 420, 438 ]
-2194 silly gunzTarPerm extractEntry node_modules/sax/test/issue-49.js
-2195 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-49.js', 420, 438 ]
-2196 silly gunzTarPerm extractEntry node_modules/sax/test/parser-position.js
-2197 silly gunzTarPerm modified mode [ 'node_modules/sax/test/parser-position.js', 420, 438 ]
-2198 silly gunzTarPerm extractEntry node_modules/sax/test/issue-35.js
-2199 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-35.js', 420, 438 ]
-2200 silly gunzTarPerm extractEntry node_modules/sax/test/self-closing-child-strict.js
-2201 silly gunzTarPerm modified mode [ 'node_modules/sax/test/self-closing-child-strict.js',
-2201 silly gunzTarPerm   420,
-2201 silly gunzTarPerm   438 ]
-2202 silly gunzTarPerm extractEntry node_modules/sax/test/self-closing-child.js
-2203 silly gunzTarPerm modified mode [ 'node_modules/sax/test/self-closing-child.js', 420, 438 ]
-2204 silly gunzTarPerm extractEntry node_modules/sax/test/self-closing-tag.js
-2205 silly gunzTarPerm modified mode [ 'node_modules/sax/test/self-closing-tag.js', 420, 438 ]
-2206 silly gunzTarPerm extractEntry node_modules/sax/test/stray-ending.js
-2207 silly gunzTarPerm modified mode [ 'node_modules/sax/test/stray-ending.js', 420, 438 ]
-2208 silly gunzTarPerm extractEntry node_modules/sax/test/trailing-non-whitespace.js
-2209 silly gunzTarPerm modified mode [ 'node_modules/sax/test/trailing-non-whitespace.js', 420, 438 ]
-2210 silly gunzTarPerm extractEntry node_modules/sax/test/issue-30.js
-2211 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-30.js', 420, 438 ]
-2212 silly gunzTarPerm extractEntry node_modules/sax/test/unquoted.js
-2213 silly gunzTarPerm modified mode [ 'node_modules/sax/test/unquoted.js', 420, 438 ]
-2214 silly gunzTarPerm extractEntry node_modules/sax/test/issue-23.js
-2215 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-23.js', 420, 438 ]
-2216 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-issue-41.js
-2217 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-issue-41.js', 420, 438 ]
-2218 silly gunzTarPerm extractEntry node_modules/sax/test/index.js
-2219 silly gunzTarPerm modified mode [ 'node_modules/sax/test/index.js', 420, 438 ]
-2220 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-rebinding.js
-2221 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-rebinding.js', 420, 438 ]
-2222 silly gunzTarPerm extractEntry node_modules/sax/test/cdata.js
-2223 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata.js', 420, 438 ]
-2224 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-strict.js
-2225 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-strict.js', 420, 438 ]
-2226 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-multiple.js
-2227 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-multiple.js', 420, 438 ]
-2228 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-unbound.js
-2229 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-unbound.js', 420, 438 ]
-2230 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-fake-end.js
-2231 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-fake-end.js', 420, 438 ]
-2232 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-xml-default-prefix-attribute.js
-2233 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-xml-default-prefix-attribute.js',
-2233 silly gunzTarPerm   420,
-2233 silly gunzTarPerm   438 ]
-2234 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-end-split.js
-2235 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-end-split.js', 420, 438 ]
-2236 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-xml-default-prefix.js
-2237 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-xml-default-prefix.js', 420, 438 ]
-2238 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-chunked.js
-2239 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-chunked.js', 420, 438 ]
-2240 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-xml-default-redefine.js
-2241 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-xml-default-redefine.js',
-2241 silly gunzTarPerm   420,
-2241 silly gunzTarPerm   438 ]
-2242 silly gunzTarPerm extractEntry node_modules/sax/test/script.js
-2243 silly gunzTarPerm modified mode [ 'node_modules/sax/test/script.js', 420, 438 ]
-2244 silly gunzTarPerm extractEntry node_modules/semver/package.json
-2245 silly gunzTarPerm modified mode [ 'node_modules/semver/package.json', 420, 438 ]
-2246 silly gunzTarPerm extractEntry node_modules/semver/README.md
-2247 silly gunzTarPerm modified mode [ 'node_modules/semver/README.md', 420, 438 ]
-2248 silly gunzTarPerm extractEntry node_modules/semver/LICENSE
-2249 silly gunzTarPerm modified mode [ 'node_modules/semver/LICENSE', 420, 438 ]
-2250 silly gunzTarPerm extractEntry node_modules/semver/semver.js
-2251 silly gunzTarPerm modified mode [ 'node_modules/semver/semver.js', 420, 438 ]
-2252 silly gunzTarPerm extractEntry node_modules/semver/bin/semver
-2253 silly gunzTarPerm modified mode [ 'node_modules/semver/bin/semver', 493, 511 ]
-2254 silly gunzTarPerm extractEntry node_modules/semver/range.bnf
-2255 silly gunzTarPerm modified mode [ 'node_modules/semver/range.bnf', 420, 438 ]
-2256 silly gunzTarPerm extractEntry node_modules/shelljs/package.json
-2257 silly gunzTarPerm modified mode [ 'node_modules/shelljs/package.json', 420, 438 ]
-2258 silly gunzTarPerm extractEntry node_modules/shelljs/.npmignore
-2259 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.npmignore', 420, 438 ]
-2260 silly gunzTarPerm extractEntry node_modules/shelljs/README.md
-2261 silly gunzTarPerm modified mode [ 'node_modules/shelljs/README.md', 420, 438 ]
-2262 silly gunzTarPerm extractEntry node_modules/shelljs/LICENSE
-2263 silly gunzTarPerm modified mode [ 'node_modules/shelljs/LICENSE', 420, 438 ]
-2264 silly gunzTarPerm extractEntry node_modules/shelljs/global.js
-2265 silly gunzTarPerm modified mode [ 'node_modules/shelljs/global.js', 420, 438 ]
-2266 silly gunzTarPerm extractEntry node_modules/shelljs/make.js
-2267 silly gunzTarPerm modified mode [ 'node_modules/shelljs/make.js', 420, 438 ]
-2268 silly gunzTarPerm extractEntry node_modules/shelljs/shell.js
-2269 silly gunzTarPerm modified mode [ 'node_modules/shelljs/shell.js', 420, 438 ]
-2270 silly gunzTarPerm extractEntry node_modules/shelljs/bin/shjs
-2271 silly gunzTarPerm modified mode [ 'node_modules/shelljs/bin/shjs', 493, 511 ]
-2272 silly gunzTarPerm extractEntry node_modules/shelljs/.documentup.json
-2273 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.documentup.json', 420, 438 ]
-2274 silly gunzTarPerm extractEntry node_modules/shelljs/.travis.yml
-2275 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.travis.yml', 420, 438 ]
-2276 silly gunzTarPerm extractEntry node_modules/shelljs/RELEASE.md
-2277 silly gunzTarPerm modified mode [ 'node_modules/shelljs/RELEASE.md', 420, 438 ]
-2278 silly gunzTarPerm extractEntry node_modules/shelljs/scripts/generate-docs.js
-2279 silly gunzTarPerm modified mode [ 'node_modules/shelljs/scripts/generate-docs.js', 493, 511 ]
-2280 silly gunzTarPerm extractEntry node_modules/shelljs/scripts/run-tests.js
-2281 silly gunzTarPerm modified mode [ 'node_modules/shelljs/scripts/run-tests.js', 493, 511 ]
-2282 silly gunzTarPerm extractEntry node_modules/shelljs/.jshintrc
-2283 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.jshintrc', 420, 438 ]
-2284 silly gunzTarPerm extractEntry node_modules/shelljs/src/cat.js
-2285 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/cat.js', 420, 438 ]
-2286 silly gunzTarPerm extractEntry node_modules/shelljs/src/find.js
-2287 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/find.js', 420, 438 ]
-2288 silly gunzTarPerm extractEntry node_modules/shelljs/src/grep.js
-2289 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/grep.js', 420, 438 ]
-2290 silly gunzTarPerm extractEntry node_modules/shelljs/src/ln.js
-2291 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/ln.js', 420, 438 ]
-2292 silly gunzTarPerm extractEntry node_modules/shelljs/src/exec.js
-2293 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/exec.js', 420, 438 ]
-2294 silly gunzTarPerm extractEntry node_modules/shelljs/src/mkdir.js
-2295 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/mkdir.js', 420, 438 ]
-2296 silly gunzTarPerm extractEntry node_modules/shelljs/src/mv.js
-2297 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/mv.js', 420, 438 ]
-2298 silly gunzTarPerm extractEntry node_modules/shelljs/src/popd.js
-2299 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/popd.js', 420, 438 ]
-2300 silly gunzTarPerm extractEntry node_modules/shelljs/src/pushd.js
-2301 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/pushd.js', 420, 438 ]
-2302 silly gunzTarPerm extractEntry node_modules/shelljs/src/pwd.js
-2303 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/pwd.js', 420, 438 ]
-2304 silly gunzTarPerm extractEntry node_modules/shelljs/src/error.js
-2305 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/error.js', 420, 438 ]
-2306 silly gunzTarPerm extractEntry node_modules/shelljs/src/rm.js
-2307 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/rm.js', 420, 438 ]
-2308 silly gunzTarPerm extractEntry node_modules/shelljs/src/echo.js
-2309 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/echo.js', 420, 438 ]
-2310 silly gunzTarPerm extractEntry node_modules/shelljs/src/sed.js
-2311 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/sed.js', 420, 438 ]
-2312 silly gunzTarPerm extractEntry node_modules/shelljs/src/dirs.js
-2313 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/dirs.js', 420, 438 ]
-2314 silly gunzTarPerm extractEntry node_modules/shelljs/src/tempdir.js
-2315 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/tempdir.js', 420, 438 ]
-2316 silly gunzTarPerm extractEntry node_modules/shelljs/src/cp.js
-2317 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/cp.js', 420, 438 ]
-2318 silly gunzTarPerm extractEntry node_modules/shelljs/src/test.js
-2319 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/test.js', 420, 438 ]
-2320 silly gunzTarPerm extractEntry node_modules/shelljs/src/common.js
-2321 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/common.js', 420, 438 ]
-2322 silly gunzTarPerm extractEntry node_modules/shelljs/src/to.js
-2323 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/to.js', 420, 438 ]
-2324 silly gunzTarPerm extractEntry node_modules/shelljs/src/chmod.js
-2325 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/chmod.js', 420, 438 ]
-2326 silly gunzTarPerm extractEntry node_modules/shelljs/src/toEnd.js
-2327 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/toEnd.js', 420, 438 ]
-2328 silly gunzTarPerm extractEntry node_modules/shelljs/src/cd.js
-2329 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/cd.js', 420, 438 ]
-2330 silly gunzTarPerm extractEntry node_modules/shelljs/src/which.js
-2331 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/which.js', 420, 438 ]
-2332 silly gunzTarPerm extractEntry node_modules/shelljs/src/ls.js
-2333 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/ls.js', 420, 438 ]
-2334 silly gunzTarPerm extractEntry node_modules/simctl/package.json
-2335 silly gunzTarPerm modified mode [ 'node_modules/simctl/package.json', 420, 438 ]
-2336 silly gunzTarPerm extractEntry node_modules/simctl/.npmignore
-2337 silly gunzTarPerm modified mode [ 'node_modules/simctl/.npmignore', 420, 438 ]
-2338 silly gunzTarPerm extractEntry node_modules/simctl/README.md
-2339 silly gunzTarPerm modified mode [ 'node_modules/simctl/README.md', 420, 438 ]
-2340 silly gunzTarPerm extractEntry node_modules/simctl/LICENSE
-2341 silly gunzTarPerm modified mode [ 'node_modules/simctl/LICENSE', 420, 438 ]
-2342 silly gunzTarPerm extractEntry node_modules/simctl/simctl.js
-2343 silly gunzTarPerm modified mode [ 'node_modules/simctl/simctl.js', 420, 438 ]
-2344 silly gunzTarPerm extractEntry node_modules/simctl/.jscsrc
-2345 silly gunzTarPerm modified mode [ 'node_modules/simctl/.jscsrc', 420, 438 ]
-2346 silly gunzTarPerm extractEntry node_modules/simctl/lib/simctl-extensions.js
-2347 silly gunzTarPerm modified mode [ 'node_modules/simctl/lib/simctl-extensions.js', 420, 438 ]
-2348 silly gunzTarPerm extractEntry node_modules/simctl/lib/simctl-list-parser.js
-2349 silly gunzTarPerm modified mode [ 'node_modules/simctl/lib/simctl-list-parser.js', 420, 438 ]
-2350 silly gunzTarPerm extractEntry node_modules/simctl/spec/simctl-list-parser.spec.js
-2351 silly gunzTarPerm modified mode [ 'node_modules/simctl/spec/simctl-list-parser.spec.js',
-2351 silly gunzTarPerm   420,
-2351 silly gunzTarPerm   438 ]
-2352 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/package.json
-2353 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/package.json',
-2353 silly gunzTarPerm   420,
-2353 silly gunzTarPerm   438 ]
-2354 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.npmignore
-2355 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.npmignore',
-2355 silly gunzTarPerm   420,
-2355 silly gunzTarPerm   438 ]
-2356 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/README.md
-2357 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/README.md',
-2357 silly gunzTarPerm   420,
-2357 silly gunzTarPerm   438 ]
-2358 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/LICENSE
-2359 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/LICENSE', 420, 438 ]
-2360 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/global.js
-2361 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/global.js',
-2361 silly gunzTarPerm   420,
-2361 silly gunzTarPerm   438 ]
-2362 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/make.js
-2363 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/make.js', 420, 438 ]
-2364 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/shell.js
-2365 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/shell.js', 420, 438 ]
-2366 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/bin/shjs
-2367 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/bin/shjs', 493, 511 ]
-2368 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.travis.yml
-2369 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.travis.yml',
-2369 silly gunzTarPerm   420,
-2369 silly gunzTarPerm   438 ]
-2370 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.jshintrc
-2371 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.jshintrc',
-2371 silly gunzTarPerm   420,
-2371 silly gunzTarPerm   438 ]
-2372 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/scripts/generate-docs.js
-2373 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/scripts/generate-docs.js',
-2373 silly gunzTarPerm   493,
-2373 silly gunzTarPerm   511 ]
-2374 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/scripts/run-tests.js
-2375 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/scripts/run-tests.js',
-2375 silly gunzTarPerm   493,
-2375 silly gunzTarPerm   511 ]
-2376 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.documentup.json
-2377 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.documentup.json',
-2377 silly gunzTarPerm   420,
-2377 silly gunzTarPerm   438 ]
-2378 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/cat.js
-2379 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/cat.js',
-2379 silly gunzTarPerm   420,
-2379 silly gunzTarPerm   438 ]
-2380 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/exec.js
-2381 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/exec.js',
-2381 silly gunzTarPerm   420,
-2381 silly gunzTarPerm   438 ]
-2382 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/find.js
-2383 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/find.js',
-2383 silly gunzTarPerm   420,
-2383 silly gunzTarPerm   438 ]
-2384 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/grep.js
-2385 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/grep.js',
-2385 silly gunzTarPerm   420,
-2385 silly gunzTarPerm   438 ]
-2386 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/ls.js
-2387 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/ls.js',
-2387 silly gunzTarPerm   420,
-2387 silly gunzTarPerm   438 ]
-2388 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/error.js
-2389 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/error.js',
-2389 silly gunzTarPerm   420,
-2389 silly gunzTarPerm   438 ]
-2390 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/mv.js
-2391 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/mv.js',
-2391 silly gunzTarPerm   420,
-2391 silly gunzTarPerm   438 ]
-2392 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/popd.js
-2393 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/popd.js',
-2393 silly gunzTarPerm   420,
-2393 silly gunzTarPerm   438 ]
-2394 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/pushd.js
-2395 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/pushd.js',
-2395 silly gunzTarPerm   420,
-2395 silly gunzTarPerm   438 ]
-2396 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/pwd.js
-2397 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/pwd.js',
-2397 silly gunzTarPerm   420,
-2397 silly gunzTarPerm   438 ]
-2398 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/rm.js
-2399 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/rm.js',
-2399 silly gunzTarPerm   420,
-2399 silly gunzTarPerm   438 ]
-2400 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/echo.js
-2401 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/echo.js',
-2401 silly gunzTarPerm   420,
-2401 silly gunzTarPerm   438 ]
-2402 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/sed.js
-2403 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/sed.js',
-2403 silly gunzTarPerm   420,
-2403 silly gunzTarPerm   438 ]
-2404 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/dirs.js
-2405 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/dirs.js',
-2405 silly gunzTarPerm   420,
-2405 silly gunzTarPerm   438 ]
-2406 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/tempdir.js
-2407 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/tempdir.js',
-2407 silly gunzTarPerm   420,
-2407 silly gunzTarPerm   438 ]
-2408 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/cp.js
-2409 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/cp.js',
-2409 silly gunzTarPerm   420,
-2409 silly gunzTarPerm   438 ]
-2410 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/test.js
-2411 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/test.js',
-2411 silly gunzTarPerm   420,
-2411 silly gunzTarPerm   438 ]
-2412 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/common.js
-2413 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/common.js',
-2413 silly gunzTarPerm   420,
-2413 silly gunzTarPerm   438 ]
-2414 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/to.js
-2415 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/to.js',
-2415 silly gunzTarPerm   420,
-2415 silly gunzTarPerm   438 ]
-2416 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/chmod.js
-2417 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/chmod.js',
-2417 silly gunzTarPerm   420,
-2417 silly gunzTarPerm   438 ]
-2418 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/toEnd.js
-2419 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/toEnd.js',
-2419 silly gunzTarPerm   420,
-2419 silly gunzTarPerm   438 ]
-2420 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/cd.js
-2421 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/cd.js',
-2421 silly gunzTarPerm   420,
-2421 silly gunzTarPerm   438 ]
-2422 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/which.js
-2423 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/which.js',
-2423 silly gunzTarPerm   420,
-2423 silly gunzTarPerm   438 ]
-2424 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/mkdir.js
-2425 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/mkdir.js',
-2425 silly gunzTarPerm   420,
-2425 silly gunzTarPerm   438 ]
-2426 silly gunzTarPerm extractEntry node_modules/simple-plist/package.json
-2427 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/package.json', 420, 438 ]
-2428 silly gunzTarPerm extractEntry node_modules/simple-plist/.npmignore
-2429 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/.npmignore', 420, 438 ]
-2430 silly gunzTarPerm extractEntry node_modules/simple-plist/README.md
-2431 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/README.md', 420, 438 ]
-2432 silly gunzTarPerm extractEntry node_modules/simple-plist/LICENSE
-2433 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/LICENSE', 420, 438 ]
-2434 silly gunzTarPerm extractEntry node_modules/simple-plist/simple-plist.js
-2435 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/simple-plist.js', 420, 438 ]
-2436 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/package.json
-2437 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/package.json',
-2437 silly gunzTarPerm   420,
-2437 silly gunzTarPerm   438 ]
-2438 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/.npmignore
-2439 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/.npmignore',
-2439 silly gunzTarPerm   420,
-2439 silly gunzTarPerm   438 ]
-2440 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/README.md
-2441 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/README.md',
-2441 silly gunzTarPerm   420,
-2441 silly gunzTarPerm   438 ]
-2442 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/bplistParser.js
-2443 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/bplistParser.js',
-2443 silly gunzTarPerm   420,
-2443 silly gunzTarPerm   438 ]
-2444 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/parseTest.js
-2445 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/parseTest.js',
-2445 silly gunzTarPerm   420,
-2445 silly gunzTarPerm   438 ]
-2446 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/airplay.bplist
-2447 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/airplay.bplist',
-2447 silly gunzTarPerm   420,
-2447 silly gunzTarPerm   438 ]
-2448 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/iTunes-small.bplist
-2449 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/iTunes-small.bplist',
-2449 silly gunzTarPerm   420,
-2449 silly gunzTarPerm   438 ]
-2450 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/sample1.bplist
-2451 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/sample1.bplist',
-2451 silly gunzTarPerm   420,
-2451 silly gunzTarPerm   438 ]
-2452 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/sample2.bplist
-2453 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/sample2.bplist',
-2453 silly gunzTarPerm   420,
-2453 silly gunzTarPerm   438 ]
-2454 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/uid.bplist
-2455 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/uid.bplist',
-2455 silly gunzTarPerm   420,
-2455 silly gunzTarPerm   438 ]
-2456 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/utf16.bplist
-2457 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/utf16.bplist',
-2457 silly gunzTarPerm   420,
-2457 silly gunzTarPerm   438 ]
-2458 silly gunzTarPerm extractEntry node_modules/stream-buffers/package.json
-2459 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/package.json', 420, 438 ]
-2460 silly gunzTarPerm extractEntry node_modules/stream-buffers/README.md
-2461 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/README.md', 420, 438 ]
-2462 silly gunzTarPerm extractEntry node_modules/stream-buffers/.mailmap
-2463 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/.mailmap', 420, 438 ]
-2464 silly gunzTarPerm extractEntry node_modules/stream-buffers/.travis.yml
-2465 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/.travis.yml', 420, 438 ]
-2466 silly gunzTarPerm extractEntry node_modules/stream-buffers/UNLICENSE
-2467 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/UNLICENSE', 420, 438 ]
-2468 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/coverage.json
-2469 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/coverage.json',
-2469 silly gunzTarPerm   420,
-2469 silly gunzTarPerm   438 ]
-2470 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/prettify.js
-2471 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/prettify.js',
-2471 silly gunzTarPerm   420,
-2471 silly gunzTarPerm   438 ]
-2472 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/sorter.js
-2473 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/sorter.js',
-2473 silly gunzTarPerm   420,
-2473 silly gunzTarPerm   438 ]
-2474 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/base.css
-2475 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/base.css',
-2475 silly gunzTarPerm   420,
-2475 silly gunzTarPerm   438 ]
-2476 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/index.html
-2477 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/index.html',
-2477 silly gunzTarPerm   420,
-2477 silly gunzTarPerm   438 ]
-2478 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/constants.js.html
-2479 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/constants.js.html',
-2479 silly gunzTarPerm   420,
-2479 silly gunzTarPerm   438 ]
-2480 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/index.html
-2481 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/index.html',
-2481 silly gunzTarPerm   420,
-2481 silly gunzTarPerm   438 ]
-2482 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/readable_streambuffer.js.html
-2483 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/readable_streambuffer.js.html',
-2483 silly gunzTarPerm   420,
-2483 silly gunzTarPerm   438 ]
-2484 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/streambuffer.js.html
-2485 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/streambuffer.js.html',
-2485 silly gunzTarPerm   420,
-2485 silly gunzTarPerm   438 ]
-2486 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/writable_streambuffer.js.html
-2487 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/writable_streambuffer.js.html',
-2487 silly gunzTarPerm   420,
-2487 silly gunzTarPerm   438 ]
-2488 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/prettify.css
-2489 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/prettify.css',
-2489 silly gunzTarPerm   420,
-2489 silly gunzTarPerm   438 ]
-2490 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/sort-arrow-sprite.png
-2491 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/sort-arrow-sprite.png',
-2491 silly gunzTarPerm   420,
-2491 silly gunzTarPerm   438 ]
-2492 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov.info
-2493 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov.info', 420, 438 ]
-2494 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/constants.js
-2495 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/constants.js', 420, 438 ]
-2496 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/readable_streambuffer.js
-2497 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/readable_streambuffer.js',
-2497 silly gunzTarPerm   420,
-2497 silly gunzTarPerm   438 ]
-2498 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/streambuffer.js
-2499 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/streambuffer.js', 420, 438 ]
-2500 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/writable_streambuffer.js
-2501 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/writable_streambuffer.js',
-2501 silly gunzTarPerm   420,
-2501 silly gunzTarPerm   438 ]
-2502 silly gunzTarPerm extractEntry node_modules/tail/package.json
-2503 silly gunzTarPerm modified mode [ 'node_modules/tail/package.json', 420, 438 ]
-2504 silly gunzTarPerm extractEntry node_modules/tail/README.md
-2505 silly gunzTarPerm modified mode [ 'node_modules/tail/README.md', 420, 438 ]
-2506 silly gunzTarPerm extractEntry node_modules/tail/tail.js
-2507 silly gunzTarPerm modified mode [ 'node_modules/tail/tail.js', 420, 438 ]
-2508 silly gunzTarPerm extractEntry node_modules/underscore/package.json
-2509 silly gunzTarPerm modified mode [ 'node_modules/underscore/package.json', 420, 438 ]
-2510 silly gunzTarPerm extractEntry node_modules/underscore/README.md
-2511 silly gunzTarPerm modified mode [ 'node_modules/underscore/README.md', 420, 438 ]
-2512 silly gunzTarPerm extractEntry node_modules/underscore/LICENSE
-2513 silly gunzTarPerm modified mode [ 'node_modules/underscore/LICENSE', 420, 438 ]
-2514 silly gunzTarPerm extractEntry node_modules/underscore/underscore-min.js
-2515 silly gunzTarPerm modified mode [ 'node_modules/underscore/underscore-min.js', 420, 438 ]
-2516 silly gunzTarPerm extractEntry node_modules/underscore/underscore.js
-2517 silly gunzTarPerm modified mode [ 'node_modules/underscore/underscore.js', 420, 438 ]
-2518 silly gunzTarPerm extractEntry node_modules/underscore/underscore-min.map
-2519 silly gunzTarPerm modified mode [ 'node_modules/underscore/underscore-min.map', 420, 438 ]
-2520 silly gunzTarPerm extractEntry node_modules/unorm/package.json
-2521 silly gunzTarPerm modified mode [ 'node_modules/unorm/package.json', 420, 438 ]
-2522 silly gunzTarPerm extractEntry node_modules/unorm/README.md
-2523 silly gunzTarPerm modified mode [ 'node_modules/unorm/README.md', 420, 438 ]
-2524 silly gunzTarPerm extractEntry node_modules/unorm/LICENSE.md
-2525 silly gunzTarPerm modified mode [ 'node_modules/unorm/LICENSE.md', 420, 438 ]
-2526 silly gunzTarPerm extractEntry node_modules/unorm/lib/unorm.js
-2527 silly gunzTarPerm modified mode [ 'node_modules/unorm/lib/unorm.js', 420, 438 ]
-2528 silly gunzTarPerm extractEntry node_modules/util-deprecate/package.json
-2529 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/package.json', 420, 438 ]
-2530 silly gunzTarPerm extractEntry node_modules/util-deprecate/README.md
-2531 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/README.md', 420, 438 ]
-2532 silly gunzTarPerm extractEntry node_modules/util-deprecate/LICENSE
-2533 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/LICENSE', 420, 438 ]
-2534 silly gunzTarPerm extractEntry node_modules/util-deprecate/browser.js
-2535 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/browser.js', 420, 438 ]
-2536 silly gunzTarPerm extractEntry node_modules/util-deprecate/node.js
-2537 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/node.js', 420, 438 ]
-2538 silly gunzTarPerm extractEntry node_modules/util-deprecate/History.md
-2539 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/History.md', 420, 438 ]
-2540 silly gunzTarPerm extractEntry node_modules/wrappy/package.json
-2541 silly gunzTarPerm modified mode [ 'node_modules/wrappy/package.json', 420, 438 ]
-2542 silly gunzTarPerm extractEntry node_modules/wrappy/README.md
-2543 silly gunzTarPerm modified mode [ 'node_modules/wrappy/README.md', 420, 438 ]
-2544 silly gunzTarPerm extractEntry node_modules/wrappy/LICENSE
-2545 silly gunzTarPerm modified mode [ 'node_modules/wrappy/LICENSE', 420, 438 ]
-2546 silly gunzTarPerm extractEntry node_modules/wrappy/wrappy.js
-2547 silly gunzTarPerm modified mode [ 'node_modules/wrappy/wrappy.js', 420, 438 ]
-2548 silly gunzTarPerm extractEntry node_modules/xcode/package.json
-2549 silly gunzTarPerm modified mode [ 'node_modules/xcode/package.json', 420, 438 ]
-2550 silly gunzTarPerm extractEntry node_modules/xcode/.npmignore
-2551 silly gunzTarPerm modified mode [ 'node_modules/xcode/.npmignore', 420, 438 ]
-2552 silly gunzTarPerm extractEntry node_modules/xcode/README.md
-2553 silly gunzTarPerm modified mode [ 'node_modules/xcode/README.md', 420, 438 ]
-2554 silly gunzTarPerm extractEntry node_modules/xcode/LICENSE
-2555 silly gunzTarPerm modified mode [ 'node_modules/xcode/LICENSE', 420, 438 ]
-2556 silly gunzTarPerm extractEntry node_modules/xcode/index.js
-2557 silly gunzTarPerm modified mode [ 'node_modules/xcode/index.js', 420, 438 ]
-2558 silly gunzTarPerm extractEntry node_modules/xcode/AUTHORS
-2559 silly gunzTarPerm modified mode [ 'node_modules/xcode/AUTHORS', 420, 438 ]
-2560 silly gunzTarPerm extractEntry node_modules/xcode/Makefile
-2561 silly gunzTarPerm modified mode [ 'node_modules/xcode/Makefile', 420, 438 ]
-2562 silly gunzTarPerm extractEntry node_modules/xcode/lib/parseJob.js
-2563 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/parseJob.js', 420, 438 ]
-2564 silly gunzTarPerm extractEntry node_modules/xcode/lib/pbxFile.js
-2565 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/pbxFile.js', 420, 438 ]
-2566 silly gunzTarPerm extractEntry node_modules/xcode/lib/pbxProject.js
-2567 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/pbxProject.js', 420, 438 ]
-2568 silly gunzTarPerm extractEntry node_modules/xcode/lib/pbxWriter.js
-2569 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/pbxWriter.js', 420, 438 ]
-2570 silly gunzTarPerm extractEntry node_modules/xcode/lib/parser/pbxproj.js
-2571 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/parser/pbxproj.js', 420, 438 ]
-2572 silly gunzTarPerm extractEntry node_modules/xcode/lib/parser/pbxproj.pegjs
-2573 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/parser/pbxproj.pegjs', 420, 438 ]
-2574 silly gunzTarPerm extractEntry node_modules/xml-escape/package.json
-2575 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/package.json', 420, 438 ]
-2576 silly gunzTarPerm extractEntry node_modules/xml-escape/README.md
-2577 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/README.md', 420, 438 ]
-2578 silly gunzTarPerm extractEntry node_modules/xml-escape/LICENSE
-2579 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/LICENSE', 420, 438 ]
-2580 silly gunzTarPerm extractEntry node_modules/xml-escape/index.js
-2581 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/index.js', 420, 438 ]
-2582 silly gunzTarPerm extractEntry node_modules/xml-escape/test.js
-2583 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/test.js', 420, 438 ]
-2584 silly gunzTarPerm extractEntry node_modules/xmlbuilder/package.json
-2585 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/package.json', 420, 438 ]
-2586 silly gunzTarPerm extractEntry node_modules/xmlbuilder/.npmignore
-2587 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/.npmignore', 420, 438 ]
-2588 silly gunzTarPerm extractEntry node_modules/xmlbuilder/README.md
-2589 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/README.md', 420, 438 ]
-2590 silly gunzTarPerm extractEntry node_modules/xmlbuilder/LICENSE
-2591 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/LICENSE', 420, 438 ]
-2592 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLAttribute.js
-2593 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLAttribute.js', 420, 438 ]
-2594 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDElement.js
-2595 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDElement.js', 420, 438 ]
-2596 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDEntity.js
-2597 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDEntity.js', 420, 438 ]
-2598 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDNotation.js
-2599 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDNotation.js', 420, 438 ]
-2600 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDAttList.js
-2601 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDAttList.js', 420, 438 ]
-2602 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDocType.js
-2603 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDocType.js', 420, 438 ]
-2604 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLElement.js
-2605 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLElement.js', 420, 438 ]
-2606 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLNode.js
-2607 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLNode.js', 420, 438 ]
-2608 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLProcessingInstruction.js
-2609 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLProcessingInstruction.js',
-2609 silly gunzTarPerm   420,
-2609 silly gunzTarPerm   438 ]
-2610 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLRaw.js
-2611 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLRaw.js', 420, 438 ]
-2612 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLComment.js
-2613 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLComment.js', 420, 438 ]
-2614 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLStringifier.js
-2615 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLStringifier.js', 420, 438 ]
-2616 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLCData.js
-2617 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLCData.js', 420, 438 ]
-2618 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLText.js
-2619 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLText.js', 420, 438 ]
-2620 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLBuilder.js
-2621 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLBuilder.js', 420, 438 ]
-2622 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/index.js
-2623 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/index.js', 420, 438 ]
-2624 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDeclaration.js
-2625 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDeclaration.js', 420, 438 ]
-2626 silly gunzTarPerm extractEntry node_modules/xmldom/package.json
-2627 silly gunzTarPerm modified mode [ 'node_modules/xmldom/package.json', 420, 438 ]
-2628 silly gunzTarPerm extractEntry node_modules/xmldom/.npmignore
-2629 silly gunzTarPerm modified mode [ 'node_modules/xmldom/.npmignore', 420, 438 ]
-2630 silly gunzTarPerm extractEntry node_modules/xmldom/LICENSE
-2631 silly gunzTarPerm modified mode [ 'node_modules/xmldom/LICENSE', 420, 438 ]
-2632 silly gunzTarPerm extractEntry node_modules/xmldom/__package__.js
-2633 silly gunzTarPerm modified mode [ 'node_modules/xmldom/__package__.js', 420, 438 ]
-2634 silly gunzTarPerm extractEntry node_modules/xmldom/dom.js
-2635 silly gunzTarPerm modified mode [ 'node_modules/xmldom/dom.js', 420, 438 ]
-2636 silly gunzTarPerm extractEntry node_modules/xmldom/dom-parser.js
-2637 silly gunzTarPerm modified mode [ 'node_modules/xmldom/dom-parser.js', 420, 438 ]
-2638 silly gunzTarPerm extractEntry node_modules/xmldom/sax.js
-2639 silly gunzTarPerm modified mode [ 'node_modules/xmldom/sax.js', 420, 438 ]
-2640 silly gunzTarPerm extractEntry node_modules/xmldom/.travis.yml
-2641 silly gunzTarPerm modified mode [ 'node_modules/xmldom/.travis.yml', 420, 438 ]
-2642 silly gunzTarPerm extractEntry node_modules/xmldom/changelog
-2643 silly gunzTarPerm modified mode [ 'node_modules/xmldom/changelog', 420, 438 ]
-2644 silly gunzTarPerm extractEntry node_modules/xmldom/readme.md
-2645 silly gunzTarPerm modified mode [ 'node_modules/xmldom/readme.md', 420, 438 ]
-2646 silly gunzTarPerm extractEntry node_modules/xmldom/component.json
-2647 silly gunzTarPerm modified mode [ 'node_modules/xmldom/component.json', 420, 438 ]
-2648 silly addBundled read tarball
-2649 silly cleanup remove extracted module
-2650 silly fetchNamedPackageData xcode
-2651 silly mapToRegistry name xcode
-2652 silly mapToRegistry using default registry
-2653 silly mapToRegistry registry https://registry.npmjs.org/
-2654 silly mapToRegistry uri https://registry.npmjs.org/xcode
-2655 verbose request uri https://registry.npmjs.org/xcode
-2656 verbose request no auth needed
-2657 info attempt registry request try #1 at 14:27:06
-2658 verbose etag W/"591dbc9f-c7bf"
-2659 verbose lastModified Thu, 18 May 2017 15:24:15 GMT
-2660 http request GET https://registry.npmjs.org/xcode
-2661 http 304 https://registry.npmjs.org/xcode
-2662 verbose headers { date: 'Mon, 28 Aug 2017 06:27:07 GMT',
-2662 verbose headers   via: '1.1 varnish',
-2662 verbose headers   'cache-control': 'max-age=300',
-2662 verbose headers   etag: 'W/"591dbc9f-c7bf"',
-2662 verbose headers   age: '199',
-2662 verbose headers   connection: 'keep-alive',
-2662 verbose headers   'x-served-by': 'cache-nrt6121-NRT',
-2662 verbose headers   'x-cache': 'HIT',
-2662 verbose headers   'x-cache-hits': '1',
-2662 verbose headers   'x-timer': 'S1503901627.265041,VS0,VE0',
-2662 verbose headers   vary: 'Accept-Encoding, Accept' }
-2663 silly get cb [ 304,
-2663 silly get   { date: 'Mon, 28 Aug 2017 06:27:07 GMT',
-2663 silly get     via: '1.1 varnish',
-2663 silly get     'cache-control': 'max-age=300',
-2663 silly get     etag: 'W/"591dbc9f-c7bf"',
-2663 silly get     age: '199',
-2663 silly get     connection: 'keep-alive',
-2663 silly get     'x-served-by': 'cache-nrt6121-NRT',
-2663 silly get     'x-cache': 'HIT',
-2663 silly get     'x-cache-hits': '1',
-2663 silly get     'x-timer': 'S1503901627.265041,VS0,VE0',
-2663 silly get     vary: 'Accept-Encoding, Accept' } ]
-2664 verbose etag https://registry.npmjs.org/xcode from cache
-2665 verbose get saving xcode to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\xcode\.cache.json
-2666 silly resolveWithNewModule xcode@0.9.3 checking installable status
-2667 silly cache add args [ 'xcode@^0.9.0', null ]
-2668 verbose cache add spec xcode@^0.9.0
-2669 silly cache add parsed spec Result {
-2669 silly cache add   raw: 'xcode@^0.9.0',
-2669 silly cache add   scope: null,
-2669 silly cache add   name: 'xcode',
-2669 silly cache add   rawSpec: '^0.9.0',
-2669 silly cache add   spec: '>=0.9.0-0 <0.10.0-0',
-2669 silly cache add   type: 'range' }
-2670 silly addNamed xcode@>=0.9.0-0 <0.10.0-0
-2671 verbose addNamed ">=0.9.0-0 <0.10.0-0" is a valid semver range for xcode
-2672 silly addNameRange { name: 'xcode', range: '>=0.9.0-0 <0.10.0-0', hasData: false }
-2673 silly mapToRegistry name xcode
-2674 silly mapToRegistry using default registry
-2675 silly mapToRegistry registry https://registry.npmjs.org/
-2676 silly mapToRegistry uri https://registry.npmjs.org/xcode
-2677 verbose addNameRange registry:https://registry.npmjs.org/xcode not in flight; fetching
-2678 verbose get https://registry.npmjs.org/xcode not expired, no request
-2679 silly addNameRange number 2 { name: 'xcode', range: '>=0.9.0-0 <0.10.0-0', hasData: true }
-2680 silly addNameRange versions [ 'xcode',
-2680 silly addNameRange   [ '0.0.0',
-2680 silly addNameRange     '0.1.0',
-2680 silly addNameRange     '0.2.0',
-2680 silly addNameRange     '0.2.1',
-2680 silly addNameRange     '0.3.0',
-2680 silly addNameRange     '0.3.1',
-2680 silly addNameRange     '0.3.2',
-2680 silly addNameRange     '0.3.3',
-2680 silly addNameRange     '0.3.4',
-2680 silly addNameRange     '0.3.5',
-2680 silly addNameRange     '0.4.0',
-2680 silly addNameRange     '0.4.1',
-2680 silly addNameRange     '0.5.0',
-2680 silly addNameRange     '0.5.1',
-2680 silly addNameRange     '0.5.2',
-2680 silly addNameRange     '0.5.3',
-2680 silly addNameRange     '0.5.4',
-2680 silly addNameRange     '0.5.5',
-2680 silly addNameRange     '0.6.0',
-2680 silly addNameRange     '0.6.1',
-2680 silly addNameRange     '0.6.2',
-2680 silly addNameRange     '0.6.3',
-2680 silly addNameRange     '0.6.4',
-2680 silly addNameRange     '0.6.5',
-2680 silly addNameRange     '0.6.6',
-2680 silly addNameRange     '0.6.7',
-2680 silly addNameRange     '0.7.0',
-2680 silly addNameRange     '0.7.2',
-2680 silly addNameRange     '0.7.9',
-2680 silly addNameRange     '0.8.0',
-2680 silly addNameRange     '0.8.1',
-2680 silly addNameRange     '0.8.2',
-2680 silly addNameRange     '0.8.3',
-2680 silly addNameRange     '0.8.4',
-2680 silly addNameRange     '0.8.5',
-2680 silly addNameRange     '0.8.7',
-2680 silly addNameRange     '0.8.8',
-2680 silly addNameRange     '0.8.9',
-2680 silly addNameRange     '0.9.0',
-2680 silly addNameRange     '0.9.1',
-2680 silly addNameRange     '0.9.2',
-2680 silly addNameRange     '0.9.3' ] ]
-2681 silly addNamed xcode@0.9.3
-2682 verbose addNamed "0.9.3" is a plain semver version for xcode
-2683 silly cache afterAdd xcode@0.9.3
-2684 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\xcode\0.9.3\package\package.json not in flight; writing
-2685 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\xcode\0.9.3\package\package.json written
-2686 silly fetchNamedPackageData pegjs
-2687 silly mapToRegistry name pegjs
-2688 silly mapToRegistry using default registry
-2689 silly mapToRegistry registry https://registry.npmjs.org/
-2690 silly mapToRegistry uri https://registry.npmjs.org/pegjs
-2691 silly fetchNamedPackageData simple-plist
-2692 silly mapToRegistry name simple-plist
-2693 silly mapToRegistry using default registry
-2694 silly mapToRegistry registry https://registry.npmjs.org/
-2695 silly mapToRegistry uri https://registry.npmjs.org/simple-plist
-2696 verbose request uri https://registry.npmjs.org/simple-plist
-2697 verbose request no auth needed
-2698 info attempt registry request try #1 at 14:27:07
-2699 verbose etag W/"595bc032-2471"
-2700 verbose lastModified Tue, 04 Jul 2017 16:20:02 GMT
-2701 http request GET https://registry.npmjs.org/simple-plist
-2702 verbose request uri https://registry.npmjs.org/pegjs
-2703 verbose request no auth needed
-2704 info attempt registry request try #1 at 14:27:07
-2705 verbose etag W/"59342ff7-750a"
-2706 verbose lastModified Sun, 04 Jun 2017 16:06:15 GMT
-2707 http request GET https://registry.npmjs.org/pegjs
-2708 http 304 https://registry.npmjs.org/pegjs
-2709 verbose headers { date: 'Mon, 28 Aug 2017 06:27:08 GMT',
-2709 verbose headers   via: '1.1 varnish',
-2709 verbose headers   'cache-control': 'max-age=300',
-2709 verbose headers   etag: 'W/"59342ff7-750a"',
-2709 verbose headers   age: '0',
-2709 verbose headers   connection: 'keep-alive',
-2709 verbose headers   'x-served-by': 'cache-nrt6132-NRT',
-2709 verbose headers   'x-cache': 'HIT',
-2709 verbose headers   'x-cache-hits': '1',
-2709 verbose headers   'x-timer': 'S1503901628.160180,VS0,VE145',
-2709 verbose headers   vary: 'Accept-Encoding, Accept' }
-2710 silly get cb [ 304,
-2710 silly get   { date: 'Mon, 28 Aug 2017 06:27:08 GMT',
-2710 silly get     via: '1.1 varnish',
-2710 silly get     'cache-control': 'max-age=300',
-2710 silly get     etag: 'W/"59342ff7-750a"',
-2710 silly get     age: '0',
-2710 silly get     connection: 'keep-alive',
-2710 silly get     'x-served-by': 'cache-nrt6132-NRT',
-2710 silly get     'x-cache': 'HIT',
-2710 silly get     'x-cache-hits': '1',
-2710 silly get     'x-timer': 'S1503901628.160180,VS0,VE145',
-2710 silly get     vary: 'Accept-Encoding, Accept' } ]
-2711 verbose etag https://registry.npmjs.org/pegjs from cache
-2712 verbose get saving pegjs to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\pegjs\.cache.json
-2713 silly resolveWithNewModule pegjs@0.10.0 checking installable status
-2714 silly cache add args [ 'pegjs@^0.10.0', null ]
-2715 verbose cache add spec pegjs@^0.10.0
-2716 silly cache add parsed spec Result {
-2716 silly cache add   raw: 'pegjs@^0.10.0',
-2716 silly cache add   scope: null,
-2716 silly cache add   name: 'pegjs',
-2716 silly cache add   rawSpec: '^0.10.0',
-2716 silly cache add   spec: '>=0.10.0-0 <0.11.0-0',
-2716 silly cache add   type: 'range' }
-2717 silly addNamed pegjs@>=0.10.0-0 <0.11.0-0
-2718 verbose addNamed ">=0.10.0-0 <0.11.0-0" is a valid semver range for pegjs
-2719 silly addNameRange { name: 'pegjs', range: '>=0.10.0-0 <0.11.0-0', hasData: false }
-2720 silly mapToRegistry name pegjs
-2721 silly mapToRegistry using default registry
-2722 silly mapToRegistry registry https://registry.npmjs.org/
-2723 silly mapToRegistry uri https://registry.npmjs.org/pegjs
-2724 verbose addNameRange registry:https://registry.npmjs.org/pegjs not in flight; fetching
-2725 verbose get https://registry.npmjs.org/pegjs not expired, no request
-2726 silly addNameRange number 2 { name: 'pegjs', range: '>=0.10.0-0 <0.11.0-0', hasData: true }
-2727 silly addNameRange versions [ 'pegjs',
-2727 silly addNameRange   [ '0.6.0', '0.6.1', '0.6.2', '0.7.0', '0.8.0', '0.9.0', '0.10.0' ] ]
-2728 silly addNamed pegjs@0.10.0
-2729 verbose addNamed "0.10.0" is a plain semver version for pegjs
-2730 silly cache afterAdd pegjs@0.10.0
-2731 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\pegjs\0.10.0\package\package.json not in flight; writing
-2732 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\pegjs\0.10.0\package\package.json written
-2733 http 304 https://registry.npmjs.org/simple-plist
-2734 verbose headers { date: 'Mon, 28 Aug 2017 06:27:08 GMT',
-2734 verbose headers   via: '1.1 varnish',
-2734 verbose headers   'cache-control': 'max-age=300',
-2734 verbose headers   etag: 'W/"595bc032-2471"',
-2734 verbose headers   age: '0',
-2734 verbose headers   connection: 'keep-alive',
-2734 verbose headers   'x-served-by': 'cache-nrt6124-NRT',
-2734 verbose headers   'x-cache': 'HIT',
-2734 verbose headers   'x-cache-hits': '1',
-2734 verbose headers   'x-timer': 'S1503901628.154095,VS0,VE577',
-2734 verbose headers   vary: 'Accept-Encoding, Accept' }
-2735 silly get cb [ 304,
-2735 silly get   { date: 'Mon, 28 Aug 2017 06:27:08 GMT',
-2735 silly get     via: '1.1 varnish',
-2735 silly get     'cache-control': 'max-age=300',
-2735 silly get     etag: 'W/"595bc032-2471"',
-2735 silly get     age: '0',
-2735 silly get     connection: 'keep-alive',
-2735 silly get     'x-served-by': 'cache-nrt6124-NRT',
-2735 silly get     'x-cache': 'HIT',
-2735 silly get     'x-cache-hits': '1',
-2735 silly get     'x-timer': 'S1503901628.154095,VS0,VE577',
-2735 silly get     vary: 'Accept-Encoding, Accept' } ]
-2736 verbose etag https://registry.npmjs.org/simple-plist from cache
-2737 verbose get saving simple-plist to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\simple-plist\.cache.json
-2738 silly resolveWithNewModule simple-plist@0.2.1 checking installable status
-2739 silly cache add args [ 'simple-plist@^0.2.1', null ]
-2740 verbose cache add spec simple-plist@^0.2.1
-2741 silly cache add parsed spec Result {
-2741 silly cache add   raw: 'simple-plist@^0.2.1',
-2741 silly cache add   scope: null,
-2741 silly cache add   name: 'simple-plist',
-2741 silly cache add   rawSpec: '^0.2.1',
-2741 silly cache add   spec: '>=0.2.1-0 <0.3.0-0',
-2741 silly cache add   type: 'range' }
-2742 silly addNamed simple-plist@>=0.2.1-0 <0.3.0-0
-2743 verbose addNamed ">=0.2.1-0 <0.3.0-0" is a valid semver range for simple-plist
-2744 silly addNameRange { name: 'simple-plist',
-2744 silly addNameRange   range: '>=0.2.1-0 <0.3.0-0',
-2744 silly addNameRange   hasData: false }
-2745 silly mapToRegistry name simple-plist
-2746 silly mapToRegistry using default registry
-2747 silly mapToRegistry registry https://registry.npmjs.org/
-2748 silly mapToRegistry uri https://registry.npmjs.org/simple-plist
-2749 verbose addNameRange registry:https://registry.npmjs.org/simple-plist not in flight; fetching
-2750 verbose get https://registry.npmjs.org/simple-plist not expired, no request
-2751 silly addNameRange number 2 { name: 'simple-plist',
-2751 silly addNameRange   range: '>=0.2.1-0 <0.3.0-0',
-2751 silly addNameRange   hasData: true }
-2752 silly addNameRange versions [ 'simple-plist',
-2752 silly addNameRange   [ '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.1.4', '0.2.1' ] ]
-2753 silly addNamed simple-plist@0.2.1
-2754 verbose addNamed "0.2.1" is a plain semver version for simple-plist
-2755 silly cache afterAdd simple-plist@0.2.1
-2756 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\simple-plist\0.2.1\package\package.json not in flight; writing
-2757 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\simple-plist\0.2.1\package\package.json written
-2758 silly fetchNamedPackageData bplist-creator
-2759 silly mapToRegistry name bplist-creator
-2760 silly mapToRegistry using default registry
-2761 silly mapToRegistry registry https://registry.npmjs.org/
-2762 silly mapToRegistry uri https://registry.npmjs.org/bplist-creator
-2763 silly fetchNamedPackageData plist
-2764 silly mapToRegistry name plist
-2765 silly mapToRegistry using default registry
-2766 silly mapToRegistry registry https://registry.npmjs.org/
-2767 silly mapToRegistry uri https://registry.npmjs.org/plist
-2768 verbose request uri https://registry.npmjs.org/bplist-creator
-2769 verbose request no auth needed
-2770 info attempt registry request try #1 at 14:27:08
-2771 verbose etag W/"57cb6b84-24ea"
-2772 verbose lastModified Sun, 04 Sep 2016 00:32:04 GMT
-2773 http request GET https://registry.npmjs.org/bplist-creator
-2774 verbose request uri https://registry.npmjs.org/plist
-2775 verbose request no auth needed
-2776 info attempt registry request try #1 at 14:27:08
-2777 verbose etag W/"595bb046-6b1f"
-2778 verbose lastModified Tue, 04 Jul 2017 15:12:06 GMT
-2779 http request GET https://registry.npmjs.org/plist
-2780 http 304 https://registry.npmjs.org/bplist-creator
-2781 verbose headers { date: 'Mon, 28 Aug 2017 06:27:09 GMT',
-2781 verbose headers   via: '1.1 varnish',
-2781 verbose headers   'cache-control': 'max-age=300',
-2781 verbose headers   etag: 'W/"57cb6b84-24ea"',
-2781 verbose headers   age: '0',
-2781 verbose headers   connection: 'keep-alive',
-2781 verbose headers   'x-served-by': 'cache-nrt6123-NRT',
-2781 verbose headers   'x-cache': 'HIT',
-2781 verbose headers   'x-cache-hits': '1',
-2781 verbose headers   'x-timer': 'S1503901629.207742,VS0,VE536',
-2781 verbose headers   vary: 'Accept-Encoding, Accept' }
-2782 silly get cb [ 304,
-2782 silly get   { date: 'Mon, 28 Aug 2017 06:27:09 GMT',
-2782 silly get     via: '1.1 varnish',
-2782 silly get     'cache-control': 'max-age=300',
-2782 silly get     etag: 'W/"57cb6b84-24ea"',
-2782 silly get     age: '0',
-2782 silly get     connection: 'keep-alive',
-2782 silly get     'x-served-by': 'cache-nrt6123-NRT',
-2782 silly get     'x-cache': 'HIT',
-2782 silly get     'x-cache-hits': '1',
-2782 silly get     'x-timer': 'S1503901629.207742,VS0,VE536',
-2782 silly get     vary: 'Accept-Encoding, Accept' } ]
-2783 verbose etag https://registry.npmjs.org/bplist-creator from cache
-2784 verbose get saving bplist-creator to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\bplist-creator\.cache.json
-2785 silly resolveWithNewModule bplist-creator@0.0.7 checking installable status
-2786 silly cache add args [ 'bplist-creator@0.0.7', null ]
-2787 verbose cache add spec bplist-creator@0.0.7
-2788 silly cache add parsed spec Result {
-2788 silly cache add   raw: 'bplist-creator@0.0.7',
-2788 silly cache add   scope: null,
-2788 silly cache add   name: 'bplist-creator',
-2788 silly cache add   rawSpec: '0.0.7',
-2788 silly cache add   spec: '0.0.7',
-2788 silly cache add   type: 'version' }
-2789 silly addNamed bplist-creator@0.0.7
-2790 verbose addNamed "0.0.7" is a plain semver version for bplist-creator
-2791 silly mapToRegistry name bplist-creator
-2792 silly mapToRegistry using default registry
-2793 silly mapToRegistry registry https://registry.npmjs.org/
-2794 silly mapToRegistry uri https://registry.npmjs.org/bplist-creator
-2795 verbose addNameVersion registry:https://registry.npmjs.org/bplist-creator not in flight; fetching
-2796 verbose get https://registry.npmjs.org/bplist-creator not expired, no request
-2797 silly cache afterAdd bplist-creator@0.0.7
-2798 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\bplist-creator\0.0.7\package\package.json not in flight; writing
-2799 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\bplist-creator\0.0.7\package\package.json written
-2800 http 304 https://registry.npmjs.org/plist
-2801 verbose headers { date: 'Mon, 28 Aug 2017 06:27:10 GMT',
-2801 verbose headers   via: '1.1 varnish',
-2801 verbose headers   'cache-control': 'max-age=300',
-2801 verbose headers   etag: 'W/"595bb046-6b1f"',
-2801 verbose headers   age: '56',
-2801 verbose headers   connection: 'keep-alive',
-2801 verbose headers   'x-served-by': 'cache-nrt6128-NRT',
-2801 verbose headers   'x-cache': 'HIT',
-2801 verbose headers   'x-cache-hits': '1',
-2801 verbose headers   'x-timer': 'S1503901630.206252,VS0,VE1',
-2801 verbose headers   vary: 'Accept-Encoding, Accept' }
-2802 silly get cb [ 304,
-2802 silly get   { date: 'Mon, 28 Aug 2017 06:27:10 GMT',
-2802 silly get     via: '1.1 varnish',
-2802 silly get     'cache-control': 'max-age=300',
-2802 silly get     etag: 'W/"595bb046-6b1f"',
-2802 silly get     age: '56',
-2802 silly get     connection: 'keep-alive',
-2802 silly get     'x-served-by': 'cache-nrt6128-NRT',
-2802 silly get     'x-cache': 'HIT',
-2802 silly get     'x-cache-hits': '1',
-2802 silly get     'x-timer': 'S1503901630.206252,VS0,VE1',
-2802 silly get     vary: 'Accept-Encoding, Accept' } ]
-2803 verbose etag https://registry.npmjs.org/plist from cache
-2804 verbose get saving plist to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\plist\.cache.json
-2805 silly resolveWithNewModule plist@2.0.1 checking installable status
-2806 silly cache add args [ 'plist@2.0.1', null ]
-2807 verbose cache add spec plist@2.0.1
-2808 silly cache add parsed spec Result {
-2808 silly cache add   raw: 'plist@2.0.1',
-2808 silly cache add   scope: null,
-2808 silly cache add   name: 'plist',
-2808 silly cache add   rawSpec: '2.0.1',
-2808 silly cache add   spec: '2.0.1',
-2808 silly cache add   type: 'version' }
-2809 silly addNamed plist@2.0.1
-2810 verbose addNamed "2.0.1" is a plain semver version for plist
-2811 silly mapToRegistry name plist
-2812 silly mapToRegistry using default registry
-2813 silly mapToRegistry registry https://registry.npmjs.org/
-2814 silly mapToRegistry uri https://registry.npmjs.org/plist
-2815 verbose addNameVersion registry:https://registry.npmjs.org/plist not in flight; fetching
-2816 verbose get https://registry.npmjs.org/plist not expired, no request
-2817 silly cache afterAdd plist@2.0.1
-2818 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\plist\2.0.1\package\package.json not in flight; writing
-2819 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\plist\2.0.1\package\package.json written
-2820 silly fetchNamedPackageData stream-buffers
-2821 silly mapToRegistry name stream-buffers
-2822 silly mapToRegistry using default registry
-2823 silly mapToRegistry registry https://registry.npmjs.org/
-2824 silly mapToRegistry uri https://registry.npmjs.org/stream-buffers
-2825 verbose request uri https://registry.npmjs.org/stream-buffers
-2826 verbose request no auth needed
-2827 info attempt registry request try #1 at 14:27:10
-2828 verbose etag W/"58ec71f4-6046"
-2829 verbose lastModified Tue, 11 Apr 2017 06:04:36 GMT
-2830 http request GET https://registry.npmjs.org/stream-buffers
-2831 http 304 https://registry.npmjs.org/stream-buffers
-2832 verbose headers { date: 'Mon, 28 Aug 2017 06:27:10 GMT',
-2832 verbose headers   via: '1.1 varnish',
-2832 verbose headers   'cache-control': 'max-age=300',
-2832 verbose headers   etag: 'W/"58ec71f4-6046"',
-2832 verbose headers   age: '0',
-2832 verbose headers   connection: 'keep-alive',
-2832 verbose headers   'x-served-by': 'cache-nrt6135-NRT',
-2832 verbose headers   'x-cache': 'HIT',
-2832 verbose headers   'x-cache-hits': '1',
-2832 verbose headers   'x-timer': 'S1503901631.710414,VS0,VE125',
-2832 verbose headers   vary: 'Accept-Encoding, Accept' }
-2833 silly get cb [ 304,
-2833 silly get   { date: 'Mon, 28 Aug 2017 06:27:10 GMT',
-2833 silly get     via: '1.1 varnish',
-2833 silly get     'cache-control': 'max-age=300',
-2833 silly get     etag: 'W/"58ec71f4-6046"',
-2833 silly get     age: '0',
-2833 silly get     connection: 'keep-alive',
-2833 silly get     'x-served-by': 'cache-nrt6135-NRT',
-2833 silly get     'x-cache': 'HIT',
-2833 silly get     'x-cache-hits': '1',
-2833 silly get     'x-timer': 'S1503901631.710414,VS0,VE125',
-2833 silly get     vary: 'Accept-Encoding, Accept' } ]
-2834 verbose etag https://registry.npmjs.org/stream-buffers from cache
-2835 verbose get saving stream-buffers to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\stream-buffers\.cache.json
-2836 silly resolveWithNewModule stream-buffers@2.2.0 checking installable status
-2837 silly cache add args [ 'stream-buffers@~2.2.0', null ]
-2838 verbose cache add spec stream-buffers@~2.2.0
-2839 silly cache add parsed spec Result {
-2839 silly cache add   raw: 'stream-buffers@~2.2.0',
-2839 silly cache add   scope: null,
-2839 silly cache add   name: 'stream-buffers',
-2839 silly cache add   rawSpec: '~2.2.0',
-2839 silly cache add   spec: '>=2.2.0-0 <2.3.0-0',
-2839 silly cache add   type: 'range' }
-2840 silly addNamed stream-buffers@>=2.2.0-0 <2.3.0-0
-2841 verbose addNamed ">=2.2.0-0 <2.3.0-0" is a valid semver range for stream-buffers
-2842 silly addNameRange { name: 'stream-buffers',
-2842 silly addNameRange   range: '>=2.2.0-0 <2.3.0-0',
-2842 silly addNameRange   hasData: false }
-2843 silly mapToRegistry name stream-buffers
-2844 silly mapToRegistry using default registry
-2845 silly mapToRegistry registry https://registry.npmjs.org/
-2846 silly mapToRegistry uri https://registry.npmjs.org/stream-buffers
-2847 verbose addNameRange registry:https://registry.npmjs.org/stream-buffers not in flight; fetching
-2848 verbose get https://registry.npmjs.org/stream-buffers not expired, no request
-2849 silly addNameRange number 2 { name: 'stream-buffers',
-2849 silly addNameRange   range: '>=2.2.0-0 <2.3.0-0',
-2849 silly addNameRange   hasData: true }
-2850 silly addNameRange versions [ 'stream-buffers',
-2850 silly addNameRange   [ '0.1.0',
-2850 silly addNameRange     '0.2.0',
-2850 silly addNameRange     '0.2.1',
-2850 silly addNameRange     '0.2.2',
-2850 silly addNameRange     '0.2.3',
-2850 silly addNameRange     '0.2.4',
-2850 silly addNameRange     '0.2.5',
-2850 silly addNameRange     '0.2.6',
-2850 silly addNameRange     '1.0.0',
-2850 silly addNameRange     '1.0.1',
-2850 silly addNameRange     '1.1.0',
-2850 silly addNameRange     '2.0.0',
-2850 silly addNameRange     '2.1.0',
-2850 silly addNameRange     '2.2.0',
-2850 silly addNameRange     '3.0.0',
-2850 silly addNameRange     '3.0.1' ] ]
-2851 silly addNamed stream-buffers@2.2.0
-2852 verbose addNamed "2.2.0" is a plain semver version for stream-buffers
-2853 silly cache afterAdd stream-buffers@2.2.0
-2854 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\stream-buffers\2.2.0\package\package.json not in flight; writing
-2855 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\stream-buffers\2.2.0\package\package.json written
-2856 silly fetchNamedPackageData base64-js
-2857 silly mapToRegistry name base64-js
-2858 silly mapToRegistry using default registry
-2859 silly mapToRegistry registry https://registry.npmjs.org/
-2860 silly mapToRegistry uri https://registry.npmjs.org/base64-js
-2861 silly fetchNamedPackageData xmlbuilder
-2862 silly mapToRegistry name xmlbuilder
-2863 silly mapToRegistry using default registry
-2864 silly mapToRegistry registry https://registry.npmjs.org/
-2865 silly mapToRegistry uri https://registry.npmjs.org/xmlbuilder
-2866 verbose request uri https://registry.npmjs.org/base64-js
-2867 verbose request no auth needed
-2868 info attempt registry request try #1 at 14:27:11
-2869 verbose etag W/"596b05c0-564d"
-2870 verbose lastModified Sun, 16 Jul 2017 06:20:48 GMT
-2871 http request GET https://registry.npmjs.org/base64-js
-2872 verbose request uri https://registry.npmjs.org/xmlbuilder
-2873 verbose request no auth needed
-2874 info attempt registry request try #1 at 14:27:11
-2875 verbose etag W/"599430fb-1663f"
-2876 verbose lastModified Wed, 16 Aug 2017 11:48:11 GMT
-2877 http request GET https://registry.npmjs.org/xmlbuilder
-2878 http 304 https://registry.npmjs.org/xmlbuilder
-2879 verbose headers { date: 'Mon, 28 Aug 2017 06:27:11 GMT',
-2879 verbose headers   via: '1.1 varnish',
-2879 verbose headers   'cache-control': 'max-age=300',
-2879 verbose headers   etag: 'W/"599430fb-1663f"',
-2879 verbose headers   age: '32',
-2879 verbose headers   connection: 'keep-alive',
-2879 verbose headers   'x-served-by': 'cache-nrt6129-NRT',
-2879 verbose headers   'x-cache': 'HIT',
-2879 verbose headers   'x-cache-hits': '1',
-2879 verbose headers   'x-timer': 'S1503901631.350648,VS0,VE0',
-2879 verbose headers   vary: 'Accept-Encoding, Accept' }
-2880 silly get cb [ 304,
-2880 silly get   { date: 'Mon, 28 Aug 2017 06:27:11 GMT',
-2880 silly get     via: '1.1 varnish',
-2880 silly get     'cache-control': 'max-age=300',
-2880 silly get     etag: 'W/"599430fb-1663f"',
-2880 silly get     age: '32',
-2880 silly get     connection: 'keep-alive',
-2880 silly get     'x-served-by': 'cache-nrt6129-NRT',
-2880 silly get     'x-cache': 'HIT',
-2880 silly get     'x-cache-hits': '1',
-2880 silly get     'x-timer': 'S1503901631.350648,VS0,VE0',
-2880 silly get     vary: 'Accept-Encoding, Accept' } ]
-2881 verbose etag https://registry.npmjs.org/xmlbuilder from cache
-2882 verbose get saving xmlbuilder to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\xmlbuilder\.cache.json
-2883 silly resolveWithNewModule xmlbuilder@8.2.2 checking installable status
-2884 silly cache add args [ 'xmlbuilder@8.2.2', null ]
-2885 verbose cache add spec xmlbuilder@8.2.2
-2886 silly cache add parsed spec Result {
-2886 silly cache add   raw: 'xmlbuilder@8.2.2',
-2886 silly cache add   scope: null,
-2886 silly cache add   name: 'xmlbuilder',
-2886 silly cache add   rawSpec: '8.2.2',
-2886 silly cache add   spec: '8.2.2',
-2886 silly cache add   type: 'version' }
-2887 silly addNamed xmlbuilder@8.2.2
-2888 verbose addNamed "8.2.2" is a plain semver version for xmlbuilder
-2889 silly mapToRegistry name xmlbuilder
-2890 silly mapToRegistry using default registry
-2891 silly mapToRegistry registry https://registry.npmjs.org/
-2892 silly mapToRegistry uri https://registry.npmjs.org/xmlbuilder
-2893 verbose addNameVersion registry:https://registry.npmjs.org/xmlbuilder not in flight; fetching
-2894 verbose get https://registry.npmjs.org/xmlbuilder not expired, no request
-2895 silly cache afterAdd xmlbuilder@8.2.2
-2896 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\xmlbuilder\8.2.2\package\package.json not in flight; writing
-2897 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\xmlbuilder\8.2.2\package\package.json written
-2898 http 304 https://registry.npmjs.org/base64-js
-2899 verbose headers { date: 'Mon, 28 Aug 2017 06:27:11 GMT',
-2899 verbose headers   via: '1.1 varnish',
-2899 verbose headers   'cache-control': 'max-age=300',
-2899 verbose headers   etag: 'W/"596b05c0-564d"',
-2899 verbose headers   age: '10',
-2899 verbose headers   connection: 'keep-alive',
-2899 verbose headers   'x-served-by': 'cache-nrt6126-NRT',
-2899 verbose headers   'x-cache': 'HIT',
-2899 verbose headers   'x-cache-hits': '2',
-2899 verbose headers   'x-timer': 'S1503901631.346212,VS0,VE0',
-2899 verbose headers   vary: 'Accept-Encoding, Accept' }
-2900 silly get cb [ 304,
-2900 silly get   { date: 'Mon, 28 Aug 2017 06:27:11 GMT',
-2900 silly get     via: '1.1 varnish',
-2900 silly get     'cache-control': 'max-age=300',
-2900 silly get     etag: 'W/"596b05c0-564d"',
-2900 silly get     age: '10',
-2900 silly get     connection: 'keep-alive',
-2900 silly get     'x-served-by': 'cache-nrt6126-NRT',
-2900 silly get     'x-cache': 'HIT',
-2900 silly get     'x-cache-hits': '2',
-2900 silly get     'x-timer': 'S1503901631.346212,VS0,VE0',
-2900 silly get     vary: 'Accept-Encoding, Accept' } ]
-2901 verbose etag https://registry.npmjs.org/base64-js from cache
-2902 verbose get saving base64-js to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\base64-js\.cache.json
-2903 silly resolveWithNewModule base64-js@1.1.2 checking installable status
-2904 silly cache add args [ 'base64-js@1.1.2', null ]
-2905 verbose cache add spec base64-js@1.1.2
-2906 silly cache add parsed spec Result {
-2906 silly cache add   raw: 'base64-js@1.1.2',
-2906 silly cache add   scope: null,
-2906 silly cache add   name: 'base64-js',
-2906 silly cache add   rawSpec: '1.1.2',
-2906 silly cache add   spec: '1.1.2',
-2906 silly cache add   type: 'version' }
-2907 silly addNamed base64-js@1.1.2
-2908 verbose addNamed "1.1.2" is a plain semver version for base64-js
-2909 silly mapToRegistry name base64-js
-2910 silly mapToRegistry using default registry
-2911 silly mapToRegistry registry https://registry.npmjs.org/
-2912 silly mapToRegistry uri https://registry.npmjs.org/base64-js
-2913 verbose addNameVersion registry:https://registry.npmjs.org/base64-js not in flight; fetching
-2914 verbose get https://registry.npmjs.org/base64-js not expired, no request
-2915 silly cache afterAdd base64-js@1.1.2
-2916 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\base64-js\1.1.2\package\package.json not in flight; writing
-2917 verbose afterAdd C:\Users\Ben\AppData\Roaming\npm-cache\base64-js\1.1.2\package\package.json written
-2918 silly fetchNamedPackageData fsevents
-2919 silly mapToRegistry name fsevents
-2920 silly mapToRegistry using default registry
-2921 silly mapToRegistry registry https://registry.npmjs.org/
-2922 silly mapToRegistry uri https://registry.npmjs.org/fsevents
-2923 verbose request uri https://registry.npmjs.org/fsevents
-2924 verbose request no auth needed
-2925 info attempt registry request try #1 at 14:27:12
-2926 verbose etag W/"597215e7-dd9a"
-2927 verbose lastModified Fri, 21 Jul 2017 14:55:35 GMT
-2928 http request GET https://registry.npmjs.org/fsevents
-2929 http 304 https://registry.npmjs.org/fsevents
-2930 verbose headers { date: 'Mon, 28 Aug 2017 06:27:13 GMT',
-2930 verbose headers   via: '1.1 varnish',
-2930 verbose headers   'cache-control': 'max-age=300',
-2930 verbose headers   etag: 'W/"597215e7-dd9a"',
-2930 verbose headers   age: '232',
-2930 verbose headers   connection: 'keep-alive',
-2930 verbose headers   'x-served-by': 'cache-nrt6121-NRT',
-2930 verbose headers   'x-cache': 'HIT',
-2930 verbose headers   'x-cache-hits': '21',
-2930 verbose headers   'x-timer': 'S1503901633.228442,VS0,VE0',
-2930 verbose headers   vary: 'Accept-Encoding, Accept' }
-2931 silly get cb [ 304,
-2931 silly get   { date: 'Mon, 28 Aug 2017 06:27:13 GMT',
-2931 silly get     via: '1.1 varnish',
-2931 silly get     'cache-control': 'max-age=300',
-2931 silly get     etag: 'W/"597215e7-dd9a"',
-2931 silly get     age: '232',
-2931 silly get     connection: 'keep-alive',
-2931 silly get     'x-served-by': 'cache-nrt6121-NRT',
-2931 silly get     'x-cache': 'HIT',
-2931 silly get     'x-cache-hits': '21',
-2931 silly get     'x-timer': 'S1503901633.228442,VS0,VE0',
-2931 silly get     vary: 'Accept-Encoding, Accept' } ]
-2932 verbose etag https://registry.npmjs.org/fsevents from cache
-2933 verbose get saving fsevents to C:\Users\Ben\AppData\Roaming\npm-cache\registry.npmjs.org\fsevents\.cache.json
-2934 silly resolveWithNewModule fsevents@1.1.2 checking installable status
-2935 warn install Couldn't install optional dependency: Unsupported
-2936 verbose install Error: Unsupported
-2936 verbose install     at checkPlatform (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\npm-install-checks\index.js:46:14)
-2936 verbose install     at Array.<anonymous> (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\slide\lib\bind-actor.js:15:8)
-2936 verbose install     at LOOP (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\slide\lib\chain.js:15:14)
-2936 verbose install     at D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\slide\lib\chain.js:18:7
-2936 verbose install     at checkEngine (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\npm-install-checks\index.js:25:10)
-2936 verbose install     at Array.<anonymous> (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\slide\lib\bind-actor.js:15:8)
-2936 verbose install     at LOOP (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\slide\lib\chain.js:15:14)
-2936 verbose install     at chain (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\slide\lib\chain.js:20:5)
-2936 verbose install     at module.exports.isInstallable (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\npm\lib\install\validate-args.js:26:3)
-2936 verbose install     at resolveWithNewModule (D:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\node_modules\npm\lib\install\deps.js:408:12)
-2937 silly loadAllDepsIntoIdealTree Finishing
-2938 silly idealTree:prePrune ionic-tabs@1.1.1
-2938 silly idealTree:prePrune ├─┬ @ionic/cli-plugin-ionic1@1.1.2
-2938 silly idealTree:prePrune │ └── glob-watcher@3.2.0
-2938 silly idealTree:prePrune ├─┬ @ionic/cli-utils@1.1.2
-2938 silly idealTree:prePrune │ ├── cross-spawn@4.0.2
-2938 silly idealTree:prePrune │ ├── is-fullwidth-code-point@2.0.0
-2938 silly idealTree:prePrune │ ├── lru-cache@4.1.0
-2938 silly idealTree:prePrune │ ├── semver@5.3.0
-2938 silly idealTree:prePrune │ └── string-width@2.0.0
-2938 silly idealTree:prePrune ├── abbrev@1.1.0
-2938 silly idealTree:prePrune ├── accepts@1.3.3
-2938 silly idealTree:prePrune ├── ajv@4.11.8
-2938 silly idealTree:prePrune ├── amdefine@1.0.1
-2938 silly idealTree:prePrune ├── ansi-escapes@2.0.0
-2938 silly idealTree:prePrune ├── ansi-regex@2.1.1
-2938 silly idealTree:prePrune ├── ansi-styles@2.2.1
-2938 silly idealTree:prePrune ├── anymatch@1.3.0
-2938 silly idealTree:prePrune ├── aproba@1.1.2
-2938 silly idealTree:prePrune ├─┬ archiver@1.3.0
-2938 silly idealTree:prePrune │ ├── glob@7.1.2
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── lodash@4.17.4
-2938 silly idealTree:prePrune │ ├── minimatch@3.0.4
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├─┬ archiver-utils@1.3.0
-2938 silly idealTree:prePrune │ ├── glob@7.1.2
-2938 silly idealTree:prePrune │ ├── graceful-fs@4.1.11
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── lodash@4.17.4
-2938 silly idealTree:prePrune │ ├── minimatch@3.0.4
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── archy@1.0.0
-2938 silly idealTree:prePrune ├─┬ are-we-there-yet@1.1.4
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── arr-diff@2.0.0
-2938 silly idealTree:prePrune ├── arr-flatten@1.0.3
-2938 silly idealTree:prePrune ├── array-differ@1.0.0
-2938 silly idealTree:prePrune ├── array-each@1.0.1
-2938 silly idealTree:prePrune ├── array-find-index@1.0.2
-2938 silly idealTree:prePrune ├── array-flatten@1.1.1
-2938 silly idealTree:prePrune ├── array-slice@1.0.0
-2938 silly idealTree:prePrune ├── array-uniq@1.0.3
-2938 silly idealTree:prePrune ├── array-unique@0.2.1
-2938 silly idealTree:prePrune ├── arrify@1.0.1
-2938 silly idealTree:prePrune ├── asn1@0.2.3
-2938 silly idealTree:prePrune ├── assert-plus@0.2.0
-2938 silly idealTree:prePrune ├─┬ async@2.4.1
-2938 silly idealTree:prePrune │ └── lodash@4.17.4
-2938 silly idealTree:prePrune ├─┬ async-done@1.2.2
-2938 silly idealTree:prePrune │ └─┬ end-of-stream@1.4.0
-2938 silly idealTree:prePrune │   └── once@1.4.0
-2938 silly idealTree:prePrune ├── async-each@1.0.1
-2938 silly idealTree:prePrune ├── async-foreach@0.1.3
-2938 silly idealTree:prePrune ├── asynckit@0.4.0
-2938 silly idealTree:prePrune ├── aws-sign2@0.6.0
-2938 silly idealTree:prePrune ├── aws4@1.6.0
-2938 silly idealTree:prePrune ├── balanced-match@0.4.2
-2938 silly idealTree:prePrune ├── bcrypt-pbkdf@1.0.1
-2938 silly idealTree:prePrune ├── beeper@1.1.1
-2938 silly idealTree:prePrune ├── binary-extensions@1.8.0
-2938 silly idealTree:prePrune ├─┬ bl@1.2.1
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── block-stream@0.0.9
-2938 silly idealTree:prePrune ├── body@5.1.0
-2938 silly idealTree:prePrune ├── boom@2.10.1
-2938 silly idealTree:prePrune ├── bower@1.8.0
-2938 silly idealTree:prePrune ├── brace-expansion@1.1.7
-2938 silly idealTree:prePrune ├── braces@1.8.5
-2938 silly idealTree:prePrune ├── buffer-crc32@0.2.13
-2938 silly idealTree:prePrune ├── bufferstreams@0.0.2
-2938 silly idealTree:prePrune ├── builtin-modules@1.1.1
-2938 silly idealTree:prePrune ├── bytes@1.0.0
-2938 silly idealTree:prePrune ├── camelcase@2.1.1
-2938 silly idealTree:prePrune ├── camelcase-keys@2.1.0
-2938 silly idealTree:prePrune ├── caseless@0.12.0
-2938 silly idealTree:prePrune ├── chalk@1.1.3
-2938 silly idealTree:prePrune ├── chokidar@1.7.0
-2938 silly idealTree:prePrune ├── ci-info@1.0.0
-2938 silly idealTree:prePrune ├─┬ clean-css@3.0.10
-2938 silly idealTree:prePrune │ └── source-map@0.1.43
-2938 silly idealTree:prePrune ├── cli-cursor@2.1.0
-2938 silly idealTree:prePrune ├── cli-width@2.1.0
-2938 silly idealTree:prePrune ├── cliui@3.2.0
-2938 silly idealTree:prePrune ├── clone@1.0.2
-2938 silly idealTree:prePrune ├── clone-buffer@1.0.0
-2938 silly idealTree:prePrune ├── clone-stats@0.0.1
-2938 silly idealTree:prePrune ├── cloneable-readable@1.0.0
-2938 silly idealTree:prePrune ├── co@4.6.0
-2938 silly idealTree:prePrune ├── code-point-at@1.1.0
-2938 silly idealTree:prePrune ├── color-convert@1.9.0
-2938 silly idealTree:prePrune ├── color-name@1.1.3
-2938 silly idealTree:prePrune ├── combined-stream@1.0.5
-2938 silly idealTree:prePrune ├── commander@2.5.1
-2938 silly idealTree:prePrune ├── component-emitter@1.2.1
-2938 silly idealTree:prePrune ├─┬ compress-commons@1.2.0
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── concat-map@0.0.1
-2938 silly idealTree:prePrune ├── concat-with-sourcemaps@1.0.4
-2938 silly idealTree:prePrune ├── console-control-strings@1.1.0
-2938 silly idealTree:prePrune ├── content-disposition@0.5.2
-2938 silly idealTree:prePrune ├── content-type@1.0.2
-2938 silly idealTree:prePrune ├── continuable-cache@0.3.1
-2938 silly idealTree:prePrune ├── cookie@0.3.1
-2938 silly idealTree:prePrune ├── cookie-signature@1.0.6
-2938 silly idealTree:prePrune ├── cookiejar@2.1.1
-2938 silly idealTree:prePrune ├── cordova-hot-code-push-plugin@1.5.3
-2938 silly idealTree:prePrune ├─┬ cordova-ios@4.4.0
-2938 silly idealTree:prePrune │ ├── abbrev@1.0.9
-2938 silly idealTree:prePrune │ ├── ansi@0.3.1
-2938 silly idealTree:prePrune │ ├── balanced-match@0.4.2
-2938 silly idealTree:prePrune │ ├── base64-js@0.0.8
-2938 silly idealTree:prePrune │ ├── big-integer@1.6.17
-2938 silly idealTree:prePrune │ ├── bplist-creator@0.0.4
-2938 silly idealTree:prePrune │ ├── bplist-parser@0.1.1
-2938 silly idealTree:prePrune │ ├── brace-expansion@1.1.6
-2938 silly idealTree:prePrune │ ├── concat-map@0.0.1
-2938 silly idealTree:prePrune │ ├── cordova-common@2.0.2
-2938 silly idealTree:prePrune │ ├── cordova-registry-mapper@1.1.15
-2938 silly idealTree:prePrune │ ├── elementtree@0.1.6
-2938 silly idealTree:prePrune │ ├── glob@5.0.15
-2938 silly idealTree:prePrune │ ├── inflight@1.0.6
-2938 silly idealTree:prePrune │ ├── inherits@2.0.3
-2938 silly idealTree:prePrune │ ├─┬ ios-sim@5.0.12
-2938 silly idealTree:prePrune │ │ ├── bplist-parser@0.0.6
-2938 silly idealTree:prePrune │ │ └── nopt@1.0.9
-2938 silly idealTree:prePrune │ ├── lodash@3.10.1
-2938 silly idealTree:prePrune │ ├── minimatch@3.0.3
-2938 silly idealTree:prePrune │ ├── node-uuid@1.4.7
-2938 silly idealTree:prePrune │ ├── nopt@3.0.6
-2938 silly idealTree:prePrune │ ├── once@1.4.0
-2938 silly idealTree:prePrune │ ├── os-homedir@1.0.2
-2938 silly idealTree:prePrune │ ├── os-tmpdir@1.0.2
-2938 silly idealTree:prePrune │ ├── osenv@0.1.3
-2938 silly idealTree:prePrune │ ├── path-is-absolute@1.0.1
-2938 silly idealTree:prePrune │ ├── pegjs@0.9.0
-2938 silly idealTree:prePrune │ ├── plist@1.2.0
-2938 silly idealTree:prePrune │ ├── q@1.4.1
-2938 silly idealTree:prePrune │ ├── sax@0.3.5
-2938 silly idealTree:prePrune │ ├── semver@5.3.0
-2938 silly idealTree:prePrune │ ├── shelljs@0.5.3
-2938 silly idealTree:prePrune │ ├─┬ simctl@0.1.0
-2938 silly idealTree:prePrune │ │ └── shelljs@0.2.6
-2938 silly idealTree:prePrune │ ├─┬ simple-plist@0.1.4
-2938 silly idealTree:prePrune │ │ └── bplist-parser@0.0.6
-2938 silly idealTree:prePrune │ ├── stream-buffers@0.2.6
-2938 silly idealTree:prePrune │ ├── tail@0.4.0
-2938 silly idealTree:prePrune │ ├── underscore@1.8.3
-2938 silly idealTree:prePrune │ ├── unorm@1.4.1
-2938 silly idealTree:prePrune │ ├── util-deprecate@1.0.2
-2938 silly idealTree:prePrune │ ├── wrappy@1.0.2
-2938 silly idealTree:prePrune │ ├─┬ xcode@0.9.3
-2938 silly idealTree:prePrune │ │ ├── base64-js@1.1.2
-2938 silly idealTree:prePrune │ │ ├── bplist-creator@0.0.7
-2938 silly idealTree:prePrune │ │ ├── pegjs@0.10.0
-2938 silly idealTree:prePrune │ │ ├── plist@2.0.1
-2938 silly idealTree:prePrune │ │ ├── simple-plist@0.2.1
-2938 silly idealTree:prePrune │ │ ├── stream-buffers@2.2.0
-2938 silly idealTree:prePrune │ │ └── xmlbuilder@8.2.2
-2938 silly idealTree:prePrune │ ├── xml-escape@1.1.0
-2938 silly idealTree:prePrune │ ├── xmlbuilder@4.0.0
-2938 silly idealTree:prePrune │ └── xmldom@0.1.27
-2938 silly idealTree:prePrune ├── cordova-plugin-actionsheet@2.3.3
-2938 silly idealTree:prePrune ├── cordova-plugin-camera@2.4.0
-2938 silly idealTree:prePrune ├── cordova-plugin-compat@1.1.0
-2938 silly idealTree:prePrune ├── cordova-plugin-console@1.0.7
-2938 silly idealTree:prePrune ├── cordova-plugin-device@1.1.6
-2938 silly idealTree:prePrune ├── cordova-plugin-file@4.3.2
-2938 silly idealTree:prePrune ├── cordova-plugin-file-transfer@1.6.2
-2938 silly idealTree:prePrune ├── cordova-plugin-jcore@1.1.5
-2938 silly idealTree:prePrune ├── cordova-plugin-media-capture@1.4.3
-2938 silly idealTree:prePrune ├── cordova-plugin-offbye-alipay@1.0.1
-2938 silly idealTree:prePrune ├── cordova-plugin-splashscreen@4.0.3
-2938 silly idealTree:prePrune ├── cordova-plugin-statusbar@2.1.3
-2938 silly idealTree:prePrune ├── cordova-plugin-wechat@1.4.0
-2938 silly idealTree:prePrune ├── cordova-plugin-weibosdk@0.6.0
-2938 silly idealTree:prePrune ├── cordova-plugin-whitelist@1.2.2
-2938 silly idealTree:prePrune ├── core-util-is@1.0.2
-2938 silly idealTree:prePrune ├── crc@3.4.4
-2938 silly idealTree:prePrune ├─┬ crc32-stream@2.0.0
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├─┬ cross-spawn@3.0.1
-2938 silly idealTree:prePrune │ └── lru-cache@4.1.0
-2938 silly idealTree:prePrune ├── cryptiles@2.0.5
-2938 silly idealTree:prePrune ├── currently-unhandled@0.4.1
-2938 silly idealTree:prePrune ├── dargs@5.1.0
-2938 silly idealTree:prePrune ├─┬ dashdash@1.14.1
-2938 silly idealTree:prePrune │ └── assert-plus@1.0.0
-2938 silly idealTree:prePrune ├── dateformat@2.0.0
-2938 silly idealTree:prePrune ├── debug@2.6.8
-2938 silly idealTree:prePrune ├── decamelize@1.2.0
-2938 silly idealTree:prePrune ├── defaults@1.0.3
-2938 silly idealTree:prePrune ├── delayed-stream@1.0.0
-2938 silly idealTree:prePrune ├── delegates@1.0.0
-2938 silly idealTree:prePrune ├── depd@1.1.0
-2938 silly idealTree:prePrune ├── deprecated@0.0.1
-2938 silly idealTree:prePrune ├── destroy@1.0.4
-2938 silly idealTree:prePrune ├── detect-file@0.1.0
-2938 silly idealTree:prePrune ├── dev-null@0.1.1
-2938 silly idealTree:prePrune ├── diff@3.3.0
-2938 silly idealTree:prePrune ├── duplexer2@0.0.2
-2938 silly idealTree:prePrune ├── ecc-jsbn@0.1.1
-2938 silly idealTree:prePrune ├── ee-first@1.1.1
-2938 silly idealTree:prePrune ├── encodeurl@1.0.1
-2938 silly idealTree:prePrune ├── end-of-stream@0.1.5
-2938 silly idealTree:prePrune ├── error@7.0.2
-2938 silly idealTree:prePrune ├── error-ex@1.3.1
-2938 silly idealTree:prePrune ├── escape-html@1.0.3
-2938 silly idealTree:prePrune ├── escape-string-regexp@1.0.5
-2938 silly idealTree:prePrune ├── etag@1.8.0
-2938 silly idealTree:prePrune ├── expand-brackets@0.1.5
-2938 silly idealTree:prePrune ├── expand-range@1.8.2
-2938 silly idealTree:prePrune ├── expand-tilde@1.2.2
-2938 silly idealTree:prePrune ├─┬ express@4.15.3
-2938 silly idealTree:prePrune │ └── debug@2.6.7
-2938 silly idealTree:prePrune ├── extend@3.0.1
-2938 silly idealTree:prePrune ├── external-editor@2.0.4
-2938 silly idealTree:prePrune ├── extglob@0.3.2
-2938 silly idealTree:prePrune ├── extsprintf@1.0.2
-2938 silly idealTree:prePrune ├── fancy-log@1.3.0
-2938 silly idealTree:prePrune ├── faye-websocket@0.10.0
-2938 silly idealTree:prePrune ├── figures@2.0.0
-2938 silly idealTree:prePrune ├── filename-regex@2.0.1
-2938 silly idealTree:prePrune ├── fill-range@2.2.3
-2938 silly idealTree:prePrune ├─┬ finalhandler@1.0.3
-2938 silly idealTree:prePrune │ └── debug@2.6.7
-2938 silly idealTree:prePrune ├── find-index@0.1.1
-2938 silly idealTree:prePrune ├── find-up@1.1.2
-2938 silly idealTree:prePrune ├── findup-sync@0.4.3
-2938 silly idealTree:prePrune ├── fined@1.0.2
-2938 silly idealTree:prePrune ├── first-chunk-stream@1.0.0
-2938 silly idealTree:prePrune ├── flagged-respawn@0.3.2
-2938 silly idealTree:prePrune ├── for-in@1.0.2
-2938 silly idealTree:prePrune ├── for-own@0.1.5
-2938 silly idealTree:prePrune ├── forever-agent@0.6.1
-2938 silly idealTree:prePrune ├── form-data@2.1.4
-2938 silly idealTree:prePrune ├── formidable@1.1.1
-2938 silly idealTree:prePrune ├── forwarded@0.1.0
-2938 silly idealTree:prePrune ├── fresh@0.5.0
-2938 silly idealTree:prePrune ├── fs-exists-sync@0.1.0
-2938 silly idealTree:prePrune ├── fs.realpath@1.0.0
-2938 silly idealTree:prePrune ├─┬ fstream@1.0.11
-2938 silly idealTree:prePrune │ └── graceful-fs@4.1.11
-2938 silly idealTree:prePrune ├─┬ gauge@2.7.4
-2938 silly idealTree:prePrune │ └── object-assign@4.1.1
-2938 silly idealTree:prePrune ├── gaze@0.5.2
-2938 silly idealTree:prePrune ├── get-caller-file@1.0.2
-2938 silly idealTree:prePrune ├── get-stdin@4.0.1
-2938 silly idealTree:prePrune ├─┬ getpass@0.1.7
-2938 silly idealTree:prePrune │ └── assert-plus@1.0.0
-2938 silly idealTree:prePrune ├── glob@4.5.3
-2938 silly idealTree:prePrune ├── glob-base@0.3.0
-2938 silly idealTree:prePrune ├── glob-parent@2.0.0
-2938 silly idealTree:prePrune ├─┬ glob-stream@3.1.18
-2938 silly idealTree:prePrune │ ├── readable-stream@1.0.34
-2938 silly idealTree:prePrune │ └── through2@0.6.5
-2938 silly idealTree:prePrune ├── glob-watcher@0.0.6
-2938 silly idealTree:prePrune ├── glob2base@0.0.12
-2938 silly idealTree:prePrune ├── global-modules@0.2.3
-2938 silly idealTree:prePrune ├── global-prefix@0.1.5
-2938 silly idealTree:prePrune ├─┬ globule@0.1.0
-2938 silly idealTree:prePrune │ ├── glob@3.1.21
-2938 silly idealTree:prePrune │ ├── graceful-fs@1.2.3
-2938 silly idealTree:prePrune │ ├── inherits@1.0.2
-2938 silly idealTree:prePrune │ └── minimatch@0.2.14
-2938 silly idealTree:prePrune ├── glogg@1.0.0
-2938 silly idealTree:prePrune ├── graceful-fs@3.0.11
-2938 silly idealTree:prePrune ├─┬ gulp@3.9.1
-2938 silly idealTree:prePrune │ └── gulp-util@3.0.8
-2938 silly idealTree:prePrune ├─┬ gulp-concat@2.6.1
-2938 silly idealTree:prePrune │ ├── clone-stats@1.0.0
-2938 silly idealTree:prePrune │ ├── replace-ext@1.0.0
-2938 silly idealTree:prePrune │ └── vinyl@2.0.2
-2938 silly idealTree:prePrune ├─┬ gulp-minify-css@0.3.13
-2938 silly idealTree:prePrune │ ├─┬ gulp-util@3.0.8
-2938 silly idealTree:prePrune │ │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ │ ├── readable-stream@2.3.3
-2938 silly idealTree:prePrune │ │ ├── string_decoder@1.0.3
-2938 silly idealTree:prePrune │ │ └── through2@2.0.3
-2938 silly idealTree:prePrune │ ├── readable-stream@1.0.34
-2938 silly idealTree:prePrune │ ├── safe-buffer@5.1.1
-2938 silly idealTree:prePrune │ └── through2@0.6.5
-2938 silly idealTree:prePrune ├── gulp-rename@1.2.2
-2938 silly idealTree:prePrune ├─┬ gulp-sass@2.3.2
-2938 silly idealTree:prePrune │ ├── gulp-util@3.0.8
-2938 silly idealTree:prePrune │ └── vinyl-sourcemaps-apply@0.2.1
-2938 silly idealTree:prePrune ├─┬ gulp-util@2.2.20
-2938 silly idealTree:prePrune │ ├── ansi-regex@0.2.1
-2938 silly idealTree:prePrune │ ├── ansi-styles@1.1.0
-2938 silly idealTree:prePrune │ ├── chalk@0.5.1
-2938 silly idealTree:prePrune │ ├── dateformat@1.0.12
-2938 silly idealTree:prePrune │ ├── has-ansi@0.1.0
-2938 silly idealTree:prePrune │ ├── lodash._reinterpolate@2.4.1
-2938 silly idealTree:prePrune │ ├── lodash.escape@2.4.1
-2938 silly idealTree:prePrune │ ├── lodash.keys@2.4.1
-2938 silly idealTree:prePrune │ ├── lodash.template@2.4.1
-2938 silly idealTree:prePrune │ ├── lodash.templatesettings@2.4.1
-2938 silly idealTree:prePrune │ ├── minimist@0.2.0
-2938 silly idealTree:prePrune │ ├── readable-stream@1.0.34
-2938 silly idealTree:prePrune │ ├── strip-ansi@0.3.0
-2938 silly idealTree:prePrune │ ├── supports-color@0.2.0
-2938 silly idealTree:prePrune │ ├── through2@0.5.1
-2938 silly idealTree:prePrune │ ├── vinyl@0.2.3
-2938 silly idealTree:prePrune │ └── xtend@3.0.0
-2938 silly idealTree:prePrune ├── gulplog@1.0.0
-2938 silly idealTree:prePrune ├── har-schema@1.0.5
-2938 silly idealTree:prePrune ├── har-validator@4.2.1
-2938 silly idealTree:prePrune ├── has-ansi@2.0.0
-2938 silly idealTree:prePrune ├── has-flag@2.0.0
-2938 silly idealTree:prePrune ├── has-gulplog@0.1.0
-2938 silly idealTree:prePrune ├── has-unicode@2.0.1
-2938 silly idealTree:prePrune ├── hawk@3.1.3
-2938 silly idealTree:prePrune ├── hoek@2.16.3
-2938 silly idealTree:prePrune ├── homedir-polyfill@1.0.1
-2938 silly idealTree:prePrune ├── hosted-git-info@2.4.2
-2938 silly idealTree:prePrune ├── http-errors@1.6.1
-2938 silly idealTree:prePrune ├── http-signature@1.1.1
-2938 silly idealTree:prePrune ├── iconv-lite@0.4.17
-2938 silly idealTree:prePrune ├── in-publish@2.0.0
-2938 silly idealTree:prePrune ├── indent-string@2.1.0
-2938 silly idealTree:prePrune ├── inflight@1.0.6
-2938 silly idealTree:prePrune ├── inherits@2.0.3
-2938 silly idealTree:prePrune ├── ini@1.3.4
-2938 silly idealTree:prePrune ├─┬ inquirer@3.1.0
-2938 silly idealTree:prePrune │ ├── is-fullwidth-code-point@2.0.0
-2938 silly idealTree:prePrune │ ├── lodash@4.17.4
-2938 silly idealTree:prePrune │ └── string-width@2.0.0
-2938 silly idealTree:prePrune ├── interpret@1.0.3
-2938 silly idealTree:prePrune ├── invert-kv@1.0.0
-2938 silly idealTree:prePrune ├─┬ ionic@3.7.0
-2938 silly idealTree:prePrune │ ├── @ionic/cli-utils@1.7.0
-2938 silly idealTree:prePrune │ ├── ansi-regex@3.0.0
-2938 silly idealTree:prePrune │ ├── ansi-styles@3.2.0
-2938 silly idealTree:prePrune │ ├── archiver@2.0.0
-2938 silly idealTree:prePrune │ ├── chalk@2.1.0
-2938 silly idealTree:prePrune │ ├── cross-spawn@5.1.0
-2938 silly idealTree:prePrune │ ├── glob@7.1.2
-2938 silly idealTree:prePrune │ ├── inquirer@3.2.2
-2938 silly idealTree:prePrune │ ├── is-fullwidth-code-point@2.0.0
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── lodash@4.17.4
-2938 silly idealTree:prePrune │ ├── lru-cache@4.1.1
-2938 silly idealTree:prePrune │ ├── minimatch@3.0.4
-2938 silly idealTree:prePrune │ ├── opn@5.1.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.3.3
-2938 silly idealTree:prePrune │ ├── safe-buffer@5.1.1
-2938 silly idealTree:prePrune │ ├── semver@5.4.1
-2938 silly idealTree:prePrune │ ├── slice-ansi@1.0.0
-2938 silly idealTree:prePrune │ ├── string_decoder@1.0.3
-2938 silly idealTree:prePrune │ ├── string-width@2.1.1
-2938 silly idealTree:prePrune │ ├── strip-ansi@4.0.0
-2938 silly idealTree:prePrune │ ├── supports-color@4.2.1
-2938 silly idealTree:prePrune │ ├── wrap-ansi@3.0.1
-2938 silly idealTree:prePrune │ └── zip-stream@1.2.0
-2938 silly idealTree:prePrune ├── ionic-plugin-keyboard@1.0.9
-2938 silly idealTree:prePrune ├── ipaddr.js@1.3.0
-2938 silly idealTree:prePrune ├── is-absolute@0.2.6
-2938 silly idealTree:prePrune ├── is-arrayish@0.2.1
-2938 silly idealTree:prePrune ├── is-binary-path@1.0.1
-2938 silly idealTree:prePrune ├── is-buffer@1.1.5
-2938 silly idealTree:prePrune ├── is-builtin-module@1.0.0
-2938 silly idealTree:prePrune ├── is-dotfile@1.0.3
-2938 silly idealTree:prePrune ├── is-equal-shallow@0.1.3
-2938 silly idealTree:prePrune ├── is-extendable@0.1.1
-2938 silly idealTree:prePrune ├── is-extglob@1.0.0
-2938 silly idealTree:prePrune ├── is-finite@1.0.2
-2938 silly idealTree:prePrune ├── is-fullwidth-code-point@1.0.0
-2938 silly idealTree:prePrune ├── is-glob@2.0.1
-2938 silly idealTree:prePrune ├── is-number@2.1.0
-2938 silly idealTree:prePrune ├── is-posix-bracket@0.1.1
-2938 silly idealTree:prePrune ├── is-primitive@2.0.0
-2938 silly idealTree:prePrune ├── is-promise@2.1.0
-2938 silly idealTree:prePrune ├── is-relative@0.2.1
-2938 silly idealTree:prePrune ├── is-stream@1.1.0
-2938 silly idealTree:prePrune ├── is-typedarray@1.0.0
-2938 silly idealTree:prePrune ├── is-unc-path@0.1.2
-2938 silly idealTree:prePrune ├── is-utf8@0.2.1
-2938 silly idealTree:prePrune ├── is-windows@0.2.0
-2938 silly idealTree:prePrune ├── is-wsl@1.1.0
-2938 silly idealTree:prePrune ├── isarray@0.0.1
-2938 silly idealTree:prePrune ├── isexe@2.0.0
-2938 silly idealTree:prePrune ├─┬ isobject@2.1.0
-2938 silly idealTree:prePrune │ └── isarray@1.0.0
-2938 silly idealTree:prePrune ├── isstream@0.1.2
-2938 silly idealTree:prePrune ├── jpush-phonegap-plugin@3.2.3
-2938 silly idealTree:prePrune ├── js-base64@2.1.9
-2938 silly idealTree:prePrune ├── jsbn@0.1.1
-2938 silly idealTree:prePrune ├── jschardet@1.4.2
-2938 silly idealTree:prePrune ├── json-schema@0.2.3
-2938 silly idealTree:prePrune ├── json-stable-stringify@1.0.1
-2938 silly idealTree:prePrune ├── json-stringify-safe@5.0.1
-2938 silly idealTree:prePrune ├── jsonify@0.0.0
-2938 silly idealTree:prePrune ├─┬ jsprim@1.4.0
-2938 silly idealTree:prePrune │ └── assert-plus@1.0.0
-2938 silly idealTree:prePrune ├── kind-of@3.2.2
-2938 silly idealTree:prePrune ├─┬ lazystream@1.0.0
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── lcid@1.0.0
-2938 silly idealTree:prePrune ├─┬ leek@0.0.24
-2938 silly idealTree:prePrune │ └── lodash.assign@3.2.0
-2938 silly idealTree:prePrune ├── liftoff@2.3.0
-2938 silly idealTree:prePrune ├── livereload-js@2.2.2
-2938 silly idealTree:prePrune ├─┬ load-json-file@1.1.0
-2938 silly idealTree:prePrune │ ├── graceful-fs@4.1.11
-2938 silly idealTree:prePrune │ └── strip-bom@2.0.0
-2938 silly idealTree:prePrune ├── lodash@1.0.2
-2938 silly idealTree:prePrune ├── lodash._baseassign@3.2.0
-2938 silly idealTree:prePrune ├── lodash._basecopy@3.0.1
-2938 silly idealTree:prePrune ├── lodash._basetostring@3.0.1
-2938 silly idealTree:prePrune ├── lodash._basevalues@3.0.0
-2938 silly idealTree:prePrune ├── lodash._bindcallback@3.0.1
-2938 silly idealTree:prePrune ├── lodash._createassigner@3.1.1
-2938 silly idealTree:prePrune ├── lodash._escapehtmlchar@2.4.1
-2938 silly idealTree:prePrune ├── lodash._escapestringchar@2.4.1
-2938 silly idealTree:prePrune ├── lodash._getnative@3.9.1
-2938 silly idealTree:prePrune ├── lodash._htmlescapes@2.4.1
-2938 silly idealTree:prePrune ├── lodash._isiterateecall@3.0.9
-2938 silly idealTree:prePrune ├── lodash._isnative@2.4.1
-2938 silly idealTree:prePrune ├── lodash._objecttypes@2.4.1
-2938 silly idealTree:prePrune ├── lodash._reescape@3.0.0
-2938 silly idealTree:prePrune ├── lodash._reevaluate@3.0.0
-2938 silly idealTree:prePrune ├── lodash._reinterpolate@3.0.0
-2938 silly idealTree:prePrune ├─┬ lodash._reunescapedhtml@2.4.1
-2938 silly idealTree:prePrune │ └── lodash.keys@2.4.1
-2938 silly idealTree:prePrune ├── lodash._root@3.0.1
-2938 silly idealTree:prePrune ├── lodash._shimkeys@2.4.1
-2938 silly idealTree:prePrune ├── lodash.assign@4.2.0
-2938 silly idealTree:prePrune ├── lodash.assignwith@4.2.0
-2938 silly idealTree:prePrune ├── lodash.clonedeep@4.5.0
-2938 silly idealTree:prePrune ├── lodash.debounce@4.0.8
-2938 silly idealTree:prePrune ├─┬ lodash.defaults@2.4.1
-2938 silly idealTree:prePrune │ └── lodash.keys@2.4.1
-2938 silly idealTree:prePrune ├── lodash.escape@3.2.0
-2938 silly idealTree:prePrune ├── lodash.isarguments@3.1.0
-2938 silly idealTree:prePrune ├── lodash.isarray@3.0.4
-2938 silly idealTree:prePrune ├── lodash.isempty@4.4.0
-2938 silly idealTree:prePrune ├── lodash.isobject@2.4.1
-2938 silly idealTree:prePrune ├── lodash.isplainobject@4.0.6
-2938 silly idealTree:prePrune ├── lodash.isstring@4.0.1
-2938 silly idealTree:prePrune ├── lodash.keys@3.1.2
-2938 silly idealTree:prePrune ├── lodash.mapvalues@4.6.0
-2938 silly idealTree:prePrune ├── lodash.pick@4.4.0
-2938 silly idealTree:prePrune ├── lodash.restparam@3.6.1
-2938 silly idealTree:prePrune ├── lodash.template@3.6.2
-2938 silly idealTree:prePrune ├── lodash.templatesettings@3.1.1
-2938 silly idealTree:prePrune ├─┬ lodash.values@2.4.1
-2938 silly idealTree:prePrune │ └── lodash.keys@2.4.1
-2938 silly idealTree:prePrune ├── loud-rejection@1.6.0
-2938 silly idealTree:prePrune ├── lru-cache@2.7.3
-2938 silly idealTree:prePrune ├── macos-release@1.0.0
-2938 silly idealTree:prePrune ├── map-cache@0.2.2
-2938 silly idealTree:prePrune ├── map-obj@1.0.1
-2938 silly idealTree:prePrune ├── media-typer@0.3.0
-2938 silly idealTree:prePrune ├── memory-cache@0.0.5
-2938 silly idealTree:prePrune ├─┬ meow@3.7.0
-2938 silly idealTree:prePrune │ └── object-assign@4.1.1
-2938 silly idealTree:prePrune ├── merge-descriptors@1.0.1
-2938 silly idealTree:prePrune ├── methods@1.1.2
-2938 silly idealTree:prePrune ├── micromatch@2.3.11
-2938 silly idealTree:prePrune ├── mime@1.3.6
-2938 silly idealTree:prePrune ├── mime-db@1.27.0
-2938 silly idealTree:prePrune ├── mime-types@2.1.15
-2938 silly idealTree:prePrune ├── mimic-fn@1.1.0
-2938 silly idealTree:prePrune ├── minimatch@2.0.10
-2938 silly idealTree:prePrune ├── minimist@1.2.0
-2938 silly idealTree:prePrune ├─┬ mkdirp@0.5.1
-2938 silly idealTree:prePrune │ └── minimist@0.0.8
-2938 silly idealTree:prePrune ├── ms@2.0.0
-2938 silly idealTree:prePrune ├── multipipe@0.1.2
-2938 silly idealTree:prePrune ├── mute-stream@0.0.7
-2938 silly idealTree:prePrune ├── nan@2.6.2
-2938 silly idealTree:prePrune ├── natives@1.1.0
-2938 silly idealTree:prePrune ├── ncp@2.0.0
-2938 silly idealTree:prePrune ├── negotiator@0.6.1
-2938 silly idealTree:prePrune ├── next-tick@1.0.0
-2938 silly idealTree:prePrune ├─┬ node-gyp@3.6.2
-2938 silly idealTree:prePrune │ ├── glob@7.1.2
-2938 silly idealTree:prePrune │ ├── graceful-fs@4.1.11
-2938 silly idealTree:prePrune │ ├── minimatch@3.0.4
-2938 silly idealTree:prePrune │ └── semver@5.3.0
-2938 silly idealTree:prePrune ├─┬ node-sass@3.13.1
-2938 silly idealTree:prePrune │ ├── gaze@1.1.2
-2938 silly idealTree:prePrune │ ├── glob@7.1.2
-2938 silly idealTree:prePrune │ ├── globule@1.2.0
-2938 silly idealTree:prePrune │ ├── lodash@4.17.4
-2938 silly idealTree:prePrune │ └── minimatch@3.0.4
-2938 silly idealTree:prePrune ├── nopt@3.0.6
-2938 silly idealTree:prePrune ├── normalize-package-data@2.3.8
-2938 silly idealTree:prePrune ├── normalize-path@2.1.1
-2938 silly idealTree:prePrune ├── npmlog@4.1.0
-2938 silly idealTree:prePrune ├── number-is-nan@1.0.1
-2938 silly idealTree:prePrune ├── oauth-sign@0.8.2
-2938 silly idealTree:prePrune ├── object-assign@3.0.0
-2938 silly idealTree:prePrune ├─┬ object.defaults@1.1.0
-2938 silly idealTree:prePrune │ ├── for-own@1.0.0
-2938 silly idealTree:prePrune │ └── isobject@3.0.0
-2938 silly idealTree:prePrune ├── object.omit@2.0.1
-2938 silly idealTree:prePrune ├── on-finished@2.3.0
-2938 silly idealTree:prePrune ├── once@1.3.3
-2938 silly idealTree:prePrune ├── onetime@2.0.1
-2938 silly idealTree:prePrune ├─┬ opn@4.0.2
-2938 silly idealTree:prePrune │ └── object-assign@4.1.1
-2938 silly idealTree:prePrune ├── orchestrator@0.3.8
-2938 silly idealTree:prePrune ├── ordered-read-streams@0.1.0
-2938 silly idealTree:prePrune ├── os-homedir@1.0.2
-2938 silly idealTree:prePrune ├── os-locale@1.4.0
-2938 silly idealTree:prePrune ├── os-name@2.0.1
-2938 silly idealTree:prePrune ├── os-tmpdir@1.0.2
-2938 silly idealTree:prePrune ├── osenv@0.1.4
-2938 silly idealTree:prePrune ├── parse-filepath@1.0.1
-2938 silly idealTree:prePrune ├── parse-glob@3.0.4
-2938 silly idealTree:prePrune ├── parse-json@2.2.0
-2938 silly idealTree:prePrune ├── parse-passwd@1.0.0
-2938 silly idealTree:prePrune ├── parseurl@1.3.1
-2938 silly idealTree:prePrune ├── path-exists@2.1.0
-2938 silly idealTree:prePrune ├── path-is-absolute@1.0.1
-2938 silly idealTree:prePrune ├── path-parse@1.0.5
-2938 silly idealTree:prePrune ├── path-root@0.1.1
-2938 silly idealTree:prePrune ├── path-root-regex@0.1.2
-2938 silly idealTree:prePrune ├── path-to-regexp@0.1.7
-2938 silly idealTree:prePrune ├─┬ path-type@1.1.0
-2938 silly idealTree:prePrune │ └── graceful-fs@4.1.11
-2938 silly idealTree:prePrune ├── performance-now@0.2.0
-2938 silly idealTree:prePrune ├── phonegap-plugin-barcodescanner@6.0.8
-2938 silly idealTree:prePrune ├── pify@2.3.0
-2938 silly idealTree:prePrune ├── pinkie@2.0.4
-2938 silly idealTree:prePrune ├── pinkie-promise@2.0.1
-2938 silly idealTree:prePrune ├── preserve@0.2.0
-2938 silly idealTree:prePrune ├── pretty-hrtime@1.0.3
-2938 silly idealTree:prePrune ├── process-nextick-args@1.0.7
-2938 silly idealTree:prePrune ├── proxy-addr@1.1.4
-2938 silly idealTree:prePrune ├── proxy-middleware@0.15.0
-2938 silly idealTree:prePrune ├── pseudomap@1.0.2
-2938 silly idealTree:prePrune ├── punycode@1.4.1
-2938 silly idealTree:prePrune ├── qs@6.4.0
-2938 silly idealTree:prePrune ├─┬ randomatic@1.1.7
-2938 silly idealTree:prePrune │ ├─┬ is-number@3.0.0
-2938 silly idealTree:prePrune │ │ └── kind-of@3.2.2
-2938 silly idealTree:prePrune │ └── kind-of@4.0.0
-2938 silly idealTree:prePrune ├── range-parser@1.2.0
-2938 silly idealTree:prePrune ├── raw-body@1.1.7
-2938 silly idealTree:prePrune ├── read-pkg@1.1.0
-2938 silly idealTree:prePrune ├── read-pkg-up@1.0.1
-2938 silly idealTree:prePrune ├── readable-stream@1.1.14
-2938 silly idealTree:prePrune ├─┬ readdirp@2.1.0
-2938 silly idealTree:prePrune │ ├── graceful-fs@4.1.11
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── minimatch@3.0.4
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── rechoir@0.6.2
-2938 silly idealTree:prePrune ├── redent@1.0.0
-2938 silly idealTree:prePrune ├── regex-cache@0.4.3
-2938 silly idealTree:prePrune ├── remove-trailing-separator@1.0.2
-2938 silly idealTree:prePrune ├── repeat-element@1.1.2
-2938 silly idealTree:prePrune ├── repeat-string@1.6.1
-2938 silly idealTree:prePrune ├── repeating@2.0.1
-2938 silly idealTree:prePrune ├── replace-ext@0.0.1
-2938 silly idealTree:prePrune ├── request@2.81.0
-2938 silly idealTree:prePrune ├── require-directory@2.1.1
-2938 silly idealTree:prePrune ├── require-main-filename@1.0.1
-2938 silly idealTree:prePrune ├── resolve@1.3.3
-2938 silly idealTree:prePrune ├── resolve-dir@0.1.1
-2938 silly idealTree:prePrune ├── restore-cursor@2.0.0
-2938 silly idealTree:prePrune ├─┬ rimraf@2.6.1
-2938 silly idealTree:prePrune │ ├── glob@7.1.2
-2938 silly idealTree:prePrune │ └── minimatch@3.0.4
-2938 silly idealTree:prePrune ├── rsvp@3.5.0
-2938 silly idealTree:prePrune ├── run-async@2.3.0
-2938 silly idealTree:prePrune ├── rx-lite@4.0.8
-2938 silly idealTree:prePrune ├── rx-lite-aggregates@4.0.8
-2938 silly idealTree:prePrune ├── safe-buffer@5.0.1
-2938 silly idealTree:prePrune ├── safe-json-parse@1.0.1
-2938 silly idealTree:prePrune ├─┬ sass-graph@2.2.4
-2938 silly idealTree:prePrune │ ├── glob@7.1.2
-2938 silly idealTree:prePrune │ ├── lodash@4.17.4
-2938 silly idealTree:prePrune │ └── minimatch@3.0.4
-2938 silly idealTree:prePrune ├── sax@1.2.2
-2938 silly idealTree:prePrune ├─┬ scss-tokenizer@0.2.3
-2938 silly idealTree:prePrune │ └── source-map@0.4.4
-2938 silly idealTree:prePrune ├── semver@4.3.6
-2938 silly idealTree:prePrune ├─┬ send@0.15.3
-2938 silly idealTree:prePrune │ ├── debug@2.6.7
-2938 silly idealTree:prePrune │ └── mime@1.3.4
-2938 silly idealTree:prePrune ├── sequencify@0.0.7
-2938 silly idealTree:prePrune ├── serve-static@1.12.3
-2938 silly idealTree:prePrune ├── set-blocking@2.0.0
-2938 silly idealTree:prePrune ├── set-immediate-shim@1.0.1
-2938 silly idealTree:prePrune ├── setprototypeof@1.0.3
-2938 silly idealTree:prePrune ├── shebang-command@1.2.0
-2938 silly idealTree:prePrune ├── shebang-regex@1.0.0
-2938 silly idealTree:prePrune ├── shelljs@0.3.0
-2938 silly idealTree:prePrune ├── sigmund@1.0.1
-2938 silly idealTree:prePrune ├── signal-exit@3.0.2
-2938 silly idealTree:prePrune ├── slice-ansi@0.0.4
-2938 silly idealTree:prePrune ├── sntp@1.0.9
-2938 silly idealTree:prePrune ├── source-map@0.5.6
-2938 silly idealTree:prePrune ├── sparkles@1.0.0
-2938 silly idealTree:prePrune ├── spdx-correct@1.0.2
-2938 silly idealTree:prePrune ├── spdx-expression-parse@1.0.4
-2938 silly idealTree:prePrune ├── spdx-license-ids@1.2.2
-2938 silly idealTree:prePrune ├── ssh-config@1.0.1
-2938 silly idealTree:prePrune ├─┬ sshpk@1.13.1
-2938 silly idealTree:prePrune │ └── assert-plus@1.0.0
-2938 silly idealTree:prePrune ├── statuses@1.3.1
-2938 silly idealTree:prePrune ├── stream-consume@0.1.0
-2938 silly idealTree:prePrune ├── stream-exhaust@1.0.1
-2938 silly idealTree:prePrune ├── string_decoder@0.10.31
-2938 silly idealTree:prePrune ├── string-template@0.2.1
-2938 silly idealTree:prePrune ├── string-width@1.0.2
-2938 silly idealTree:prePrune ├── stringstream@0.0.5
-2938 silly idealTree:prePrune ├── strip-ansi@3.0.1
-2938 silly idealTree:prePrune ├── strip-bom@1.0.0
-2938 silly idealTree:prePrune ├── strip-indent@1.0.1
-2938 silly idealTree:prePrune ├─┬ superagent@3.5.2
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── supports-color@2.0.0
-2938 silly idealTree:prePrune ├── tar@2.2.1
-2938 silly idealTree:prePrune ├─┬ tar-stream@1.5.4
-2938 silly idealTree:prePrune │ ├── end-of-stream@1.4.0
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── once@1.4.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── through@2.3.8
-2938 silly idealTree:prePrune ├─┬ through2@2.0.3
-2938 silly idealTree:prePrune │ ├── isarray@1.0.0
-2938 silly idealTree:prePrune │ ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune │ └── string_decoder@1.0.2
-2938 silly idealTree:prePrune ├── tildify@1.2.0
-2938 silly idealTree:prePrune ├── time-stamp@1.1.0
-2938 silly idealTree:prePrune ├─┬ tiny-lr@1.0.4
-2938 silly idealTree:prePrune │ ├── debug@2.2.0
-2938 silly idealTree:prePrune │ ├── ms@0.7.1
-2938 silly idealTree:prePrune │ └── object-assign@4.1.1
-2938 silly idealTree:prePrune ├── tmp@0.0.31
-2938 silly idealTree:prePrune ├── tough-cookie@2.3.2
-2938 silly idealTree:prePrune ├── trim-newlines@1.0.0
-2938 silly idealTree:prePrune ├── tslib@1.7.1
-2938 silly idealTree:prePrune ├── tunnel-agent@0.6.0
-2938 silly idealTree:prePrune ├── tweetnacl@0.14.5
-2938 silly idealTree:prePrune ├── type-is@1.6.15
-2938 silly idealTree:prePrune ├── unc-path-regex@0.1.2
-2938 silly idealTree:prePrune ├── unique-stream@1.0.0
-2938 silly idealTree:prePrune ├── unpipe@1.0.0
-2938 silly idealTree:prePrune ├── user-home@1.1.1
-2938 silly idealTree:prePrune ├── util-deprecate@1.0.2
-2938 silly idealTree:prePrune ├── utils-merge@1.0.0
-2938 silly idealTree:prePrune ├── uuid@3.0.1
-2938 silly idealTree:prePrune ├── v8flags@2.1.1
-2938 silly idealTree:prePrune ├── validate-npm-package-license@3.0.1
-2938 silly idealTree:prePrune ├── vary@1.1.1
-2938 silly idealTree:prePrune ├── verror@1.3.6
-2938 silly idealTree:prePrune ├── vinyl@0.5.3
-2938 silly idealTree:prePrune ├─┬ vinyl-fs@0.3.14
-2938 silly idealTree:prePrune │ ├── clone@0.2.0
-2938 silly idealTree:prePrune │ ├── readable-stream@1.0.34
-2938 silly idealTree:prePrune │ ├── through2@0.6.5
-2938 silly idealTree:prePrune │ └── vinyl@0.4.6
-2938 silly idealTree:prePrune ├─┬ vinyl-sourcemaps-apply@0.1.4
-2938 silly idealTree:prePrune │ └── source-map@0.1.43
-2938 silly idealTree:prePrune ├── walkdir@0.0.11
-2938 silly idealTree:prePrune ├── websocket-driver@0.6.5
-2938 silly idealTree:prePrune ├── websocket-extensions@0.1.1
-2938 silly idealTree:prePrune ├── which@1.2.14
-2938 silly idealTree:prePrune ├── which-module@1.0.0
-2938 silly idealTree:prePrune ├── wide-align@1.1.2
-2938 silly idealTree:prePrune ├─┬ win-release@1.1.1
-2938 silly idealTree:prePrune │ └── semver@5.3.0
-2938 silly idealTree:prePrune ├── wrap-ansi@2.1.0
-2938 silly idealTree:prePrune ├── wrappy@1.0.2
-2938 silly idealTree:prePrune ├── xml2js@0.4.17
-2938 silly idealTree:prePrune ├─┬ xmlbuilder@4.2.1
-2938 silly idealTree:prePrune │ └── lodash@4.17.4
-2938 silly idealTree:prePrune ├── xtend@4.0.1
-2938 silly idealTree:prePrune ├── y18n@3.2.1
-2938 silly idealTree:prePrune ├── yallist@2.1.2
-2938 silly idealTree:prePrune ├─┬ yargs@7.1.0
-2938 silly idealTree:prePrune │ └── camelcase@3.0.0
-2938 silly idealTree:prePrune ├─┬ yargs-parser@5.0.0
-2938 silly idealTree:prePrune │ └── camelcase@3.0.0
-2938 silly idealTree:prePrune └─┬ zip-stream@1.1.1
-2938 silly idealTree:prePrune   ├── isarray@1.0.0
-2938 silly idealTree:prePrune   ├── lodash@4.17.4
-2938 silly idealTree:prePrune   ├── readable-stream@2.2.11
-2938 silly idealTree:prePrune   └── string_decoder@1.0.2
-2939 silly loadIdealTree Finishing
-2940 silly currentTree ionic-tabs@1.1.1
-2940 silly currentTree ├─┬ @ionic/cli-plugin-ionic1@1.1.2
-2940 silly currentTree │ └── glob-watcher@3.2.0
-2940 silly currentTree ├─┬ @ionic/cli-utils@1.1.2
-2940 silly currentTree │ ├── cross-spawn@4.0.2
-2940 silly currentTree │ ├── is-fullwidth-code-point@2.0.0
-2940 silly currentTree │ ├── lru-cache@4.1.0
-2940 silly currentTree │ ├── semver@5.3.0
-2940 silly currentTree │ └── string-width@2.0.0
-2940 silly currentTree ├── abbrev@1.1.0
-2940 silly currentTree ├── accepts@1.3.3
-2940 silly currentTree ├── ajv@4.11.8
-2940 silly currentTree ├── amdefine@1.0.1
-2940 silly currentTree ├── ansi-escapes@2.0.0
-2940 silly currentTree ├── ansi-regex@2.1.1
-2940 silly currentTree ├── ansi-styles@2.2.1
-2940 silly currentTree ├── anymatch@1.3.0
-2940 silly currentTree ├── aproba@1.1.2
-2940 silly currentTree ├─┬ archiver@1.3.0
-2940 silly currentTree │ ├── glob@7.1.2
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── lodash@4.17.4
-2940 silly currentTree │ ├── minimatch@3.0.4
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├─┬ archiver-utils@1.3.0
-2940 silly currentTree │ ├── glob@7.1.2
-2940 silly currentTree │ ├── graceful-fs@4.1.11
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── lodash@4.17.4
-2940 silly currentTree │ ├── minimatch@3.0.4
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── archy@1.0.0
-2940 silly currentTree ├─┬ are-we-there-yet@1.1.4
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── arr-diff@2.0.0
-2940 silly currentTree ├── arr-flatten@1.0.3
-2940 silly currentTree ├── array-differ@1.0.0
-2940 silly currentTree ├── array-each@1.0.1
-2940 silly currentTree ├── array-find-index@1.0.2
-2940 silly currentTree ├── array-flatten@1.1.1
-2940 silly currentTree ├── array-slice@1.0.0
-2940 silly currentTree ├── array-uniq@1.0.3
-2940 silly currentTree ├── array-unique@0.2.1
-2940 silly currentTree ├── arrify@1.0.1
-2940 silly currentTree ├── asn1@0.2.3
-2940 silly currentTree ├── assert-plus@0.2.0
-2940 silly currentTree ├─┬ async@2.4.1
-2940 silly currentTree │ └── lodash@4.17.4
-2940 silly currentTree ├─┬ async-done@1.2.2
-2940 silly currentTree │ └─┬ end-of-stream@1.4.0
-2940 silly currentTree │   └── once@1.4.0
-2940 silly currentTree ├── async-each@1.0.1
-2940 silly currentTree ├── async-foreach@0.1.3
-2940 silly currentTree ├── asynckit@0.4.0
-2940 silly currentTree ├── aws-sign2@0.6.0
-2940 silly currentTree ├── aws4@1.6.0
-2940 silly currentTree ├── balanced-match@0.4.2
-2940 silly currentTree ├── bcrypt-pbkdf@1.0.1
-2940 silly currentTree ├── beeper@1.1.1
-2940 silly currentTree ├── binary-extensions@1.8.0
-2940 silly currentTree ├─┬ bl@1.2.1
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── block-stream@0.0.9
-2940 silly currentTree ├── body@5.1.0
-2940 silly currentTree ├── boom@2.10.1
-2940 silly currentTree ├── bower@1.8.0
-2940 silly currentTree ├── brace-expansion@1.1.7
-2940 silly currentTree ├── braces@1.8.5
-2940 silly currentTree ├── buffer-crc32@0.2.13
-2940 silly currentTree ├── bufferstreams@0.0.2
-2940 silly currentTree ├── builtin-modules@1.1.1
-2940 silly currentTree ├── bytes@1.0.0
-2940 silly currentTree ├── camelcase@2.1.1
-2940 silly currentTree ├── camelcase-keys@2.1.0
-2940 silly currentTree ├── caseless@0.12.0
-2940 silly currentTree ├── chalk@1.1.3
-2940 silly currentTree ├── chokidar@1.7.0
-2940 silly currentTree ├── ci-info@1.0.0
-2940 silly currentTree ├─┬ clean-css@3.0.10
-2940 silly currentTree │ └── source-map@0.1.43
-2940 silly currentTree ├── cli-cursor@2.1.0
-2940 silly currentTree ├── cli-width@2.1.0
-2940 silly currentTree ├── cliui@3.2.0
-2940 silly currentTree ├── clone@1.0.2
-2940 silly currentTree ├── clone-buffer@1.0.0
-2940 silly currentTree ├── clone-stats@0.0.1
-2940 silly currentTree ├── cloneable-readable@1.0.0
-2940 silly currentTree ├── co@4.6.0
-2940 silly currentTree ├── code-point-at@1.1.0
-2940 silly currentTree ├── color-convert@1.9.0
-2940 silly currentTree ├── color-name@1.1.3
-2940 silly currentTree ├── combined-stream@1.0.5
-2940 silly currentTree ├── commander@2.5.1
-2940 silly currentTree ├── component-emitter@1.2.1
-2940 silly currentTree ├─┬ compress-commons@1.2.0
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── concat-map@0.0.1
-2940 silly currentTree ├── concat-with-sourcemaps@1.0.4
-2940 silly currentTree ├── console-control-strings@1.1.0
-2940 silly currentTree ├── content-disposition@0.5.2
-2940 silly currentTree ├── content-type@1.0.2
-2940 silly currentTree ├── continuable-cache@0.3.1
-2940 silly currentTree ├── cookie@0.3.1
-2940 silly currentTree ├── cookie-signature@1.0.6
-2940 silly currentTree ├── cookiejar@2.1.1
-2940 silly currentTree ├── cordova-hot-code-push-plugin@1.5.3
-2940 silly currentTree ├── cordova-plugin-actionsheet@2.3.3
-2940 silly currentTree ├── cordova-plugin-camera@2.4.0
-2940 silly currentTree ├── cordova-plugin-compat@1.1.0
-2940 silly currentTree ├── cordova-plugin-console@1.0.7
-2940 silly currentTree ├── cordova-plugin-device@1.1.6
-2940 silly currentTree ├── cordova-plugin-file@4.3.2
-2940 silly currentTree ├── cordova-plugin-file-transfer@1.6.2
-2940 silly currentTree ├── cordova-plugin-jcore@1.1.5
-2940 silly currentTree ├── cordova-plugin-media-capture@1.4.3
-2940 silly currentTree ├── cordova-plugin-offbye-alipay@1.0.1
-2940 silly currentTree ├── cordova-plugin-splashscreen@4.0.3
-2940 silly currentTree ├── cordova-plugin-statusbar@2.1.3
-2940 silly currentTree ├── cordova-plugin-wechat@1.4.0
-2940 silly currentTree ├── cordova-plugin-weibosdk@0.6.0
-2940 silly currentTree ├── cordova-plugin-whitelist@1.2.2
-2940 silly currentTree ├── core-util-is@1.0.2
-2940 silly currentTree ├── crc@3.4.4
-2940 silly currentTree ├─┬ crc32-stream@2.0.0
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├─┬ cross-spawn@3.0.1
-2940 silly currentTree │ └── lru-cache@4.1.0
-2940 silly currentTree ├── cryptiles@2.0.5
-2940 silly currentTree ├── currently-unhandled@0.4.1
-2940 silly currentTree ├── dargs@5.1.0
-2940 silly currentTree ├─┬ dashdash@1.14.1
-2940 silly currentTree │ └── assert-plus@1.0.0
-2940 silly currentTree ├── dateformat@2.0.0
-2940 silly currentTree ├── debug@2.6.8
-2940 silly currentTree ├── decamelize@1.2.0
-2940 silly currentTree ├── defaults@1.0.3
-2940 silly currentTree ├── delayed-stream@1.0.0
-2940 silly currentTree ├── delegates@1.0.0
-2940 silly currentTree ├── depd@1.1.0
-2940 silly currentTree ├── deprecated@0.0.1
-2940 silly currentTree ├── destroy@1.0.4
-2940 silly currentTree ├── detect-file@0.1.0
-2940 silly currentTree ├── dev-null@0.1.1
-2940 silly currentTree ├── diff@3.3.0
-2940 silly currentTree ├── duplexer2@0.0.2
-2940 silly currentTree ├── ecc-jsbn@0.1.1
-2940 silly currentTree ├── ee-first@1.1.1
-2940 silly currentTree ├── encodeurl@1.0.1
-2940 silly currentTree ├── end-of-stream@0.1.5
-2940 silly currentTree ├── error@7.0.2
-2940 silly currentTree ├── error-ex@1.3.1
-2940 silly currentTree ├── escape-html@1.0.3
-2940 silly currentTree ├── escape-string-regexp@1.0.5
-2940 silly currentTree ├── etag@1.8.0
-2940 silly currentTree ├── expand-brackets@0.1.5
-2940 silly currentTree ├── expand-range@1.8.2
-2940 silly currentTree ├── expand-tilde@1.2.2
-2940 silly currentTree ├─┬ express@4.15.3
-2940 silly currentTree │ └── debug@2.6.7
-2940 silly currentTree ├── extend@3.0.1
-2940 silly currentTree ├── external-editor@2.0.4
-2940 silly currentTree ├── extglob@0.3.2
-2940 silly currentTree ├── extsprintf@1.0.2
-2940 silly currentTree ├── fancy-log@1.3.0
-2940 silly currentTree ├── faye-websocket@0.10.0
-2940 silly currentTree ├── figures@2.0.0
-2940 silly currentTree ├── filename-regex@2.0.1
-2940 silly currentTree ├── fill-range@2.2.3
-2940 silly currentTree ├─┬ finalhandler@1.0.3
-2940 silly currentTree │ └── debug@2.6.7
-2940 silly currentTree ├── find-index@0.1.1
-2940 silly currentTree ├── find-up@1.1.2
-2940 silly currentTree ├── findup-sync@0.4.3
-2940 silly currentTree ├── fined@1.0.2
-2940 silly currentTree ├── first-chunk-stream@1.0.0
-2940 silly currentTree ├── flagged-respawn@0.3.2
-2940 silly currentTree ├── for-in@1.0.2
-2940 silly currentTree ├── for-own@0.1.5
-2940 silly currentTree ├── forever-agent@0.6.1
-2940 silly currentTree ├── form-data@2.1.4
-2940 silly currentTree ├── formidable@1.1.1
-2940 silly currentTree ├── forwarded@0.1.0
-2940 silly currentTree ├── fresh@0.5.0
-2940 silly currentTree ├── fs-exists-sync@0.1.0
-2940 silly currentTree ├── fs.realpath@1.0.0
-2940 silly currentTree ├─┬ fstream@1.0.11
-2940 silly currentTree │ └── graceful-fs@4.1.11
-2940 silly currentTree ├─┬ gauge@2.7.4
-2940 silly currentTree │ └── object-assign@4.1.1
-2940 silly currentTree ├── gaze@0.5.2
-2940 silly currentTree ├── get-caller-file@1.0.2
-2940 silly currentTree ├── get-stdin@4.0.1
-2940 silly currentTree ├─┬ getpass@0.1.7
-2940 silly currentTree │ └── assert-plus@1.0.0
-2940 silly currentTree ├── glob@4.5.3
-2940 silly currentTree ├── glob-base@0.3.0
-2940 silly currentTree ├── glob-parent@2.0.0
-2940 silly currentTree ├─┬ glob-stream@3.1.18
-2940 silly currentTree │ ├── readable-stream@1.0.34
-2940 silly currentTree │ └── through2@0.6.5
-2940 silly currentTree ├── glob-watcher@0.0.6
-2940 silly currentTree ├── glob2base@0.0.12
-2940 silly currentTree ├── global-modules@0.2.3
-2940 silly currentTree ├── global-prefix@0.1.5
-2940 silly currentTree ├─┬ globule@0.1.0
-2940 silly currentTree │ ├── glob@3.1.21
-2940 silly currentTree │ ├── graceful-fs@1.2.3
-2940 silly currentTree │ ├── inherits@1.0.2
-2940 silly currentTree │ └── minimatch@0.2.14
-2940 silly currentTree ├── glogg@1.0.0
-2940 silly currentTree ├── graceful-fs@3.0.11
-2940 silly currentTree ├─┬ gulp@3.9.1
-2940 silly currentTree │ └── gulp-util@3.0.8
-2940 silly currentTree ├─┬ gulp-concat@2.6.1
-2940 silly currentTree │ ├── clone-stats@1.0.0
-2940 silly currentTree │ ├── replace-ext@1.0.0
-2940 silly currentTree │ └── vinyl@2.0.2
-2940 silly currentTree ├─┬ gulp-minify-css@0.3.13
-2940 silly currentTree │ ├─┬ gulp-util@3.0.8
-2940 silly currentTree │ │ ├── isarray@1.0.0
-2940 silly currentTree │ │ ├── readable-stream@2.3.3
-2940 silly currentTree │ │ ├── string_decoder@1.0.3
-2940 silly currentTree │ │ └── through2@2.0.3
-2940 silly currentTree │ ├── readable-stream@1.0.34
-2940 silly currentTree │ ├── safe-buffer@5.1.1
-2940 silly currentTree │ └── through2@0.6.5
-2940 silly currentTree ├── gulp-rename@1.2.2
-2940 silly currentTree ├─┬ gulp-sass@2.3.2
-2940 silly currentTree │ ├── gulp-util@3.0.8
-2940 silly currentTree │ └── vinyl-sourcemaps-apply@0.2.1
-2940 silly currentTree ├─┬ gulp-util@2.2.20
-2940 silly currentTree │ ├── ansi-regex@0.2.1
-2940 silly currentTree │ ├── ansi-styles@1.1.0
-2940 silly currentTree │ ├── chalk@0.5.1
-2940 silly currentTree │ ├── dateformat@1.0.12
-2940 silly currentTree │ ├── has-ansi@0.1.0
-2940 silly currentTree │ ├── lodash._reinterpolate@2.4.1
-2940 silly currentTree │ ├── lodash.escape@2.4.1
-2940 silly currentTree │ ├── lodash.keys@2.4.1
-2940 silly currentTree │ ├── lodash.template@2.4.1
-2940 silly currentTree │ ├── lodash.templatesettings@2.4.1
-2940 silly currentTree │ ├── minimist@0.2.0
-2940 silly currentTree │ ├── readable-stream@1.0.34
-2940 silly currentTree │ ├── strip-ansi@0.3.0
-2940 silly currentTree │ ├── supports-color@0.2.0
-2940 silly currentTree │ ├── through2@0.5.1
-2940 silly currentTree │ ├── vinyl@0.2.3
-2940 silly currentTree │ └── xtend@3.0.0
-2940 silly currentTree ├── gulplog@1.0.0
-2940 silly currentTree ├── har-schema@1.0.5
-2940 silly currentTree ├── har-validator@4.2.1
-2940 silly currentTree ├── has-ansi@2.0.0
-2940 silly currentTree ├── has-flag@2.0.0
-2940 silly currentTree ├── has-gulplog@0.1.0
-2940 silly currentTree ├── has-unicode@2.0.1
-2940 silly currentTree ├── hawk@3.1.3
-2940 silly currentTree ├── hoek@2.16.3
-2940 silly currentTree ├── homedir-polyfill@1.0.1
-2940 silly currentTree ├── hosted-git-info@2.4.2
-2940 silly currentTree ├── http-errors@1.6.1
-2940 silly currentTree ├── http-signature@1.1.1
-2940 silly currentTree ├── iconv-lite@0.4.17
-2940 silly currentTree ├── in-publish@2.0.0
-2940 silly currentTree ├── indent-string@2.1.0
-2940 silly currentTree ├── inflight@1.0.6
-2940 silly currentTree ├── inherits@2.0.3
-2940 silly currentTree ├── ini@1.3.4
-2940 silly currentTree ├─┬ inquirer@3.1.0
-2940 silly currentTree │ ├── is-fullwidth-code-point@2.0.0
-2940 silly currentTree │ ├── lodash@4.17.4
-2940 silly currentTree │ └── string-width@2.0.0
-2940 silly currentTree ├── interpret@1.0.3
-2940 silly currentTree ├── invert-kv@1.0.0
-2940 silly currentTree ├─┬ ionic@3.7.0
-2940 silly currentTree │ ├── @ionic/cli-utils@1.7.0
-2940 silly currentTree │ ├── ansi-regex@3.0.0
-2940 silly currentTree │ ├── ansi-styles@3.2.0
-2940 silly currentTree │ ├── archiver@2.0.0
-2940 silly currentTree │ ├── chalk@2.1.0
-2940 silly currentTree │ ├── cross-spawn@5.1.0
-2940 silly currentTree │ ├── glob@7.1.2
-2940 silly currentTree │ ├── inquirer@3.2.2
-2940 silly currentTree │ ├── is-fullwidth-code-point@2.0.0
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── lodash@4.17.4
-2940 silly currentTree │ ├── lru-cache@4.1.1
-2940 silly currentTree │ ├── minimatch@3.0.4
-2940 silly currentTree │ ├── opn@5.1.0
-2940 silly currentTree │ ├── readable-stream@2.3.3
-2940 silly currentTree │ ├── safe-buffer@5.1.1
-2940 silly currentTree │ ├── semver@5.4.1
-2940 silly currentTree │ ├── slice-ansi@1.0.0
-2940 silly currentTree │ ├── string_decoder@1.0.3
-2940 silly currentTree │ ├── string-width@2.1.1
-2940 silly currentTree │ ├── strip-ansi@4.0.0
-2940 silly currentTree │ ├── supports-color@4.2.1
-2940 silly currentTree │ ├── wrap-ansi@3.0.1
-2940 silly currentTree │ └── zip-stream@1.2.0
-2940 silly currentTree ├── ionic-plugin-keyboard@1.0.9
-2940 silly currentTree ├── ipaddr.js@1.3.0
-2940 silly currentTree ├── is-absolute@0.2.6
-2940 silly currentTree ├── is-arrayish@0.2.1
-2940 silly currentTree ├── is-binary-path@1.0.1
-2940 silly currentTree ├── is-buffer@1.1.5
-2940 silly currentTree ├── is-builtin-module@1.0.0
-2940 silly currentTree ├── is-dotfile@1.0.3
-2940 silly currentTree ├── is-equal-shallow@0.1.3
-2940 silly currentTree ├── is-extendable@0.1.1
-2940 silly currentTree ├── is-extglob@1.0.0
-2940 silly currentTree ├── is-finite@1.0.2
-2940 silly currentTree ├── is-fullwidth-code-point@1.0.0
-2940 silly currentTree ├── is-glob@2.0.1
-2940 silly currentTree ├── is-number@2.1.0
-2940 silly currentTree ├── is-posix-bracket@0.1.1
-2940 silly currentTree ├── is-primitive@2.0.0
-2940 silly currentTree ├── is-promise@2.1.0
-2940 silly currentTree ├── is-relative@0.2.1
-2940 silly currentTree ├── is-stream@1.1.0
-2940 silly currentTree ├── is-typedarray@1.0.0
-2940 silly currentTree ├── is-unc-path@0.1.2
-2940 silly currentTree ├── is-utf8@0.2.1
-2940 silly currentTree ├── is-windows@0.2.0
-2940 silly currentTree ├── is-wsl@1.1.0
-2940 silly currentTree ├── isarray@0.0.1
-2940 silly currentTree ├── isexe@2.0.0
-2940 silly currentTree ├─┬ isobject@2.1.0
-2940 silly currentTree │ └── isarray@1.0.0
-2940 silly currentTree ├── isstream@0.1.2
-2940 silly currentTree ├── jpush-phonegap-plugin@3.2.3
-2940 silly currentTree ├── js-base64@2.1.9
-2940 silly currentTree ├── jsbn@0.1.1
-2940 silly currentTree ├── jschardet@1.4.2
-2940 silly currentTree ├── json-schema@0.2.3
-2940 silly currentTree ├── json-stable-stringify@1.0.1
-2940 silly currentTree ├── json-stringify-safe@5.0.1
-2940 silly currentTree ├── jsonify@0.0.0
-2940 silly currentTree ├─┬ jsprim@1.4.0
-2940 silly currentTree │ └── assert-plus@1.0.0
-2940 silly currentTree ├── kind-of@3.2.2
-2940 silly currentTree ├─┬ lazystream@1.0.0
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── lcid@1.0.0
-2940 silly currentTree ├─┬ leek@0.0.24
-2940 silly currentTree │ └── lodash.assign@3.2.0
-2940 silly currentTree ├── liftoff@2.3.0
-2940 silly currentTree ├── livereload-js@2.2.2
-2940 silly currentTree ├─┬ load-json-file@1.1.0
-2940 silly currentTree │ ├── graceful-fs@4.1.11
-2940 silly currentTree │ └── strip-bom@2.0.0
-2940 silly currentTree ├── lodash@1.0.2
-2940 silly currentTree ├── lodash._baseassign@3.2.0
-2940 silly currentTree ├── lodash._basecopy@3.0.1
-2940 silly currentTree ├── lodash._basetostring@3.0.1
-2940 silly currentTree ├── lodash._basevalues@3.0.0
-2940 silly currentTree ├── lodash._bindcallback@3.0.1
-2940 silly currentTree ├── lodash._createassigner@3.1.1
-2940 silly currentTree ├── lodash._escapehtmlchar@2.4.1
-2940 silly currentTree ├── lodash._escapestringchar@2.4.1
-2940 silly currentTree ├── lodash._getnative@3.9.1
-2940 silly currentTree ├── lodash._htmlescapes@2.4.1
-2940 silly currentTree ├── lodash._isiterateecall@3.0.9
-2940 silly currentTree ├── lodash._isnative@2.4.1
-2940 silly currentTree ├── lodash._objecttypes@2.4.1
-2940 silly currentTree ├── lodash._reescape@3.0.0
-2940 silly currentTree ├── lodash._reevaluate@3.0.0
-2940 silly currentTree ├── lodash._reinterpolate@3.0.0
-2940 silly currentTree ├─┬ lodash._reunescapedhtml@2.4.1
-2940 silly currentTree │ └── lodash.keys@2.4.1
-2940 silly currentTree ├── lodash._root@3.0.1
-2940 silly currentTree ├── lodash._shimkeys@2.4.1
-2940 silly currentTree ├── lodash.assign@4.2.0
-2940 silly currentTree ├── lodash.assignwith@4.2.0
-2940 silly currentTree ├── lodash.clonedeep@4.5.0
-2940 silly currentTree ├── lodash.debounce@4.0.8
-2940 silly currentTree ├─┬ lodash.defaults@2.4.1
-2940 silly currentTree │ └── lodash.keys@2.4.1
-2940 silly currentTree ├── lodash.escape@3.2.0
-2940 silly currentTree ├── lodash.isarguments@3.1.0
-2940 silly currentTree ├── lodash.isarray@3.0.4
-2940 silly currentTree ├── lodash.isempty@4.4.0
-2940 silly currentTree ├── lodash.isobject@2.4.1
-2940 silly currentTree ├── lodash.isplainobject@4.0.6
-2940 silly currentTree ├── lodash.isstring@4.0.1
-2940 silly currentTree ├── lodash.keys@3.1.2
-2940 silly currentTree ├── lodash.mapvalues@4.6.0
-2940 silly currentTree ├── lodash.pick@4.4.0
-2940 silly currentTree ├── lodash.restparam@3.6.1
-2940 silly currentTree ├── lodash.template@3.6.2
-2940 silly currentTree ├── lodash.templatesettings@3.1.1
-2940 silly currentTree ├─┬ lodash.values@2.4.1
-2940 silly currentTree │ └── lodash.keys@2.4.1
-2940 silly currentTree ├── loud-rejection@1.6.0
-2940 silly currentTree ├── lru-cache@2.7.3
-2940 silly currentTree ├── macos-release@1.0.0
-2940 silly currentTree ├── map-cache@0.2.2
-2940 silly currentTree ├── map-obj@1.0.1
-2940 silly currentTree ├── media-typer@0.3.0
-2940 silly currentTree ├── memory-cache@0.0.5
-2940 silly currentTree ├─┬ meow@3.7.0
-2940 silly currentTree │ └── object-assign@4.1.1
-2940 silly currentTree ├── merge-descriptors@1.0.1
-2940 silly currentTree ├── methods@1.1.2
-2940 silly currentTree ├── micromatch@2.3.11
-2940 silly currentTree ├── mime@1.3.6
-2940 silly currentTree ├── mime-db@1.27.0
-2940 silly currentTree ├── mime-types@2.1.15
-2940 silly currentTree ├── mimic-fn@1.1.0
-2940 silly currentTree ├── minimatch@2.0.10
-2940 silly currentTree ├── minimist@1.2.0
-2940 silly currentTree ├─┬ mkdirp@0.5.1
-2940 silly currentTree │ └── minimist@0.0.8
-2940 silly currentTree ├── ms@2.0.0
-2940 silly currentTree ├── multipipe@0.1.2
-2940 silly currentTree ├── mute-stream@0.0.7
-2940 silly currentTree ├── nan@2.6.2
-2940 silly currentTree ├── natives@1.1.0
-2940 silly currentTree ├── ncp@2.0.0
-2940 silly currentTree ├── negotiator@0.6.1
-2940 silly currentTree ├── next-tick@1.0.0
-2940 silly currentTree ├─┬ node-gyp@3.6.2
-2940 silly currentTree │ ├── glob@7.1.2
-2940 silly currentTree │ ├── graceful-fs@4.1.11
-2940 silly currentTree │ ├── minimatch@3.0.4
-2940 silly currentTree │ └── semver@5.3.0
-2940 silly currentTree ├─┬ node-sass@3.13.1
-2940 silly currentTree │ ├── gaze@1.1.2
-2940 silly currentTree │ ├── glob@7.1.2
-2940 silly currentTree │ ├── globule@1.2.0
-2940 silly currentTree │ ├── lodash@4.17.4
-2940 silly currentTree │ └── minimatch@3.0.4
-2940 silly currentTree ├── nopt@3.0.6
-2940 silly currentTree ├── normalize-package-data@2.3.8
-2940 silly currentTree ├── normalize-path@2.1.1
-2940 silly currentTree ├── npmlog@4.1.0
-2940 silly currentTree ├── number-is-nan@1.0.1
-2940 silly currentTree ├── oauth-sign@0.8.2
-2940 silly currentTree ├── object-assign@3.0.0
-2940 silly currentTree ├─┬ object.defaults@1.1.0
-2940 silly currentTree │ ├── for-own@1.0.0
-2940 silly currentTree │ └── isobject@3.0.0
-2940 silly currentTree ├── object.omit@2.0.1
-2940 silly currentTree ├── on-finished@2.3.0
-2940 silly currentTree ├── once@1.3.3
-2940 silly currentTree ├── onetime@2.0.1
-2940 silly currentTree ├─┬ opn@4.0.2
-2940 silly currentTree │ └── object-assign@4.1.1
-2940 silly currentTree ├── orchestrator@0.3.8
-2940 silly currentTree ├── ordered-read-streams@0.1.0
-2940 silly currentTree ├── os-homedir@1.0.2
-2940 silly currentTree ├── os-locale@1.4.0
-2940 silly currentTree ├── os-name@2.0.1
-2940 silly currentTree ├── os-tmpdir@1.0.2
-2940 silly currentTree ├── osenv@0.1.4
-2940 silly currentTree ├── parse-filepath@1.0.1
-2940 silly currentTree ├── parse-glob@3.0.4
-2940 silly currentTree ├── parse-json@2.2.0
-2940 silly currentTree ├── parse-passwd@1.0.0
-2940 silly currentTree ├── parseurl@1.3.1
-2940 silly currentTree ├── path-exists@2.1.0
-2940 silly currentTree ├── path-is-absolute@1.0.1
-2940 silly currentTree ├── path-parse@1.0.5
-2940 silly currentTree ├── path-root@0.1.1
-2940 silly currentTree ├── path-root-regex@0.1.2
-2940 silly currentTree ├── path-to-regexp@0.1.7
-2940 silly currentTree ├─┬ path-type@1.1.0
-2940 silly currentTree │ └── graceful-fs@4.1.11
-2940 silly currentTree ├── performance-now@0.2.0
-2940 silly currentTree ├── phonegap-plugin-barcodescanner@6.0.8
-2940 silly currentTree ├── pify@2.3.0
-2940 silly currentTree ├── pinkie@2.0.4
-2940 silly currentTree ├── pinkie-promise@2.0.1
-2940 silly currentTree ├── preserve@0.2.0
-2940 silly currentTree ├── pretty-hrtime@1.0.3
-2940 silly currentTree ├── process-nextick-args@1.0.7
-2940 silly currentTree ├── proxy-addr@1.1.4
-2940 silly currentTree ├── proxy-middleware@0.15.0
-2940 silly currentTree ├── pseudomap@1.0.2
-2940 silly currentTree ├── punycode@1.4.1
-2940 silly currentTree ├── qs@6.4.0
-2940 silly currentTree ├─┬ randomatic@1.1.7
-2940 silly currentTree │ ├─┬ is-number@3.0.0
-2940 silly currentTree │ │ └── kind-of@3.2.2
-2940 silly currentTree │ └── kind-of@4.0.0
-2940 silly currentTree ├── range-parser@1.2.0
-2940 silly currentTree ├── raw-body@1.1.7
-2940 silly currentTree ├── read-pkg@1.1.0
-2940 silly currentTree ├── read-pkg-up@1.0.1
-2940 silly currentTree ├── readable-stream@1.1.14
-2940 silly currentTree ├─┬ readdirp@2.1.0
-2940 silly currentTree │ ├── graceful-fs@4.1.11
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── minimatch@3.0.4
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── rechoir@0.6.2
-2940 silly currentTree ├── redent@1.0.0
-2940 silly currentTree ├── regex-cache@0.4.3
-2940 silly currentTree ├── remove-trailing-separator@1.0.2
-2940 silly currentTree ├── repeat-element@1.1.2
-2940 silly currentTree ├── repeat-string@1.6.1
-2940 silly currentTree ├── repeating@2.0.1
-2940 silly currentTree ├── replace-ext@0.0.1
-2940 silly currentTree ├── request@2.81.0
-2940 silly currentTree ├── require-directory@2.1.1
-2940 silly currentTree ├── require-main-filename@1.0.1
-2940 silly currentTree ├── resolve@1.3.3
-2940 silly currentTree ├── resolve-dir@0.1.1
-2940 silly currentTree ├── restore-cursor@2.0.0
-2940 silly currentTree ├─┬ rimraf@2.6.1
-2940 silly currentTree │ ├── glob@7.1.2
-2940 silly currentTree │ └── minimatch@3.0.4
-2940 silly currentTree ├── rsvp@3.5.0
-2940 silly currentTree ├── run-async@2.3.0
-2940 silly currentTree ├── rx-lite@4.0.8
-2940 silly currentTree ├── rx-lite-aggregates@4.0.8
-2940 silly currentTree ├── safe-buffer@5.0.1
-2940 silly currentTree ├── safe-json-parse@1.0.1
-2940 silly currentTree ├─┬ sass-graph@2.2.4
-2940 silly currentTree │ ├── glob@7.1.2
-2940 silly currentTree │ ├── lodash@4.17.4
-2940 silly currentTree │ └── minimatch@3.0.4
-2940 silly currentTree ├── sax@1.2.2
-2940 silly currentTree ├─┬ scss-tokenizer@0.2.3
-2940 silly currentTree │ └── source-map@0.4.4
-2940 silly currentTree ├── semver@4.3.6
-2940 silly currentTree ├─┬ send@0.15.3
-2940 silly currentTree │ ├── debug@2.6.7
-2940 silly currentTree │ └── mime@1.3.4
-2940 silly currentTree ├── sequencify@0.0.7
-2940 silly currentTree ├── serve-static@1.12.3
-2940 silly currentTree ├── set-blocking@2.0.0
-2940 silly currentTree ├── set-immediate-shim@1.0.1
-2940 silly currentTree ├── setprototypeof@1.0.3
-2940 silly currentTree ├── shebang-command@1.2.0
-2940 silly currentTree ├── shebang-regex@1.0.0
-2940 silly currentTree ├── shelljs@0.3.0
-2940 silly currentTree ├── sigmund@1.0.1
-2940 silly currentTree ├── signal-exit@3.0.2
-2940 silly currentTree ├── slice-ansi@0.0.4
-2940 silly currentTree ├── sntp@1.0.9
-2940 silly currentTree ├── source-map@0.5.6
-2940 silly currentTree ├── sparkles@1.0.0
-2940 silly currentTree ├── spdx-correct@1.0.2
-2940 silly currentTree ├── spdx-expression-parse@1.0.4
-2940 silly currentTree ├── spdx-license-ids@1.2.2
-2940 silly currentTree ├── ssh-config@1.0.1
-2940 silly currentTree ├─┬ sshpk@1.13.1
-2940 silly currentTree │ └── assert-plus@1.0.0
-2940 silly currentTree ├── statuses@1.3.1
-2940 silly currentTree ├── stream-consume@0.1.0
-2940 silly currentTree ├── stream-exhaust@1.0.1
-2940 silly currentTree ├── string_decoder@0.10.31
-2940 silly currentTree ├── string-template@0.2.1
-2940 silly currentTree ├── string-width@1.0.2
-2940 silly currentTree ├── stringstream@0.0.5
-2940 silly currentTree ├── strip-ansi@3.0.1
-2940 silly currentTree ├── strip-bom@1.0.0
-2940 silly currentTree ├── strip-indent@1.0.1
-2940 silly currentTree ├─┬ superagent@3.5.2
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── supports-color@2.0.0
-2940 silly currentTree ├── tar@2.2.1
-2940 silly currentTree ├─┬ tar-stream@1.5.4
-2940 silly currentTree │ ├── end-of-stream@1.4.0
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── once@1.4.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── through@2.3.8
-2940 silly currentTree ├─┬ through2@2.0.3
-2940 silly currentTree │ ├── isarray@1.0.0
-2940 silly currentTree │ ├── readable-stream@2.2.11
-2940 silly currentTree │ └── string_decoder@1.0.2
-2940 silly currentTree ├── tildify@1.2.0
-2940 silly currentTree ├── time-stamp@1.1.0
-2940 silly currentTree ├─┬ tiny-lr@1.0.4
-2940 silly currentTree │ ├── debug@2.2.0
-2940 silly currentTree │ ├── ms@0.7.1
-2940 silly currentTree │ └── object-assign@4.1.1
-2940 silly currentTree ├── tmp@0.0.31
-2940 silly currentTree ├── tough-cookie@2.3.2
-2940 silly currentTree ├── trim-newlines@1.0.0
-2940 silly currentTree ├── tslib@1.7.1
-2940 silly currentTree ├── tunnel-agent@0.6.0
-2940 silly currentTree ├── tweetnacl@0.14.5
-2940 silly currentTree ├── type-is@1.6.15
-2940 silly currentTree ├── unc-path-regex@0.1.2
-2940 silly currentTree ├── unique-stream@1.0.0
-2940 silly currentTree ├── unpipe@1.0.0
-2940 silly currentTree ├── user-home@1.1.1
-2940 silly currentTree ├── util-deprecate@1.0.2
-2940 silly currentTree ├── utils-merge@1.0.0
-2940 silly currentTree ├── uuid@3.0.1
-2940 silly currentTree ├── v8flags@2.1.1
-2940 silly currentTree ├── validate-npm-package-license@3.0.1
-2940 silly currentTree ├── vary@1.1.1
-2940 silly currentTree ├── verror@1.3.6
-2940 silly currentTree ├── vinyl@0.5.3
-2940 silly currentTree ├─┬ vinyl-fs@0.3.14
-2940 silly currentTree │ ├── clone@0.2.0
-2940 silly currentTree │ ├── readable-stream@1.0.34
-2940 silly currentTree │ ├── through2@0.6.5
-2940 silly currentTree │ └── vinyl@0.4.6
-2940 silly currentTree ├─┬ vinyl-sourcemaps-apply@0.1.4
-2940 silly currentTree │ └── source-map@0.1.43
-2940 silly currentTree ├── walkdir@0.0.11
-2940 silly currentTree ├── websocket-driver@0.6.5
-2940 silly currentTree ├── websocket-extensions@0.1.1
-2940 silly currentTree ├── which@1.2.14
-2940 silly currentTree ├── which-module@1.0.0
-2940 silly currentTree ├── wide-align@1.1.2
-2940 silly currentTree ├─┬ win-release@1.1.1
-2940 silly currentTree │ └── semver@5.3.0
-2940 silly currentTree ├── wrap-ansi@2.1.0
-2940 silly currentTree ├── wrappy@1.0.2
-2940 silly currentTree ├── xml2js@0.4.17
-2940 silly currentTree ├─┬ xmlbuilder@4.2.1
-2940 silly currentTree │ └── lodash@4.17.4
-2940 silly currentTree ├── xtend@4.0.1
-2940 silly currentTree ├── y18n@3.2.1
-2940 silly currentTree ├── yallist@2.1.2
-2940 silly currentTree ├─┬ yargs@7.1.0
-2940 silly currentTree │ └── camelcase@3.0.0
-2940 silly currentTree ├─┬ yargs-parser@5.0.0
-2940 silly currentTree │ └── camelcase@3.0.0
-2940 silly currentTree └─┬ zip-stream@1.1.1
-2940 silly currentTree   ├── isarray@1.0.0
-2940 silly currentTree   ├── lodash@4.17.4
-2940 silly currentTree   ├── readable-stream@2.2.11
-2940 silly currentTree   └── string_decoder@1.0.2
-2941 silly idealTree ionic-tabs@1.1.1
-2941 silly idealTree ├─┬ @ionic/cli-plugin-ionic1@1.1.2
-2941 silly idealTree │ └── glob-watcher@3.2.0
-2941 silly idealTree ├─┬ @ionic/cli-utils@1.1.2
-2941 silly idealTree │ ├── cross-spawn@4.0.2
-2941 silly idealTree │ ├── is-fullwidth-code-point@2.0.0
-2941 silly idealTree │ ├── lru-cache@4.1.0
-2941 silly idealTree │ ├── semver@5.3.0
-2941 silly idealTree │ └── string-width@2.0.0
-2941 silly idealTree ├── abbrev@1.1.0
-2941 silly idealTree ├── accepts@1.3.3
-2941 silly idealTree ├── ajv@4.11.8
-2941 silly idealTree ├── amdefine@1.0.1
-2941 silly idealTree ├── ansi-escapes@2.0.0
-2941 silly idealTree ├── ansi-regex@2.1.1
-2941 silly idealTree ├── ansi-styles@2.2.1
-2941 silly idealTree ├── anymatch@1.3.0
-2941 silly idealTree ├── aproba@1.1.2
-2941 silly idealTree ├─┬ archiver@1.3.0
-2941 silly idealTree │ ├── glob@7.1.2
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── lodash@4.17.4
-2941 silly idealTree │ ├── minimatch@3.0.4
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├─┬ archiver-utils@1.3.0
-2941 silly idealTree │ ├── glob@7.1.2
-2941 silly idealTree │ ├── graceful-fs@4.1.11
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── lodash@4.17.4
-2941 silly idealTree │ ├── minimatch@3.0.4
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── archy@1.0.0
-2941 silly idealTree ├─┬ are-we-there-yet@1.1.4
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── arr-diff@2.0.0
-2941 silly idealTree ├── arr-flatten@1.0.3
-2941 silly idealTree ├── array-differ@1.0.0
-2941 silly idealTree ├── array-each@1.0.1
-2941 silly idealTree ├── array-find-index@1.0.2
-2941 silly idealTree ├── array-flatten@1.1.1
-2941 silly idealTree ├── array-slice@1.0.0
-2941 silly idealTree ├── array-uniq@1.0.3
-2941 silly idealTree ├── array-unique@0.2.1
-2941 silly idealTree ├── arrify@1.0.1
-2941 silly idealTree ├── asn1@0.2.3
-2941 silly idealTree ├── assert-plus@0.2.0
-2941 silly idealTree ├─┬ async@2.4.1
-2941 silly idealTree │ └── lodash@4.17.4
-2941 silly idealTree ├─┬ async-done@1.2.2
-2941 silly idealTree │ └─┬ end-of-stream@1.4.0
-2941 silly idealTree │   └── once@1.4.0
-2941 silly idealTree ├── async-each@1.0.1
-2941 silly idealTree ├── async-foreach@0.1.3
-2941 silly idealTree ├── asynckit@0.4.0
-2941 silly idealTree ├── aws-sign2@0.6.0
-2941 silly idealTree ├── aws4@1.6.0
-2941 silly idealTree ├── balanced-match@0.4.2
-2941 silly idealTree ├── bcrypt-pbkdf@1.0.1
-2941 silly idealTree ├── beeper@1.1.1
-2941 silly idealTree ├── binary-extensions@1.8.0
-2941 silly idealTree ├─┬ bl@1.2.1
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── block-stream@0.0.9
-2941 silly idealTree ├── body@5.1.0
-2941 silly idealTree ├── boom@2.10.1
-2941 silly idealTree ├── bower@1.8.0
-2941 silly idealTree ├── brace-expansion@1.1.7
-2941 silly idealTree ├── braces@1.8.5
-2941 silly idealTree ├── buffer-crc32@0.2.13
-2941 silly idealTree ├── bufferstreams@0.0.2
-2941 silly idealTree ├── builtin-modules@1.1.1
-2941 silly idealTree ├── bytes@1.0.0
-2941 silly idealTree ├── camelcase@2.1.1
-2941 silly idealTree ├── camelcase-keys@2.1.0
-2941 silly idealTree ├── caseless@0.12.0
-2941 silly idealTree ├── chalk@1.1.3
-2941 silly idealTree ├── chokidar@1.7.0
-2941 silly idealTree ├── ci-info@1.0.0
-2941 silly idealTree ├─┬ clean-css@3.0.10
-2941 silly idealTree │ └── source-map@0.1.43
-2941 silly idealTree ├── cli-cursor@2.1.0
-2941 silly idealTree ├── cli-width@2.1.0
-2941 silly idealTree ├── cliui@3.2.0
-2941 silly idealTree ├── clone@1.0.2
-2941 silly idealTree ├── clone-buffer@1.0.0
-2941 silly idealTree ├── clone-stats@0.0.1
-2941 silly idealTree ├── cloneable-readable@1.0.0
-2941 silly idealTree ├── co@4.6.0
-2941 silly idealTree ├── code-point-at@1.1.0
-2941 silly idealTree ├── color-convert@1.9.0
-2941 silly idealTree ├── color-name@1.1.3
-2941 silly idealTree ├── combined-stream@1.0.5
-2941 silly idealTree ├── commander@2.5.1
-2941 silly idealTree ├── component-emitter@1.2.1
-2941 silly idealTree ├─┬ compress-commons@1.2.0
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── concat-map@0.0.1
-2941 silly idealTree ├── concat-with-sourcemaps@1.0.4
-2941 silly idealTree ├── console-control-strings@1.1.0
-2941 silly idealTree ├── content-disposition@0.5.2
-2941 silly idealTree ├── content-type@1.0.2
-2941 silly idealTree ├── continuable-cache@0.3.1
-2941 silly idealTree ├── cookie@0.3.1
-2941 silly idealTree ├── cookie-signature@1.0.6
-2941 silly idealTree ├── cookiejar@2.1.1
-2941 silly idealTree ├── cordova-hot-code-push-plugin@1.5.3
-2941 silly idealTree ├─┬ cordova-ios@4.4.0
-2941 silly idealTree │ ├── abbrev@1.0.9
-2941 silly idealTree │ ├── ansi@0.3.1
-2941 silly idealTree │ ├── balanced-match@0.4.2
-2941 silly idealTree │ ├── base64-js@0.0.8
-2941 silly idealTree │ ├── big-integer@1.6.17
-2941 silly idealTree │ ├── bplist-parser@0.1.1
-2941 silly idealTree │ ├── brace-expansion@1.1.6
-2941 silly idealTree │ ├── concat-map@0.0.1
-2941 silly idealTree │ ├── cordova-common@2.0.2
-2941 silly idealTree │ ├── cordova-registry-mapper@1.1.15
-2941 silly idealTree │ ├── elementtree@0.1.6
-2941 silly idealTree │ ├── glob@5.0.15
-2941 silly idealTree │ ├── inflight@1.0.6
-2941 silly idealTree │ ├── inherits@2.0.3
-2941 silly idealTree │ ├─┬ ios-sim@5.0.12
-2941 silly idealTree │ │ ├── bplist-parser@0.0.6
-2941 silly idealTree │ │ └── nopt@1.0.9
-2941 silly idealTree │ ├── lodash@3.10.1
-2941 silly idealTree │ ├── minimatch@3.0.3
-2941 silly idealTree │ ├── nopt@3.0.6
-2941 silly idealTree │ ├── once@1.4.0
-2941 silly idealTree │ ├── os-homedir@1.0.2
-2941 silly idealTree │ ├── os-tmpdir@1.0.2
-2941 silly idealTree │ ├── osenv@0.1.3
-2941 silly idealTree │ ├── path-is-absolute@1.0.1
-2941 silly idealTree │ ├── plist@1.2.0
-2941 silly idealTree │ ├── q@1.4.1
-2941 silly idealTree │ ├── sax@0.3.5
-2941 silly idealTree │ ├── semver@5.3.0
-2941 silly idealTree │ ├── shelljs@0.5.3
-2941 silly idealTree │ ├─┬ simctl@0.1.0
-2941 silly idealTree │ │ └── shelljs@0.2.6
-2941 silly idealTree │ ├── tail@0.4.0
-2941 silly idealTree │ ├── underscore@1.8.3
-2941 silly idealTree │ ├── unorm@1.4.1
-2941 silly idealTree │ ├── util-deprecate@1.0.2
-2941 silly idealTree │ ├── wrappy@1.0.2
-2941 silly idealTree │ ├─┬ xcode@0.9.3
-2941 silly idealTree │ │ ├── base64-js@1.1.2
-2941 silly idealTree │ │ ├── bplist-creator@0.0.7
-2941 silly idealTree │ │ ├── pegjs@0.10.0
-2941 silly idealTree │ │ ├── plist@2.0.1
-2941 silly idealTree │ │ ├── simple-plist@0.2.1
-2941 silly idealTree │ │ ├── stream-buffers@2.2.0
-2941 silly idealTree │ │ └── xmlbuilder@8.2.2
-2941 silly idealTree │ ├── xml-escape@1.1.0
-2941 silly idealTree │ ├── xmlbuilder@4.0.0
-2941 silly idealTree │ └── xmldom@0.1.27
-2941 silly idealTree ├── cordova-plugin-actionsheet@2.3.3
-2941 silly idealTree ├── cordova-plugin-camera@2.4.0
-2941 silly idealTree ├── cordova-plugin-compat@1.1.0
-2941 silly idealTree ├── cordova-plugin-console@1.0.7
-2941 silly idealTree ├── cordova-plugin-device@1.1.6
-2941 silly idealTree ├── cordova-plugin-file@4.3.2
-2941 silly idealTree ├── cordova-plugin-file-transfer@1.6.2
-2941 silly idealTree ├── cordova-plugin-jcore@1.1.5
-2941 silly idealTree ├── cordova-plugin-media-capture@1.4.3
-2941 silly idealTree ├── cordova-plugin-offbye-alipay@1.0.1
-2941 silly idealTree ├── cordova-plugin-splashscreen@4.0.3
-2941 silly idealTree ├── cordova-plugin-statusbar@2.1.3
-2941 silly idealTree ├── cordova-plugin-wechat@1.4.0
-2941 silly idealTree ├── cordova-plugin-weibosdk@0.6.0
-2941 silly idealTree ├── cordova-plugin-whitelist@1.2.2
-2941 silly idealTree ├── core-util-is@1.0.2
-2941 silly idealTree ├── crc@3.4.4
-2941 silly idealTree ├─┬ crc32-stream@2.0.0
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├─┬ cross-spawn@3.0.1
-2941 silly idealTree │ └── lru-cache@4.1.0
-2941 silly idealTree ├── cryptiles@2.0.5
-2941 silly idealTree ├── currently-unhandled@0.4.1
-2941 silly idealTree ├── dargs@5.1.0
-2941 silly idealTree ├─┬ dashdash@1.14.1
-2941 silly idealTree │ └── assert-plus@1.0.0
-2941 silly idealTree ├── dateformat@2.0.0
-2941 silly idealTree ├── debug@2.6.8
-2941 silly idealTree ├── decamelize@1.2.0
-2941 silly idealTree ├── defaults@1.0.3
-2941 silly idealTree ├── delayed-stream@1.0.0
-2941 silly idealTree ├── delegates@1.0.0
-2941 silly idealTree ├── depd@1.1.0
-2941 silly idealTree ├── deprecated@0.0.1
-2941 silly idealTree ├── destroy@1.0.4
-2941 silly idealTree ├── detect-file@0.1.0
-2941 silly idealTree ├── dev-null@0.1.1
-2941 silly idealTree ├── diff@3.3.0
-2941 silly idealTree ├── duplexer2@0.0.2
-2941 silly idealTree ├── ecc-jsbn@0.1.1
-2941 silly idealTree ├── ee-first@1.1.1
-2941 silly idealTree ├── encodeurl@1.0.1
-2941 silly idealTree ├── end-of-stream@0.1.5
-2941 silly idealTree ├── error@7.0.2
-2941 silly idealTree ├── error-ex@1.3.1
-2941 silly idealTree ├── escape-html@1.0.3
-2941 silly idealTree ├── escape-string-regexp@1.0.5
-2941 silly idealTree ├── etag@1.8.0
-2941 silly idealTree ├── expand-brackets@0.1.5
-2941 silly idealTree ├── expand-range@1.8.2
-2941 silly idealTree ├── expand-tilde@1.2.2
-2941 silly idealTree ├─┬ express@4.15.3
-2941 silly idealTree │ └── debug@2.6.7
-2941 silly idealTree ├── extend@3.0.1
-2941 silly idealTree ├── external-editor@2.0.4
-2941 silly idealTree ├── extglob@0.3.2
-2941 silly idealTree ├── extsprintf@1.0.2
-2941 silly idealTree ├── fancy-log@1.3.0
-2941 silly idealTree ├── faye-websocket@0.10.0
-2941 silly idealTree ├── figures@2.0.0
-2941 silly idealTree ├── filename-regex@2.0.1
-2941 silly idealTree ├── fill-range@2.2.3
-2941 silly idealTree ├─┬ finalhandler@1.0.3
-2941 silly idealTree │ └── debug@2.6.7
-2941 silly idealTree ├── find-index@0.1.1
-2941 silly idealTree ├── find-up@1.1.2
-2941 silly idealTree ├── findup-sync@0.4.3
-2941 silly idealTree ├── fined@1.0.2
-2941 silly idealTree ├── first-chunk-stream@1.0.0
-2941 silly idealTree ├── flagged-respawn@0.3.2
-2941 silly idealTree ├── for-in@1.0.2
-2941 silly idealTree ├── for-own@0.1.5
-2941 silly idealTree ├── forever-agent@0.6.1
-2941 silly idealTree ├── form-data@2.1.4
-2941 silly idealTree ├── formidable@1.1.1
-2941 silly idealTree ├── forwarded@0.1.0
-2941 silly idealTree ├── fresh@0.5.0
-2941 silly idealTree ├── fs-exists-sync@0.1.0
-2941 silly idealTree ├── fs.realpath@1.0.0
-2941 silly idealTree ├─┬ fstream@1.0.11
-2941 silly idealTree │ └── graceful-fs@4.1.11
-2941 silly idealTree ├─┬ gauge@2.7.4
-2941 silly idealTree │ └── object-assign@4.1.1
-2941 silly idealTree ├── gaze@0.5.2
-2941 silly idealTree ├── get-caller-file@1.0.2
-2941 silly idealTree ├── get-stdin@4.0.1
-2941 silly idealTree ├─┬ getpass@0.1.7
-2941 silly idealTree │ └── assert-plus@1.0.0
-2941 silly idealTree ├── glob@4.5.3
-2941 silly idealTree ├── glob-base@0.3.0
-2941 silly idealTree ├── glob-parent@2.0.0
-2941 silly idealTree ├─┬ glob-stream@3.1.18
-2941 silly idealTree │ ├── readable-stream@1.0.34
-2941 silly idealTree │ └── through2@0.6.5
-2941 silly idealTree ├── glob-watcher@0.0.6
-2941 silly idealTree ├── glob2base@0.0.12
-2941 silly idealTree ├── global-modules@0.2.3
-2941 silly idealTree ├── global-prefix@0.1.5
-2941 silly idealTree ├─┬ globule@0.1.0
-2941 silly idealTree │ ├── glob@3.1.21
-2941 silly idealTree │ ├── graceful-fs@1.2.3
-2941 silly idealTree │ ├── inherits@1.0.2
-2941 silly idealTree │ └── minimatch@0.2.14
-2941 silly idealTree ├── glogg@1.0.0
-2941 silly idealTree ├── graceful-fs@3.0.11
-2941 silly idealTree ├─┬ gulp@3.9.1
-2941 silly idealTree │ └── gulp-util@3.0.8
-2941 silly idealTree ├─┬ gulp-concat@2.6.1
-2941 silly idealTree │ ├── clone-stats@1.0.0
-2941 silly idealTree │ ├── replace-ext@1.0.0
-2941 silly idealTree │ └── vinyl@2.0.2
-2941 silly idealTree ├─┬ gulp-minify-css@0.3.13
-2941 silly idealTree │ ├─┬ gulp-util@3.0.8
-2941 silly idealTree │ │ ├── isarray@1.0.0
-2941 silly idealTree │ │ ├── readable-stream@2.3.3
-2941 silly idealTree │ │ ├── string_decoder@1.0.3
-2941 silly idealTree │ │ └── through2@2.0.3
-2941 silly idealTree │ ├── readable-stream@1.0.34
-2941 silly idealTree │ ├── safe-buffer@5.1.1
-2941 silly idealTree │ └── through2@0.6.5
-2941 silly idealTree ├── gulp-rename@1.2.2
-2941 silly idealTree ├─┬ gulp-sass@2.3.2
-2941 silly idealTree │ ├── gulp-util@3.0.8
-2941 silly idealTree │ └── vinyl-sourcemaps-apply@0.2.1
-2941 silly idealTree ├─┬ gulp-util@2.2.20
-2941 silly idealTree │ ├── ansi-regex@0.2.1
-2941 silly idealTree │ ├── ansi-styles@1.1.0
-2941 silly idealTree │ ├── chalk@0.5.1
-2941 silly idealTree │ ├── dateformat@1.0.12
-2941 silly idealTree │ ├── has-ansi@0.1.0
-2941 silly idealTree │ ├── lodash._reinterpolate@2.4.1
-2941 silly idealTree │ ├── lodash.escape@2.4.1
-2941 silly idealTree │ ├── lodash.keys@2.4.1
-2941 silly idealTree │ ├── lodash.template@2.4.1
-2941 silly idealTree │ ├── lodash.templatesettings@2.4.1
-2941 silly idealTree │ ├── minimist@0.2.0
-2941 silly idealTree │ ├── readable-stream@1.0.34
-2941 silly idealTree │ ├── strip-ansi@0.3.0
-2941 silly idealTree │ ├── supports-color@0.2.0
-2941 silly idealTree │ ├── through2@0.5.1
-2941 silly idealTree │ ├── vinyl@0.2.3
-2941 silly idealTree │ └── xtend@3.0.0
-2941 silly idealTree ├── gulplog@1.0.0
-2941 silly idealTree ├── har-schema@1.0.5
-2941 silly idealTree ├── har-validator@4.2.1
-2941 silly idealTree ├── has-ansi@2.0.0
-2941 silly idealTree ├── has-flag@2.0.0
-2941 silly idealTree ├── has-gulplog@0.1.0
-2941 silly idealTree ├── has-unicode@2.0.1
-2941 silly idealTree ├── hawk@3.1.3
-2941 silly idealTree ├── hoek@2.16.3
-2941 silly idealTree ├── homedir-polyfill@1.0.1
-2941 silly idealTree ├── hosted-git-info@2.4.2
-2941 silly idealTree ├── http-errors@1.6.1
-2941 silly idealTree ├── http-signature@1.1.1
-2941 silly idealTree ├── iconv-lite@0.4.17
-2941 silly idealTree ├── in-publish@2.0.0
-2941 silly idealTree ├── indent-string@2.1.0
-2941 silly idealTree ├── inflight@1.0.6
-2941 silly idealTree ├── inherits@2.0.3
-2941 silly idealTree ├── ini@1.3.4
-2941 silly idealTree ├─┬ inquirer@3.1.0
-2941 silly idealTree │ ├── is-fullwidth-code-point@2.0.0
-2941 silly idealTree │ ├── lodash@4.17.4
-2941 silly idealTree │ └── string-width@2.0.0
-2941 silly idealTree ├── interpret@1.0.3
-2941 silly idealTree ├── invert-kv@1.0.0
-2941 silly idealTree ├─┬ ionic@3.7.0
-2941 silly idealTree │ ├── @ionic/cli-utils@1.7.0
-2941 silly idealTree │ ├── ansi-regex@3.0.0
-2941 silly idealTree │ ├── ansi-styles@3.2.0
-2941 silly idealTree │ ├── archiver@2.0.0
-2941 silly idealTree │ ├── chalk@2.1.0
-2941 silly idealTree │ ├── cross-spawn@5.1.0
-2941 silly idealTree │ ├── glob@7.1.2
-2941 silly idealTree │ ├── inquirer@3.2.2
-2941 silly idealTree │ ├── is-fullwidth-code-point@2.0.0
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── lodash@4.17.4
-2941 silly idealTree │ ├── lru-cache@4.1.1
-2941 silly idealTree │ ├── minimatch@3.0.4
-2941 silly idealTree │ ├── opn@5.1.0
-2941 silly idealTree │ ├── readable-stream@2.3.3
-2941 silly idealTree │ ├── safe-buffer@5.1.1
-2941 silly idealTree │ ├── semver@5.4.1
-2941 silly idealTree │ ├── slice-ansi@1.0.0
-2941 silly idealTree │ ├── string_decoder@1.0.3
-2941 silly idealTree │ ├── string-width@2.1.1
-2941 silly idealTree │ ├── strip-ansi@4.0.0
-2941 silly idealTree │ ├── supports-color@4.2.1
-2941 silly idealTree │ ├── wrap-ansi@3.0.1
-2941 silly idealTree │ └── zip-stream@1.2.0
-2941 silly idealTree ├── ionic-plugin-keyboard@1.0.9
-2941 silly idealTree ├── ipaddr.js@1.3.0
-2941 silly idealTree ├── is-absolute@0.2.6
-2941 silly idealTree ├── is-arrayish@0.2.1
-2941 silly idealTree ├── is-binary-path@1.0.1
-2941 silly idealTree ├── is-buffer@1.1.5
-2941 silly idealTree ├── is-builtin-module@1.0.0
-2941 silly idealTree ├── is-dotfile@1.0.3
-2941 silly idealTree ├── is-equal-shallow@0.1.3
-2941 silly idealTree ├── is-extendable@0.1.1
-2941 silly idealTree ├── is-extglob@1.0.0
-2941 silly idealTree ├── is-finite@1.0.2
-2941 silly idealTree ├── is-fullwidth-code-point@1.0.0
-2941 silly idealTree ├── is-glob@2.0.1
-2941 silly idealTree ├── is-number@2.1.0
-2941 silly idealTree ├── is-posix-bracket@0.1.1
-2941 silly idealTree ├── is-primitive@2.0.0
-2941 silly idealTree ├── is-promise@2.1.0
-2941 silly idealTree ├── is-relative@0.2.1
-2941 silly idealTree ├── is-stream@1.1.0
-2941 silly idealTree ├── is-typedarray@1.0.0
-2941 silly idealTree ├── is-unc-path@0.1.2
-2941 silly idealTree ├── is-utf8@0.2.1
-2941 silly idealTree ├── is-windows@0.2.0
-2941 silly idealTree ├── is-wsl@1.1.0
-2941 silly idealTree ├── isarray@0.0.1
-2941 silly idealTree ├── isexe@2.0.0
-2941 silly idealTree ├─┬ isobject@2.1.0
-2941 silly idealTree │ └── isarray@1.0.0
-2941 silly idealTree ├── isstream@0.1.2
-2941 silly idealTree ├── jpush-phonegap-plugin@3.2.3
-2941 silly idealTree ├── js-base64@2.1.9
-2941 silly idealTree ├── jsbn@0.1.1
-2941 silly idealTree ├── jschardet@1.4.2
-2941 silly idealTree ├── json-schema@0.2.3
-2941 silly idealTree ├── json-stable-stringify@1.0.1
-2941 silly idealTree ├── json-stringify-safe@5.0.1
-2941 silly idealTree ├── jsonify@0.0.0
-2941 silly idealTree ├─┬ jsprim@1.4.0
-2941 silly idealTree │ └── assert-plus@1.0.0
-2941 silly idealTree ├── kind-of@3.2.2
-2941 silly idealTree ├─┬ lazystream@1.0.0
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── lcid@1.0.0
-2941 silly idealTree ├─┬ leek@0.0.24
-2941 silly idealTree │ └── lodash.assign@3.2.0
-2941 silly idealTree ├── liftoff@2.3.0
-2941 silly idealTree ├── livereload-js@2.2.2
-2941 silly idealTree ├─┬ load-json-file@1.1.0
-2941 silly idealTree │ ├── graceful-fs@4.1.11
-2941 silly idealTree │ └── strip-bom@2.0.0
-2941 silly idealTree ├── lodash@1.0.2
-2941 silly idealTree ├── lodash._baseassign@3.2.0
-2941 silly idealTree ├── lodash._basecopy@3.0.1
-2941 silly idealTree ├── lodash._basetostring@3.0.1
-2941 silly idealTree ├── lodash._basevalues@3.0.0
-2941 silly idealTree ├── lodash._bindcallback@3.0.1
-2941 silly idealTree ├── lodash._createassigner@3.1.1
-2941 silly idealTree ├── lodash._escapehtmlchar@2.4.1
-2941 silly idealTree ├── lodash._escapestringchar@2.4.1
-2941 silly idealTree ├── lodash._getnative@3.9.1
-2941 silly idealTree ├── lodash._htmlescapes@2.4.1
-2941 silly idealTree ├── lodash._isiterateecall@3.0.9
-2941 silly idealTree ├── lodash._isnative@2.4.1
-2941 silly idealTree ├── lodash._objecttypes@2.4.1
-2941 silly idealTree ├── lodash._reescape@3.0.0
-2941 silly idealTree ├── lodash._reevaluate@3.0.0
-2941 silly idealTree ├── lodash._reinterpolate@3.0.0
-2941 silly idealTree ├─┬ lodash._reunescapedhtml@2.4.1
-2941 silly idealTree │ └── lodash.keys@2.4.1
-2941 silly idealTree ├── lodash._root@3.0.1
-2941 silly idealTree ├── lodash._shimkeys@2.4.1
-2941 silly idealTree ├── lodash.assign@4.2.0
-2941 silly idealTree ├── lodash.assignwith@4.2.0
-2941 silly idealTree ├── lodash.clonedeep@4.5.0
-2941 silly idealTree ├── lodash.debounce@4.0.8
-2941 silly idealTree ├─┬ lodash.defaults@2.4.1
-2941 silly idealTree │ └── lodash.keys@2.4.1
-2941 silly idealTree ├── lodash.escape@3.2.0
-2941 silly idealTree ├── lodash.isarguments@3.1.0
-2941 silly idealTree ├── lodash.isarray@3.0.4
-2941 silly idealTree ├── lodash.isempty@4.4.0
-2941 silly idealTree ├── lodash.isobject@2.4.1
-2941 silly idealTree ├── lodash.isplainobject@4.0.6
-2941 silly idealTree ├── lodash.isstring@4.0.1
-2941 silly idealTree ├── lodash.keys@3.1.2
-2941 silly idealTree ├── lodash.mapvalues@4.6.0
-2941 silly idealTree ├── lodash.pick@4.4.0
-2941 silly idealTree ├── lodash.restparam@3.6.1
-2941 silly idealTree ├── lodash.template@3.6.2
-2941 silly idealTree ├── lodash.templatesettings@3.1.1
-2941 silly idealTree ├─┬ lodash.values@2.4.1
-2941 silly idealTree │ └── lodash.keys@2.4.1
-2941 silly idealTree ├── loud-rejection@1.6.0
-2941 silly idealTree ├── lru-cache@2.7.3
-2941 silly idealTree ├── macos-release@1.0.0
-2941 silly idealTree ├── map-cache@0.2.2
-2941 silly idealTree ├── map-obj@1.0.1
-2941 silly idealTree ├── media-typer@0.3.0
-2941 silly idealTree ├── memory-cache@0.0.5
-2941 silly idealTree ├─┬ meow@3.7.0
-2941 silly idealTree │ └── object-assign@4.1.1
-2941 silly idealTree ├── merge-descriptors@1.0.1
-2941 silly idealTree ├── methods@1.1.2
-2941 silly idealTree ├── micromatch@2.3.11
-2941 silly idealTree ├── mime@1.3.6
-2941 silly idealTree ├── mime-db@1.27.0
-2941 silly idealTree ├── mime-types@2.1.15
-2941 silly idealTree ├── mimic-fn@1.1.0
-2941 silly idealTree ├── minimatch@2.0.10
-2941 silly idealTree ├── minimist@1.2.0
-2941 silly idealTree ├─┬ mkdirp@0.5.1
-2941 silly idealTree │ └── minimist@0.0.8
-2941 silly idealTree ├── ms@2.0.0
-2941 silly idealTree ├── multipipe@0.1.2
-2941 silly idealTree ├── mute-stream@0.0.7
-2941 silly idealTree ├── nan@2.6.2
-2941 silly idealTree ├── natives@1.1.0
-2941 silly idealTree ├── ncp@2.0.0
-2941 silly idealTree ├── negotiator@0.6.1
-2941 silly idealTree ├── next-tick@1.0.0
-2941 silly idealTree ├─┬ node-gyp@3.6.2
-2941 silly idealTree │ ├── glob@7.1.2
-2941 silly idealTree │ ├── graceful-fs@4.1.11
-2941 silly idealTree │ ├── minimatch@3.0.4
-2941 silly idealTree │ └── semver@5.3.0
-2941 silly idealTree ├─┬ node-sass@3.13.1
-2941 silly idealTree │ ├── gaze@1.1.2
-2941 silly idealTree │ ├── glob@7.1.2
-2941 silly idealTree │ ├── globule@1.2.0
-2941 silly idealTree │ ├── lodash@4.17.4
-2941 silly idealTree │ └── minimatch@3.0.4
-2941 silly idealTree ├── nopt@3.0.6
-2941 silly idealTree ├── normalize-package-data@2.3.8
-2941 silly idealTree ├── normalize-path@2.1.1
-2941 silly idealTree ├── npmlog@4.1.0
-2941 silly idealTree ├── number-is-nan@1.0.1
-2941 silly idealTree ├── oauth-sign@0.8.2
-2941 silly idealTree ├── object-assign@3.0.0
-2941 silly idealTree ├─┬ object.defaults@1.1.0
-2941 silly idealTree │ ├── for-own@1.0.0
-2941 silly idealTree │ └── isobject@3.0.0
-2941 silly idealTree ├── object.omit@2.0.1
-2941 silly idealTree ├── on-finished@2.3.0
-2941 silly idealTree ├── once@1.3.3
-2941 silly idealTree ├── onetime@2.0.1
-2941 silly idealTree ├─┬ opn@4.0.2
-2941 silly idealTree │ └── object-assign@4.1.1
-2941 silly idealTree ├── orchestrator@0.3.8
-2941 silly idealTree ├── ordered-read-streams@0.1.0
-2941 silly idealTree ├── os-homedir@1.0.2
-2941 silly idealTree ├── os-locale@1.4.0
-2941 silly idealTree ├── os-name@2.0.1
-2941 silly idealTree ├── os-tmpdir@1.0.2
-2941 silly idealTree ├── osenv@0.1.4
-2941 silly idealTree ├── parse-filepath@1.0.1
-2941 silly idealTree ├── parse-glob@3.0.4
-2941 silly idealTree ├── parse-json@2.2.0
-2941 silly idealTree ├── parse-passwd@1.0.0
-2941 silly idealTree ├── parseurl@1.3.1
-2941 silly idealTree ├── path-exists@2.1.0
-2941 silly idealTree ├── path-is-absolute@1.0.1
-2941 silly idealTree ├── path-parse@1.0.5
-2941 silly idealTree ├── path-root@0.1.1
-2941 silly idealTree ├── path-root-regex@0.1.2
-2941 silly idealTree ├── path-to-regexp@0.1.7
-2941 silly idealTree ├─┬ path-type@1.1.0
-2941 silly idealTree │ └── graceful-fs@4.1.11
-2941 silly idealTree ├── performance-now@0.2.0
-2941 silly idealTree ├── phonegap-plugin-barcodescanner@6.0.8
-2941 silly idealTree ├── pify@2.3.0
-2941 silly idealTree ├── pinkie@2.0.4
-2941 silly idealTree ├── pinkie-promise@2.0.1
-2941 silly idealTree ├── preserve@0.2.0
-2941 silly idealTree ├── pretty-hrtime@1.0.3
-2941 silly idealTree ├── process-nextick-args@1.0.7
-2941 silly idealTree ├── proxy-addr@1.1.4
-2941 silly idealTree ├── proxy-middleware@0.15.0
-2941 silly idealTree ├── pseudomap@1.0.2
-2941 silly idealTree ├── punycode@1.4.1
-2941 silly idealTree ├── qs@6.4.0
-2941 silly idealTree ├─┬ randomatic@1.1.7
-2941 silly idealTree │ ├─┬ is-number@3.0.0
-2941 silly idealTree │ │ └── kind-of@3.2.2
-2941 silly idealTree │ └── kind-of@4.0.0
-2941 silly idealTree ├── range-parser@1.2.0
-2941 silly idealTree ├── raw-body@1.1.7
-2941 silly idealTree ├── read-pkg@1.1.0
-2941 silly idealTree ├── read-pkg-up@1.0.1
-2941 silly idealTree ├── readable-stream@1.1.14
-2941 silly idealTree ├─┬ readdirp@2.1.0
-2941 silly idealTree │ ├── graceful-fs@4.1.11
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── minimatch@3.0.4
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── rechoir@0.6.2
-2941 silly idealTree ├── redent@1.0.0
-2941 silly idealTree ├── regex-cache@0.4.3
-2941 silly idealTree ├── remove-trailing-separator@1.0.2
-2941 silly idealTree ├── repeat-element@1.1.2
-2941 silly idealTree ├── repeat-string@1.6.1
-2941 silly idealTree ├── repeating@2.0.1
-2941 silly idealTree ├── replace-ext@0.0.1
-2941 silly idealTree ├── request@2.81.0
-2941 silly idealTree ├── require-directory@2.1.1
-2941 silly idealTree ├── require-main-filename@1.0.1
-2941 silly idealTree ├── resolve@1.3.3
-2941 silly idealTree ├── resolve-dir@0.1.1
-2941 silly idealTree ├── restore-cursor@2.0.0
-2941 silly idealTree ├─┬ rimraf@2.6.1
-2941 silly idealTree │ ├── glob@7.1.2
-2941 silly idealTree │ └── minimatch@3.0.4
-2941 silly idealTree ├── rsvp@3.5.0
-2941 silly idealTree ├── run-async@2.3.0
-2941 silly idealTree ├── rx-lite@4.0.8
-2941 silly idealTree ├── rx-lite-aggregates@4.0.8
-2941 silly idealTree ├── safe-buffer@5.0.1
-2941 silly idealTree ├── safe-json-parse@1.0.1
-2941 silly idealTree ├─┬ sass-graph@2.2.4
-2941 silly idealTree │ ├── glob@7.1.2
-2941 silly idealTree │ ├── lodash@4.17.4
-2941 silly idealTree │ └── minimatch@3.0.4
-2941 silly idealTree ├── sax@1.2.2
-2941 silly idealTree ├─┬ scss-tokenizer@0.2.3
-2941 silly idealTree │ └── source-map@0.4.4
-2941 silly idealTree ├── semver@4.3.6
-2941 silly idealTree ├─┬ send@0.15.3
-2941 silly idealTree │ ├── debug@2.6.7
-2941 silly idealTree │ └── mime@1.3.4
-2941 silly idealTree ├── sequencify@0.0.7
-2941 silly idealTree ├── serve-static@1.12.3
-2941 silly idealTree ├── set-blocking@2.0.0
-2941 silly idealTree ├── set-immediate-shim@1.0.1
-2941 silly idealTree ├── setprototypeof@1.0.3
-2941 silly idealTree ├── shebang-command@1.2.0
-2941 silly idealTree ├── shebang-regex@1.0.0
-2941 silly idealTree ├── shelljs@0.3.0
-2941 silly idealTree ├── sigmund@1.0.1
-2941 silly idealTree ├── signal-exit@3.0.2
-2941 silly idealTree ├── slice-ansi@0.0.4
-2941 silly idealTree ├── sntp@1.0.9
-2941 silly idealTree ├── source-map@0.5.6
-2941 silly idealTree ├── sparkles@1.0.0
-2941 silly idealTree ├── spdx-correct@1.0.2
-2941 silly idealTree ├── spdx-expression-parse@1.0.4
-2941 silly idealTree ├── spdx-license-ids@1.2.2
-2941 silly idealTree ├── ssh-config@1.0.1
-2941 silly idealTree ├─┬ sshpk@1.13.1
-2941 silly idealTree │ └── assert-plus@1.0.0
-2941 silly idealTree ├── statuses@1.3.1
-2941 silly idealTree ├── stream-consume@0.1.0
-2941 silly idealTree ├── stream-exhaust@1.0.1
-2941 silly idealTree ├── string_decoder@0.10.31
-2941 silly idealTree ├── string-template@0.2.1
-2941 silly idealTree ├── string-width@1.0.2
-2941 silly idealTree ├── stringstream@0.0.5
-2941 silly idealTree ├── strip-ansi@3.0.1
-2941 silly idealTree ├── strip-bom@1.0.0
-2941 silly idealTree ├── strip-indent@1.0.1
-2941 silly idealTree ├─┬ superagent@3.5.2
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── supports-color@2.0.0
-2941 silly idealTree ├── tar@2.2.1
-2941 silly idealTree ├─┬ tar-stream@1.5.4
-2941 silly idealTree │ ├── end-of-stream@1.4.0
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── once@1.4.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── through@2.3.8
-2941 silly idealTree ├─┬ through2@2.0.3
-2941 silly idealTree │ ├── isarray@1.0.0
-2941 silly idealTree │ ├── readable-stream@2.2.11
-2941 silly idealTree │ └── string_decoder@1.0.2
-2941 silly idealTree ├── tildify@1.2.0
-2941 silly idealTree ├── time-stamp@1.1.0
-2941 silly idealTree ├─┬ tiny-lr@1.0.4
-2941 silly idealTree │ ├── debug@2.2.0
-2941 silly idealTree │ ├── ms@0.7.1
-2941 silly idealTree │ └── object-assign@4.1.1
-2941 silly idealTree ├── tmp@0.0.31
-2941 silly idealTree ├── tough-cookie@2.3.2
-2941 silly idealTree ├── trim-newlines@1.0.0
-2941 silly idealTree ├── tslib@1.7.1
-2941 silly idealTree ├── tunnel-agent@0.6.0
-2941 silly idealTree ├── tweetnacl@0.14.5
-2941 silly idealTree ├── type-is@1.6.15
-2941 silly idealTree ├── unc-path-regex@0.1.2
-2941 silly idealTree ├── unique-stream@1.0.0
-2941 silly idealTree ├── unpipe@1.0.0
-2941 silly idealTree ├── user-home@1.1.1
-2941 silly idealTree ├── util-deprecate@1.0.2
-2941 silly idealTree ├── utils-merge@1.0.0
-2941 silly idealTree ├── uuid@3.0.1
-2941 silly idealTree ├── v8flags@2.1.1
-2941 silly idealTree ├── validate-npm-package-license@3.0.1
-2941 silly idealTree ├── vary@1.1.1
-2941 silly idealTree ├── verror@1.3.6
-2941 silly idealTree ├── vinyl@0.5.3
-2941 silly idealTree ├─┬ vinyl-fs@0.3.14
-2941 silly idealTree │ ├── clone@0.2.0
-2941 silly idealTree │ ├── readable-stream@1.0.34
-2941 silly idealTree │ ├── through2@0.6.5
-2941 silly idealTree │ └── vinyl@0.4.6
-2941 silly idealTree ├─┬ vinyl-sourcemaps-apply@0.1.4
-2941 silly idealTree │ └── source-map@0.1.43
-2941 silly idealTree ├── walkdir@0.0.11
-2941 silly idealTree ├── websocket-driver@0.6.5
-2941 silly idealTree ├── websocket-extensions@0.1.1
-2941 silly idealTree ├── which@1.2.14
-2941 silly idealTree ├── which-module@1.0.0
-2941 silly idealTree ├── wide-align@1.1.2
-2941 silly idealTree ├─┬ win-release@1.1.1
-2941 silly idealTree │ └── semver@5.3.0
-2941 silly idealTree ├── wrap-ansi@2.1.0
-2941 silly idealTree ├── wrappy@1.0.2
-2941 silly idealTree ├── xml2js@0.4.17
-2941 silly idealTree ├─┬ xmlbuilder@4.2.1
-2941 silly idealTree │ └── lodash@4.17.4
-2941 silly idealTree ├── xtend@4.0.1
-2941 silly idealTree ├── y18n@3.2.1
-2941 silly idealTree ├── yallist@2.1.2
-2941 silly idealTree ├─┬ yargs@7.1.0
-2941 silly idealTree │ └── camelcase@3.0.0
-2941 silly idealTree ├─┬ yargs-parser@5.0.0
-2941 silly idealTree │ └── camelcase@3.0.0
-2941 silly idealTree └─┬ zip-stream@1.1.1
-2941 silly idealTree   ├── isarray@1.0.0
-2941 silly idealTree   ├── lodash@4.17.4
-2941 silly idealTree   ├── readable-stream@2.2.11
-2941 silly idealTree   └── string_decoder@1.0.2
-2942 silly generateActionsToTake Starting
-2943 silly install generateActionsToTake
-2944 silly generateActionsToTake Finishing
-2945 silly diffTrees action count 9
-2946 silly diffTrees add base64-js@1.1.2
-2947 silly diffTrees add pegjs@0.10.0
-2948 silly diffTrees add stream-buffers@2.2.0
-2949 silly diffTrees add bplist-creator@0.0.7
-2950 silly diffTrees add xmlbuilder@8.2.2
-2951 silly diffTrees add plist@2.0.1
-2952 silly diffTrees add simple-plist@0.2.1
-2953 silly diffTrees add xcode@0.9.3
-2954 silly diffTrees add cordova-ios@4.4.0
-2955 silly decomposeActions action count 72
-2956 silly decomposeActions fetch base64-js@1.1.2
-2957 silly decomposeActions extract base64-js@1.1.2
-2958 silly decomposeActions preinstall base64-js@1.1.2
-2959 silly decomposeActions build base64-js@1.1.2
-2960 silly decomposeActions install base64-js@1.1.2
-2961 silly decomposeActions postinstall base64-js@1.1.2
-2962 silly decomposeActions test base64-js@1.1.2
-2963 silly decomposeActions finalize base64-js@1.1.2
-2964 silly decomposeActions fetch pegjs@0.10.0
-2965 silly decomposeActions extract pegjs@0.10.0
-2966 silly decomposeActions preinstall pegjs@0.10.0
-2967 silly decomposeActions build pegjs@0.10.0
-2968 silly decomposeActions install pegjs@0.10.0
-2969 silly decomposeActions postinstall pegjs@0.10.0
-2970 silly decomposeActions test pegjs@0.10.0
-2971 silly decomposeActions finalize pegjs@0.10.0
-2972 silly decomposeActions fetch stream-buffers@2.2.0
-2973 silly decomposeActions extract stream-buffers@2.2.0
-2974 silly decomposeActions preinstall stream-buffers@2.2.0
-2975 silly decomposeActions build stream-buffers@2.2.0
-2976 silly decomposeActions install stream-buffers@2.2.0
-2977 silly decomposeActions postinstall stream-buffers@2.2.0
-2978 silly decomposeActions test stream-buffers@2.2.0
-2979 silly decomposeActions finalize stream-buffers@2.2.0
-2980 silly decomposeActions fetch bplist-creator@0.0.7
-2981 silly decomposeActions extract bplist-creator@0.0.7
-2982 silly decomposeActions preinstall bplist-creator@0.0.7
-2983 silly decomposeActions build bplist-creator@0.0.7
-2984 silly decomposeActions install bplist-creator@0.0.7
-2985 silly decomposeActions postinstall bplist-creator@0.0.7
-2986 silly decomposeActions test bplist-creator@0.0.7
-2987 silly decomposeActions finalize bplist-creator@0.0.7
-2988 silly decomposeActions fetch xmlbuilder@8.2.2
-2989 silly decomposeActions extract xmlbuilder@8.2.2
-2990 silly decomposeActions preinstall xmlbuilder@8.2.2
-2991 silly decomposeActions build xmlbuilder@8.2.2
-2992 silly decomposeActions install xmlbuilder@8.2.2
-2993 silly decomposeActions postinstall xmlbuilder@8.2.2
-2994 silly decomposeActions test xmlbuilder@8.2.2
-2995 silly decomposeActions finalize xmlbuilder@8.2.2
-2996 silly decomposeActions fetch plist@2.0.1
-2997 silly decomposeActions extract plist@2.0.1
-2998 silly decomposeActions preinstall plist@2.0.1
-2999 silly decomposeActions build plist@2.0.1
-3000 silly decomposeActions install plist@2.0.1
-3001 silly decomposeActions postinstall plist@2.0.1
-3002 silly decomposeActions test plist@2.0.1
-3003 silly decomposeActions finalize plist@2.0.1
-3004 silly decomposeActions fetch simple-plist@0.2.1
-3005 silly decomposeActions extract simple-plist@0.2.1
-3006 silly decomposeActions preinstall simple-plist@0.2.1
-3007 silly decomposeActions build simple-plist@0.2.1
-3008 silly decomposeActions install simple-plist@0.2.1
-3009 silly decomposeActions postinstall simple-plist@0.2.1
-3010 silly decomposeActions test simple-plist@0.2.1
-3011 silly decomposeActions finalize simple-plist@0.2.1
-3012 silly decomposeActions fetch xcode@0.9.3
-3013 silly decomposeActions extract xcode@0.9.3
-3014 silly decomposeActions preinstall xcode@0.9.3
-3015 silly decomposeActions build xcode@0.9.3
-3016 silly decomposeActions install xcode@0.9.3
-3017 silly decomposeActions postinstall xcode@0.9.3
-3018 silly decomposeActions test xcode@0.9.3
-3019 silly decomposeActions finalize xcode@0.9.3
-3020 silly decomposeActions fetch cordova-ios@4.4.0
-3021 silly decomposeActions extract cordova-ios@4.4.0
-3022 silly decomposeActions preinstall cordova-ios@4.4.0
-3023 silly decomposeActions build cordova-ios@4.4.0
-3024 silly decomposeActions install cordova-ios@4.4.0
-3025 silly decomposeActions postinstall cordova-ios@4.4.0
-3026 silly decomposeActions test cordova-ios@4.4.0
-3027 silly decomposeActions finalize cordova-ios@4.4.0
-3028 silly executeActions Starting
-3029 silly install executeActions
-3030 silly doSerial global-install 0
-3031 silly doParallel fetch 9
-3032 verbose lock using C:\Users\Ben\AppData\Roaming\npm-cache\_locks\staging-74b969ae5f7bd371.lock for D:\my\miao\miaomiao\node_modules\.staging
-3033 silly doParallel extract 9
-3034 silly extract base64-js
-3035 silly extract pegjs
-3036 silly extract stream-buffers
-3037 silly extract bplist-creator
-3038 silly extract xmlbuilder
-3039 silly extract plist
-3040 silly extract simple-plist
-3041 silly extract xcode
-3042 silly extract cordova-ios
-3043 verbose unbuild node_modules\.staging\base64-js-5c1787fbe1bfc3c9e4d61dc3027784fd
-3044 verbose unbuild node_modules\.staging\stream-buffers-e87baaf8a9955e3ae726aeca197aa30e
-3045 verbose unbuild node_modules\.staging\bplist-creator-4ba3843fe963017ba6823478568c1aaf
-3046 verbose unbuild node_modules\.staging\xmlbuilder-665842ec8a22ed2cdf68ac2d6dc58449
-3047 verbose unbuild node_modules\.staging\simple-plist-9289b236160454c6cc13b47c12a6df29
-3048 verbose unbuild node_modules\.staging\cordova-ios-85bc741f9d6ea59da9e70b73d321e52e
-3049 verbose unbuild node_modules\.staging\xcode-8e03bd863748e03876d9f4aacfe3d34b
-3050 verbose unbuild node_modules\.staging\plist-bd901baec826b0e0111f7b3069257555
-3051 verbose unbuild node_modules\.staging\pegjs-0c4dc2389a7e57832a2fd0ea27e65c48
-3052 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\base64-js-5c1787fbe1bfc3c9e4d61dc3027784fd is being purged from base D:\my\miao\miaomiao
-3053 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\stream-buffers-e87baaf8a9955e3ae726aeca197aa30e is being purged from base D:\my\miao\miaomiao
-3054 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\bplist-creator-4ba3843fe963017ba6823478568c1aaf is being purged from base D:\my\miao\miaomiao
-3055 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\xmlbuilder-665842ec8a22ed2cdf68ac2d6dc58449 is being purged from base D:\my\miao\miaomiao
-3056 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\simple-plist-9289b236160454c6cc13b47c12a6df29 is being purged from base D:\my\miao\miaomiao
-3057 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\cordova-ios-85bc741f9d6ea59da9e70b73d321e52e is being purged from base D:\my\miao\miaomiao
-3058 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\xcode-8e03bd863748e03876d9f4aacfe3d34b is being purged from base D:\my\miao\miaomiao
-3059 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\plist-bd901baec826b0e0111f7b3069257555 is being purged from base D:\my\miao\miaomiao
-3060 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\base64-js-5c1787fbe1bfc3c9e4d61dc3027784fd
-3061 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\stream-buffers-e87baaf8a9955e3ae726aeca197aa30e
-3062 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\bplist-creator-4ba3843fe963017ba6823478568c1aaf
-3063 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\xmlbuilder-665842ec8a22ed2cdf68ac2d6dc58449
-3064 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\simple-plist-9289b236160454c6cc13b47c12a6df29
-3065 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\pegjs-0c4dc2389a7e57832a2fd0ea27e65c48 is being purged from base D:\my\miao\miaomiao
-3066 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\cordova-ios-85bc741f9d6ea59da9e70b73d321e52e
-3067 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\xcode-8e03bd863748e03876d9f4aacfe3d34b
-3068 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\plist-bd901baec826b0e0111f7b3069257555
-3069 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\base64-js\1.1.2\package.tgz
-3070 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\base64-js-5c1787fbe1bfc3c9e4d61dc3027784fd
-3071 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\base64-js-5c1787fbe1bfc3c9e4d61dc3027784fd is being purged
-3072 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\stream-buffers\2.2.0\package.tgz
-3073 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\stream-buffers-e87baaf8a9955e3ae726aeca197aa30e
-3074 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\stream-buffers-e87baaf8a9955e3ae726aeca197aa30e is being purged
-3075 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\bplist-creator\0.0.7\package.tgz
-3076 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\bplist-creator-4ba3843fe963017ba6823478568c1aaf
-3077 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\bplist-creator-4ba3843fe963017ba6823478568c1aaf is being purged
-3078 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\xmlbuilder\8.2.2\package.tgz
-3079 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\xmlbuilder-665842ec8a22ed2cdf68ac2d6dc58449
-3080 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\xmlbuilder-665842ec8a22ed2cdf68ac2d6dc58449 is being purged
-3081 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\simple-plist\0.2.1\package.tgz
-3082 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\simple-plist-9289b236160454c6cc13b47c12a6df29
-3083 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\simple-plist-9289b236160454c6cc13b47c12a6df29 is being purged
-3084 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\pegjs-0c4dc2389a7e57832a2fd0ea27e65c48
-3085 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\cordova-ios\4.4.0\package.tgz
-3086 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\cordova-ios-85bc741f9d6ea59da9e70b73d321e52e
-3087 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\cordova-ios-85bc741f9d6ea59da9e70b73d321e52e is being purged
-3088 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\xcode\0.9.3\package.tgz
-3089 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\xcode-8e03bd863748e03876d9f4aacfe3d34b
-3090 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\xcode-8e03bd863748e03876d9f4aacfe3d34b is being purged
-3091 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\plist\2.0.1\package.tgz
-3092 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\plist-bd901baec826b0e0111f7b3069257555
-3093 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\plist-bd901baec826b0e0111f7b3069257555 is being purged
-3094 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\base64-js-5c1787fbe1bfc3c9e4d61dc3027784fd
-3095 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\stream-buffers-e87baaf8a9955e3ae726aeca197aa30e
-3096 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\bplist-creator-4ba3843fe963017ba6823478568c1aaf
-3097 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\xmlbuilder-665842ec8a22ed2cdf68ac2d6dc58449
-3098 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\simple-plist-9289b236160454c6cc13b47c12a6df29
-3099 verbose tar unpack C:\Users\Ben\AppData\Roaming\npm-cache\pegjs\0.10.0\package.tgz
-3100 verbose tar unpacking to D:\my\miao\miaomiao\node_modules\.staging\pegjs-0c4dc2389a7e57832a2fd0ea27e65c48
-3101 silly gentlyRm D:\my\miao\miaomiao\node_modules\.staging\pegjs-0c4dc2389a7e57832a2fd0ea27e65c48 is being purged
-3102 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\cordova-ios-85bc741f9d6ea59da9e70b73d321e52e
-3103 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\xcode-8e03bd863748e03876d9f4aacfe3d34b
-3104 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\plist-bd901baec826b0e0111f7b3069257555
-3105 silly gunzTarPerm modes [ '777', '666' ]
-3106 silly gunzTarPerm modes [ '777', '666' ]
-3107 silly gunzTarPerm modes [ '777', '666' ]
-3108 silly gunzTarPerm modes [ '777', '666' ]
-3109 silly gunzTarPerm modes [ '777', '666' ]
-3110 verbose gentlyRm don't care about contents; nuking D:\my\miao\miaomiao\node_modules\.staging\pegjs-0c4dc2389a7e57832a2fd0ea27e65c48
-3111 silly gunzTarPerm modes [ '777', '666' ]
-3112 silly gunzTarPerm modes [ '777', '666' ]
-3113 silly gunzTarPerm modes [ '777', '666' ]
-3114 silly gunzTarPerm modes [ '777', '666' ]
-3115 silly gunzTarPerm extractEntry package.json
-3116 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-3117 silly gunzTarPerm extractEntry package.json
-3118 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-3119 silly gunzTarPerm extractEntry package.json
-3120 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ]
-3121 silly gunzTarPerm extractEntry package.json
-3122 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ]
-3123 silly gunzTarPerm extractEntry package.json
-3124 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-3125 silly gunzTarPerm extractEntry package.json
-3126 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-3127 silly gunzTarPerm extractEntry package.json
-3128 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-3129 silly gunzTarPerm extractEntry package.json
-3130 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-3131 silly gunzTarPerm extractEntry package.json
-3132 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ]
-3133 silly gunzTarPerm extractEntry .npmignore
-3134 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ]
-3135 silly gunzTarPerm extractEntry README.md
-3136 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ]
-3137 silly gunzTarPerm extractEntry .npmignore
-3138 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ]
-3139 silly gunzTarPerm extractEntry README.md
-3140 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ]
-3141 silly gunzTarPerm extractEntry .npmignore
-3142 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ]
-3143 silly gunzTarPerm extractEntry README.md
-3144 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ]
-3145 silly gunzTarPerm extractEntry README.md
-3146 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ]
-3147 silly gunzTarPerm extractEntry UNLICENSE
-3148 silly gunzTarPerm modified mode [ 'UNLICENSE', 436, 438 ]
-3149 silly gunzTarPerm extractEntry README.md
-3150 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ]
-3151 silly gunzTarPerm extractEntry LICENSE
-3152 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ]
-3153 silly gunzTarPerm extractEntry .npmignore
-3154 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ]
-3155 silly gunzTarPerm extractEntry README.md
-3156 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ]
-3157 silly gunzTarPerm extractEntry .npmignore
-3158 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ]
-3159 silly gunzTarPerm extractEntry README.md
-3160 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ]
-3161 silly gunzTarPerm extractEntry README.md
-3162 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ]
-3163 silly gunzTarPerm extractEntry LICENSE
-3164 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ]
-3165 silly gunzTarPerm extractEntry LICENSE
-3166 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ]
-3167 silly gunzTarPerm extractEntry VERSION
-3168 silly gunzTarPerm modified mode [ 'VERSION', 420, 438 ]
-3169 silly gunzTarPerm extractEntry base64js.min.js
-3170 silly gunzTarPerm modified mode [ 'base64js.min.js', 420, 438 ]
-3171 silly gunzTarPerm extractEntry .travis.yml
-3172 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ]
-3173 silly gunzTarPerm extractEntry bplistCreator.js
-3174 silly gunzTarPerm modified mode [ 'bplistCreator.js', 420, 438 ]
-3175 silly gunzTarPerm extractEntry test/creatorTest.js
-3176 silly gunzTarPerm modified mode [ 'test/creatorTest.js', 420, 438 ]
-3177 silly gunzTarPerm extractEntry test/airplay.bplist
-3178 silly gunzTarPerm modified mode [ 'test/airplay.bplist', 420, 438 ]
-3179 silly gunzTarPerm extractEntry test/binaryData.bplist
-3180 silly gunzTarPerm modified mode [ 'test/binaryData.bplist', 420, 438 ]
-3181 silly gunzTarPerm extractEntry test/iTunes-small.bplist
-3182 silly gunzTarPerm modified mode [ 'test/iTunes-small.bplist', 420, 438 ]
-3183 silly gunzTarPerm extractEntry test/sample1.bplist
-3184 silly gunzTarPerm modified mode [ 'test/sample1.bplist', 420, 438 ]
-3185 silly gunzTarPerm extractEntry test/sample2.bplist
-3186 silly gunzTarPerm modified mode [ 'test/sample2.bplist', 420, 438 ]
-3187 silly gunzTarPerm extractEntry test/uid.bplist
-3188 silly gunzTarPerm modified mode [ 'test/uid.bplist', 420, 438 ]
-3189 silly gunzTarPerm extractEntry test/utf16.bplist
-3190 silly gunzTarPerm modified mode [ 'test/utf16.bplist', 420, 438 ]
-3191 silly gunzTarPerm extractEntry .travis.yml
-3192 silly gunzTarPerm modified mode [ '.travis.yml', 436, 438 ]
-3193 silly gunzTarPerm extractEntry .mailmap
-3194 silly gunzTarPerm modified mode [ '.mailmap', 436, 438 ]
-3195 silly gunzTarPerm extractEntry LICENSE
-3196 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ]
-3197 silly gunzTarPerm extractEntry CHANGELOG.md
-3198 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 436, 438 ]
-3199 silly gunzTarPerm extractEntry simple-plist.js
-3200 silly gunzTarPerm modified mode [ 'simple-plist.js', 420, 438 ]
-3201 silly gunzTarPerm extractEntry LICENSE
-3202 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ]
-3203 silly gunzTarPerm extractEntry index.js
-3204 silly gunzTarPerm modified mode [ 'index.js', 420, 438 ]
-3205 silly gunzTarPerm extractEntry index.js
-3206 silly gunzTarPerm modified mode [ 'index.js', 420, 438 ]
-3207 silly gunzTarPerm extractEntry Makefile
-3208 silly gunzTarPerm modified mode [ 'Makefile', 420, 438 ]
-3209 silly gunzTarPerm extractEntry LICENSE
-3210 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ]
-3211 silly gunzTarPerm extractEntry NOTICE
-3212 silly gunzTarPerm modified mode [ 'NOTICE', 420, 438 ]
-3213 silly gunzTarPerm extractEntry CHANGELOG.md
-3214 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 420, 438 ]
-3215 silly gunzTarPerm extractEntry bin/pegjs
-3216 silly gunzTarPerm modified mode [ 'bin/pegjs', 493, 511 ]
-3217 silly gunzTarPerm extractEntry LICENSE.MIT
-3218 silly gunzTarPerm modified mode [ 'LICENSE.MIT', 420, 438 ]
-3219 silly gunzTarPerm extractEntry bower.json
-3220 silly gunzTarPerm modified mode [ 'bower.json', 420, 438 ]
-3221 silly gunzTarPerm extractEntry lib/Utility.js
-3222 silly gunzTarPerm modified mode [ 'lib/Utility.js', 436, 438 ]
-3223 silly gunzTarPerm extractEntry AUTHORS
-3224 silly gunzTarPerm modified mode [ 'AUTHORS', 420, 438 ]
-3225 silly gunzTarPerm extractEntry lib/parseJob.js
-3226 silly gunzTarPerm modified mode [ 'lib/parseJob.js', 420, 438 ]
-3227 silly gunzTarPerm extractEntry coverage/coverage.json
-3228 silly gunzTarPerm modified mode [ 'coverage/coverage.json', 436, 438 ]
-3229 silly gunzTarPerm extractEntry coverage/lcov-report/prettify.js
-3230 silly gunzTarPerm modified mode [ 'coverage/lcov-report/prettify.js', 436, 438 ]
-3231 silly gunzTarPerm extractEntry coverage/lcov-report/sorter.js
-3232 silly gunzTarPerm modified mode [ 'coverage/lcov-report/sorter.js', 436, 438 ]
-3233 silly gunzTarPerm extractEntry coverage/lcov-report/base.css
-3234 silly gunzTarPerm modified mode [ 'coverage/lcov-report/base.css', 436, 438 ]
-3235 silly gunzTarPerm extractEntry coverage/lcov-report/index.html
-3236 silly gunzTarPerm modified mode [ 'coverage/lcov-report/index.html', 436, 438 ]
-3237 silly gunzTarPerm extractEntry coverage/lcov-report/lib/constants.js.html
-3238 silly gunzTarPerm modified mode [ 'coverage/lcov-report/lib/constants.js.html', 436, 438 ]
-3239 silly gunzTarPerm extractEntry coverage/lcov-report/lib/index.html
-3240 silly gunzTarPerm modified mode [ 'coverage/lcov-report/lib/index.html', 436, 438 ]
-3241 silly gunzTarPerm extractEntry coverage/lcov-report/lib/readable_streambuffer.js.html
-3242 silly gunzTarPerm modified mode [ 'coverage/lcov-report/lib/readable_streambuffer.js.html',
-3242 silly gunzTarPerm   436,
-3242 silly gunzTarPerm   438 ]
-3243 silly gunzTarPerm extractEntry coverage/lcov-report/lib/streambuffer.js.html
-3244 silly gunzTarPerm modified mode [ 'coverage/lcov-report/lib/streambuffer.js.html', 436, 438 ]
-3245 silly gunzTarPerm extractEntry coverage/lcov-report/lib/writable_streambuffer.js.html
-3246 silly gunzTarPerm modified mode [ 'coverage/lcov-report/lib/writable_streambuffer.js.html',
-3246 silly gunzTarPerm   436,
-3246 silly gunzTarPerm   438 ]
-3247 silly gunzTarPerm extractEntry coverage/lcov-report/prettify.css
-3248 silly gunzTarPerm modified mode [ 'coverage/lcov-report/prettify.css', 436, 438 ]
-3249 silly gunzTarPerm extractEntry coverage/lcov-report/sort-arrow-sprite.png
-3250 silly gunzTarPerm modified mode [ 'coverage/lcov-report/sort-arrow-sprite.png', 436, 438 ]
-3251 silly gunzTarPerm extractEntry coverage/lcov.info
-3252 silly gunzTarPerm modified mode [ 'coverage/lcov.info', 436, 438 ]
-3253 silly gunzTarPerm extractEntry lib/constants.js
-3254 silly gunzTarPerm modified mode [ 'lib/constants.js', 436, 438 ]
-3255 silly gunzTarPerm extractEntry lib/readable_streambuffer.js
-3256 silly gunzTarPerm modified mode [ 'lib/readable_streambuffer.js', 436, 438 ]
-3257 silly gunzTarPerm extractEntry lib/streambuffer.js
-3258 silly gunzTarPerm modified mode [ 'lib/streambuffer.js', 436, 438 ]
-3259 silly gunzTarPerm extractEntry lib/writable_streambuffer.js
-3260 silly gunzTarPerm modified mode [ 'lib/writable_streambuffer.js', 436, 438 ]
-3261 silly gunzTarPerm extractEntry .jshintrc
-3262 silly gunzTarPerm modified mode [ '.jshintrc', 420, 438 ]
-3263 silly gunzTarPerm extractEntry dist/plist-build.js
-3264 silly gunzTarPerm modified mode [ 'dist/plist-build.js', 420, 438 ]
-3265 silly gunzTarPerm extractEntry .istanbul.yml
-3266 silly gunzTarPerm modified mode [ '.istanbul.yml', 420, 438 ]
-3267 silly gunzTarPerm extractEntry .jshintignore
-3268 silly gunzTarPerm modified mode [ '.jshintignore', 420, 438 ]
-3269 silly gunzTarPerm extractEntry examples/arithmetics.pegjs
-3270 silly gunzTarPerm modified mode [ 'examples/arithmetics.pegjs', 420, 438 ]
-3271 silly gunzTarPerm extractEntry examples/css.pegjs
-3272 silly gunzTarPerm modified mode [ 'examples/css.pegjs', 420, 438 ]
-3273 silly gunzTarPerm extractEntry lib/b64.js
-3274 silly gunzTarPerm modified mode [ 'lib/b64.js', 420, 438 ]
-3275 silly gunzTarPerm extractEntry test/big-data.js
-3276 silly gunzTarPerm modified mode [ 'test/big-data.js', 420, 438 ]
-3277 silly gunzTarPerm extractEntry lib/XMLDTDNotation.js
-3278 silly gunzTarPerm modified mode [ 'lib/XMLDTDNotation.js', 436, 438 ]
-3279 silly gunzTarPerm extractEntry lib/XMLDeclaration.js
-3280 silly gunzTarPerm modified mode [ 'lib/XMLDeclaration.js', 436, 438 ]
-3281 silly gunzTarPerm extractEntry lib/pbxFile.js
-3282 silly gunzTarPerm modified mode [ 'lib/pbxFile.js', 420, 438 ]
-3283 silly gunzTarPerm extractEntry lib/pbxProject.js
-3284 silly gunzTarPerm modified mode [ 'lib/pbxProject.js', 420, 438 ]
-3285 silly gunzTarPerm extractEntry dist/plist-parse.js
-3286 silly gunzTarPerm modified mode [ 'dist/plist-parse.js', 420, 438 ]
-3287 silly gunzTarPerm extractEntry .jshintrc
-3288 silly gunzTarPerm modified mode [ '.jshintrc', 420, 438 ]
-3289 silly gunzTarPerm extractEntry .ratignore
-3290 silly gunzTarPerm modified mode [ '.ratignore', 420, 438 ]
-3291 silly gunzTarPerm extractEntry examples/javascript.pegjs
-3292 silly gunzTarPerm modified mode [ 'examples/javascript.pegjs', 420, 438 ]
-3293 silly gunzTarPerm extractEntry examples/json.pegjs
-3294 silly gunzTarPerm modified mode [ 'examples/json.pegjs', 420, 438 ]
-3295 silly gunzTarPerm extractEntry lib/grammar-error.js
-3296 silly gunzTarPerm modified mode [ 'lib/grammar-error.js', 420, 438 ]
-3297 silly gunzTarPerm extractEntry lib/parser.js
-3298 silly gunzTarPerm modified mode [ 'lib/parser.js', 420, 438 ]
-3299 silly gunzTarPerm extractEntry test/convert.js
-3300 silly gunzTarPerm modified mode [ 'test/convert.js', 420, 438 ]
-3301 silly gunzTarPerm extractEntry lib/XMLDocType.js
-3302 silly gunzTarPerm modified mode [ 'lib/XMLDocType.js', 436, 438 ]
-3303 silly gunzTarPerm extractEntry lib/XMLDocument.js
-3304 silly gunzTarPerm modified mode [ 'lib/XMLDocument.js', 436, 438 ]
-3305 silly gunzTarPerm extractEntry lib/XMLDTDEntity.js
-3306 silly gunzTarPerm modified mode [ 'lib/XMLDTDEntity.js', 436, 438 ]
-3307 silly gunzTarPerm extractEntry dist/plist.js
-3308 silly gunzTarPerm modified mode [ 'dist/plist.js', 420, 438 ]
-3309 silly gunzTarPerm extractEntry lib/pbxWriter.js
-3310 silly gunzTarPerm modified mode [ 'lib/pbxWriter.js', 420, 438 ]
-3311 silly gunzTarPerm extractEntry lib/XMLElement.js
-3312 silly gunzTarPerm modified mode [ 'lib/XMLElement.js', 436, 438 ]
-3313 silly gunzTarPerm extractEntry .travis.yml
-3314 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ]
-3315 silly gunzTarPerm extractEntry CONTRIBUTING.md
-3316 silly gunzTarPerm modified mode [ 'CONTRIBUTING.md', 420, 438 ]
-3317 silly gunzTarPerm extractEntry lib/peg.js
-3318 silly gunzTarPerm modified mode [ 'lib/peg.js', 420, 438 ]
-3319 silly gunzTarPerm extractEntry lib/compiler/asts.js
-3320 silly gunzTarPerm modified mode [ 'lib/compiler/asts.js', 420, 438 ]
-3321 silly gunzTarPerm extractEntry examples/browser/index.html
-3322 silly gunzTarPerm modified mode [ 'examples/browser/index.html', 420, 438 ]
-3323 silly gunzTarPerm extractEntry test/url-safe.js
-3324 silly gunzTarPerm modified mode [ 'test/url-safe.js', 420, 438 ]
-3325 silly gunzTarPerm extractEntry lib/parser/pbxproj.js
-3326 silly gunzTarPerm modified mode [ 'lib/parser/pbxproj.js', 420, 438 ]
-3327 silly gunzTarPerm extractEntry lib/parser/pbxproj.pegjs
-3328 silly gunzTarPerm modified mode [ 'lib/parser/pbxproj.pegjs', 420, 438 ]
-3329 silly gunzTarPerm extractEntry .travis.yml
-3330 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ]
-3331 silly gunzTarPerm extractEntry lib/build.js
-3332 silly gunzTarPerm modified mode [ 'lib/build.js', 420, 438 ]
-3333 silly gunzTarPerm extractEntry lib/XMLNode.js
-3334 silly gunzTarPerm modified mode [ 'lib/XMLNode.js', 436, 438 ]
-3335 silly gunzTarPerm extractEntry lib/XMLProcessingInstruction.js
-3336 silly gunzTarPerm modified mode [ 'lib/XMLProcessingInstruction.js', 436, 438 ]
-3337 silly gunzTarPerm extractEntry CordovaLib/.npmignore
-3338 silly gunzTarPerm modified mode [ 'CordovaLib/.npmignore', 493, 511 ]
-3339 silly gunzTarPerm extractEntry CordovaLib/cordova.js
-3340 silly gunzTarPerm modified mode [ 'CordovaLib/cordova.js', 420, 438 ]
-3341 silly gunzTarPerm extractEntry Makefile
-3342 silly gunzTarPerm modified mode [ 'Makefile', 420, 438 ]
-3343 silly gunzTarPerm extractEntry lib/parse.js
-3344 silly gunzTarPerm modified mode [ 'lib/parse.js', 420, 438 ]
-3345 silly gunzTarPerm extractEntry History.md
-3346 silly gunzTarPerm modified mode [ 'History.md', 420, 438 ]
-3347 silly gunzTarPerm extractEntry lib/compiler/index.js
-3348 silly gunzTarPerm modified mode [ 'lib/compiler/index.js', 420, 438 ]
-3349 silly gunzTarPerm extractEntry lib/compiler/js.js
-3350 silly gunzTarPerm modified mode [ 'lib/compiler/js.js', 420, 438 ]
-3351 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVDebug.h
-3352 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVDebug.h', 420, 438 ]
-3353 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVJSON_private.h
-3354 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVJSON_private.h', 420, 438 ]
-3355 silly gunzTarPerm extractEntry lib/XMLRaw.js
-3356 silly gunzTarPerm modified mode [ 'lib/XMLRaw.js', 436, 438 ]
-3357 silly gunzTarPerm extractEntry lib/XMLStreamWriter.js
-3358 silly gunzTarPerm modified mode [ 'lib/XMLStreamWriter.js', 436, 438 ]
-3359 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVJSON_private.m
-3360 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVJSON_private.m', 420, 438 ]
-3361 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/CDVPlugin+Private.h
-3362 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/CDVPlugin+Private.h', 420, 438 ]
-3363 silly gunzTarPerm extractEntry lib/compiler/opcodes.js
-3364 silly gunzTarPerm modified mode [ 'lib/compiler/opcodes.js', 420, 438 ]
-3365 silly gunzTarPerm extractEntry lib/compiler/visitor.js
-3366 silly gunzTarPerm modified mode [ 'lib/compiler/visitor.js', 420, 438 ]
-3367 silly gunzTarPerm extractEntry lib/XMLDTDElement.js
-3368 silly gunzTarPerm modified mode [ 'lib/XMLDTDElement.js', 436, 438 ]
-3369 silly gunzTarPerm extractEntry lib/XMLStringWriter.js
-3370 silly gunzTarPerm modified mode [ 'lib/XMLStringWriter.js', 436, 438 ]
-3371 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.h
-3372 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.h',
-3372 silly gunzTarPerm   420,
-3372 silly gunzTarPerm   438 ]
-3373 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.m
-3374 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.m',
-3374 silly gunzTarPerm   420,
-3374 silly gunzTarPerm   438 ]
-3375 silly gunzTarPerm extractEntry lib/compiler/passes/generate-bytecode.js
-3376 silly gunzTarPerm modified mode [ 'lib/compiler/passes/generate-bytecode.js', 420, 438 ]
-3377 silly gunzTarPerm extractEntry lib/compiler/passes/generate-js.js
-3378 silly gunzTarPerm modified mode [ 'lib/compiler/passes/generate-js.js', 420, 438 ]
-3379 silly gunzTarPerm extractEntry lib/XMLDTDAttList.js
-3380 silly gunzTarPerm modified mode [ 'lib/XMLDTDAttList.js', 436, 438 ]
-3381 silly gunzTarPerm extractEntry lib/XMLStringifier.js
-3382 silly gunzTarPerm modified mode [ 'lib/XMLStringifier.js', 436, 438 ]
-3383 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.h
-3384 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.h',
-3384 silly gunzTarPerm   420,
-3384 silly gunzTarPerm   438 ]
-3385 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.m
-3386 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.m',
-3386 silly gunzTarPerm   420,
-3386 silly gunzTarPerm   438 ]
-3387 silly gunzTarPerm extractEntry lib/compiler/passes/remove-proxy-rules.js
-3388 silly gunzTarPerm modified mode [ 'lib/compiler/passes/remove-proxy-rules.js', 420, 438 ]
-3389 silly gunzTarPerm extractEntry lib/XMLComment.js
-3390 silly gunzTarPerm modified mode [ 'lib/XMLComment.js', 436, 438 ]
-3391 silly gunzTarPerm extractEntry lib/XMLText.js
-3392 silly gunzTarPerm modified mode [ 'lib/XMLText.js', 436, 438 ]
-3393 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h
-3394 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h',
-3394 silly gunzTarPerm   420,
-3394 silly gunzTarPerm   438 ]
-3395 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m
-3396 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m',
-3396 silly gunzTarPerm   420,
-3396 silly gunzTarPerm   438 ]
-3397 silly gunzTarPerm extractEntry lib/compiler/passes/report-duplicate-labels.js
-3398 silly gunzTarPerm modified mode [ 'lib/compiler/passes/report-duplicate-labels.js', 420, 438 ]
-3399 silly gunzTarPerm extractEntry lib/compiler/passes/report-duplicate-rules.js
-3400 silly gunzTarPerm modified mode [ 'lib/compiler/passes/report-duplicate-rules.js', 420, 438 ]
-3401 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.h
-3402 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.h',
-3402 silly gunzTarPerm   420,
-3402 silly gunzTarPerm   438 ]
-3403 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.m
-3404 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.m',
-3404 silly gunzTarPerm   420,
-3404 silly gunzTarPerm   438 ]
-3405 silly gunzTarPerm extractEntry lib/XMLCData.js
-3406 silly gunzTarPerm modified mode [ 'lib/XMLCData.js', 436, 438 ]
-3407 silly gunzTarPerm extractEntry lib/XMLWriterBase.js
-3408 silly gunzTarPerm modified mode [ 'lib/XMLWriterBase.js', 436, 438 ]
-3409 silly gunzTarPerm extractEntry lib/compiler/passes/report-infinite-recursion.js
-3410 silly gunzTarPerm modified mode [ 'lib/compiler/passes/report-infinite-recursion.js', 420, 438 ]
-3411 silly gunzTarPerm extractEntry lib/compiler/passes/report-infinite-repetition.js
-3412 silly gunzTarPerm modified mode [ 'lib/compiler/passes/report-infinite-repetition.js', 420, 438 ]
-3413 silly gunzTarPerm extractEntry lib/XMLAttribute.js
-3414 silly gunzTarPerm modified mode [ 'lib/XMLAttribute.js', 436, 438 ]
-3415 silly gunzTarPerm extractEntry lib/index.js
-3416 silly gunzTarPerm modified mode [ 'lib/index.js', 436, 438 ]
-3417 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.h
-3418 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.h',
-3418 silly gunzTarPerm   420,
-3418 silly gunzTarPerm   438 ]
-3419 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m
-3420 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m',
-3420 silly gunzTarPerm   420,
-3420 silly gunzTarPerm   438 ]
-3421 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.h
-3422 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.h',
-3422 silly gunzTarPerm   420,
-3422 silly gunzTarPerm   438 ]
-3423 silly gunzTarPerm extractEntry lib/compiler/passes/report-undefined-rules.js
-3424 silly gunzTarPerm modified mode [ 'lib/compiler/passes/report-undefined-rules.js', 420, 438 ]
-3425 silly gunzTarPerm extractEntry lib/utils/arrays.js
-3426 silly gunzTarPerm modified mode [ 'lib/utils/arrays.js', 420, 438 ]
-3427 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.m
-3428 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.m',
-3428 silly gunzTarPerm   420,
-3428 silly gunzTarPerm   438 ]
-3429 silly gunzTarPerm extractEntry lib/utils/classes.js
-3430 silly gunzTarPerm modified mode [ 'lib/utils/classes.js', 420, 438 ]
-3431 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.h
-3432 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.h',
-3432 silly gunzTarPerm   420,
-3432 silly gunzTarPerm   438 ]
-3433 silly gunzTarPerm extractEntry lib/XMLDocumentCB.js
-3434 silly gunzTarPerm modified mode [ 'lib/XMLDocumentCB.js', 436, 438 ]
-3435 silly gunzTarPerm extractEntry lib/utils/objects.js
-3436 silly gunzTarPerm modified mode [ 'lib/utils/objects.js', 420, 438 ]
-3437 silly gunzTarPerm extractEntry CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m
-3438 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m',
-3438 silly gunzTarPerm   420,
-3438 silly gunzTarPerm   438 ]
-3439 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPluginResult.h
-3440 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPluginResult.h', 420, 438 ]
-3441 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDV.h
-3442 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDV.h', 420, 438 ]
-3443 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAppDelegate.m
-3444 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAppDelegate.m', 420, 438 ]
-3445 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAvailability.h
-3446 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAvailability.h', 420, 438 ]
-3447 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAvailabilityDeprecated.h
-3448 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAvailabilityDeprecated.h',
-3448 silly gunzTarPerm   420,
-3448 silly gunzTarPerm   438 ]
-3449 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandDelegate.h
-3450 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandDelegate.h', 420, 438 ]
-3451 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandDelegateImpl.h
-3452 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandDelegateImpl.h',
-3452 silly gunzTarPerm   420,
-3452 silly gunzTarPerm   438 ]
-3453 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandDelegateImpl.m
-3454 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandDelegateImpl.m',
-3454 silly gunzTarPerm   420,
-3454 silly gunzTarPerm   438 ]
-3455 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandQueue.h
-3456 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandQueue.h', 420, 438 ]
-3457 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVCommandQueue.m
-3458 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVCommandQueue.m', 420, 438 ]
-3459 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVConfigParser.h
-3460 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVConfigParser.h', 420, 438 ]
-3461 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVConfigParser.m
-3462 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVConfigParser.m', 420, 438 ]
-3463 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVInvokedUrlCommand.h
-3464 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVInvokedUrlCommand.h', 420, 438 ]
-3465 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVInvokedUrlCommand.m
-3466 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVInvokedUrlCommand.m', 420, 438 ]
-3467 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin+Resources.h
-3468 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin+Resources.h', 420, 438 ]
-3469 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin+Resources.m
-3470 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin+Resources.m', 420, 438 ]
-3471 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin.h
-3472 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin.h', 420, 438 ]
-3473 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPlugin.m
-3474 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPlugin.m', 420, 438 ]
-3475 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVAppDelegate.h
-3476 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVAppDelegate.h', 420, 438 ]
-3477 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVPluginResult.m
-3478 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVPluginResult.m', 420, 438 ]
-3479 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVScreenOrientationDelegate.h
-3480 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVScreenOrientationDelegate.h',
-3480 silly gunzTarPerm   420,
-3480 silly gunzTarPerm   438 ]
-3481 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVTimer.h
-3482 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVTimer.h', 420, 438 ]
-3483 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVTimer.m
-3484 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVTimer.m', 420, 438 ]
-3485 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVURLProtocol.h
-3486 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVURLProtocol.h', 420, 438 ]
-3487 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVURLProtocol.m
-3488 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVURLProtocol.m', 420, 438 ]
-3489 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVUserAgentUtil.h
-3490 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVUserAgentUtil.h', 420, 438 ]
-3491 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVUserAgentUtil.m
-3492 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVUserAgentUtil.m', 420, 438 ]
-3493 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVViewController.h
-3494 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVViewController.h', 420, 438 ]
-3495 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVViewController.m
-3496 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVViewController.m', 420, 438 ]
-3497 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVWebViewEngineProtocol.h
-3498 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVWebViewEngineProtocol.h',
-3498 silly gunzTarPerm   420,
-3498 silly gunzTarPerm   438 ]
-3499 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVWhitelist.h
-3500 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVWhitelist.h', 420, 438 ]
-3501 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/CDVWhitelist.m
-3502 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/CDVWhitelist.m', 420, 438 ]
-3503 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.h
-3504 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.h',
-3504 silly gunzTarPerm   420,
-3504 silly gunzTarPerm   438 ]
-3505 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m
-3506 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m',
-3506 silly gunzTarPerm   420,
-3506 silly gunzTarPerm   438 ]
-3507 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.h
-3508 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.h',
-3508 silly gunzTarPerm   420,
-3508 silly gunzTarPerm   438 ]
-3509 silly gunzTarPerm extractEntry CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m
-3510 silly gunzTarPerm modified mode [ 'CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m',
-3510 silly gunzTarPerm   420,
-3510 silly gunzTarPerm   438 ]
-3511 silly gunzTarPerm extractEntry CordovaLib/Cordova/Cordova.h
-3512 silly gunzTarPerm modified mode [ 'CordovaLib/Cordova/Cordova.h', 420, 438 ]
-3513 silly gunzTarPerm extractEntry CordovaLib/Cordova/Info.plist
-3514 silly gunzTarPerm modified mode [ 'CordovaLib/Cordova/Info.plist', 420, 438 ]
-3515 silly gunzTarPerm extractEntry CordovaLib/CordovaLib.xcodeproj/project.pbxproj
-3516 silly gunzTarPerm modified mode [ 'CordovaLib/CordovaLib.xcodeproj/project.pbxproj', 420, 438 ]
-3517 silly gunzTarPerm extractEntry CordovaLib/CordovaLib.xcodeproj/xcshareddata/xcschemes/Cordova.xcscheme
-3518 silly gunzTarPerm modified mode [ 'CordovaLib/CordovaLib.xcodeproj/xcshareddata/xcschemes/Cordova.xcscheme',
-3518 silly gunzTarPerm   420,
-3518 silly gunzTarPerm   438 ]
-3519 silly gunzTarPerm extractEntry CordovaLib/CordovaLib_Prefix.pch
-3520 silly gunzTarPerm modified mode [ 'CordovaLib/CordovaLib_Prefix.pch', 420, 438 ]
-3521 silly gunzTarPerm extractEntry CordovaLib/VERSION
-3522 silly gunzTarPerm modified mode [ 'CordovaLib/VERSION', 420, 438 ]
-3523 silly gunzTarPerm extractEntry .gitattributes
-3524 silly gunzTarPerm modified mode [ '.gitattributes', 420, 438 ]
-3525 silly gunzTarPerm extractEntry .github/PULL_REQUEST_TEMPLATE.md
-3526 silly gunzTarPerm modified mode [ '.github/PULL_REQUEST_TEMPLATE.md', 420, 438 ]
-3527 silly gunzTarPerm extractEntry RELEASENOTES.md
-3528 silly gunzTarPerm modified mode [ 'RELEASENOTES.md', 420, 438 ]
-3529 silly gunzTarPerm extractEntry appveyor.yml
-3530 silly gunzTarPerm modified mode [ 'appveyor.yml', 420, 438 ]
-3531 silly gunzTarPerm extractEntry bin/create
-3532 silly gunzTarPerm modified mode [ 'bin/create', 493, 511 ]
-3533 silly gunzTarPerm extractEntry bin/apple_ios_version
-3534 silly gunzTarPerm modified mode [ 'bin/apple_ios_version', 493, 511 ]
-3535 silly gunzTarPerm extractEntry bin/apple_osx_version
-3536 silly gunzTarPerm modified mode [ 'bin/apple_osx_version', 493, 511 ]
-3537 silly gunzTarPerm extractEntry bin/apple_osx_version.bat
-3538 silly gunzTarPerm modified mode [ 'bin/apple_osx_version.bat', 420, 438 ]
-3539 silly gunzTarPerm extractEntry bin/apple_xcode_version
-3540 silly gunzTarPerm modified mode [ 'bin/apple_xcode_version', 493, 511 ]
-3541 silly gunzTarPerm extractEntry bin/apple_xcode_version.bat
-3542 silly gunzTarPerm modified mode [ 'bin/apple_xcode_version.bat', 420, 438 ]
-3543 silly gunzTarPerm extractEntry bin/autotest
-3544 silly gunzTarPerm modified mode [ 'bin/autotest', 493, 511 ]
-3545 silly gunzTarPerm extractEntry bin/check_reqs
-3546 silly gunzTarPerm modified mode [ 'bin/check_reqs', 493, 511 ]
-3547 silly gunzTarPerm extractEntry bin/check_reqs.bat
-3548 silly gunzTarPerm modified mode [ 'bin/check_reqs.bat', 420, 438 ]
-3549 silly gunzTarPerm extractEntry bin/cordova_plist_to_config_xml
-3550 silly gunzTarPerm modified mode [ 'bin/cordova_plist_to_config_xml', 493, 511 ]
-3551 silly gunzTarPerm extractEntry bin/apple_ios_version.bat
-3552 silly gunzTarPerm modified mode [ 'bin/apple_ios_version.bat', 420, 438 ]
-3553 silly gunzTarPerm extractEntry bin/create.bat
-3554 silly gunzTarPerm modified mode [ 'bin/create.bat', 420, 438 ]
-3555 silly gunzTarPerm extractEntry bin/lib/check_reqs.js
-3556 silly gunzTarPerm modified mode [ 'bin/lib/check_reqs.js', 420, 438 ]
-3557 silly gunzTarPerm extractEntry bin/lib/create.js
-3558 silly gunzTarPerm modified mode [ 'bin/lib/create.js', 493, 511 ]
-3559 silly gunzTarPerm extractEntry bin/lib/versions.js
-3560 silly gunzTarPerm modified mode [ 'bin/lib/versions.js', 493, 511 ]
-3561 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Plugins/README
-3562 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Plugins/README',
-3562 silly gunzTarPerm   420,
-3562 silly gunzTarPerm   438 ]
-3563 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Bridging-Header.h
-3564 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Bridging-Header.h',
-3564 silly gunzTarPerm   420,
-3564 silly gunzTarPerm   438 ]
-3565 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.h
-3566 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.h',
-3566 silly gunzTarPerm   420,
-3566 silly gunzTarPerm   438 ]
-3567 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m
-3568 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/AppDelegate.m',
-3568 silly gunzTarPerm   420,
-3568 silly gunzTarPerm   438 ]
-3569 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.h
-3570 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.h',
-3570 silly gunzTarPerm   420,
-3570 silly gunzTarPerm   438 ]
-3571 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.m
-3572 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.m',
-3572 silly gunzTarPerm   420,
-3572 silly gunzTarPerm   438 ]
-3573 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.xib
-3574 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Classes/MainViewController.xib',
-3574 silly gunzTarPerm   420,
-3574 silly gunzTarPerm   438 ]
-3575 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Entitlements-Debug.plist
-3576 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Entitlements-Debug.plist',
-3576 silly gunzTarPerm   420,
-3576 silly gunzTarPerm   438 ]
-3577 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Entitlements-Release.plist
-3578 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Entitlements-Release.plist',
-3578 silly gunzTarPerm   420,
-3578 silly gunzTarPerm   438 ]
-3579 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
-3580 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72@2x.png',
-3580 silly gunzTarPerm   420,
-3580 silly gunzTarPerm   438 ]
-3581 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/Contents.json
-3582 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/Contents.json',
-3582 silly gunzTarPerm   420,
-3582 silly gunzTarPerm   438 ]
-3583 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
-3584 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40@2x.png',
-3584 silly gunzTarPerm   420,
-3584 silly gunzTarPerm   438 ]
-3585 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50.png
-3586 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50.png',
-3586 silly gunzTarPerm   420,
-3586 silly gunzTarPerm   438 ]
-3587 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
-3588 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-50@2x.png',
-3588 silly gunzTarPerm   420,
-3588 silly gunzTarPerm   438 ]
-3589 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
-3590 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@2x.png',
-3590 silly gunzTarPerm   420,
-3590 silly gunzTarPerm   438 ]
-3591 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
-3592 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-60@3x.png',
-3592 silly gunzTarPerm   420,
-3592 silly gunzTarPerm   438 ]
-3593 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72.png
-3594 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-72.png',
-3594 silly gunzTarPerm   420,
-3594 silly gunzTarPerm   438 ]
-3595 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40.png
-3596 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-40.png',
-3596 silly gunzTarPerm   420,
-3596 silly gunzTarPerm   438 ]
-3597 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76.png
-3598 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76.png',
-3598 silly gunzTarPerm   420,
-3598 silly gunzTarPerm   438 ]
-3599 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
-3600 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-76@2x.png',
-3600 silly gunzTarPerm   420,
-3600 silly gunzTarPerm   438 ]
-3601 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
-3602 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png',
-3602 silly gunzTarPerm   420,
-3602 silly gunzTarPerm   438 ]
-3603 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small.png
-3604 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small.png',
-3604 silly gunzTarPerm   420,
-3604 silly gunzTarPerm   438 ]
-3605 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@2x.png
-3606 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@2x.png',
-3606 silly gunzTarPerm   420,
-3606 silly gunzTarPerm   438 ]
-3607 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@3x.png
-3608 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon-small@3x.png',
-3608 silly gunzTarPerm   420,
-3608 silly gunzTarPerm   438 ]
-3609 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon.png
-3610 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon.png',
-3610 silly gunzTarPerm   420,
-3610 silly gunzTarPerm   438 ]
-3611 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon@2x.png
-3612 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/AppIcon.appiconset/icon@2x.png',
-3612 silly gunzTarPerm   420,
-3612 silly gunzTarPerm   438 ]
-3613 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/Contents.json
-3614 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/Contents.json',
-3614 silly gunzTarPerm   420,
-3614 silly gunzTarPerm   438 ]
-3615 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png
-3616 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png',
-3616 silly gunzTarPerm   420,
-3616 silly gunzTarPerm   438 ]
-3617 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Contents.json
-3618 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Contents.json',
-3618 silly gunzTarPerm   420,
-3618 silly gunzTarPerm   438 ]
-3619 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-667h.png
-3620 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-667h.png',
-3620 silly gunzTarPerm   420,
-3620 silly gunzTarPerm   438 ]
-3621 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-736h.png
-3622 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-736h.png',
-3622 silly gunzTarPerm   420,
-3622 silly gunzTarPerm   438 ]
-3623 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png
-3624 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png',
-3624 silly gunzTarPerm   420,
-3624 silly gunzTarPerm   438 ]
-3625 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png
-3626 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png',
-3626 silly gunzTarPerm   420,
-3626 silly gunzTarPerm   438 ]
-3627 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png
-3628 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png',
-3628 silly gunzTarPerm   420,
-3628 silly gunzTarPerm   438 ]
-3629 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png
-3630 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png',
-3630 silly gunzTarPerm   420,
-3630 silly gunzTarPerm   438 ]
-3631 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png
-3632 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png',
-3632 silly gunzTarPerm   420,
-3632 silly gunzTarPerm   438 ]
-3633 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png
-3634 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png',
-3634 silly gunzTarPerm   420,
-3634 silly gunzTarPerm   438 ]
-3635 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default~iphone.png
-3636 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchImage.launchimage/Default~iphone.png',
-3636 silly gunzTarPerm   420,
-3636 silly gunzTarPerm   438 ]
-3637 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchStoryboard.imageset/Contents.json
-3638 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/Images.xcassets/LaunchStoryboard.imageset/Contents.json',
-3638 silly gunzTarPerm   420,
-3638 silly gunzTarPerm   438 ]
-3639 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/CDVLaunchScreen.storyboard
-3640 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/CDVLaunchScreen.storyboard',
-3640 silly gunzTarPerm   420,
-3640 silly gunzTarPerm   438 ]
-3641 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Info.plist
-3642 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Info.plist',
-3642 silly gunzTarPerm   420,
-3642 silly gunzTarPerm   438 ]
-3643 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Prefix.pch
-3644 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/__PROJECT_NAME__-Prefix.pch',
-3644 silly gunzTarPerm   420,
-3644 silly gunzTarPerm   438 ]
-3645 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/config.xml
-3646 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/config.xml', 420, 438 ]
-3647 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/gitignore
-3648 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/gitignore', 420, 438 ]
-3649 silly gunzTarPerm extractEntry bin/templates/project/__PROJECT_NAME__/main.m
-3650 silly gunzTarPerm modified mode [ 'bin/templates/project/__PROJECT_NAME__/main.m', 420, 438 ]
-3651 silly gunzTarPerm extractEntry bin/templates/project/__TEMP__.xcodeproj/project.pbxproj
-3652 silly gunzTarPerm modified mode [ 'bin/templates/project/__TEMP__.xcodeproj/project.pbxproj',
-3652 silly gunzTarPerm   493,
-3652 silly gunzTarPerm   511 ]
-3653 silly gunzTarPerm extractEntry bin/templates/project/__TEMP__.xcworkspace/contents.xcworkspacedata
-3654 silly gunzTarPerm modified mode [ 'bin/templates/project/__TEMP__.xcworkspace/contents.xcworkspacedata',
-3654 silly gunzTarPerm   420,
-3654 silly gunzTarPerm   438 ]
-3655 silly gunzTarPerm extractEntry bin/templates/project/__TEMP__.xcworkspace/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme
-3656 silly gunzTarPerm modified mode [ 'bin/templates/project/__TEMP__.xcworkspace/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme',
-3656 silly gunzTarPerm   420,
-3656 silly gunzTarPerm   438 ]
-3657 silly gunzTarPerm extractEntry bin/templates/project/pods-debug.xcconfig
-3658 silly gunzTarPerm modified mode [ 'bin/templates/project/pods-debug.xcconfig', 420, 438 ]
-3659 silly gunzTarPerm extractEntry bin/templates/project/pods-release.xcconfig
-3660 silly gunzTarPerm modified mode [ 'bin/templates/project/pods-release.xcconfig', 420, 438 ]
-3661 silly gunzTarPerm extractEntry bin/templates/project/www/css/index.css
-3662 silly gunzTarPerm modified mode [ 'bin/templates/project/www/css/index.css', 493, 511 ]
-3663 silly gunzTarPerm extractEntry bin/templates/project/www/img/logo.png
-3664 silly gunzTarPerm modified mode [ 'bin/templates/project/www/img/logo.png', 493, 511 ]
-3665 silly gunzTarPerm extractEntry bin/templates/project/www/index.html
-3666 silly gunzTarPerm modified mode [ 'bin/templates/project/www/index.html', 493, 511 ]
-3667 silly gunzTarPerm extractEntry bin/templates/project/www/js/index.js
-3668 silly gunzTarPerm modified mode [ 'bin/templates/project/www/js/index.js', 493, 511 ]
-3669 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/Api.js
-3670 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/Api.js', 420, 438 ]
-3671 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/loggingHelper.js
-3672 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/loggingHelper.js', 420, 438 ]
-3673 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build-debug.xcconfig
-3674 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build-debug.xcconfig',
-3674 silly gunzTarPerm   420,
-3674 silly gunzTarPerm   438 ]
-3675 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build-extras.xcconfig
-3676 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build-extras.xcconfig',
-3676 silly gunzTarPerm   420,
-3676 silly gunzTarPerm   438 ]
-3677 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build-release.xcconfig
-3678 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build-release.xcconfig',
-3678 silly gunzTarPerm   420,
-3678 silly gunzTarPerm   438 ]
-3679 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build.bat
-3680 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build.bat', 420, 438 ]
-3681 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build.xcconfig
-3682 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build.xcconfig', 420, 438 ]
-3683 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/clean
-3684 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/clean', 493, 511 ]
-3685 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/clean.bat
-3686 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/clean.bat', 420, 438 ]
-3687 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/build
-3688 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/build', 493, 511 ]
-3689 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/Podfile.js
-3690 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/Podfile.js', 420, 438 ]
-3691 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/build.js
-3692 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/build.js', 420, 438 ]
-3693 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/clean.js
-3694 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/clean.js', 420, 438 ]
-3695 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/copy-www-build-step.js
-3696 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/copy-www-build-step.js',
-3696 silly gunzTarPerm   420,
-3696 silly gunzTarPerm   438 ]
-3697 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/PodsJson.js
-3698 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/PodsJson.js', 420, 438 ]
-3699 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/prepare.js
-3700 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/prepare.js', 420, 438 ]
-3701 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/projectFile.js
-3702 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/projectFile.js', 420, 438 ]
-3703 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/run.js
-3704 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/run.js', 420, 438 ]
-3705 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/spawn.js
-3706 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/spawn.js', 420, 438 ]
-3707 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/plugman/pluginHandlers.js
-3708 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/plugman/pluginHandlers.js',
-3708 silly gunzTarPerm   420,
-3708 silly gunzTarPerm   438 ]
-3709 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-devices
-3710 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-devices', 493, 511 ]
-3711 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-emulator-build-targets
-3712 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-emulator-build-targets',
-3712 silly gunzTarPerm   493,
-3712 silly gunzTarPerm   511 ]
-3713 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/start-emulator
-3714 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/start-emulator', 493, 511 ]
-3715 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-started-emulators
-3716 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-started-emulators',
-3716 silly gunzTarPerm   493,
-3716 silly gunzTarPerm   511 ]
-3717 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/lib/list-emulator-images
-3718 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/lib/list-emulator-images',
-3718 silly gunzTarPerm   493,
-3718 silly gunzTarPerm   511 ]
-3719 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/log
-3720 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/log', 493, 511 ]
-3721 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/log.bat
-3722 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/log.bat', 420, 438 ]
-3723 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/version.bat
-3724 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/version.bat', 420, 438 ]
-3725 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/run
-3726 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/run', 493, 511 ]
-3727 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/run.bat
-3728 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/run.bat', 420, 438 ]
-3729 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/version
-3730 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/version', 493, 511 ]
-3731 silly gunzTarPerm extractEntry bin/templates/scripts/cordova/defaults.xml
-3732 silly gunzTarPerm modified mode [ 'bin/templates/scripts/cordova/defaults.xml', 420, 438 ]
-3733 silly gunzTarPerm extractEntry bin/test
-3734 silly gunzTarPerm modified mode [ 'bin/test', 493, 511 ]
-3735 silly gunzTarPerm extractEntry bin/tests/autotest.coffee
-3736 silly gunzTarPerm modified mode [ 'bin/tests/autotest.coffee', 420, 438 ]
-3737 silly gunzTarPerm extractEntry bin/tests/create.coffee
-3738 silly gunzTarPerm modified mode [ 'bin/tests/create.coffee', 420, 438 ]
-3739 silly gunzTarPerm extractEntry bin/tests/debug.coffee
-3740 silly gunzTarPerm modified mode [ 'bin/tests/debug.coffee', 420, 438 ]
-3741 silly gunzTarPerm extractEntry bin/tests/test.coffee
-3742 silly gunzTarPerm modified mode [ 'bin/tests/test.coffee', 420, 438 ]
-3743 silly gunzTarPerm extractEntry bin/uncrustify.cfg
-3744 silly gunzTarPerm modified mode [ 'bin/uncrustify.cfg', 420, 438 ]
-3745 silly gunzTarPerm extractEntry bin/uncrustify.sh
-3746 silly gunzTarPerm modified mode [ 'bin/uncrustify.sh', 493, 511 ]
-3747 silly gunzTarPerm extractEntry bin/update
-3748 silly gunzTarPerm modified mode [ 'bin/update', 493, 511 ]
-3749 silly gunzTarPerm extractEntry bin/update.bat
-3750 silly gunzTarPerm modified mode [ 'bin/update.bat', 420, 438 ]
-3751 silly gunzTarPerm extractEntry component.json
-3752 silly gunzTarPerm modified mode [ 'component.json', 420, 438 ]
-3753 silly gunzTarPerm extractEntry cordova-js-src/exec.js
-3754 silly gunzTarPerm modified mode [ 'cordova-js-src/exec.js', 420, 438 ]
-3755 silly gunzTarPerm extractEntry cordova-js-src/platform.js
-3756 silly gunzTarPerm modified mode [ 'cordova-js-src/platform.js', 420, 438 ]
-3757 silly gunzTarPerm extractEntry guides/API changes in 4.0.md
-3758 silly gunzTarPerm modified mode [ 'guides/API changes in 4.0.md', 420, 438 ]
-3759 silly gunzTarPerm extractEntry guides/Cordova Custom URL Scheme Handling.md
-3760 silly gunzTarPerm modified mode [ 'guides/Cordova Custom URL Scheme Handling.md', 420, 438 ]
-3761 silly gunzTarPerm extractEntry guides/Setting Delegates, Preferences and Script Message Handlers in the WebView.md
-3762 silly gunzTarPerm modified mode [ 'guides/Setting Delegates, Preferences and Script Message Handlers in the WebView.md',
-3762 silly gunzTarPerm   420,
-3762 silly gunzTarPerm   438 ]
-3763 silly gunzTarPerm extractEntry hooks/pre-commit
-3764 silly gunzTarPerm modified mode [ 'hooks/pre-commit', 493, 511 ]
-3765 silly gunzTarPerm extractEntry spec/support/jasmine.json
-3766 silly gunzTarPerm modified mode [ 'spec/support/jasmine.json', 420, 438 ]
-3767 silly gunzTarPerm extractEntry tests/.jshintrc
-3768 silly gunzTarPerm modified mode [ 'tests/.jshintrc', 420, 438 ]
-3769 silly gunzTarPerm extractEntry tests/CordovaLibTests/.npmignore
-3770 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/.npmignore', 420, 438 ]
-3771 silly gunzTarPerm extractEntry tests/CordovaLibTests/en.lproj/InfoPlist.strings
-3772 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/en.lproj/InfoPlist.strings', 420, 438 ]
-3773 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVCommandDelegateTests.m
-3774 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVCommandDelegateTests.m', 420, 438 ]
-3775 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVFakeFileManager.h
-3776 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVFakeFileManager.h', 420, 438 ]
-3777 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVFakeFileManager.m
-3778 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVFakeFileManager.m', 420, 438 ]
-3779 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVInvokedUrlCommandTests.m
-3780 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVInvokedUrlCommandTests.m', 420, 438 ]
-3781 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVLocalStorageTests.m
-3782 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVLocalStorageTests.m', 420, 438 ]
-3783 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m
-3784 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m',
-3784 silly gunzTarPerm   420,
-3784 silly gunzTarPerm   438 ]
-3785 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVStartPageTests.m
-3786 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVStartPageTests.m', 420, 438 ]
-3787 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVUserAgentTest.m
-3788 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVUserAgentTest.m', 420, 438 ]
-3789 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVBase64Tests.m
-3790 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVBase64Tests.m', 420, 438 ]
-3791 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWebViewDelegateTests.m
-3792 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWebViewDelegateTests.m', 420, 438 ]
-3793 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWebViewTest.h
-3794 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWebViewTest.h', 420, 438 ]
-3795 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWebViewTest.m
-3796 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWebViewTest.m', 420, 438 ]
-3797 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVWhitelistTests.m
-3798 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVWhitelistTests.m', 420, 438 ]
-3799 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/AppDelegate.h
-3800 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/AppDelegate.h', 420, 438 ]
-3801 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/AppDelegate.m
-3802 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/AppDelegate.m', 420, 438 ]
-3803 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/Bridging-Header.h
-3804 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/Bridging-Header.h',
-3804 silly gunzTarPerm   420,
-3804 silly gunzTarPerm   438 ]
-3805 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/CordovaLibApp-Info.plist
-3806 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/CordovaLibApp-Info.plist',
-3806 silly gunzTarPerm   420,
-3806 silly gunzTarPerm   438 ]
-3807 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/ViewController.h
-3808 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/ViewController.h',
-3808 silly gunzTarPerm   420,
-3808 silly gunzTarPerm   438 ]
-3809 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/ViewController.m
-3810 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/ViewController.m',
-3810 silly gunzTarPerm   420,
-3810 silly gunzTarPerm   438 ]
-3811 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/config.xml
-3812 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/config.xml', 420, 438 ]
-3813 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/en.lproj/InfoPlist.strings
-3814 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/en.lproj/InfoPlist.strings',
-3814 silly gunzTarPerm   420,
-3814 silly gunzTarPerm   438 ]
-3815 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/main.m
-3816 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/main.m', 420, 438 ]
-3817 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibApp/www/index.html
-3818 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibApp/www/index.html',
-3818 silly gunzTarPerm   420,
-3818 silly gunzTarPerm   438 ]
-3819 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibTests-Info.plist
-3820 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibTests-Info.plist', 420, 438 ]
-3821 silly gunzTarPerm extractEntry tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj
-3822 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj',
-3822 silly gunzTarPerm   420,
-3822 silly gunzTarPerm   438 ]
-3823 silly gunzTarPerm extractEntry tests/CordovaLibTests/Default-568h@2x.png
-3824 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/Default-568h@2x.png', 420, 438 ]
-3825 silly gunzTarPerm extractEntry tests/CordovaLibTests/config-custom.xml
-3826 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/config-custom.xml', 420, 438 ]
-3827 silly gunzTarPerm extractEntry tests/CordovaLibTests/CDVViewControllerTest.m
-3828 silly gunzTarPerm modified mode [ 'tests/CordovaLibTests/CDVViewControllerTest.m', 420, 438 ]
-3829 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/contents.xcworkspacedata
-3830 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/contents.xcworkspacedata',
-3830 silly gunzTarPerm   420,
-3830 silly gunzTarPerm   438 ]
-3831 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/cordova-ios.xccheckout
-3832 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/cordova-ios.xccheckout',
-3832 silly gunzTarPerm   420,
-3832 silly gunzTarPerm   438 ]
-3833 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaFrameworkApp.xcscheme
-3834 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaFrameworkApp.xcscheme',
-3834 silly gunzTarPerm   420,
-3834 silly gunzTarPerm   438 ]
-3835 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme
-3836 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme',
-3836 silly gunzTarPerm   420,
-3836 silly gunzTarPerm   438 ]
-3837 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibApp.xcscheme
-3838 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibApp.xcscheme',
-3838 silly gunzTarPerm   420,
-3838 silly gunzTarPerm   438 ]
-3839 silly gunzTarPerm extractEntry tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibTests.xcscheme
-3840 silly gunzTarPerm modified mode [ 'tests/cordova-ios.xcworkspace/xcshareddata/xcschemes/CordovaLibTests.xcscheme',
-3840 silly gunzTarPerm   420,
-3840 silly gunzTarPerm   438 ]
-3841 silly gunzTarPerm extractEntry tests/scripts/killsim.js
-3842 silly gunzTarPerm modified mode [ 'tests/scripts/killsim.js', 493, 511 ]
-3843 silly gunzTarPerm extractEntry tests/spec/create.spec.js
-3844 silly gunzTarPerm modified mode [ 'tests/spec/create.spec.js', 420, 438 ]
-3845 silly gunzTarPerm extractEntry tests/spec/unit/Api.spec.js
-3846 silly gunzTarPerm modified mode [ 'tests/spec/unit/Api.spec.js', 420, 438 ]
-3847 silly gunzTarPerm extractEntry tests/spec/unit/Podfile.spec.js
-3848 silly gunzTarPerm modified mode [ 'tests/spec/unit/Podfile.spec.js', 420, 438 ]
-3849 silly gunzTarPerm extractEntry tests/spec/unit/PodsJson.spec.js
-3850 silly gunzTarPerm modified mode [ 'tests/spec/unit/PodsJson.spec.js', 420, 438 ]
-3851 silly gunzTarPerm extractEntry tests/spec/unit/build.spec.js
-3852 silly gunzTarPerm modified mode [ 'tests/spec/unit/build.spec.js', 420, 438 ]
-3853 silly gunzTarPerm extractEntry tests/spec/unit/prepare.spec.js
-3854 silly gunzTarPerm modified mode [ 'tests/spec/unit/prepare.spec.js', 420, 438 ]
-3855 silly gunzTarPerm extractEntry tests/spec/unit/preparePlatform.spec.js
-3856 silly gunzTarPerm modified mode [ 'tests/spec/unit/preparePlatform.spec.js', 420, 438 ]
-3857 silly gunzTarPerm extractEntry tests/spec/unit/projectFile.spec.js
-3858 silly gunzTarPerm modified mode [ 'tests/spec/unit/projectFile.spec.js', 420, 438 ]
-3859 silly gunzTarPerm extractEntry tests/spec/unit/Plugman/common.spec.js
-3860 silly gunzTarPerm modified mode [ 'tests/spec/unit/Plugman/common.spec.js', 420, 438 ]
-3861 silly gunzTarPerm extractEntry tests/spec/unit/Plugman/pluginHandler.spec.js
-3862 silly gunzTarPerm modified mode [ 'tests/spec/unit/Plugman/pluginHandler.spec.js', 420, 438 ]
-3863 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/config.xml
-3864 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/config.xml',
-3864 silly gunzTarPerm   420,
-3864 silly gunzTarPerm   438 ]
-3865 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/image-1234.png
-3866 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/image-1234.png',
-3866 silly gunzTarPerm   420,
-3866 silly gunzTarPerm   438 ]
-3867 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/image-5678.png
-3868 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/image-5678.png',
-3868 silly gunzTarPerm   420,
-3868 silly gunzTarPerm   438 ]
-3869 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/resource-file-support/image-8888.png
-3870 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/resource-file-support/image-8888.png',
-3870 silly gunzTarPerm   420,
-3870 silly gunzTarPerm   438 ]
-3871 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/dummyProj/config.xml
-3872 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/dummyProj/config.xml', 420, 438 ]
-3873 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/dummyProj/platforms/.gitkeep
-3874 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/dummyProj/platforms/.gitkeep',
-3874 silly gunzTarPerm   420,
-3874 silly gunzTarPerm   438 ]
-3875 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/dummyProj/www/.gitkeep
-3876 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/dummyProj/www/.gitkeep', 420, 438 ]
-3877 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/legacy-only.xml
-3878 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/legacy-only.xml',
-3878 silly gunzTarPerm   420,
-3878 silly gunzTarPerm   438 ]
-3879 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-and-legacy.xml
-3880 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-and-legacy.xml',
-3880 silly gunzTarPerm   420,
-3880 silly gunzTarPerm   438 ]
-3881 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-only.xml
-3882 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/modern-only.xml',
-3882 silly gunzTarPerm   420,
-3882 silly gunzTarPerm   438 ]
-3883 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/configs/none.xml
-3884 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/configs/none.xml',
-3884 silly gunzTarPerm   420,
-3884 silly gunzTarPerm   438 ]
-3885 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/empty.js
-3886 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/empty.js',
-3886 silly gunzTarPerm   420,
-3886 silly gunzTarPerm   438 ]
-3887 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/single-2xanyany.js
-3888 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/single-2xanyany.js',
-3888 silly gunzTarPerm   420,
-3888 silly gunzTarPerm   438 ]
-3889 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/typical-universal.js
-3890 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/typical-universal.js',
-3890 silly gunzTarPerm   420,
-3890 silly gunzTarPerm   438 ]
-3891 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-json/varied-device.js
-3892 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-json/varied-device.js',
-3892 silly gunzTarPerm   420,
-3892 silly gunzTarPerm   438 ]
-3893 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/empty-map.js
-3894 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/empty-map.js',
-3894 silly gunzTarPerm   420,
-3894 silly gunzTarPerm   438 ]
-3895 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/single-2xanyany-map.js
-3896 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/single-2xanyany-map.js',
-3896 silly gunzTarPerm   420,
-3896 silly gunzTarPerm   438 ]
-3897 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/typical-universal-map.js
-3898 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/typical-universal-map.js',
-3898 silly gunzTarPerm   420,
-3898 silly gunzTarPerm   438 ]
-3899 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/contents-map/varied-device-map.js
-3900 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/contents-map/varied-device-map.js',
-3900 silly gunzTarPerm   420,
-3900 silly gunzTarPerm   438 ]
-3901 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~anyany.png
-3902 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~anyany.png',
-3902 silly gunzTarPerm   420,
-3902 silly gunzTarPerm   438 ]
-3903 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comany.png
-3904 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comany.png',
-3904 silly gunzTarPerm   420,
-3904 silly gunzTarPerm   438 ]
-3905 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comcom.png
-3906 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@2x~universal~comcom.png',
-3906 silly gunzTarPerm   420,
-3906 silly gunzTarPerm   438 ]
-3907 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anyany.png
-3908 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anyany.png',
-3908 silly gunzTarPerm   420,
-3908 silly gunzTarPerm   438 ]
-3909 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anycom.png
-3910 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~anycom.png',
-3910 silly gunzTarPerm   420,
-3910 silly gunzTarPerm   438 ]
-3911 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~comany.png
-3912 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/launch-storyboard-support/res/screen/ios/Default@3x~universal~comany.png',
-3912 silly gunzTarPerm   420,
-3912 silly gunzTarPerm   438 ]
-3913 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/plugin.xml
-3914 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/plugin.xml',
-3914 silly gunzTarPerm   420,
-3914 silly gunzTarPerm   438 ]
-3915 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/someFheader.h
-3916 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/someFheader.h',
-3916 silly gunzTarPerm   420,
-3916 silly gunzTarPerm   438 ]
-3917 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/somebinlib
-3918 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework/somebinlib',
-3918 silly gunzTarPerm   420,
-3918 silly gunzTarPerm   438 ]
-3919 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/someFheader.h
-3920 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/someFheader.h',
-3920 silly gunzTarPerm   420,
-3920 silly gunzTarPerm   438 ]
-3921 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/somebinlib
-3922 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework/somebinlib',
-3922 silly gunzTarPerm   420,
-3922 silly gunzTarPerm   438 ]
-3923 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPlugin.bundle
-3924 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPlugin.bundle',
-3924 silly gunzTarPerm   420,
-3924 silly gunzTarPerm   438 ]
-3925 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.h
-3926 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.h',
-3926 silly gunzTarPerm   420,
-3926 silly gunzTarPerm   438 ]
-3927 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.m
-3928 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/DummyPluginCommand.m',
-3928 silly gunzTarPerm   420,
-3928 silly gunzTarPerm   438 ]
-3929 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/SourceWithFramework.m
-3930 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/SourceWithFramework.m',
-3930 silly gunzTarPerm   420,
-3930 silly gunzTarPerm   438 ]
-3931 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.h
-3932 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.h',
-3932 silly gunzTarPerm   420,
-3932 silly gunzTarPerm   438 ]
-3933 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.m
-3934 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/TargetDirTest.m',
-3934 silly gunzTarPerm   420,
-3934 silly gunzTarPerm   438 ]
-3935 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/libsqlite3.dylib
-3936 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/libsqlite3.dylib',
-3936 silly gunzTarPerm   420,
-3936 silly gunzTarPerm   438 ]
-3937 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin.js
-3938 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin.js',
-3938 silly gunzTarPerm   420,
-3938 silly gunzTarPerm   438 ]
-3939 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin/image.jpg
-3940 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.dummyplugin/www/dummyplugin/image.jpg',
-3940 silly gunzTarPerm   420,
-3940 silly gunzTarPerm   438 ]
-3941 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.faultyplugin/plugin.xml
-3942 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.faultyplugin/plugin.xml',
-3942 silly gunzTarPerm   420,
-3942 silly gunzTarPerm   438 ]
-3943 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.h
-3944 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.h',
-3944 silly gunzTarPerm   420,
-3944 silly gunzTarPerm   438 ]
-3945 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.m
-3946 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.faultyplugin/src/ios/FaultyPlugin.m',
-3946 silly gunzTarPerm   420,
-3946 silly gunzTarPerm   438 ]
-3947 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/plugin.xml
-3948 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/plugin.xml',
-3948 silly gunzTarPerm   420,
-3948 silly gunzTarPerm   438 ]
-3949 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left.png
-3950 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left.png',
-3950 silly gunzTarPerm   420,
-3950 silly gunzTarPerm   438 ]
-3951 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left@2x.png
-3952 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_left@2x.png',
-3952 silly gunzTarPerm   420,
-3952 silly gunzTarPerm   438 ]
-3953 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right.png
-3954 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right.png',
-3954 silly gunzTarPerm   420,
-3954 silly gunzTarPerm   438 ]
-3955 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right@2x.png
-3956 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/arrow_right@2x.png',
-3956 silly gunzTarPerm   420,
-3956 silly gunzTarPerm   438 ]
-3957 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh.png
-3958 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh.png',
-3958 silly gunzTarPerm   420,
-3958 silly gunzTarPerm   438 ]
-3959 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh@2x.png
-3960 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/but_refresh@2x.png',
-3960 silly gunzTarPerm   420,
-3960 silly gunzTarPerm   438 ]
-3961 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass.png
-3962 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass.png',
-3962 silly gunzTarPerm   420,
-3962 silly gunzTarPerm   438 ]
-3963 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass@2x.png
-3964 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPlugin.bundle/compass@2x.png',
-3964 silly gunzTarPerm   420,
-3964 silly gunzTarPerm   438 ]
-3965 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.h
-3966 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.h',
-3966 silly gunzTarPerm   420,
-3966 silly gunzTarPerm   438 ]
-3967 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.m
-3968 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginCommand.m',
-3968 silly gunzTarPerm   420,
-3968 silly gunzTarPerm   438 ]
-3969 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.h
-3970 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.h',
-3970 silly gunzTarPerm   420,
-3970 silly gunzTarPerm   438 ]
-3971 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.m
-3972 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.m',
-3972 silly gunzTarPerm   420,
-3972 silly gunzTarPerm   438 ]
-3973 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.xib
-3974 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/org.test.plugins.weblessplugin/src/ios/WeblessPluginViewController.xib',
-3974 silly gunzTarPerm   420,
-3974 silly gunzTarPerm   438 ]
-3975 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
-3976 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/CordovaLib/CordovaLib.xcodeproj/project.pbxproj',
-3976 silly gunzTarPerm   420,
-3976 silly gunzTarPerm   438 ]
-3977 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/CordovaLib/VERSION
-3978 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/CordovaLib/VERSION',
-3978 silly gunzTarPerm   420,
-3978 silly gunzTarPerm   438 ]
-3979 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
-3980 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72@2x.png',
-3980 silly gunzTarPerm   420,
-3980 silly gunzTarPerm   438 ]
-3981 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/Contents.json
-3982 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/Contents.json',
-3982 silly gunzTarPerm   420,
-3982 silly gunzTarPerm   438 ]
-3983 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
-3984 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40@2x.png',
-3984 silly gunzTarPerm   420,
-3984 silly gunzTarPerm   438 ]
-3985 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50.png
-3986 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50.png',
-3986 silly gunzTarPerm   420,
-3986 silly gunzTarPerm   438 ]
-3987 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
-3988 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-50@2x.png',
-3988 silly gunzTarPerm   420,
-3988 silly gunzTarPerm   438 ]
-3989 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
-3990 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@2x.png',
-3990 silly gunzTarPerm   420,
-3990 silly gunzTarPerm   438 ]
-3991 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
-3992 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-60@3x.png',
-3992 silly gunzTarPerm   420,
-3992 silly gunzTarPerm   438 ]
-3993 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72.png
-3994 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-72.png',
-3994 silly gunzTarPerm   420,
-3994 silly gunzTarPerm   438 ]
-3995 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40.png
-3996 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-40.png',
-3996 silly gunzTarPerm   420,
-3996 silly gunzTarPerm   438 ]
-3997 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76.png
-3998 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76.png',
-3998 silly gunzTarPerm   420,
-3998 silly gunzTarPerm   438 ]
-3999 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
-4000 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-76@2x.png',
-4000 silly gunzTarPerm   420,
-4000 silly gunzTarPerm   438 ]
-4001 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
-4002 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png',
-4002 silly gunzTarPerm   420,
-4002 silly gunzTarPerm   438 ]
-4003 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small.png
-4004 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small.png',
-4004 silly gunzTarPerm   420,
-4004 silly gunzTarPerm   438 ]
-4005 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@2x.png
-4006 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@2x.png',
-4006 silly gunzTarPerm   420,
-4006 silly gunzTarPerm   438 ]
-4007 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@3x.png
-4008 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon-small@3x.png',
-4008 silly gunzTarPerm   420,
-4008 silly gunzTarPerm   438 ]
-4009 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon.png
-4010 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon.png',
-4010 silly gunzTarPerm   420,
-4010 silly gunzTarPerm   438 ]
-4011 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon@2x.png
-4012 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/AppIcon.appiconset/icon@2x.png',
-4012 silly gunzTarPerm   420,
-4012 silly gunzTarPerm   438 ]
-4013 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/Contents.json
-4014 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/Contents.json',
-4014 silly gunzTarPerm   420,
-4014 silly gunzTarPerm   438 ]
-4015 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png
-4016 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png',
-4016 silly gunzTarPerm   420,
-4016 silly gunzTarPerm   438 ]
-4017 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Contents.json
-4018 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Contents.json',
-4018 silly gunzTarPerm   420,
-4018 silly gunzTarPerm   438 ]
-4019 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-667h.png
-4020 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-667h.png',
-4020 silly gunzTarPerm   420,
-4020 silly gunzTarPerm   438 ]
-4021 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-736h.png
-4022 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-736h.png',
-4022 silly gunzTarPerm   420,
-4022 silly gunzTarPerm   438 ]
-4023 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png
-4024 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png',
-4024 silly gunzTarPerm   420,
-4024 silly gunzTarPerm   438 ]
-4025 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png
-4026 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png',
-4026 silly gunzTarPerm   420,
-4026 silly gunzTarPerm   438 ]
-4027 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png
-4028 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png',
-4028 silly gunzTarPerm   420,
-4028 silly gunzTarPerm   438 ]
-4029 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png
-4030 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png',
-4030 silly gunzTarPerm   420,
-4030 silly gunzTarPerm   438 ]
-4031 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png
-4032 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png',
-4032 silly gunzTarPerm   420,
-4032 silly gunzTarPerm   438 ]
-4033 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png
-4034 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png',
-4034 silly gunzTarPerm   420,
-4034 silly gunzTarPerm   438 ]
-4035 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default~iphone.png
-4036 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchImage.launchimage/Default~iphone.png',
-4036 silly gunzTarPerm   420,
-4036 silly gunzTarPerm   438 ]
-4037 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchStoryboard.imageset/Contents.json
-4038 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/Images.xcassets/LaunchStoryboard.imageset/Contents.json',
-4038 silly gunzTarPerm   420,
-4038 silly gunzTarPerm   438 ]
-4039 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/SampleApp-Info.plist
-4040 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/SampleApp-Info.plist',
-4040 silly gunzTarPerm   420,
-4040 silly gunzTarPerm   438 ]
-4041 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml
-4042 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml',
-4042 silly gunzTarPerm   420,
-4042 silly gunzTarPerm   438 ]
-4043 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.orig.pbxproj
-4044 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.orig.pbxproj',
-4044 silly gunzTarPerm   420,
-4044 silly gunzTarPerm   438 ]
-4045 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.pbxproj
-4046 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/SampleApp.xcodeproj/project.pbxproj',
-4046 silly gunzTarPerm   420,
-4046 silly gunzTarPerm   438 ]
-4047 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/platform_www/.gitkeep
-4048 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/platform_www/.gitkeep',
-4048 silly gunzTarPerm   420,
-4048 silly gunzTarPerm   438 ]
-4049 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/ios-config-xml/www/.gitkeep
-4050 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/ios-config-xml/www/.gitkeep',
-4050 silly gunzTarPerm   420,
-4050 silly gunzTarPerm   438 ]
-4051 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/plugin.xml
-4052 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/plugin.xml',
-4052 silly gunzTarPerm   420,
-4052 silly gunzTarPerm   438 ]
-4053 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/www/test.js
-4054 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cocoapod-plugin-no-spec-overlapping-dependency/www/test.js',
-4054 silly gunzTarPerm   420,
-4054 silly gunzTarPerm   438 ]
-4055 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/plugin.xml
-4056 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/plugin.xml',
-4056 silly gunzTarPerm   420,
-4056 silly gunzTarPerm   438 ]
-4057 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/www/test.js
-4058 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/sample-cordova-plugin-with-spec/www/test.js',
-4058 silly gunzTarPerm   420,
-4058 silly gunzTarPerm   438 ]
-4059 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/test-config-2.xml
-4060 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/test-config-2.xml', 420, 438 ]
-4061 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/test-config.xml
-4062 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/test-config.xml', 420, 438 ]
-4063 silly gunzTarPerm extractEntry tests/spec/unit/fixtures/testProj/platforms/ios/.npmignore
-4064 silly gunzTarPerm modified mode [ 'tests/spec/unit/fixtures/testProj/platforms/ios/.npmignore',
-4064 silly gunzTarPerm   420,
-4064 silly gunzTarPerm   438 ]
-4065 silly gunzTarPerm extractEntry node_modules/os-homedir/package.json
-4066 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/package.json', 420, 438 ]
-4067 silly gunzTarPerm extractEntry node_modules/os-homedir/index.js
-4068 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/index.js', 420, 438 ]
-4069 silly gunzTarPerm extractEntry node_modules/os-homedir/license
-4070 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/license', 420, 438 ]
-4071 silly gunzTarPerm extractEntry node_modules/os-homedir/readme.md
-4072 silly gunzTarPerm modified mode [ 'node_modules/os-homedir/readme.md', 420, 438 ]
-4073 silly gunzTarPerm extractEntry node_modules/abbrev/package.json
-4074 silly gunzTarPerm modified mode [ 'node_modules/abbrev/package.json', 420, 438 ]
-4075 silly gunzTarPerm extractEntry node_modules/abbrev/README.md
-4076 silly gunzTarPerm modified mode [ 'node_modules/abbrev/README.md', 420, 438 ]
-4077 silly gunzTarPerm extractEntry node_modules/abbrev/LICENSE
-4078 silly gunzTarPerm modified mode [ 'node_modules/abbrev/LICENSE', 420, 438 ]
-4079 silly gunzTarPerm extractEntry node_modules/abbrev/abbrev.js
-4080 silly gunzTarPerm modified mode [ 'node_modules/abbrev/abbrev.js', 420, 438 ]
-4081 silly gunzTarPerm extractEntry node_modules/balanced-match/package.json
-4082 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/package.json', 420, 438 ]
-4083 silly gunzTarPerm extractEntry node_modules/balanced-match/.npmignore
-4084 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/.npmignore', 420, 438 ]
-4085 silly gunzTarPerm extractEntry node_modules/balanced-match/README.md
-4086 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/README.md', 420, 438 ]
-4087 silly gunzTarPerm extractEntry node_modules/balanced-match/index.js
-4088 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/index.js', 420, 438 ]
-4089 silly gunzTarPerm extractEntry node_modules/balanced-match/LICENSE.md
-4090 silly gunzTarPerm modified mode [ 'node_modules/balanced-match/LICENSE.md', 420, 438 ]
-4091 silly gunzTarPerm extractEntry node_modules/base64-js/package.json
-4092 silly gunzTarPerm modified mode [ 'node_modules/base64-js/package.json', 420, 438 ]
-4093 silly gunzTarPerm extractEntry node_modules/base64-js/README.md
-4094 silly gunzTarPerm modified mode [ 'node_modules/base64-js/README.md', 420, 438 ]
-4095 silly gunzTarPerm extractEntry node_modules/base64-js/.travis.yml
-4096 silly gunzTarPerm modified mode [ 'node_modules/base64-js/.travis.yml', 420, 438 ]
-4097 silly gunzTarPerm extractEntry node_modules/base64-js/LICENSE.MIT
-4098 silly gunzTarPerm modified mode [ 'node_modules/base64-js/LICENSE.MIT', 420, 438 ]
-4099 silly gunzTarPerm extractEntry node_modules/base64-js/bench/bench.js
-4100 silly gunzTarPerm modified mode [ 'node_modules/base64-js/bench/bench.js', 420, 438 ]
-4101 silly gunzTarPerm extractEntry node_modules/base64-js/lib/b64.js
-4102 silly gunzTarPerm modified mode [ 'node_modules/base64-js/lib/b64.js', 420, 438 ]
-4103 silly gunzTarPerm extractEntry node_modules/base64-js/test/convert.js
-4104 silly gunzTarPerm modified mode [ 'node_modules/base64-js/test/convert.js', 420, 438 ]
-4105 silly gunzTarPerm extractEntry node_modules/base64-js/test/url-safe.js
-4106 silly gunzTarPerm modified mode [ 'node_modules/base64-js/test/url-safe.js', 420, 438 ]
-4107 silly gunzTarPerm extractEntry node_modules/big-integer/package.json
-4108 silly gunzTarPerm modified mode [ 'node_modules/big-integer/package.json', 420, 438 ]
-4109 silly gunzTarPerm extractEntry node_modules/big-integer/README.md
-4110 silly gunzTarPerm modified mode [ 'node_modules/big-integer/README.md', 420, 438 ]
-4111 silly gunzTarPerm extractEntry node_modules/big-integer/LICENSE
-4112 silly gunzTarPerm modified mode [ 'node_modules/big-integer/LICENSE', 420, 438 ]
-4113 silly gunzTarPerm extractEntry node_modules/big-integer/BigInteger.js
-4114 silly gunzTarPerm modified mode [ 'node_modules/big-integer/BigInteger.js', 420, 438 ]
-4115 silly gunzTarPerm extractEntry node_modules/big-integer/BigInteger.min.js
-4116 silly gunzTarPerm modified mode [ 'node_modules/big-integer/BigInteger.min.js', 420, 438 ]
-4117 silly gunzTarPerm extractEntry node_modules/big-integer/bower.json
-4118 silly gunzTarPerm modified mode [ 'node_modules/big-integer/bower.json', 420, 438 ]
-4119 silly gunzTarPerm extractEntry node_modules/bplist-creator/package.json
-4120 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/package.json', 420, 438 ]
-4121 silly gunzTarPerm extractEntry node_modules/bplist-creator/.npmignore
-4122 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/.npmignore', 420, 438 ]
-4123 silly gunzTarPerm extractEntry node_modules/bplist-creator/README.md
-4124 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/README.md', 420, 438 ]
-4125 silly gunzTarPerm extractEntry node_modules/bplist-creator/bplistCreator.js
-4126 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/bplistCreator.js', 420, 438 ]
-4127 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/creatorTest.js
-4128 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/creatorTest.js', 420, 438 ]
-4129 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/airplay.bplist
-4130 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/airplay.bplist', 420, 438 ]
-4131 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/binaryData.bplist
-4132 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/binaryData.bplist',
-4132 silly gunzTarPerm   420,
-4132 silly gunzTarPerm   438 ]
-4133 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/iTunes-small.bplist
-4134 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/iTunes-small.bplist',
-4134 silly gunzTarPerm   420,
-4134 silly gunzTarPerm   438 ]
-4135 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/sample1.bplist
-4136 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/sample1.bplist', 420, 438 ]
-4137 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/sample2.bplist
-4138 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/sample2.bplist', 420, 438 ]
-4139 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/uid.bplist
-4140 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/uid.bplist', 420, 438 ]
-4141 silly gunzTarPerm extractEntry node_modules/bplist-creator/test/utf16.bplist
-4142 silly gunzTarPerm modified mode [ 'node_modules/bplist-creator/test/utf16.bplist', 420, 438 ]
-4143 silly gunzTarPerm extractEntry node_modules/bplist-parser/package.json
-4144 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/package.json', 420, 438 ]
-4145 silly gunzTarPerm extractEntry node_modules/bplist-parser/.npmignore
-4146 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/.npmignore', 420, 438 ]
-4147 silly gunzTarPerm extractEntry node_modules/bplist-parser/README.md
-4148 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/README.md', 420, 438 ]
-4149 silly gunzTarPerm extractEntry node_modules/bplist-parser/bplistParser.js
-4150 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/bplistParser.js', 420, 438 ]
-4151 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/parseTest.js
-4152 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/parseTest.js', 420, 438 ]
-4153 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/airplay.bplist
-4154 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/airplay.bplist', 420, 438 ]
-4155 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/iTunes-small.bplist
-4156 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/iTunes-small.bplist',
-4156 silly gunzTarPerm   420,
-4156 silly gunzTarPerm   438 ]
-4157 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/int64.bplist
-4158 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/int64.bplist', 420, 438 ]
-4159 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/int64.xml
-4160 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/int64.xml', 420, 438 ]
-4161 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/sample1.bplist
-4162 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/sample1.bplist', 420, 438 ]
-4163 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/sample2.bplist
-4164 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/sample2.bplist', 420, 438 ]
-4165 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/uid.bplist
-4166 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/uid.bplist', 420, 438 ]
-4167 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/utf16.bplist
-4168 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/utf16.bplist', 420, 438 ]
-4169 silly gunzTarPerm extractEntry node_modules/bplist-parser/test/utf16_chinese.plist
-4170 silly gunzTarPerm modified mode [ 'node_modules/bplist-parser/test/utf16_chinese.plist',
-4170 silly gunzTarPerm   493,
-4170 silly gunzTarPerm   511 ]
-4171 silly gunzTarPerm extractEntry node_modules/brace-expansion/package.json
-4172 silly gunzTarPerm modified mode [ 'node_modules/brace-expansion/package.json', 420, 438 ]
-4173 silly gunzTarPerm extractEntry node_modules/brace-expansion/README.md
-4174 silly gunzTarPerm modified mode [ 'node_modules/brace-expansion/README.md', 420, 438 ]
-4175 silly gunzTarPerm extractEntry node_modules/brace-expansion/index.js
-4176 silly gunzTarPerm modified mode [ 'node_modules/brace-expansion/index.js', 420, 438 ]
-4177 silly gunzTarPerm extractEntry node_modules/concat-map/package.json
-4178 silly gunzTarPerm modified mode [ 'node_modules/concat-map/package.json', 420, 438 ]
-4179 silly gunzTarPerm extractEntry node_modules/concat-map/LICENSE
-4180 silly gunzTarPerm modified mode [ 'node_modules/concat-map/LICENSE', 420, 438 ]
-4181 silly gunzTarPerm extractEntry node_modules/concat-map/index.js
-4182 silly gunzTarPerm modified mode [ 'node_modules/concat-map/index.js', 420, 438 ]
-4183 silly gunzTarPerm extractEntry node_modules/concat-map/.travis.yml
-4184 silly gunzTarPerm modified mode [ 'node_modules/concat-map/.travis.yml', 420, 438 ]
-4185 silly gunzTarPerm extractEntry node_modules/concat-map/README.markdown
-4186 silly gunzTarPerm modified mode [ 'node_modules/concat-map/README.markdown', 420, 438 ]
-4187 silly gunzTarPerm extractEntry node_modules/concat-map/example/map.js
-4188 silly gunzTarPerm modified mode [ 'node_modules/concat-map/example/map.js', 420, 438 ]
-4189 silly gunzTarPerm extractEntry node_modules/concat-map/test/map.js
-4190 silly gunzTarPerm modified mode [ 'node_modules/concat-map/test/map.js', 420, 438 ]
-4191 silly gunzTarPerm extractEntry node_modules/cordova-common/package.json
-4192 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/package.json', 420, 438 ]
-4193 silly gunzTarPerm extractEntry node_modules/cordova-common/.npmignore
-4194 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.npmignore', 420, 438 ]
-4195 silly gunzTarPerm extractEntry node_modules/cordova-common/README.md
-4196 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/README.md', 420, 438 ]
-4197 silly gunzTarPerm extractEntry node_modules/cordova-common/cordova-common.js
-4198 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/cordova-common.js', 420, 438 ]
-4199 silly gunzTarPerm extractEntry node_modules/cordova-common/.jscs.json
-4200 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.jscs.json', 420, 438 ]
-4201 silly gunzTarPerm extractEntry node_modules/cordova-common/.jshintignore
-4202 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.jshintignore', 420, 438 ]
-4203 silly gunzTarPerm extractEntry node_modules/cordova-common/.ratignore
-4204 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/.ratignore', 420, 438 ]
-4205 silly gunzTarPerm extractEntry node_modules/cordova-common/RELEASENOTES.md
-4206 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/RELEASENOTES.md', 420, 438 ]
-4207 silly gunzTarPerm extractEntry node_modules/cordova-common/src/FileUpdater.js
-4208 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/FileUpdater.js', 420, 438 ]
-4209 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaCheck.js
-4210 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaCheck.js', 420, 438 ]
-4211 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaLogger.js
-4212 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaLogger.js', 420, 438 ]
-4213 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ActionStack.js
-4214 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ActionStack.js', 420, 438 ]
-4215 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PlatformJson.js
-4216 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PlatformJson.js', 420, 438 ]
-4217 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PluginManager.js
-4218 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PluginManager.js', 420, 438 ]
-4219 silly gunzTarPerm extractEntry node_modules/cordova-common/src/events.js
-4220 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/events.js', 420, 438 ]
-4221 silly gunzTarPerm extractEntry node_modules/cordova-common/src/superspawn.js
-4222 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/superspawn.js', 420, 438 ]
-4223 silly gunzTarPerm extractEntry node_modules/cordova-common/src/.jshintrc
-4224 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/.jshintrc', 420, 438 ]
-4225 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PluginInfo/PluginInfo.js
-4226 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PluginInfo/PluginInfo.js',
-4226 silly gunzTarPerm   420,
-4226 silly gunzTarPerm   438 ]
-4227 silly gunzTarPerm extractEntry node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js
-4228 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js',
-4228 silly gunzTarPerm   420,
-4228 silly gunzTarPerm   438 ]
-4229 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaError/CordovaError.js
-4230 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaError/CordovaError.js',
-4230 silly gunzTarPerm   420,
-4230 silly gunzTarPerm   438 ]
-4231 silly gunzTarPerm extractEntry node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js
-4232 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js',
-4232 silly gunzTarPerm   420,
-4232 silly gunzTarPerm   438 ]
-4233 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
-4234 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js',
-4234 silly gunzTarPerm   420,
-4234 silly gunzTarPerm   438 ]
-4235 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
-4236 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/ConfigFile.js',
-4236 silly gunzTarPerm   420,
-4236 silly gunzTarPerm   438 ]
-4237 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js
-4238 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js',
-4238 silly gunzTarPerm   420,
-4238 silly gunzTarPerm   438 ]
-4239 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigChanges/munge-util.js
-4240 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigChanges/munge-util.js',
-4240 silly gunzTarPerm   420,
-4240 silly gunzTarPerm   438 ]
-4241 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigParser/README.md
-4242 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigParser/README.md',
-4242 silly gunzTarPerm   420,
-4242 silly gunzTarPerm   438 ]
-4243 silly gunzTarPerm extractEntry node_modules/cordova-common/src/ConfigParser/ConfigParser.js
-4244 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/ConfigParser/ConfigParser.js',
-4244 silly gunzTarPerm   420,
-4244 silly gunzTarPerm   438 ]
-4245 silly gunzTarPerm extractEntry node_modules/cordova-common/src/util/addProperty.js
-4246 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/util/addProperty.js',
-4246 silly gunzTarPerm   420,
-4246 silly gunzTarPerm   438 ]
-4247 silly gunzTarPerm extractEntry node_modules/cordova-common/src/util/plist-helpers.js
-4248 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/util/plist-helpers.js',
-4248 silly gunzTarPerm   420,
-4248 silly gunzTarPerm   438 ]
-4249 silly gunzTarPerm extractEntry node_modules/cordova-common/src/util/xml-helpers.js
-4250 silly gunzTarPerm modified mode [ 'node_modules/cordova-common/src/util/xml-helpers.js',
-4250 silly gunzTarPerm   420,
-4250 silly gunzTarPerm   438 ]
-4251 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/package.json
-4252 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/package.json', 420, 438 ]
-4253 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/.npmignore
-4254 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/.npmignore', 420, 438 ]
-4255 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/README.md
-4256 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/README.md', 420, 438 ]
-4257 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/index.js
-4258 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/index.js', 420, 438 ]
-4259 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/.travis.yml
-4260 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/.travis.yml', 420, 438 ]
-4261 silly gunzTarPerm extractEntry node_modules/cordova-registry-mapper/tests/test.js
-4262 silly gunzTarPerm modified mode [ 'node_modules/cordova-registry-mapper/tests/test.js',
-4262 silly gunzTarPerm   420,
-4262 silly gunzTarPerm   438 ]
-4263 silly gunzTarPerm extractEntry node_modules/elementtree/package.json
-4264 silly gunzTarPerm modified mode [ 'node_modules/elementtree/package.json', 420, 438 ]
-4265 silly gunzTarPerm extractEntry node_modules/elementtree/.npmignore
-4266 silly gunzTarPerm modified mode [ 'node_modules/elementtree/.npmignore', 420, 438 ]
-4267 silly gunzTarPerm extractEntry node_modules/elementtree/README.md
-4268 silly gunzTarPerm modified mode [ 'node_modules/elementtree/README.md', 420, 438 ]
-4269 silly gunzTarPerm extractEntry node_modules/elementtree/.travis.yml
-4270 silly gunzTarPerm modified mode [ 'node_modules/elementtree/.travis.yml', 420, 438 ]
-4271 silly gunzTarPerm extractEntry node_modules/elementtree/CHANGES.md
-4272 silly gunzTarPerm modified mode [ 'node_modules/elementtree/CHANGES.md', 420, 438 ]
-4273 silly gunzTarPerm extractEntry node_modules/elementtree/LICENSE.txt
-4274 silly gunzTarPerm modified mode [ 'node_modules/elementtree/LICENSE.txt', 420, 438 ]
-4275 silly gunzTarPerm extractEntry node_modules/elementtree/Makefile
-4276 silly gunzTarPerm modified mode [ 'node_modules/elementtree/Makefile', 493, 511 ]
-4277 silly gunzTarPerm extractEntry node_modules/elementtree/NOTICE
-4278 silly gunzTarPerm modified mode [ 'node_modules/elementtree/NOTICE', 420, 438 ]
-4279 silly gunzTarPerm extractEntry node_modules/elementtree/lib/constants.js
-4280 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/constants.js', 420, 438 ]
-4281 silly gunzTarPerm extractEntry node_modules/elementtree/lib/elementpath.js
-4282 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/elementpath.js', 420, 438 ]
-4283 silly gunzTarPerm extractEntry node_modules/elementtree/lib/elementtree.js
-4284 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/elementtree.js', 420, 438 ]
-4285 silly gunzTarPerm extractEntry node_modules/elementtree/lib/errors.js
-4286 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/errors.js', 420, 438 ]
-4287 silly gunzTarPerm extractEntry node_modules/elementtree/lib/parser.js
-4288 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/parser.js', 420, 438 ]
-4289 silly gunzTarPerm extractEntry node_modules/elementtree/lib/sprintf.js
-4290 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/sprintf.js', 420, 438 ]
-4291 silly gunzTarPerm extractEntry node_modules/elementtree/lib/treebuilder.js
-4292 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/treebuilder.js', 420, 438 ]
-4293 silly gunzTarPerm extractEntry node_modules/elementtree/lib/utils.js
-4294 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/utils.js', 420, 438 ]
-4295 silly gunzTarPerm extractEntry node_modules/elementtree/lib/parsers/index.js
-4296 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/parsers/index.js', 420, 438 ]
-4297 silly gunzTarPerm extractEntry node_modules/elementtree/lib/parsers/sax.js
-4298 silly gunzTarPerm modified mode [ 'node_modules/elementtree/lib/parsers/sax.js', 420, 438 ]
-4299 silly gunzTarPerm extractEntry node_modules/elementtree/tests/test-simple.js
-4300 silly gunzTarPerm modified mode [ 'node_modules/elementtree/tests/test-simple.js', 420, 438 ]
-4301 silly gunzTarPerm extractEntry node_modules/elementtree/tests/data/xml1.xml
-4302 silly gunzTarPerm modified mode [ 'node_modules/elementtree/tests/data/xml1.xml', 420, 438 ]
-4303 silly gunzTarPerm extractEntry node_modules/elementtree/tests/data/xml2.xml
-4304 silly gunzTarPerm modified mode [ 'node_modules/elementtree/tests/data/xml2.xml', 420, 438 ]
-4305 silly gunzTarPerm extractEntry node_modules/glob/package.json
-4306 silly gunzTarPerm modified mode [ 'node_modules/glob/package.json', 420, 438 ]
-4307 silly gunzTarPerm extractEntry node_modules/glob/README.md
-4308 silly gunzTarPerm modified mode [ 'node_modules/glob/README.md', 420, 438 ]
-4309 silly gunzTarPerm extractEntry node_modules/glob/LICENSE
-4310 silly gunzTarPerm modified mode [ 'node_modules/glob/LICENSE', 420, 438 ]
-4311 silly gunzTarPerm extractEntry node_modules/glob/common.js
-4312 silly gunzTarPerm modified mode [ 'node_modules/glob/common.js', 420, 438 ]
-4313 silly gunzTarPerm extractEntry node_modules/glob/glob.js
-4314 silly gunzTarPerm modified mode [ 'node_modules/glob/glob.js', 420, 438 ]
-4315 silly gunzTarPerm extractEntry node_modules/glob/sync.js
-4316 silly gunzTarPerm modified mode [ 'node_modules/glob/sync.js', 420, 438 ]
-4317 silly gunzTarPerm extractEntry node_modules/inflight/package.json
-4318 silly gunzTarPerm modified mode [ 'node_modules/inflight/package.json', 420, 438 ]
-4319 silly gunzTarPerm extractEntry node_modules/inflight/README.md
-4320 silly gunzTarPerm modified mode [ 'node_modules/inflight/README.md', 420, 438 ]
-4321 silly gunzTarPerm extractEntry node_modules/inflight/LICENSE
-4322 silly gunzTarPerm modified mode [ 'node_modules/inflight/LICENSE', 420, 438 ]
-4323 silly gunzTarPerm extractEntry node_modules/inflight/inflight.js
-4324 silly gunzTarPerm modified mode [ 'node_modules/inflight/inflight.js', 420, 438 ]
-4325 silly gunzTarPerm extractEntry node_modules/inherits/package.json
-4326 silly gunzTarPerm modified mode [ 'node_modules/inherits/package.json', 420, 438 ]
-4327 silly gunzTarPerm extractEntry node_modules/inherits/README.md
-4328 silly gunzTarPerm modified mode [ 'node_modules/inherits/README.md', 420, 438 ]
-4329 silly gunzTarPerm extractEntry node_modules/inherits/LICENSE
-4330 silly gunzTarPerm modified mode [ 'node_modules/inherits/LICENSE', 420, 438 ]
-4331 silly gunzTarPerm extractEntry node_modules/inherits/inherits.js
-4332 silly gunzTarPerm modified mode [ 'node_modules/inherits/inherits.js', 420, 438 ]
-4333 silly gunzTarPerm extractEntry node_modules/inherits/inherits_browser.js
-4334 silly gunzTarPerm modified mode [ 'node_modules/inherits/inherits_browser.js', 420, 438 ]
-4335 silly gunzTarPerm extractEntry node_modules/ios-sim/package.json
-4336 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/package.json', 420, 438 ]
-4337 silly gunzTarPerm extractEntry node_modules/ios-sim/.npmignore
-4338 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.npmignore', 420, 438 ]
-4339 silly gunzTarPerm extractEntry node_modules/ios-sim/README.md
-4340 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/README.md', 420, 438 ]
-4341 silly gunzTarPerm extractEntry node_modules/ios-sim/LICENSE
-4342 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/LICENSE', 420, 438 ]
-4343 silly gunzTarPerm extractEntry node_modules/ios-sim/ios-sim.js
-4344 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/ios-sim.js', 420, 438 ]
-4345 silly gunzTarPerm extractEntry node_modules/ios-sim/bin/ios-sim
-4346 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/bin/ios-sim', 493, 511 ]
-4347 silly gunzTarPerm extractEntry node_modules/ios-sim/bin/ios-sim.cmd
-4348 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/bin/ios-sim.cmd', 493, 511 ]
-4349 silly gunzTarPerm extractEntry node_modules/ios-sim/appveyor.yml
-4350 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/appveyor.yml', 420, 438 ]
-4351 silly gunzTarPerm extractEntry node_modules/ios-sim/.jscsrc
-4352 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.jscsrc', 420, 438 ]
-4353 silly gunzTarPerm extractEntry node_modules/ios-sim/doc/help.txt
-4354 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/doc/help.txt', 420, 438 ]
-4355 silly gunzTarPerm extractEntry node_modules/ios-sim/.github/CONTRIBUTING.md
-4356 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.github/CONTRIBUTING.md', 420, 438 ]
-4357 silly gunzTarPerm extractEntry node_modules/ios-sim/.github/ISSUE_TEMPLATE.md
-4358 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.github/ISSUE_TEMPLATE.md', 420, 438 ]
-4359 silly gunzTarPerm extractEntry node_modules/ios-sim/spec/cli.spec.js
-4360 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/spec/cli.spec.js', 420, 438 ]
-4361 silly gunzTarPerm extractEntry node_modules/ios-sim/spec/commands.spec.js
-4362 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/spec/commands.spec.js', 420, 438 ]
-4363 silly gunzTarPerm extractEntry node_modules/ios-sim/spec/lib.spec.js
-4364 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/spec/lib.spec.js', 420, 438 ]
-4365 silly gunzTarPerm extractEntry node_modules/ios-sim/.travis.yml
-4366 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/.travis.yml', 420, 438 ]
-4367 silly gunzTarPerm extractEntry node_modules/ios-sim/src/cli.js
-4368 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/cli.js', 420, 438 ]
-4369 silly gunzTarPerm extractEntry node_modules/ios-sim/src/commands.js
-4370 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/commands.js', 420, 438 ]
-4371 silly gunzTarPerm extractEntry node_modules/ios-sim/src/help.js
-4372 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/help.js', 420, 438 ]
-4373 silly gunzTarPerm extractEntry node_modules/ios-sim/src/lib.js
-4374 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/src/lib.js', 420, 438 ]
-4375 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/package.json
-4376 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/package.json',
-4376 silly gunzTarPerm   420,
-4376 silly gunzTarPerm   438 ]
-4377 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/.npmignore
-4378 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/.npmignore',
-4378 silly gunzTarPerm   420,
-4378 silly gunzTarPerm   438 ]
-4379 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/README.md
-4380 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/README.md',
-4380 silly gunzTarPerm   420,
-4380 silly gunzTarPerm   438 ]
-4381 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/bplistParser.js
-4382 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/bplistParser.js',
-4382 silly gunzTarPerm   420,
-4382 silly gunzTarPerm   438 ]
-4383 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/parseTest.js
-4384 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/parseTest.js',
-4384 silly gunzTarPerm   420,
-4384 silly gunzTarPerm   438 ]
-4385 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/airplay.bplist
-4386 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/airplay.bplist',
-4386 silly gunzTarPerm   420,
-4386 silly gunzTarPerm   438 ]
-4387 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/iTunes-small.bplist
-4388 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/iTunes-small.bplist',
-4388 silly gunzTarPerm   420,
-4388 silly gunzTarPerm   438 ]
-4389 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/sample1.bplist
-4390 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/sample1.bplist',
-4390 silly gunzTarPerm   420,
-4390 silly gunzTarPerm   438 ]
-4391 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/sample2.bplist
-4392 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/sample2.bplist',
-4392 silly gunzTarPerm   420,
-4392 silly gunzTarPerm   438 ]
-4393 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/uid.bplist
-4394 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/uid.bplist',
-4394 silly gunzTarPerm   420,
-4394 silly gunzTarPerm   438 ]
-4395 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/bplist-parser/test/utf16.bplist
-4396 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/bplist-parser/test/utf16.bplist',
-4396 silly gunzTarPerm   420,
-4396 silly gunzTarPerm   438 ]
-4397 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/package.json
-4398 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/package.json',
-4398 silly gunzTarPerm   420,
-4398 silly gunzTarPerm   438 ]
-4399 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/.npmignore
-4400 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/.npmignore', 420, 438 ]
-4401 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/README.md
-4402 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/README.md', 420, 438 ]
-4403 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/LICENSE
-4404 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/LICENSE', 420, 438 ]
-4405 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/bin/nopt.js
-4406 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/bin/nopt.js',
-4406 silly gunzTarPerm   493,
-4406 silly gunzTarPerm   511 ]
-4407 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/examples/my-program.js
-4408 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/examples/my-program.js',
-4408 silly gunzTarPerm   493,
-4408 silly gunzTarPerm   511 ]
-4409 silly gunzTarPerm extractEntry node_modules/ios-sim/node_modules/nopt/lib/nopt.js
-4410 silly gunzTarPerm modified mode [ 'node_modules/ios-sim/node_modules/nopt/lib/nopt.js',
-4410 silly gunzTarPerm   420,
-4410 silly gunzTarPerm   438 ]
-4411 silly gunzTarPerm extractEntry node_modules/lodash/package.json
-4412 silly gunzTarPerm modified mode [ 'node_modules/lodash/package.json', 420, 438 ]
-4413 silly gunzTarPerm extractEntry node_modules/lodash/README.md
-4414 silly gunzTarPerm modified mode [ 'node_modules/lodash/README.md', 420, 438 ]
-4415 silly gunzTarPerm extractEntry node_modules/lodash/LICENSE
-4416 silly gunzTarPerm modified mode [ 'node_modules/lodash/LICENSE', 420, 438 ]
-4417 silly gunzTarPerm extractEntry node_modules/lodash/chain.js
-4418 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain.js', 420, 438 ]
-4419 silly gunzTarPerm extractEntry node_modules/lodash/string.js
-4420 silly gunzTarPerm modified mode [ 'node_modules/lodash/string.js', 420, 438 ]
-4421 silly gunzTarPerm extractEntry node_modules/lodash/collection.js
-4422 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection.js', 420, 438 ]
-4423 silly gunzTarPerm extractEntry node_modules/lodash/array.js
-4424 silly gunzTarPerm modified mode [ 'node_modules/lodash/array.js', 420, 438 ]
-4425 silly gunzTarPerm extractEntry node_modules/lodash/date.js
-4426 silly gunzTarPerm modified mode [ 'node_modules/lodash/date.js', 420, 438 ]
-4427 silly gunzTarPerm extractEntry node_modules/lodash/number.js
-4428 silly gunzTarPerm modified mode [ 'node_modules/lodash/number.js', 420, 438 ]
-4429 silly gunzTarPerm extractEntry node_modules/lodash/function.js
-4430 silly gunzTarPerm modified mode [ 'node_modules/lodash/function.js', 420, 438 ]
-4431 silly gunzTarPerm extractEntry node_modules/lodash/index.js
-4432 silly gunzTarPerm modified mode [ 'node_modules/lodash/index.js', 420, 438 ]
-4433 silly gunzTarPerm extractEntry node_modules/lodash/math.js
-4434 silly gunzTarPerm modified mode [ 'node_modules/lodash/math.js', 420, 438 ]
-4435 silly gunzTarPerm extractEntry node_modules/lodash/support.js
-4436 silly gunzTarPerm modified mode [ 'node_modules/lodash/support.js', 420, 438 ]
-4437 silly gunzTarPerm extractEntry node_modules/lodash/lang.js
-4438 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang.js', 420, 438 ]
-4439 silly gunzTarPerm extractEntry node_modules/lodash/object.js
-4440 silly gunzTarPerm modified mode [ 'node_modules/lodash/object.js', 420, 438 ]
-4441 silly gunzTarPerm extractEntry node_modules/lodash/utility.js
-4442 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility.js', 420, 438 ]
-4443 silly gunzTarPerm extractEntry node_modules/lodash/collection/all.js
-4444 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/all.js', 420, 438 ]
-4445 silly gunzTarPerm extractEntry node_modules/lodash/collection/forEachRight.js
-4446 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/forEachRight.js', 420, 438 ]
-4447 silly gunzTarPerm extractEntry node_modules/lodash/collection/groupBy.js
-4448 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/groupBy.js', 420, 438 ]
-4449 silly gunzTarPerm extractEntry node_modules/lodash/collection/include.js
-4450 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/include.js', 420, 438 ]
-4451 silly gunzTarPerm extractEntry node_modules/lodash/collection/includes.js
-4452 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/includes.js', 420, 438 ]
-4453 silly gunzTarPerm extractEntry node_modules/lodash/collection/forEach.js
-4454 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/forEach.js', 420, 438 ]
-4455 silly gunzTarPerm extractEntry node_modules/lodash/collection/inject.js
-4456 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/inject.js', 420, 438 ]
-4457 silly gunzTarPerm extractEntry node_modules/lodash/collection/invoke.js
-4458 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/invoke.js', 420, 438 ]
-4459 silly gunzTarPerm extractEntry node_modules/lodash/collection/map.js
-4460 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/map.js', 420, 438 ]
-4461 silly gunzTarPerm extractEntry node_modules/lodash/collection/max.js
-4462 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/max.js', 420, 438 ]
-4463 silly gunzTarPerm extractEntry node_modules/lodash/collection/min.js
-4464 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/min.js', 420, 438 ]
-4465 silly gunzTarPerm extractEntry node_modules/lodash/collection/foldr.js
-4466 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/foldr.js', 420, 438 ]
-4467 silly gunzTarPerm extractEntry node_modules/lodash/collection/partition.js
-4468 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/partition.js', 420, 438 ]
-4469 silly gunzTarPerm extractEntry node_modules/lodash/collection/foldl.js
-4470 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/foldl.js', 420, 438 ]
-4471 silly gunzTarPerm extractEntry node_modules/lodash/collection/pluck.js
-4472 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/pluck.js', 420, 438 ]
-4473 silly gunzTarPerm extractEntry node_modules/lodash/collection/findWhere.js
-4474 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/findWhere.js', 420, 438 ]
-4475 silly gunzTarPerm extractEntry node_modules/lodash/collection/reduce.js
-4476 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/reduce.js', 420, 438 ]
-4477 silly gunzTarPerm extractEntry node_modules/lodash/collection/findLast.js
-4478 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/findLast.js', 420, 438 ]
-4479 silly gunzTarPerm extractEntry node_modules/lodash/collection/reduceRight.js
-4480 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/reduceRight.js', 420, 438 ]
-4481 silly gunzTarPerm extractEntry node_modules/lodash/collection/find.js
-4482 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/find.js', 420, 438 ]
-4483 silly gunzTarPerm extractEntry node_modules/lodash/collection/reject.js
-4484 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/reject.js', 420, 438 ]
-4485 silly gunzTarPerm extractEntry node_modules/lodash/collection/filter.js
-4486 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/filter.js', 420, 438 ]
-4487 silly gunzTarPerm extractEntry node_modules/lodash/collection/sample.js
-4488 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sample.js', 420, 438 ]
-4489 silly gunzTarPerm extractEntry node_modules/lodash/collection/every.js
-4490 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/every.js', 420, 438 ]
-4491 silly gunzTarPerm extractEntry node_modules/lodash/collection/select.js
-4492 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/select.js', 420, 438 ]
-4493 silly gunzTarPerm extractEntry node_modules/lodash/collection/eachRight.js
-4494 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/eachRight.js', 420, 438 ]
-4495 silly gunzTarPerm extractEntry node_modules/lodash/collection/shuffle.js
-4496 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/shuffle.js', 420, 438 ]
-4497 silly gunzTarPerm extractEntry node_modules/lodash/collection/each.js
-4498 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/each.js', 420, 438 ]
-4499 silly gunzTarPerm extractEntry node_modules/lodash/collection/size.js
-4500 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/size.js', 420, 438 ]
-4501 silly gunzTarPerm extractEntry node_modules/lodash/collection/detect.js
-4502 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/detect.js', 420, 438 ]
-4503 silly gunzTarPerm extractEntry node_modules/lodash/collection/some.js
-4504 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/some.js', 420, 438 ]
-4505 silly gunzTarPerm extractEntry node_modules/lodash/collection/countBy.js
-4506 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/countBy.js', 420, 438 ]
-4507 silly gunzTarPerm extractEntry node_modules/lodash/collection/sortBy.js
-4508 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sortBy.js', 420, 438 ]
-4509 silly gunzTarPerm extractEntry node_modules/lodash/collection/contains.js
-4510 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/contains.js', 420, 438 ]
-4511 silly gunzTarPerm extractEntry node_modules/lodash/collection/sortByAll.js
-4512 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sortByAll.js', 420, 438 ]
-4513 silly gunzTarPerm extractEntry node_modules/lodash/collection/collect.js
-4514 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/collect.js', 420, 438 ]
-4515 silly gunzTarPerm extractEntry node_modules/lodash/collection/sortByOrder.js
-4516 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sortByOrder.js', 420, 438 ]
-4517 silly gunzTarPerm extractEntry node_modules/lodash/collection/at.js
-4518 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/at.js', 420, 438 ]
-4519 silly gunzTarPerm extractEntry node_modules/lodash/collection/sum.js
-4520 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/sum.js', 420, 438 ]
-4521 silly gunzTarPerm extractEntry node_modules/lodash/collection/any.js
-4522 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/any.js', 420, 438 ]
-4523 silly gunzTarPerm extractEntry node_modules/lodash/collection/where.js
-4524 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/where.js', 420, 438 ]
-4525 silly gunzTarPerm extractEntry node_modules/lodash/collection/indexBy.js
-4526 silly gunzTarPerm modified mode [ 'node_modules/lodash/collection/indexBy.js', 420, 438 ]
-4527 silly gunzTarPerm extractEntry node_modules/lodash/math/add.js
-4528 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/add.js', 420, 438 ]
-4529 silly gunzTarPerm extractEntry node_modules/lodash/math/ceil.js
-4530 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/ceil.js', 420, 438 ]
-4531 silly gunzTarPerm extractEntry node_modules/lodash/math/floor.js
-4532 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/floor.js', 420, 438 ]
-4533 silly gunzTarPerm extractEntry node_modules/lodash/math/max.js
-4534 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/max.js', 420, 438 ]
-4535 silly gunzTarPerm extractEntry node_modules/lodash/math/min.js
-4536 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/min.js', 420, 438 ]
-4537 silly gunzTarPerm extractEntry node_modules/lodash/math/round.js
-4538 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/round.js', 420, 438 ]
-4539 silly gunzTarPerm extractEntry node_modules/lodash/math/sum.js
-4540 silly gunzTarPerm modified mode [ 'node_modules/lodash/math/sum.js', 420, 438 ]
-4541 silly gunzTarPerm extractEntry node_modules/lodash/number/inRange.js
-4542 silly gunzTarPerm modified mode [ 'node_modules/lodash/number/inRange.js', 420, 438 ]
-4543 silly gunzTarPerm extractEntry node_modules/lodash/number/random.js
-4544 silly gunzTarPerm modified mode [ 'node_modules/lodash/number/random.js', 420, 438 ]
-4545 silly gunzTarPerm extractEntry node_modules/lodash/function/after.js
-4546 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/after.js', 420, 438 ]
-4547 silly gunzTarPerm extractEntry node_modules/lodash/function/curryRight.js
-4548 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/curryRight.js', 420, 438 ]
-4549 silly gunzTarPerm extractEntry node_modules/lodash/function/debounce.js
-4550 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/debounce.js', 420, 438 ]
-4551 silly gunzTarPerm extractEntry node_modules/lodash/function/defer.js
-4552 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/defer.js', 420, 438 ]
-4553 silly gunzTarPerm extractEntry node_modules/lodash/function/delay.js
-4554 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/delay.js', 420, 438 ]
-4555 silly gunzTarPerm extractEntry node_modules/lodash/function/curry.js
-4556 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/curry.js', 420, 438 ]
-4557 silly gunzTarPerm extractEntry node_modules/lodash/function/flowRight.js
-4558 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/flowRight.js', 420, 438 ]
-4559 silly gunzTarPerm extractEntry node_modules/lodash/function/memoize.js
-4560 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/memoize.js', 420, 438 ]
-4561 silly gunzTarPerm extractEntry node_modules/lodash/function/modArgs.js
-4562 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/modArgs.js', 420, 438 ]
-4563 silly gunzTarPerm extractEntry node_modules/lodash/function/negate.js
-4564 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/negate.js', 420, 438 ]
-4565 silly gunzTarPerm extractEntry node_modules/lodash/function/once.js
-4566 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/once.js', 420, 438 ]
-4567 silly gunzTarPerm extractEntry node_modules/lodash/function/compose.js
-4568 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/compose.js', 420, 438 ]
-4569 silly gunzTarPerm extractEntry node_modules/lodash/function/partial.js
-4570 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/partial.js', 420, 438 ]
-4571 silly gunzTarPerm extractEntry node_modules/lodash/function/bindKey.js
-4572 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/bindKey.js', 420, 438 ]
-4573 silly gunzTarPerm extractEntry node_modules/lodash/function/partialRight.js
-4574 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/partialRight.js', 420, 438 ]
-4575 silly gunzTarPerm extractEntry node_modules/lodash/function/bindAll.js
-4576 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/bindAll.js', 420, 438 ]
-4577 silly gunzTarPerm extractEntry node_modules/lodash/function/rearg.js
-4578 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/rearg.js', 420, 438 ]
-4579 silly gunzTarPerm extractEntry node_modules/lodash/function/bind.js
-4580 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/bind.js', 420, 438 ]
-4581 silly gunzTarPerm extractEntry node_modules/lodash/function/restParam.js
-4582 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/restParam.js', 420, 438 ]
-4583 silly gunzTarPerm extractEntry node_modules/lodash/function/before.js
-4584 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/before.js', 420, 438 ]
-4585 silly gunzTarPerm extractEntry node_modules/lodash/function/spread.js
-4586 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/spread.js', 420, 438 ]
-4587 silly gunzTarPerm extractEntry node_modules/lodash/function/backflow.js
-4588 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/backflow.js', 420, 438 ]
-4589 silly gunzTarPerm extractEntry node_modules/lodash/function/throttle.js
-4590 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/throttle.js', 420, 438 ]
-4591 silly gunzTarPerm extractEntry node_modules/lodash/function/ary.js
-4592 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/ary.js', 420, 438 ]
-4593 silly gunzTarPerm extractEntry node_modules/lodash/function/wrap.js
-4594 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/wrap.js', 420, 438 ]
-4595 silly gunzTarPerm extractEntry node_modules/lodash/function/flow.js
-4596 silly gunzTarPerm modified mode [ 'node_modules/lodash/function/flow.js', 420, 438 ]
-4597 silly gunzTarPerm extractEntry node_modules/lodash/object/assign.js
-4598 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/assign.js', 420, 438 ]
-4599 silly gunzTarPerm extractEntry node_modules/lodash/object/functions.js
-4600 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/functions.js', 420, 438 ]
-4601 silly gunzTarPerm extractEntry node_modules/lodash/object/get.js
-4602 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/get.js', 420, 438 ]
-4603 silly gunzTarPerm extractEntry node_modules/lodash/object/has.js
-4604 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/has.js', 420, 438 ]
-4605 silly gunzTarPerm extractEntry node_modules/lodash/object/forOwnRight.js
-4606 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forOwnRight.js', 420, 438 ]
-4607 silly gunzTarPerm extractEntry node_modules/lodash/object/keys.js
-4608 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/keys.js', 420, 438 ]
-4609 silly gunzTarPerm extractEntry node_modules/lodash/object/keysIn.js
-4610 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/keysIn.js', 420, 438 ]
-4611 silly gunzTarPerm extractEntry node_modules/lodash/object/mapKeys.js
-4612 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/mapKeys.js', 420, 438 ]
-4613 silly gunzTarPerm extractEntry node_modules/lodash/object/mapValues.js
-4614 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/mapValues.js', 420, 438 ]
-4615 silly gunzTarPerm extractEntry node_modules/lodash/object/merge.js
-4616 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/merge.js', 420, 438 ]
-4617 silly gunzTarPerm extractEntry node_modules/lodash/object/forOwn.js
-4618 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forOwn.js', 420, 438 ]
-4619 silly gunzTarPerm extractEntry node_modules/lodash/object/methods.js
-4620 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/methods.js', 420, 438 ]
-4621 silly gunzTarPerm extractEntry node_modules/lodash/object/forInRight.js
-4622 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forInRight.js', 420, 438 ]
-4623 silly gunzTarPerm extractEntry node_modules/lodash/object/omit.js
-4624 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/omit.js', 420, 438 ]
-4625 silly gunzTarPerm extractEntry node_modules/lodash/object/forIn.js
-4626 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/forIn.js', 420, 438 ]
-4627 silly gunzTarPerm extractEntry node_modules/lodash/object/pairs.js
-4628 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/pairs.js', 420, 438 ]
-4629 silly gunzTarPerm extractEntry node_modules/lodash/object/findLastKey.js
-4630 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/findLastKey.js', 420, 438 ]
-4631 silly gunzTarPerm extractEntry node_modules/lodash/object/pick.js
-4632 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/pick.js', 420, 438 ]
-4633 silly gunzTarPerm extractEntry node_modules/lodash/object/findKey.js
-4634 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/findKey.js', 420, 438 ]
-4635 silly gunzTarPerm extractEntry node_modules/lodash/object/result.js
-4636 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/result.js', 420, 438 ]
-4637 silly gunzTarPerm extractEntry node_modules/lodash/object/extend.js
-4638 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/extend.js', 420, 438 ]
-4639 silly gunzTarPerm extractEntry node_modules/lodash/object/set.js
-4640 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/set.js', 420, 438 ]
-4641 silly gunzTarPerm extractEntry node_modules/lodash/object/defaultsDeep.js
-4642 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/defaultsDeep.js', 420, 438 ]
-4643 silly gunzTarPerm extractEntry node_modules/lodash/object/transform.js
-4644 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/transform.js', 420, 438 ]
-4645 silly gunzTarPerm extractEntry node_modules/lodash/object/defaults.js
-4646 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/defaults.js', 420, 438 ]
-4647 silly gunzTarPerm extractEntry node_modules/lodash/object/values.js
-4648 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/values.js', 420, 438 ]
-4649 silly gunzTarPerm extractEntry node_modules/lodash/object/create.js
-4650 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/create.js', 420, 438 ]
-4651 silly gunzTarPerm extractEntry node_modules/lodash/object/valuesIn.js
-4652 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/valuesIn.js', 420, 438 ]
-4653 silly gunzTarPerm extractEntry node_modules/lodash/object/invert.js
-4654 silly gunzTarPerm modified mode [ 'node_modules/lodash/object/invert.js', 420, 438 ]
-4655 silly gunzTarPerm extractEntry node_modules/lodash/date/now.js
-4656 silly gunzTarPerm modified mode [ 'node_modules/lodash/date/now.js', 420, 438 ]
-4657 silly gunzTarPerm extractEntry node_modules/lodash/internal/LazyWrapper.js
-4658 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/LazyWrapper.js', 420, 438 ]
-4659 silly gunzTarPerm extractEntry node_modules/lodash/internal/compareAscending.js
-4660 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/compareAscending.js', 420, 438 ]
-4661 silly gunzTarPerm extractEntry node_modules/lodash/internal/compareMultiple.js
-4662 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/compareMultiple.js', 420, 438 ]
-4663 silly gunzTarPerm extractEntry node_modules/lodash/internal/composeArgs.js
-4664 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/composeArgs.js', 420, 438 ]
-4665 silly gunzTarPerm extractEntry node_modules/lodash/internal/charsRightIndex.js
-4666 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/charsRightIndex.js', 420, 438 ]
-4667 silly gunzTarPerm extractEntry node_modules/lodash/internal/createAggregator.js
-4668 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createAggregator.js', 420, 438 ]
-4669 silly gunzTarPerm extractEntry node_modules/lodash/internal/createAssigner.js
-4670 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createAssigner.js', 420, 438 ]
-4671 silly gunzTarPerm extractEntry node_modules/lodash/internal/createBaseEach.js
-4672 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createBaseEach.js', 420, 438 ]
-4673 silly gunzTarPerm extractEntry node_modules/lodash/internal/createBaseFor.js
-4674 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createBaseFor.js', 420, 438 ]
-4675 silly gunzTarPerm extractEntry node_modules/lodash/internal/createBindWrapper.js
-4676 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createBindWrapper.js', 420, 438 ]
-4677 silly gunzTarPerm extractEntry node_modules/lodash/internal/charsLeftIndex.js
-4678 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/charsLeftIndex.js', 420, 438 ]
-4679 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCache.js
-4680 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCache.js', 420, 438 ]
-4681 silly gunzTarPerm extractEntry node_modules/lodash/internal/cachePush.js
-4682 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/cachePush.js', 420, 438 ]
-4683 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCompounder.js
-4684 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCompounder.js', 420, 438 ]
-4685 silly gunzTarPerm extractEntry node_modules/lodash/internal/cacheIndexOf.js
-4686 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/cacheIndexOf.js', 420, 438 ]
-4687 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCtorWrapper.js
-4688 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCtorWrapper.js', 420, 438 ]
-4689 silly gunzTarPerm extractEntry node_modules/lodash/internal/bufferClone.js
-4690 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/bufferClone.js', 420, 438 ]
-4691 silly gunzTarPerm extractEntry node_modules/lodash/internal/createCurry.js
-4692 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createCurry.js', 420, 438 ]
-4693 silly gunzTarPerm extractEntry node_modules/lodash/internal/bindCallback.js
-4694 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/bindCallback.js', 420, 438 ]
-4695 silly gunzTarPerm extractEntry node_modules/lodash/internal/createDefaults.js
-4696 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createDefaults.js', 420, 438 ]
-4697 silly gunzTarPerm extractEntry node_modules/lodash/internal/binaryIndexBy.js
-4698 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/binaryIndexBy.js', 420, 438 ]
-4699 silly gunzTarPerm extractEntry node_modules/lodash/internal/createExtremum.js
-4700 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createExtremum.js', 420, 438 ]
-4701 silly gunzTarPerm extractEntry node_modules/lodash/internal/binaryIndex.js
-4702 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/binaryIndex.js', 420, 438 ]
-4703 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFind.js
-4704 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFind.js', 420, 438 ]
-4705 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseWrapperValue.js
-4706 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseWrapperValue.js', 420, 438 ]
-4707 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFindIndex.js
-4708 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFindIndex.js', 420, 438 ]
-4709 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseWhile.js
-4710 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseWhile.js', 420, 438 ]
-4711 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFindKey.js
-4712 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFindKey.js', 420, 438 ]
-4713 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseValues.js
-4714 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseValues.js', 420, 438 ]
-4715 silly gunzTarPerm extractEntry node_modules/lodash/internal/createFlow.js
-4716 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createFlow.js', 420, 438 ]
-4717 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseUniq.js
-4718 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseUniq.js', 420, 438 ]
-4719 silly gunzTarPerm extractEntry node_modules/lodash/internal/createForEach.js
-4720 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createForEach.js', 420, 438 ]
-4721 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseToString.js
-4722 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseToString.js', 420, 438 ]
-4723 silly gunzTarPerm extractEntry node_modules/lodash/internal/createForIn.js
-4724 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createForIn.js', 420, 438 ]
-4725 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSum.js
-4726 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSum.js', 420, 438 ]
-4727 silly gunzTarPerm extractEntry node_modules/lodash/internal/createForOwn.js
-4728 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createForOwn.js', 420, 438 ]
-4729 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSortByOrder.js
-4730 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSortByOrder.js', 420, 438 ]
-4731 silly gunzTarPerm extractEntry node_modules/lodash/internal/createHybridWrapper.js
-4732 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createHybridWrapper.js',
-4732 silly gunzTarPerm   420,
-4732 silly gunzTarPerm   438 ]
-4733 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSortBy.js
-4734 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSortBy.js', 420, 438 ]
-4735 silly gunzTarPerm extractEntry node_modules/lodash/internal/createObjectMapper.js
-4736 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createObjectMapper.js',
-4736 silly gunzTarPerm   420,
-4736 silly gunzTarPerm   438 ]
-4737 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSome.js
-4738 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSome.js', 420, 438 ]
-4739 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPadDir.js
-4740 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPadDir.js', 420, 438 ]
-4741 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSlice.js
-4742 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSlice.js', 420, 438 ]
-4743 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPadding.js
-4744 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPadding.js', 420, 438 ]
-4745 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseSetData.js
-4746 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseSetData.js', 420, 438 ]
-4747 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPartial.js
-4748 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPartial.js', 420, 438 ]
-4749 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseReduce.js
-4750 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseReduce.js', 420, 438 ]
-4751 silly gunzTarPerm extractEntry node_modules/lodash/internal/createPartialWrapper.js
-4752 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createPartialWrapper.js',
-4752 silly gunzTarPerm   420,
-4752 silly gunzTarPerm   438 ]
-4753 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseRandom.js
-4754 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseRandom.js', 420, 438 ]
-4755 silly gunzTarPerm extractEntry node_modules/lodash/internal/createReduce.js
-4756 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createReduce.js', 420, 438 ]
-4757 silly gunzTarPerm extractEntry node_modules/lodash/internal/basePullAt.js
-4758 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/basePullAt.js', 420, 438 ]
-4759 silly gunzTarPerm extractEntry node_modules/lodash/internal/createRound.js
-4760 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createRound.js', 420, 438 ]
-4761 silly gunzTarPerm extractEntry node_modules/lodash/internal/basePropertyDeep.js
-4762 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/basePropertyDeep.js', 420, 438 ]
-4763 silly gunzTarPerm extractEntry node_modules/lodash/internal/createSortedIndex.js
-4764 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createSortedIndex.js', 420, 438 ]
-4765 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseProperty.js
-4766 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseProperty.js', 420, 438 ]
-4767 silly gunzTarPerm extractEntry node_modules/lodash/internal/createWrapper.js
-4768 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/createWrapper.js', 420, 438 ]
-4769 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMergeDeep.js
-4770 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMergeDeep.js', 420, 438 ]
-4771 silly gunzTarPerm extractEntry node_modules/lodash/internal/deburrLetter.js
-4772 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/deburrLetter.js', 420, 438 ]
-4773 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMerge.js
-4774 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMerge.js', 420, 438 ]
-4775 silly gunzTarPerm extractEntry node_modules/lodash/internal/equalArrays.js
-4776 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/equalArrays.js', 420, 438 ]
-4777 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMatchesProperty.js
-4778 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMatchesProperty.js',
-4778 silly gunzTarPerm   420,
-4778 silly gunzTarPerm   438 ]
-4779 silly gunzTarPerm extractEntry node_modules/lodash/internal/equalByTag.js
-4780 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/equalByTag.js', 420, 438 ]
-4781 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMatches.js
-4782 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMatches.js', 420, 438 ]
-4783 silly gunzTarPerm extractEntry node_modules/lodash/internal/equalObjects.js
-4784 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/equalObjects.js', 420, 438 ]
-4785 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseMap.js
-4786 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseMap.js', 420, 438 ]
-4787 silly gunzTarPerm extractEntry node_modules/lodash/internal/escapeHtmlChar.js
-4788 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/escapeHtmlChar.js', 420, 438 ]
-4789 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseLodash.js
-4790 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseLodash.js', 420, 438 ]
-4791 silly gunzTarPerm extractEntry node_modules/lodash/internal/escapeRegExpChar.js
-4792 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/escapeRegExpChar.js', 420, 438 ]
-4793 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsMatch.js
-4794 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsMatch.js', 420, 438 ]
-4795 silly gunzTarPerm extractEntry node_modules/lodash/internal/escapeStringChar.js
-4796 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/escapeStringChar.js', 420, 438 ]
-4797 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsFunction.js
-4798 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsFunction.js', 420, 438 ]
-4799 silly gunzTarPerm extractEntry node_modules/lodash/internal/getData.js
-4800 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getData.js', 420, 438 ]
-4801 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsEqualDeep.js
-4802 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsEqualDeep.js', 420, 438 ]
-4803 silly gunzTarPerm extractEntry node_modules/lodash/internal/getFuncName.js
-4804 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getFuncName.js', 420, 438 ]
-4805 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIsEqual.js
-4806 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIsEqual.js', 420, 438 ]
-4807 silly gunzTarPerm extractEntry node_modules/lodash/internal/getLength.js
-4808 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getLength.js', 420, 438 ]
-4809 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseIndexOf.js
-4810 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseIndexOf.js', 420, 438 ]
-4811 silly gunzTarPerm extractEntry node_modules/lodash/internal/getMatchData.js
-4812 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getMatchData.js', 420, 438 ]
-4813 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseGet.js
-4814 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseGet.js', 420, 438 ]
-4815 silly gunzTarPerm extractEntry node_modules/lodash/internal/getNative.js
-4816 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getNative.js', 420, 438 ]
-4817 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFunctions.js
-4818 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFunctions.js', 420, 438 ]
-4819 silly gunzTarPerm extractEntry node_modules/lodash/internal/getView.js
-4820 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/getView.js', 420, 438 ]
-4821 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForRight.js
-4822 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForRight.js', 420, 438 ]
-4823 silly gunzTarPerm extractEntry node_modules/lodash/internal/indexOfNaN.js
-4824 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/indexOfNaN.js', 420, 438 ]
-4825 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForOwnRight.js
-4826 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForOwnRight.js', 420, 438 ]
-4827 silly gunzTarPerm extractEntry node_modules/lodash/internal/initCloneArray.js
-4828 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/initCloneArray.js', 420, 438 ]
-4829 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForOwn.js
-4830 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForOwn.js', 420, 438 ]
-4831 silly gunzTarPerm extractEntry node_modules/lodash/internal/initCloneByTag.js
-4832 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/initCloneByTag.js', 420, 438 ]
-4833 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseForIn.js
-4834 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseForIn.js', 420, 438 ]
-4835 silly gunzTarPerm extractEntry node_modules/lodash/internal/initCloneObject.js
-4836 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/initCloneObject.js', 420, 438 ]
-4837 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFor.js
-4838 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFor.js', 420, 438 ]
-4839 silly gunzTarPerm extractEntry node_modules/lodash/internal/invokePath.js
-4840 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/invokePath.js', 420, 438 ]
-4841 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFlatten.js
-4842 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFlatten.js', 420, 438 ]
-4843 silly gunzTarPerm extractEntry node_modules/lodash/internal/isArrayLike.js
-4844 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isArrayLike.js', 420, 438 ]
-4845 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFindIndex.js
-4846 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFindIndex.js', 420, 438 ]
-4847 silly gunzTarPerm extractEntry node_modules/lodash/internal/isIndex.js
-4848 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isIndex.js', 420, 438 ]
-4849 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFind.js
-4850 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFind.js', 420, 438 ]
-4851 silly gunzTarPerm extractEntry node_modules/lodash/internal/isIterateeCall.js
-4852 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isIterateeCall.js', 420, 438 ]
-4853 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFilter.js
-4854 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFilter.js', 420, 438 ]
-4855 silly gunzTarPerm extractEntry node_modules/lodash/internal/isKey.js
-4856 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isKey.js', 420, 438 ]
-4857 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseFill.js
-4858 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseFill.js', 420, 438 ]
-4859 silly gunzTarPerm extractEntry node_modules/lodash/internal/isLaziable.js
-4860 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isLaziable.js', 420, 438 ]
-4861 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseExtremum.js
-4862 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseExtremum.js', 420, 438 ]
-4863 silly gunzTarPerm extractEntry node_modules/lodash/internal/isLength.js
-4864 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isLength.js', 420, 438 ]
-4865 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseEvery.js
-4866 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseEvery.js', 420, 438 ]
-4867 silly gunzTarPerm extractEntry node_modules/lodash/internal/isObjectLike.js
-4868 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isObjectLike.js', 420, 438 ]
-4869 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseEachRight.js
-4870 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseEachRight.js', 420, 438 ]
-4871 silly gunzTarPerm extractEntry node_modules/lodash/internal/isSpace.js
-4872 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isSpace.js', 420, 438 ]
-4873 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseEach.js
-4874 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseEach.js', 420, 438 ]
-4875 silly gunzTarPerm extractEntry node_modules/lodash/internal/isStrictComparable.js
-4876 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/isStrictComparable.js',
-4876 silly gunzTarPerm   420,
-4876 silly gunzTarPerm   438 ]
-4877 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseDifference.js
-4878 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseDifference.js', 420, 438 ]
-4879 silly gunzTarPerm extractEntry node_modules/lodash/internal/lazyClone.js
-4880 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/lazyClone.js', 420, 438 ]
-4881 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseDelay.js
-4882 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseDelay.js', 420, 438 ]
-4883 silly gunzTarPerm extractEntry node_modules/lodash/internal/lazyReverse.js
-4884 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/lazyReverse.js', 420, 438 ]
-4885 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCreate.js
-4886 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCreate.js', 420, 438 ]
-4887 silly gunzTarPerm extractEntry node_modules/lodash/internal/lazyValue.js
-4888 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/lazyValue.js', 420, 438 ]
-4889 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCopy.js
-4890 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCopy.js', 420, 438 ]
-4891 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapDelete.js
-4892 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapDelete.js', 420, 438 ]
-4893 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCompareAscending.js
-4894 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCompareAscending.js',
-4894 silly gunzTarPerm   420,
-4894 silly gunzTarPerm   438 ]
-4895 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapGet.js
-4896 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapGet.js', 420, 438 ]
-4897 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseClone.js
-4898 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseClone.js', 420, 438 ]
-4899 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapHas.js
-4900 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapHas.js', 420, 438 ]
-4901 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseCallback.js
-4902 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseCallback.js', 420, 438 ]
-4903 silly gunzTarPerm extractEntry node_modules/lodash/internal/mapSet.js
-4904 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mapSet.js', 420, 438 ]
-4905 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseAt.js
-4906 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseAt.js', 420, 438 ]
-4907 silly gunzTarPerm extractEntry node_modules/lodash/internal/mergeData.js
-4908 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mergeData.js', 420, 438 ]
-4909 silly gunzTarPerm extractEntry node_modules/lodash/internal/baseAssign.js
-4910 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/baseAssign.js', 420, 438 ]
-4911 silly gunzTarPerm extractEntry node_modules/lodash/internal/mergeDefaults.js
-4912 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/mergeDefaults.js', 420, 438 ]
-4913 silly gunzTarPerm extractEntry node_modules/lodash/internal/assignWith.js
-4914 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/assignWith.js', 420, 438 ]
-4915 silly gunzTarPerm extractEntry node_modules/lodash/internal/metaMap.js
-4916 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/metaMap.js', 420, 438 ]
-4917 silly gunzTarPerm extractEntry node_modules/lodash/internal/assignOwnDefaults.js
-4918 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/assignOwnDefaults.js', 420, 438 ]
-4919 silly gunzTarPerm extractEntry node_modules/lodash/internal/pickByArray.js
-4920 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/pickByArray.js', 420, 438 ]
-4921 silly gunzTarPerm extractEntry node_modules/lodash/internal/assignDefaults.js
-4922 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/assignDefaults.js', 420, 438 ]
-4923 silly gunzTarPerm extractEntry node_modules/lodash/internal/pickByCallback.js
-4924 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/pickByCallback.js', 420, 438 ]
-4925 silly gunzTarPerm extractEntry node_modules/lodash/internal/arraySum.js
-4926 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arraySum.js', 420, 438 ]
-4927 silly gunzTarPerm extractEntry node_modules/lodash/internal/reEscape.js
-4928 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reEscape.js', 420, 438 ]
-4929 silly gunzTarPerm extractEntry node_modules/lodash/internal/arraySome.js
-4930 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arraySome.js', 420, 438 ]
-4931 silly gunzTarPerm extractEntry node_modules/lodash/internal/reEvaluate.js
-4932 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reEvaluate.js', 420, 438 ]
-4933 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayReduceRight.js
-4934 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayReduceRight.js', 420, 438 ]
-4935 silly gunzTarPerm extractEntry node_modules/lodash/internal/reInterpolate.js
-4936 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reInterpolate.js', 420, 438 ]
-4937 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayReduce.js
-4938 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayReduce.js', 420, 438 ]
-4939 silly gunzTarPerm extractEntry node_modules/lodash/internal/realNames.js
-4940 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/realNames.js', 420, 438 ]
-4941 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayPush.js
-4942 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayPush.js', 420, 438 ]
-4943 silly gunzTarPerm extractEntry node_modules/lodash/internal/reorder.js
-4944 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/reorder.js', 420, 438 ]
-4945 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayMap.js
-4946 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayMap.js', 420, 438 ]
-4947 silly gunzTarPerm extractEntry node_modules/lodash/internal/replaceHolders.js
-4948 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/replaceHolders.js', 420, 438 ]
-4949 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayFilter.js
-4950 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayFilter.js', 420, 438 ]
-4951 silly gunzTarPerm extractEntry node_modules/lodash/internal/setData.js
-4952 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/setData.js', 420, 438 ]
-4953 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayExtremum.js
-4954 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayExtremum.js', 420, 438 ]
-4955 silly gunzTarPerm extractEntry node_modules/lodash/internal/shimKeys.js
-4956 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/shimKeys.js', 420, 438 ]
-4957 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayEvery.js
-4958 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayEvery.js', 420, 438 ]
-4959 silly gunzTarPerm extractEntry node_modules/lodash/internal/sortedUniq.js
-4960 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/sortedUniq.js', 420, 438 ]
-4961 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayEachRight.js
-4962 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayEachRight.js', 420, 438 ]
-4963 silly gunzTarPerm extractEntry node_modules/lodash/internal/toIterable.js
-4964 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/toIterable.js', 420, 438 ]
-4965 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayEach.js
-4966 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayEach.js', 420, 438 ]
-4967 silly gunzTarPerm extractEntry node_modules/lodash/internal/toObject.js
-4968 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/toObject.js', 420, 438 ]
-4969 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayCopy.js
-4970 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayCopy.js', 420, 438 ]
-4971 silly gunzTarPerm extractEntry node_modules/lodash/internal/toPath.js
-4972 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/toPath.js', 420, 438 ]
-4973 silly gunzTarPerm extractEntry node_modules/lodash/internal/arrayConcat.js
-4974 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/arrayConcat.js', 420, 438 ]
-4975 silly gunzTarPerm extractEntry node_modules/lodash/internal/trimmedLeftIndex.js
-4976 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/trimmedLeftIndex.js', 420, 438 ]
-4977 silly gunzTarPerm extractEntry node_modules/lodash/internal/SetCache.js
-4978 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/SetCache.js', 420, 438 ]
-4979 silly gunzTarPerm extractEntry node_modules/lodash/internal/trimmedRightIndex.js
-4980 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/trimmedRightIndex.js', 420, 438 ]
-4981 silly gunzTarPerm extractEntry node_modules/lodash/internal/MapCache.js
-4982 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/MapCache.js', 420, 438 ]
-4983 silly gunzTarPerm extractEntry node_modules/lodash/internal/unescapeHtmlChar.js
-4984 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/unescapeHtmlChar.js', 420, 438 ]
-4985 silly gunzTarPerm extractEntry node_modules/lodash/internal/LodashWrapper.js
-4986 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/LodashWrapper.js', 420, 438 ]
-4987 silly gunzTarPerm extractEntry node_modules/lodash/internal/wrapperClone.js
-4988 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/wrapperClone.js', 420, 438 ]
-4989 silly gunzTarPerm extractEntry node_modules/lodash/internal/composeArgsRight.js
-4990 silly gunzTarPerm modified mode [ 'node_modules/lodash/internal/composeArgsRight.js', 420, 438 ]
-4991 silly gunzTarPerm extractEntry node_modules/lodash/string/camelCase.js
-4992 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/camelCase.js', 420, 438 ]
-4993 silly gunzTarPerm extractEntry node_modules/lodash/string/padLeft.js
-4994 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/padLeft.js', 420, 438 ]
-4995 silly gunzTarPerm extractEntry node_modules/lodash/string/padRight.js
-4996 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/padRight.js', 420, 438 ]
-4997 silly gunzTarPerm extractEntry node_modules/lodash/string/parseInt.js
-4998 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/parseInt.js', 420, 438 ]
-4999 silly gunzTarPerm extractEntry node_modules/lodash/string/pad.js
-5000 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/pad.js', 420, 438 ]
-5001 silly gunzTarPerm extractEntry node_modules/lodash/string/snakeCase.js
-5002 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/snakeCase.js', 420, 438 ]
-5003 silly gunzTarPerm extractEntry node_modules/lodash/string/startCase.js
-5004 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/startCase.js', 420, 438 ]
-5005 silly gunzTarPerm extractEntry node_modules/lodash/string/startsWith.js
-5006 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/startsWith.js', 420, 438 ]
-5007 silly gunzTarPerm extractEntry node_modules/lodash/string/template.js
-5008 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/template.js', 420, 438 ]
-5009 silly gunzTarPerm extractEntry node_modules/lodash/string/templateSettings.js
-5010 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/templateSettings.js', 420, 438 ]
-5011 silly gunzTarPerm extractEntry node_modules/lodash/string/kebabCase.js
-5012 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/kebabCase.js', 420, 438 ]
-5013 silly gunzTarPerm extractEntry node_modules/lodash/string/trim.js
-5014 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trim.js', 420, 438 ]
-5015 silly gunzTarPerm extractEntry node_modules/lodash/string/escapeRegExp.js
-5016 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/escapeRegExp.js', 420, 438 ]
-5017 silly gunzTarPerm extractEntry node_modules/lodash/string/trimLeft.js
-5018 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trimLeft.js', 420, 438 ]
-5019 silly gunzTarPerm extractEntry node_modules/lodash/string/escape.js
-5020 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/escape.js', 420, 438 ]
-5021 silly gunzTarPerm extractEntry node_modules/lodash/string/trimRight.js
-5022 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trimRight.js', 420, 438 ]
-5023 silly gunzTarPerm extractEntry node_modules/lodash/string/endsWith.js
-5024 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/endsWith.js', 420, 438 ]
-5025 silly gunzTarPerm extractEntry node_modules/lodash/string/trunc.js
-5026 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/trunc.js', 420, 438 ]
-5027 silly gunzTarPerm extractEntry node_modules/lodash/string/deburr.js
-5028 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/deburr.js', 420, 438 ]
-5029 silly gunzTarPerm extractEntry node_modules/lodash/string/unescape.js
-5030 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/unescape.js', 420, 438 ]
-5031 silly gunzTarPerm extractEntry node_modules/lodash/string/capitalize.js
-5032 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/capitalize.js', 420, 438 ]
-5033 silly gunzTarPerm extractEntry node_modules/lodash/string/words.js
-5034 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/words.js', 420, 438 ]
-5035 silly gunzTarPerm extractEntry node_modules/lodash/string/repeat.js
-5036 silly gunzTarPerm modified mode [ 'node_modules/lodash/string/repeat.js', 420, 438 ]
-5037 silly gunzTarPerm extractEntry node_modules/lodash/chain/chain.js
-5038 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/chain.js', 420, 438 ]
-5039 silly gunzTarPerm extractEntry node_modules/lodash/chain/run.js
-5040 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/run.js', 420, 438 ]
-5041 silly gunzTarPerm extractEntry node_modules/lodash/chain/tap.js
-5042 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/tap.js', 420, 438 ]
-5043 silly gunzTarPerm extractEntry node_modules/lodash/chain/thru.js
-5044 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/thru.js', 420, 438 ]
-5045 silly gunzTarPerm extractEntry node_modules/lodash/chain/toJSON.js
-5046 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/toJSON.js', 420, 438 ]
-5047 silly gunzTarPerm extractEntry node_modules/lodash/chain/reverse.js
-5048 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/reverse.js', 420, 438 ]
-5049 silly gunzTarPerm extractEntry node_modules/lodash/chain/value.js
-5050 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/value.js', 420, 438 ]
-5051 silly gunzTarPerm extractEntry node_modules/lodash/chain/valueOf.js
-5052 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/valueOf.js', 420, 438 ]
-5053 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperChain.js
-5054 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperChain.js', 420, 438 ]
-5055 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperCommit.js
-5056 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperCommit.js', 420, 438 ]
-5057 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperConcat.js
-5058 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperConcat.js', 420, 438 ]
-5059 silly gunzTarPerm extractEntry node_modules/lodash/chain/plant.js
-5060 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/plant.js', 420, 438 ]
-5061 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperPlant.js
-5062 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperPlant.js', 420, 438 ]
-5063 silly gunzTarPerm extractEntry node_modules/lodash/chain/lodash.js
-5064 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/lodash.js', 420, 438 ]
-5065 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperReverse.js
-5066 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperReverse.js', 420, 438 ]
-5067 silly gunzTarPerm extractEntry node_modules/lodash/chain/concat.js
-5068 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/concat.js', 420, 438 ]
-5069 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperToString.js
-5070 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperToString.js', 420, 438 ]
-5071 silly gunzTarPerm extractEntry node_modules/lodash/chain/commit.js
-5072 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/commit.js', 420, 438 ]
-5073 silly gunzTarPerm extractEntry node_modules/lodash/chain/wrapperValue.js
-5074 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/wrapperValue.js', 420, 438 ]
-5075 silly gunzTarPerm extractEntry node_modules/lodash/chain/toString.js
-5076 silly gunzTarPerm modified mode [ 'node_modules/lodash/chain/toString.js', 420, 438 ]
-5077 silly gunzTarPerm extractEntry node_modules/lodash/array/chunk.js
-5078 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/chunk.js', 420, 438 ]
-5079 silly gunzTarPerm extractEntry node_modules/lodash/array/last.js
-5080 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/last.js', 420, 438 ]
-5081 silly gunzTarPerm extractEntry node_modules/lodash/array/lastIndexOf.js
-5082 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/lastIndexOf.js', 420, 438 ]
-5083 silly gunzTarPerm extractEntry node_modules/lodash/array/object.js
-5084 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/object.js', 420, 438 ]
-5085 silly gunzTarPerm extractEntry node_modules/lodash/array/pull.js
-5086 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/pull.js', 420, 438 ]
-5087 silly gunzTarPerm extractEntry node_modules/lodash/array/intersection.js
-5088 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/intersection.js', 420, 438 ]
-5089 silly gunzTarPerm extractEntry node_modules/lodash/array/remove.js
-5090 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/remove.js', 420, 438 ]
-5091 silly gunzTarPerm extractEntry node_modules/lodash/array/rest.js
-5092 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/rest.js', 420, 438 ]
-5093 silly gunzTarPerm extractEntry node_modules/lodash/array/slice.js
-5094 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/slice.js', 420, 438 ]
-5095 silly gunzTarPerm extractEntry node_modules/lodash/array/sortedIndex.js
-5096 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/sortedIndex.js', 420, 438 ]
-5097 silly gunzTarPerm extractEntry node_modules/lodash/array/sortedLastIndex.js
-5098 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/sortedLastIndex.js', 420, 438 ]
-5099 silly gunzTarPerm extractEntry node_modules/lodash/array/initial.js
-5100 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/initial.js', 420, 438 ]
-5101 silly gunzTarPerm extractEntry node_modules/lodash/array/tail.js
-5102 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/tail.js', 420, 438 ]
-5103 silly gunzTarPerm extractEntry node_modules/lodash/array/indexOf.js
-5104 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/indexOf.js', 420, 438 ]
-5105 silly gunzTarPerm extractEntry node_modules/lodash/array/take.js
-5106 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/take.js', 420, 438 ]
-5107 silly gunzTarPerm extractEntry node_modules/lodash/array/head.js
-5108 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/head.js', 420, 438 ]
-5109 silly gunzTarPerm extractEntry node_modules/lodash/array/takeRight.js
-5110 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/takeRight.js', 420, 438 ]
-5111 silly gunzTarPerm extractEntry node_modules/lodash/array/flattenDeep.js
-5112 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/flattenDeep.js', 420, 438 ]
-5113 silly gunzTarPerm extractEntry node_modules/lodash/array/takeRightWhile.js
-5114 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/takeRightWhile.js', 420, 438 ]
-5115 silly gunzTarPerm extractEntry node_modules/lodash/array/flatten.js
-5116 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/flatten.js', 420, 438 ]
-5117 silly gunzTarPerm extractEntry node_modules/lodash/array/takeWhile.js
-5118 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/takeWhile.js', 420, 438 ]
-5119 silly gunzTarPerm extractEntry node_modules/lodash/array/first.js
-5120 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/first.js', 420, 438 ]
-5121 silly gunzTarPerm extractEntry node_modules/lodash/array/union.js
-5122 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/union.js', 420, 438 ]
-5123 silly gunzTarPerm extractEntry node_modules/lodash/array/findLastIndex.js
-5124 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/findLastIndex.js', 420, 438 ]
-5125 silly gunzTarPerm extractEntry node_modules/lodash/array/uniq.js
-5126 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/uniq.js', 420, 438 ]
-5127 silly gunzTarPerm extractEntry node_modules/lodash/array/findIndex.js
-5128 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/findIndex.js', 420, 438 ]
-5129 silly gunzTarPerm extractEntry node_modules/lodash/array/unique.js
-5130 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/unique.js', 420, 438 ]
-5131 silly gunzTarPerm extractEntry node_modules/lodash/array/fill.js
-5132 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/fill.js', 420, 438 ]
-5133 silly gunzTarPerm extractEntry node_modules/lodash/array/unzip.js
-5134 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/unzip.js', 420, 438 ]
-5135 silly gunzTarPerm extractEntry node_modules/lodash/array/dropWhile.js
-5136 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/dropWhile.js', 420, 438 ]
-5137 silly gunzTarPerm extractEntry node_modules/lodash/array/unzipWith.js
-5138 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/unzipWith.js', 420, 438 ]
-5139 silly gunzTarPerm extractEntry node_modules/lodash/array/dropRightWhile.js
-5140 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/dropRightWhile.js', 420, 438 ]
-5141 silly gunzTarPerm extractEntry node_modules/lodash/array/without.js
-5142 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/without.js', 420, 438 ]
-5143 silly gunzTarPerm extractEntry node_modules/lodash/array/dropRight.js
-5144 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/dropRight.js', 420, 438 ]
-5145 silly gunzTarPerm extractEntry node_modules/lodash/array/xor.js
-5146 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/xor.js', 420, 438 ]
-5147 silly gunzTarPerm extractEntry node_modules/lodash/array/drop.js
-5148 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/drop.js', 420, 438 ]
-5149 silly gunzTarPerm extractEntry node_modules/lodash/array/zip.js
-5150 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/zip.js', 420, 438 ]
-5151 silly gunzTarPerm extractEntry node_modules/lodash/array/difference.js
-5152 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/difference.js', 420, 438 ]
-5153 silly gunzTarPerm extractEntry node_modules/lodash/array/zipObject.js
-5154 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/zipObject.js', 420, 438 ]
-5155 silly gunzTarPerm extractEntry node_modules/lodash/array/compact.js
-5156 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/compact.js', 420, 438 ]
-5157 silly gunzTarPerm extractEntry node_modules/lodash/array/zipWith.js
-5158 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/zipWith.js', 420, 438 ]
-5159 silly gunzTarPerm extractEntry node_modules/lodash/array/pullAt.js
-5160 silly gunzTarPerm modified mode [ 'node_modules/lodash/array/pullAt.js', 420, 438 ]
-5161 silly gunzTarPerm extractEntry node_modules/lodash/utility/attempt.js
-5162 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/attempt.js', 420, 438 ]
-5163 silly gunzTarPerm extractEntry node_modules/lodash/utility/iteratee.js
-5164 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/iteratee.js', 420, 438 ]
-5165 silly gunzTarPerm extractEntry node_modules/lodash/utility/matches.js
-5166 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/matches.js', 420, 438 ]
-5167 silly gunzTarPerm extractEntry node_modules/lodash/utility/matchesProperty.js
-5168 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/matchesProperty.js', 420, 438 ]
-5169 silly gunzTarPerm extractEntry node_modules/lodash/utility/method.js
-5170 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/method.js', 420, 438 ]
-5171 silly gunzTarPerm extractEntry node_modules/lodash/utility/identity.js
-5172 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/identity.js', 420, 438 ]
-5173 silly gunzTarPerm extractEntry node_modules/lodash/utility/mixin.js
-5174 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/mixin.js', 420, 438 ]
-5175 silly gunzTarPerm extractEntry node_modules/lodash/utility/noop.js
-5176 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/noop.js', 420, 438 ]
-5177 silly gunzTarPerm extractEntry node_modules/lodash/utility/property.js
-5178 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/property.js', 420, 438 ]
-5179 silly gunzTarPerm extractEntry node_modules/lodash/utility/propertyOf.js
-5180 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/propertyOf.js', 420, 438 ]
-5181 silly gunzTarPerm extractEntry node_modules/lodash/utility/range.js
-5182 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/range.js', 420, 438 ]
-5183 silly gunzTarPerm extractEntry node_modules/lodash/utility/constant.js
-5184 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/constant.js', 420, 438 ]
-5185 silly gunzTarPerm extractEntry node_modules/lodash/utility/times.js
-5186 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/times.js', 420, 438 ]
-5187 silly gunzTarPerm extractEntry node_modules/lodash/utility/callback.js
-5188 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/callback.js', 420, 438 ]
-5189 silly gunzTarPerm extractEntry node_modules/lodash/utility/uniqueId.js
-5190 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/uniqueId.js', 420, 438 ]
-5191 silly gunzTarPerm extractEntry node_modules/lodash/utility/methodOf.js
-5192 silly gunzTarPerm modified mode [ 'node_modules/lodash/utility/methodOf.js', 420, 438 ]
-5193 silly gunzTarPerm extractEntry node_modules/lodash/lang/clone.js
-5194 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/clone.js', 420, 438 ]
-5195 silly gunzTarPerm extractEntry node_modules/lodash/lang/isEqual.js
-5196 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isEqual.js', 420, 438 ]
-5197 silly gunzTarPerm extractEntry node_modules/lodash/lang/isError.js
-5198 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isError.js', 420, 438 ]
-5199 silly gunzTarPerm extractEntry node_modules/lodash/lang/isFinite.js
-5200 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isFinite.js', 420, 438 ]
-5201 silly gunzTarPerm extractEntry node_modules/lodash/lang/isFunction.js
-5202 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isFunction.js', 420, 438 ]
-5203 silly gunzTarPerm extractEntry node_modules/lodash/lang/isEmpty.js
-5204 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isEmpty.js', 420, 438 ]
-5205 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNaN.js
-5206 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNaN.js', 420, 438 ]
-5207 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNative.js
-5208 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNative.js', 420, 438 ]
-5209 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNull.js
-5210 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNull.js', 420, 438 ]
-5211 silly gunzTarPerm extractEntry node_modules/lodash/lang/isNumber.js
-5212 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isNumber.js', 420, 438 ]
-5213 silly gunzTarPerm extractEntry node_modules/lodash/lang/isObject.js
-5214 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isObject.js', 420, 438 ]
-5215 silly gunzTarPerm extractEntry node_modules/lodash/lang/isElement.js
-5216 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isElement.js', 420, 438 ]
-5217 silly gunzTarPerm extractEntry node_modules/lodash/lang/isPlainObject.js
-5218 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isPlainObject.js', 420, 438 ]
-5219 silly gunzTarPerm extractEntry node_modules/lodash/lang/isDate.js
-5220 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isDate.js', 420, 438 ]
-5221 silly gunzTarPerm extractEntry node_modules/lodash/lang/isRegExp.js
-5222 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isRegExp.js', 420, 438 ]
-5223 silly gunzTarPerm extractEntry node_modules/lodash/lang/isBoolean.js
-5224 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isBoolean.js', 420, 438 ]
-5225 silly gunzTarPerm extractEntry node_modules/lodash/lang/isString.js
-5226 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isString.js', 420, 438 ]
-5227 silly gunzTarPerm extractEntry node_modules/lodash/lang/isArray.js
-5228 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isArray.js', 420, 438 ]
-5229 silly gunzTarPerm extractEntry node_modules/lodash/lang/isTypedArray.js
-5230 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isTypedArray.js', 420, 438 ]
-5231 silly gunzTarPerm extractEntry node_modules/lodash/lang/isArguments.js
-5232 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isArguments.js', 420, 438 ]
-5233 silly gunzTarPerm extractEntry node_modules/lodash/lang/isUndefined.js
-5234 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isUndefined.js', 420, 438 ]
-5235 silly gunzTarPerm extractEntry node_modules/lodash/lang/gte.js
-5236 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/gte.js', 420, 438 ]
-5237 silly gunzTarPerm extractEntry node_modules/lodash/lang/lt.js
-5238 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/lt.js', 420, 438 ]
-5239 silly gunzTarPerm extractEntry node_modules/lodash/lang/gt.js
-5240 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/gt.js', 420, 438 ]
-5241 silly gunzTarPerm extractEntry node_modules/lodash/lang/lte.js
-5242 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/lte.js', 420, 438 ]
-5243 silly gunzTarPerm extractEntry node_modules/lodash/lang/eq.js
-5244 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/eq.js', 420, 438 ]
-5245 silly gunzTarPerm extractEntry node_modules/lodash/lang/toArray.js
-5246 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/toArray.js', 420, 438 ]
-5247 silly gunzTarPerm extractEntry node_modules/lodash/lang/cloneDeep.js
-5248 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/cloneDeep.js', 420, 438 ]
-5249 silly gunzTarPerm extractEntry node_modules/lodash/lang/toPlainObject.js
-5250 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/toPlainObject.js', 420, 438 ]
-5251 silly gunzTarPerm extractEntry node_modules/lodash/lang/isMatch.js
-5252 silly gunzTarPerm modified mode [ 'node_modules/lodash/lang/isMatch.js', 420, 438 ]
-5253 silly gunzTarPerm extractEntry node_modules/minimatch/package.json
-5254 silly gunzTarPerm modified mode [ 'node_modules/minimatch/package.json', 420, 438 ]
-5255 silly gunzTarPerm extractEntry node_modules/minimatch/README.md
-5256 silly gunzTarPerm modified mode [ 'node_modules/minimatch/README.md', 420, 438 ]
-5257 silly gunzTarPerm extractEntry node_modules/minimatch/LICENSE
-5258 silly gunzTarPerm modified mode [ 'node_modules/minimatch/LICENSE', 420, 438 ]
-5259 silly gunzTarPerm extractEntry node_modules/minimatch/minimatch.js
-5260 silly gunzTarPerm modified mode [ 'node_modules/minimatch/minimatch.js', 420, 438 ]
-5261 silly gunzTarPerm extractEntry node_modules/node-uuid/package.json
-5262 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/package.json', 420, 438 ]
-5263 silly gunzTarPerm extractEntry node_modules/node-uuid/.npmignore
-5264 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/.npmignore', 420, 438 ]
-5265 silly gunzTarPerm extractEntry node_modules/node-uuid/README.md
-5266 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/README.md', 420, 438 ]
-5267 silly gunzTarPerm extractEntry node_modules/node-uuid/uuid.js
-5268 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/uuid.js', 420, 438 ]
-5269 silly gunzTarPerm extractEntry node_modules/node-uuid/LICENSE.md
-5270 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/LICENSE.md', 420, 438 ]
-5271 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/README.md
-5272 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/README.md', 420, 438 ]
-5273 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/benchmark.js
-5274 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/benchmark.js', 420, 438 ]
-5275 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/bench.gnu
-5276 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/bench.gnu', 420, 438 ]
-5277 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/bench.sh
-5278 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/bench.sh', 493, 511 ]
-5279 silly gunzTarPerm extractEntry node_modules/node-uuid/benchmark/benchmark-native.c
-5280 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/benchmark/benchmark-native.c',
-5280 silly gunzTarPerm   420,
-5280 silly gunzTarPerm   438 ]
-5281 silly gunzTarPerm extractEntry node_modules/node-uuid/bin/uuid
-5282 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/bin/uuid', 493, 511 ]
-5283 silly gunzTarPerm extractEntry node_modules/node-uuid/bower.json
-5284 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/bower.json', 420, 438 ]
-5285 silly gunzTarPerm extractEntry node_modules/node-uuid/component.json
-5286 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/component.json', 420, 438 ]
-5287 silly gunzTarPerm extractEntry node_modules/node-uuid/test/compare_v1.js
-5288 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/test/compare_v1.js', 420, 438 ]
-5289 silly gunzTarPerm extractEntry node_modules/node-uuid/test/test.js
-5290 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/test/test.js', 420, 438 ]
-5291 silly gunzTarPerm extractEntry node_modules/node-uuid/test/test.html
-5292 silly gunzTarPerm modified mode [ 'node_modules/node-uuid/test/test.html', 420, 438 ]
-5293 silly gunzTarPerm extractEntry node_modules/nopt/package.json
-5294 silly gunzTarPerm modified mode [ 'node_modules/nopt/package.json', 420, 438 ]
-5295 silly gunzTarPerm extractEntry node_modules/nopt/.npmignore
-5296 silly gunzTarPerm modified mode [ 'node_modules/nopt/.npmignore', 420, 438 ]
-5297 silly gunzTarPerm extractEntry node_modules/nopt/README.md
-5298 silly gunzTarPerm modified mode [ 'node_modules/nopt/README.md', 420, 438 ]
-5299 silly gunzTarPerm extractEntry node_modules/nopt/LICENSE
-5300 silly gunzTarPerm modified mode [ 'node_modules/nopt/LICENSE', 420, 438 ]
-5301 silly gunzTarPerm extractEntry node_modules/nopt/.travis.yml
-5302 silly gunzTarPerm modified mode [ 'node_modules/nopt/.travis.yml', 420, 438 ]
-5303 silly gunzTarPerm extractEntry node_modules/nopt/bin/nopt.js
-5304 silly gunzTarPerm modified mode [ 'node_modules/nopt/bin/nopt.js', 493, 511 ]
-5305 silly gunzTarPerm extractEntry node_modules/nopt/examples/my-program.js
-5306 silly gunzTarPerm modified mode [ 'node_modules/nopt/examples/my-program.js', 493, 511 ]
-5307 silly gunzTarPerm extractEntry node_modules/nopt/lib/nopt.js
-5308 silly gunzTarPerm modified mode [ 'node_modules/nopt/lib/nopt.js', 420, 438 ]
-5309 silly gunzTarPerm extractEntry node_modules/nopt/test/basic.js
-5310 silly gunzTarPerm modified mode [ 'node_modules/nopt/test/basic.js', 420, 438 ]
-5311 silly gunzTarPerm extractEntry node_modules/once/package.json
-5312 silly gunzTarPerm modified mode [ 'node_modules/once/package.json', 420, 438 ]
-5313 silly gunzTarPerm extractEntry node_modules/once/README.md
-5314 silly gunzTarPerm modified mode [ 'node_modules/once/README.md', 420, 438 ]
-5315 silly gunzTarPerm extractEntry node_modules/once/LICENSE
-5316 silly gunzTarPerm modified mode [ 'node_modules/once/LICENSE', 420, 438 ]
-5317 silly gunzTarPerm extractEntry node_modules/once/once.js
-5318 silly gunzTarPerm modified mode [ 'node_modules/once/once.js', 420, 438 ]
-5319 silly gunzTarPerm extractEntry node_modules/ansi/package.json
-5320 silly gunzTarPerm modified mode [ 'node_modules/ansi/package.json', 420, 438 ]
-5321 silly gunzTarPerm extractEntry node_modules/ansi/.npmignore
-5322 silly gunzTarPerm modified mode [ 'node_modules/ansi/.npmignore', 420, 438 ]
-5323 silly gunzTarPerm extractEntry node_modules/ansi/README.md
-5324 silly gunzTarPerm modified mode [ 'node_modules/ansi/README.md', 420, 438 ]
-5325 silly gunzTarPerm extractEntry node_modules/ansi/LICENSE
-5326 silly gunzTarPerm modified mode [ 'node_modules/ansi/LICENSE', 420, 438 ]
-5327 silly gunzTarPerm extractEntry node_modules/ansi/.jshintrc
-5328 silly gunzTarPerm modified mode [ 'node_modules/ansi/.jshintrc', 420, 438 ]
-5329 silly gunzTarPerm extractEntry node_modules/ansi/History.md
-5330 silly gunzTarPerm modified mode [ 'node_modules/ansi/History.md', 420, 438 ]
-5331 silly gunzTarPerm extractEntry node_modules/ansi/examples/cursorPosition.js
-5332 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/cursorPosition.js', 493, 511 ]
-5333 silly gunzTarPerm extractEntry node_modules/ansi/examples/beep/index.js
-5334 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/beep/index.js', 493, 511 ]
-5335 silly gunzTarPerm extractEntry node_modules/ansi/examples/clear/index.js
-5336 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/clear/index.js', 493, 511 ]
-5337 silly gunzTarPerm extractEntry node_modules/ansi/examples/progress/index.js
-5338 silly gunzTarPerm modified mode [ 'node_modules/ansi/examples/progress/index.js', 420, 438 ]
-5339 silly gunzTarPerm extractEntry node_modules/ansi/lib/ansi.js
-5340 silly gunzTarPerm modified mode [ 'node_modules/ansi/lib/ansi.js', 420, 438 ]
-5341 silly gunzTarPerm extractEntry node_modules/ansi/lib/newlines.js
-5342 silly gunzTarPerm modified mode [ 'node_modules/ansi/lib/newlines.js', 420, 438 ]
-5343 silly gunzTarPerm extractEntry node_modules/os-tmpdir/package.json
-5344 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/package.json', 420, 438 ]
-5345 silly gunzTarPerm extractEntry node_modules/os-tmpdir/index.js
-5346 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/index.js', 420, 438 ]
-5347 silly gunzTarPerm extractEntry node_modules/os-tmpdir/license
-5348 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/license', 420, 438 ]
-5349 silly gunzTarPerm extractEntry node_modules/os-tmpdir/readme.md
-5350 silly gunzTarPerm modified mode [ 'node_modules/os-tmpdir/readme.md', 420, 438 ]
-5351 silly gunzTarPerm extractEntry node_modules/osenv/package.json
-5352 silly gunzTarPerm modified mode [ 'node_modules/osenv/package.json', 420, 438 ]
-5353 silly gunzTarPerm extractEntry node_modules/osenv/.npmignore
-5354 silly gunzTarPerm modified mode [ 'node_modules/osenv/.npmignore', 420, 438 ]
-5355 silly gunzTarPerm extractEntry node_modules/osenv/README.md
-5356 silly gunzTarPerm modified mode [ 'node_modules/osenv/README.md', 420, 438 ]
-5357 silly gunzTarPerm extractEntry node_modules/osenv/LICENSE
-5358 silly gunzTarPerm modified mode [ 'node_modules/osenv/LICENSE', 420, 438 ]
-5359 silly gunzTarPerm extractEntry node_modules/osenv/osenv.js
-5360 silly gunzTarPerm modified mode [ 'node_modules/osenv/osenv.js', 420, 438 ]
-5361 silly gunzTarPerm extractEntry node_modules/osenv/.travis.yml
-5362 silly gunzTarPerm modified mode [ 'node_modules/osenv/.travis.yml', 420, 438 ]
-5363 silly gunzTarPerm extractEntry node_modules/osenv/test/unix.js
-5364 silly gunzTarPerm modified mode [ 'node_modules/osenv/test/unix.js', 420, 438 ]
-5365 silly gunzTarPerm extractEntry node_modules/osenv/test/windows.js
-5366 silly gunzTarPerm modified mode [ 'node_modules/osenv/test/windows.js', 420, 438 ]
-5367 silly gunzTarPerm extractEntry node_modules/osenv/x.tap
-5368 silly gunzTarPerm modified mode [ 'node_modules/osenv/x.tap', 420, 438 ]
-5369 silly gunzTarPerm extractEntry node_modules/path-is-absolute/package.json
-5370 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/package.json', 420, 438 ]
-5371 silly gunzTarPerm extractEntry node_modules/path-is-absolute/index.js
-5372 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/index.js', 420, 438 ]
-5373 silly gunzTarPerm extractEntry node_modules/path-is-absolute/license
-5374 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/license', 420, 438 ]
-5375 silly gunzTarPerm extractEntry node_modules/path-is-absolute/readme.md
-5376 silly gunzTarPerm modified mode [ 'node_modules/path-is-absolute/readme.md', 420, 438 ]
-5377 silly gunzTarPerm extractEntry node_modules/pegjs/package.json
-5378 silly gunzTarPerm modified mode [ 'node_modules/pegjs/package.json', 420, 438 ]
-5379 silly gunzTarPerm extractEntry node_modules/pegjs/README.md
-5380 silly gunzTarPerm modified mode [ 'node_modules/pegjs/README.md', 420, 438 ]
-5381 silly gunzTarPerm extractEntry node_modules/pegjs/LICENSE
-5382 silly gunzTarPerm modified mode [ 'node_modules/pegjs/LICENSE', 420, 438 ]
-5383 silly gunzTarPerm extractEntry node_modules/pegjs/CHANGELOG.md
-5384 silly gunzTarPerm modified mode [ 'node_modules/pegjs/CHANGELOG.md', 420, 438 ]
-5385 silly gunzTarPerm extractEntry node_modules/pegjs/VERSION
-5386 silly gunzTarPerm modified mode [ 'node_modules/pegjs/VERSION', 420, 438 ]
-5387 silly gunzTarPerm extractEntry node_modules/pegjs/bin/pegjs
-5388 silly gunzTarPerm modified mode [ 'node_modules/pegjs/bin/pegjs', 493, 511 ]
-5389 silly gunzTarPerm extractEntry node_modules/pegjs/examples/arithmetics.pegjs
-5390 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/arithmetics.pegjs', 420, 438 ]
-5391 silly gunzTarPerm extractEntry node_modules/pegjs/examples/css.pegjs
-5392 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/css.pegjs', 420, 438 ]
-5393 silly gunzTarPerm extractEntry node_modules/pegjs/examples/javascript.pegjs
-5394 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/javascript.pegjs', 420, 438 ]
-5395 silly gunzTarPerm extractEntry node_modules/pegjs/examples/json.pegjs
-5396 silly gunzTarPerm modified mode [ 'node_modules/pegjs/examples/json.pegjs', 420, 438 ]
-5397 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler.js
-5398 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler.js', 420, 438 ]
-5399 silly gunzTarPerm extractEntry node_modules/pegjs/lib/grammar-error.js
-5400 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/grammar-error.js', 420, 438 ]
-5401 silly gunzTarPerm extractEntry node_modules/pegjs/lib/parser.js
-5402 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/parser.js', 420, 438 ]
-5403 silly gunzTarPerm extractEntry node_modules/pegjs/lib/peg.js
-5404 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/peg.js', 420, 438 ]
-5405 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/asts.js
-5406 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/asts.js', 420, 438 ]
-5407 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/javascript.js
-5408 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/javascript.js', 420, 438 ]
-5409 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/opcodes.js
-5410 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/opcodes.js', 420, 438 ]
-5411 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/visitor.js
-5412 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/visitor.js', 420, 438 ]
-5413 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/generate-bytecode.js
-5414 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/generate-bytecode.js',
-5414 silly gunzTarPerm   420,
-5414 silly gunzTarPerm   438 ]
-5415 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/generate-javascript.js
-5416 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/generate-javascript.js',
-5416 silly gunzTarPerm   420,
-5416 silly gunzTarPerm   438 ]
-5417 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/remove-proxy-rules.js
-5418 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/remove-proxy-rules.js',
-5418 silly gunzTarPerm   420,
-5418 silly gunzTarPerm   438 ]
-5419 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/report-infinite-loops.js
-5420 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/report-infinite-loops.js',
-5420 silly gunzTarPerm   420,
-5420 silly gunzTarPerm   438 ]
-5421 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/report-left-recursion.js
-5422 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/report-left-recursion.js',
-5422 silly gunzTarPerm   420,
-5422 silly gunzTarPerm   438 ]
-5423 silly gunzTarPerm extractEntry node_modules/pegjs/lib/compiler/passes/report-missing-rules.js
-5424 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/compiler/passes/report-missing-rules.js',
-5424 silly gunzTarPerm   420,
-5424 silly gunzTarPerm   438 ]
-5425 silly gunzTarPerm extractEntry node_modules/pegjs/lib/utils/arrays.js
-5426 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/utils/arrays.js', 420, 438 ]
-5427 silly gunzTarPerm extractEntry node_modules/pegjs/lib/utils/classes.js
-5428 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/utils/classes.js', 420, 438 ]
-5429 silly gunzTarPerm extractEntry node_modules/pegjs/lib/utils/objects.js
-5430 silly gunzTarPerm modified mode [ 'node_modules/pegjs/lib/utils/objects.js', 420, 438 ]
-5431 silly gunzTarPerm extractEntry node_modules/plist/package.json
-5432 silly gunzTarPerm modified mode [ 'node_modules/plist/package.json', 420, 438 ]
-5433 silly gunzTarPerm extractEntry node_modules/plist/README.md
-5434 silly gunzTarPerm modified mode [ 'node_modules/plist/README.md', 420, 438 ]
-5435 silly gunzTarPerm extractEntry node_modules/plist/LICENSE
-5436 silly gunzTarPerm modified mode [ 'node_modules/plist/LICENSE', 420, 438 ]
-5437 silly gunzTarPerm extractEntry node_modules/plist/.jshintrc
-5438 silly gunzTarPerm modified mode [ 'node_modules/plist/.jshintrc', 420, 438 ]
-5439 silly gunzTarPerm extractEntry node_modules/plist/.travis.yml
-5440 silly gunzTarPerm modified mode [ 'node_modules/plist/.travis.yml', 420, 438 ]
-5441 silly gunzTarPerm extractEntry node_modules/plist/History.md
-5442 silly gunzTarPerm modified mode [ 'node_modules/plist/History.md', 420, 438 ]
-5443 silly gunzTarPerm extractEntry node_modules/plist/Makefile
-5444 silly gunzTarPerm modified mode [ 'node_modules/plist/Makefile', 420, 438 ]
-5445 silly gunzTarPerm extractEntry node_modules/plist/dist/plist-build.js
-5446 silly gunzTarPerm modified mode [ 'node_modules/plist/dist/plist-build.js', 420, 438 ]
-5447 silly gunzTarPerm extractEntry node_modules/plist/dist/plist-parse.js
-5448 silly gunzTarPerm modified mode [ 'node_modules/plist/dist/plist-parse.js', 420, 438 ]
-5449 silly gunzTarPerm extractEntry node_modules/plist/dist/plist.js
-5450 silly gunzTarPerm modified mode [ 'node_modules/plist/dist/plist.js', 420, 438 ]
-5451 silly gunzTarPerm extractEntry node_modules/plist/examples/browser/index.html
-5452 silly gunzTarPerm modified mode [ 'node_modules/plist/examples/browser/index.html', 420, 438 ]
-5453 silly gunzTarPerm extractEntry node_modules/plist/lib/build.js
-5454 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/build.js', 420, 438 ]
-5455 silly gunzTarPerm extractEntry node_modules/plist/lib/node.js
-5456 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/node.js', 420, 438 ]
-5457 silly gunzTarPerm extractEntry node_modules/plist/lib/parse.js
-5458 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/parse.js', 420, 438 ]
-5459 silly gunzTarPerm extractEntry node_modules/plist/lib/plist.js
-5460 silly gunzTarPerm modified mode [ 'node_modules/plist/lib/plist.js', 420, 438 ]
-5461 silly gunzTarPerm extractEntry node_modules/q/package.json
-5462 silly gunzTarPerm modified mode [ 'node_modules/q/package.json', 420, 438 ]
-5463 silly gunzTarPerm extractEntry node_modules/q/README.md
-5464 silly gunzTarPerm modified mode [ 'node_modules/q/README.md', 420, 438 ]
-5465 silly gunzTarPerm extractEntry node_modules/q/LICENSE
-5466 silly gunzTarPerm modified mode [ 'node_modules/q/LICENSE', 420, 438 ]
-5467 silly gunzTarPerm extractEntry node_modules/q/q.js
-5468 silly gunzTarPerm modified mode [ 'node_modules/q/q.js', 420, 438 ]
-5469 silly gunzTarPerm extractEntry node_modules/q/queue.js
-5470 silly gunzTarPerm modified mode [ 'node_modules/q/queue.js', 420, 438 ]
-5471 silly gunzTarPerm extractEntry node_modules/q/CHANGES.md
-5472 silly gunzTarPerm modified mode [ 'node_modules/q/CHANGES.md', 420, 438 ]
-5473 silly gunzTarPerm extractEntry node_modules/sax/package.json
-5474 silly gunzTarPerm modified mode [ 'node_modules/sax/package.json', 420, 438 ]
-5475 silly gunzTarPerm extractEntry node_modules/sax/README.md
-5476 silly gunzTarPerm modified mode [ 'node_modules/sax/README.md', 420, 438 ]
-5477 silly gunzTarPerm extractEntry node_modules/sax/LICENSE
-5478 silly gunzTarPerm modified mode [ 'node_modules/sax/LICENSE', 420, 438 ]
-5479 silly gunzTarPerm extractEntry node_modules/sax/AUTHORS
-5480 silly gunzTarPerm modified mode [ 'node_modules/sax/AUTHORS', 420, 438 ]
-5481 silly gunzTarPerm extractEntry node_modules/sax/examples/pretty-print.js
-5482 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/pretty-print.js', 420, 438 ]
-5483 silly gunzTarPerm extractEntry node_modules/sax/examples/get-products.js
-5484 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/get-products.js', 420, 438 ]
-5485 silly gunzTarPerm extractEntry node_modules/sax/examples/hello-world.js
-5486 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/hello-world.js', 420, 438 ]
-5487 silly gunzTarPerm extractEntry node_modules/sax/examples/example.js
-5488 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/example.js', 420, 438 ]
-5489 silly gunzTarPerm extractEntry node_modules/sax/examples/switch-bench.js
-5490 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/switch-bench.js', 493, 511 ]
-5491 silly gunzTarPerm extractEntry node_modules/sax/examples/big-not-pretty.xml
-5492 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/big-not-pretty.xml', 420, 438 ]
-5493 silly gunzTarPerm extractEntry node_modules/sax/examples/shopping.xml
-5494 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/shopping.xml', 420, 438 ]
-5495 silly gunzTarPerm extractEntry node_modules/sax/examples/strict.dtd
-5496 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/strict.dtd', 420, 438 ]
-5497 silly gunzTarPerm extractEntry node_modules/sax/examples/not-pretty.xml
-5498 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/not-pretty.xml', 420, 438 ]
-5499 silly gunzTarPerm extractEntry node_modules/sax/examples/test.html
-5500 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/test.html', 420, 438 ]
-5501 silly gunzTarPerm extractEntry node_modules/sax/examples/test.xml
-5502 silly gunzTarPerm modified mode [ 'node_modules/sax/examples/test.xml', 420, 438 ]
-5503 silly gunzTarPerm extractEntry node_modules/sax/lib/sax.js
-5504 silly gunzTarPerm modified mode [ 'node_modules/sax/lib/sax.js', 420, 438 ]
-5505 silly gunzTarPerm extractEntry node_modules/sax/test/buffer-overrun.js
-5506 silly gunzTarPerm modified mode [ 'node_modules/sax/test/buffer-overrun.js', 420, 438 ]
-5507 silly gunzTarPerm extractEntry node_modules/sax/test/issue-47.js
-5508 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-47.js', 420, 438 ]
-5509 silly gunzTarPerm extractEntry node_modules/sax/test/issue-49.js
-5510 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-49.js', 420, 438 ]
-5511 silly gunzTarPerm extractEntry node_modules/sax/test/parser-position.js
-5512 silly gunzTarPerm modified mode [ 'node_modules/sax/test/parser-position.js', 420, 438 ]
-5513 silly gunzTarPerm extractEntry node_modules/sax/test/issue-35.js
-5514 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-35.js', 420, 438 ]
-5515 silly gunzTarPerm extractEntry node_modules/sax/test/self-closing-child-strict.js
-5516 silly gunzTarPerm modified mode [ 'node_modules/sax/test/self-closing-child-strict.js',
-5516 silly gunzTarPerm   420,
-5516 silly gunzTarPerm   438 ]
-5517 silly gunzTarPerm extractEntry node_modules/sax/test/self-closing-child.js
-5518 silly gunzTarPerm modified mode [ 'node_modules/sax/test/self-closing-child.js', 420, 438 ]
-5519 silly gunzTarPerm extractEntry node_modules/sax/test/self-closing-tag.js
-5520 silly gunzTarPerm modified mode [ 'node_modules/sax/test/self-closing-tag.js', 420, 438 ]
-5521 silly gunzTarPerm extractEntry node_modules/sax/test/stray-ending.js
-5522 silly gunzTarPerm modified mode [ 'node_modules/sax/test/stray-ending.js', 420, 438 ]
-5523 silly gunzTarPerm extractEntry node_modules/sax/test/trailing-non-whitespace.js
-5524 silly gunzTarPerm modified mode [ 'node_modules/sax/test/trailing-non-whitespace.js', 420, 438 ]
-5525 silly gunzTarPerm extractEntry node_modules/sax/test/issue-30.js
-5526 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-30.js', 420, 438 ]
-5527 silly gunzTarPerm extractEntry node_modules/sax/test/unquoted.js
-5528 silly gunzTarPerm modified mode [ 'node_modules/sax/test/unquoted.js', 420, 438 ]
-5529 silly gunzTarPerm extractEntry node_modules/sax/test/issue-23.js
-5530 silly gunzTarPerm modified mode [ 'node_modules/sax/test/issue-23.js', 420, 438 ]
-5531 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-issue-41.js
-5532 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-issue-41.js', 420, 438 ]
-5533 silly gunzTarPerm extractEntry node_modules/sax/test/index.js
-5534 silly gunzTarPerm modified mode [ 'node_modules/sax/test/index.js', 420, 438 ]
-5535 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-rebinding.js
-5536 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-rebinding.js', 420, 438 ]
-5537 silly gunzTarPerm extractEntry node_modules/sax/test/cdata.js
-5538 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata.js', 420, 438 ]
-5539 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-strict.js
-5540 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-strict.js', 420, 438 ]
-5541 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-multiple.js
-5542 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-multiple.js', 420, 438 ]
-5543 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-unbound.js
-5544 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-unbound.js', 420, 438 ]
-5545 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-fake-end.js
-5546 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-fake-end.js', 420, 438 ]
-5547 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-xml-default-prefix-attribute.js
-5548 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-xml-default-prefix-attribute.js',
-5548 silly gunzTarPerm   420,
-5548 silly gunzTarPerm   438 ]
-5549 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-end-split.js
-5550 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-end-split.js', 420, 438 ]
-5551 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-xml-default-prefix.js
-5552 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-xml-default-prefix.js', 420, 438 ]
-5553 silly gunzTarPerm extractEntry node_modules/sax/test/cdata-chunked.js
-5554 silly gunzTarPerm modified mode [ 'node_modules/sax/test/cdata-chunked.js', 420, 438 ]
-5555 silly gunzTarPerm extractEntry node_modules/sax/test/xmlns-xml-default-redefine.js
-5556 silly gunzTarPerm modified mode [ 'node_modules/sax/test/xmlns-xml-default-redefine.js',
-5556 silly gunzTarPerm   420,
-5556 silly gunzTarPerm   438 ]
-5557 silly gunzTarPerm extractEntry node_modules/sax/test/script.js
-5558 silly gunzTarPerm modified mode [ 'node_modules/sax/test/script.js', 420, 438 ]
-5559 silly gunzTarPerm extractEntry node_modules/semver/package.json
-5560 silly gunzTarPerm modified mode [ 'node_modules/semver/package.json', 420, 438 ]
-5561 silly gunzTarPerm extractEntry node_modules/semver/README.md
-5562 silly gunzTarPerm modified mode [ 'node_modules/semver/README.md', 420, 438 ]
-5563 silly gunzTarPerm extractEntry node_modules/semver/LICENSE
-5564 silly gunzTarPerm modified mode [ 'node_modules/semver/LICENSE', 420, 438 ]
-5565 silly gunzTarPerm extractEntry node_modules/semver/semver.js
-5566 silly gunzTarPerm modified mode [ 'node_modules/semver/semver.js', 420, 438 ]
-5567 silly gunzTarPerm extractEntry node_modules/semver/bin/semver
-5568 silly gunzTarPerm modified mode [ 'node_modules/semver/bin/semver', 493, 511 ]
-5569 silly gunzTarPerm extractEntry node_modules/semver/range.bnf
-5570 silly gunzTarPerm modified mode [ 'node_modules/semver/range.bnf', 420, 438 ]
-5571 silly gunzTarPerm extractEntry node_modules/shelljs/package.json
-5572 silly gunzTarPerm modified mode [ 'node_modules/shelljs/package.json', 420, 438 ]
-5573 silly gunzTarPerm extractEntry node_modules/shelljs/.npmignore
-5574 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.npmignore', 420, 438 ]
-5575 silly gunzTarPerm extractEntry node_modules/shelljs/README.md
-5576 silly gunzTarPerm modified mode [ 'node_modules/shelljs/README.md', 420, 438 ]
-5577 silly gunzTarPerm extractEntry node_modules/shelljs/LICENSE
-5578 silly gunzTarPerm modified mode [ 'node_modules/shelljs/LICENSE', 420, 438 ]
-5579 silly gunzTarPerm extractEntry node_modules/shelljs/global.js
-5580 silly gunzTarPerm modified mode [ 'node_modules/shelljs/global.js', 420, 438 ]
-5581 silly gunzTarPerm extractEntry node_modules/shelljs/make.js
-5582 silly gunzTarPerm modified mode [ 'node_modules/shelljs/make.js', 420, 438 ]
-5583 silly gunzTarPerm extractEntry node_modules/shelljs/shell.js
-5584 silly gunzTarPerm modified mode [ 'node_modules/shelljs/shell.js', 420, 438 ]
-5585 silly gunzTarPerm extractEntry node_modules/shelljs/bin/shjs
-5586 silly gunzTarPerm modified mode [ 'node_modules/shelljs/bin/shjs', 493, 511 ]
-5587 silly gunzTarPerm extractEntry node_modules/shelljs/.documentup.json
-5588 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.documentup.json', 420, 438 ]
-5589 silly gunzTarPerm extractEntry node_modules/shelljs/.travis.yml
-5590 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.travis.yml', 420, 438 ]
-5591 silly gunzTarPerm extractEntry node_modules/shelljs/RELEASE.md
-5592 silly gunzTarPerm modified mode [ 'node_modules/shelljs/RELEASE.md', 420, 438 ]
-5593 silly gunzTarPerm extractEntry node_modules/shelljs/scripts/generate-docs.js
-5594 silly gunzTarPerm modified mode [ 'node_modules/shelljs/scripts/generate-docs.js', 493, 511 ]
-5595 silly gunzTarPerm extractEntry node_modules/shelljs/scripts/run-tests.js
-5596 silly gunzTarPerm modified mode [ 'node_modules/shelljs/scripts/run-tests.js', 493, 511 ]
-5597 silly gunzTarPerm extractEntry node_modules/shelljs/.jshintrc
-5598 silly gunzTarPerm modified mode [ 'node_modules/shelljs/.jshintrc', 420, 438 ]
-5599 silly gunzTarPerm extractEntry node_modules/shelljs/src/cat.js
-5600 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/cat.js', 420, 438 ]
-5601 silly gunzTarPerm extractEntry node_modules/shelljs/src/find.js
-5602 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/find.js', 420, 438 ]
-5603 silly gunzTarPerm extractEntry node_modules/shelljs/src/grep.js
-5604 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/grep.js', 420, 438 ]
-5605 silly gunzTarPerm extractEntry node_modules/shelljs/src/ln.js
-5606 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/ln.js', 420, 438 ]
-5607 silly gunzTarPerm extractEntry node_modules/shelljs/src/exec.js
-5608 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/exec.js', 420, 438 ]
-5609 silly gunzTarPerm extractEntry node_modules/shelljs/src/mkdir.js
-5610 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/mkdir.js', 420, 438 ]
-5611 silly gunzTarPerm extractEntry node_modules/shelljs/src/mv.js
-5612 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/mv.js', 420, 438 ]
-5613 silly gunzTarPerm extractEntry node_modules/shelljs/src/popd.js
-5614 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/popd.js', 420, 438 ]
-5615 silly gunzTarPerm extractEntry node_modules/shelljs/src/pushd.js
-5616 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/pushd.js', 420, 438 ]
-5617 silly gunzTarPerm extractEntry node_modules/shelljs/src/pwd.js
-5618 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/pwd.js', 420, 438 ]
-5619 silly gunzTarPerm extractEntry node_modules/shelljs/src/error.js
-5620 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/error.js', 420, 438 ]
-5621 silly gunzTarPerm extractEntry node_modules/shelljs/src/rm.js
-5622 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/rm.js', 420, 438 ]
-5623 silly gunzTarPerm extractEntry node_modules/shelljs/src/echo.js
-5624 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/echo.js', 420, 438 ]
-5625 silly gunzTarPerm extractEntry node_modules/shelljs/src/sed.js
-5626 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/sed.js', 420, 438 ]
-5627 silly gunzTarPerm extractEntry node_modules/shelljs/src/dirs.js
-5628 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/dirs.js', 420, 438 ]
-5629 silly gunzTarPerm extractEntry node_modules/shelljs/src/tempdir.js
-5630 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/tempdir.js', 420, 438 ]
-5631 silly gunzTarPerm extractEntry node_modules/shelljs/src/cp.js
-5632 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/cp.js', 420, 438 ]
-5633 silly gunzTarPerm extractEntry node_modules/shelljs/src/test.js
-5634 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/test.js', 420, 438 ]
-5635 silly gunzTarPerm extractEntry node_modules/shelljs/src/common.js
-5636 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/common.js', 420, 438 ]
-5637 silly gunzTarPerm extractEntry node_modules/shelljs/src/to.js
-5638 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/to.js', 420, 438 ]
-5639 silly gunzTarPerm extractEntry node_modules/shelljs/src/chmod.js
-5640 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/chmod.js', 420, 438 ]
-5641 silly gunzTarPerm extractEntry node_modules/shelljs/src/toEnd.js
-5642 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/toEnd.js', 420, 438 ]
-5643 silly gunzTarPerm extractEntry node_modules/shelljs/src/cd.js
-5644 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/cd.js', 420, 438 ]
-5645 silly gunzTarPerm extractEntry node_modules/shelljs/src/which.js
-5646 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/which.js', 420, 438 ]
-5647 silly gunzTarPerm extractEntry node_modules/shelljs/src/ls.js
-5648 silly gunzTarPerm modified mode [ 'node_modules/shelljs/src/ls.js', 420, 438 ]
-5649 silly gunzTarPerm extractEntry node_modules/simctl/package.json
-5650 silly gunzTarPerm modified mode [ 'node_modules/simctl/package.json', 420, 438 ]
-5651 silly gunzTarPerm extractEntry node_modules/simctl/.npmignore
-5652 silly gunzTarPerm modified mode [ 'node_modules/simctl/.npmignore', 420, 438 ]
-5653 silly gunzTarPerm extractEntry node_modules/simctl/README.md
-5654 silly gunzTarPerm modified mode [ 'node_modules/simctl/README.md', 420, 438 ]
-5655 silly gunzTarPerm extractEntry node_modules/simctl/LICENSE
-5656 silly gunzTarPerm modified mode [ 'node_modules/simctl/LICENSE', 420, 438 ]
-5657 silly gunzTarPerm extractEntry node_modules/simctl/simctl.js
-5658 silly gunzTarPerm modified mode [ 'node_modules/simctl/simctl.js', 420, 438 ]
-5659 silly gunzTarPerm extractEntry node_modules/simctl/.jscsrc
-5660 silly gunzTarPerm modified mode [ 'node_modules/simctl/.jscsrc', 420, 438 ]
-5661 silly gunzTarPerm extractEntry node_modules/simctl/lib/simctl-extensions.js
-5662 silly gunzTarPerm modified mode [ 'node_modules/simctl/lib/simctl-extensions.js', 420, 438 ]
-5663 silly gunzTarPerm extractEntry node_modules/simctl/lib/simctl-list-parser.js
-5664 silly gunzTarPerm modified mode [ 'node_modules/simctl/lib/simctl-list-parser.js', 420, 438 ]
-5665 silly gunzTarPerm extractEntry node_modules/simctl/spec/simctl-list-parser.spec.js
-5666 silly gunzTarPerm modified mode [ 'node_modules/simctl/spec/simctl-list-parser.spec.js',
-5666 silly gunzTarPerm   420,
-5666 silly gunzTarPerm   438 ]
-5667 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/package.json
-5668 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/package.json',
-5668 silly gunzTarPerm   420,
-5668 silly gunzTarPerm   438 ]
-5669 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.npmignore
-5670 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.npmignore',
-5670 silly gunzTarPerm   420,
-5670 silly gunzTarPerm   438 ]
-5671 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/README.md
-5672 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/README.md',
-5672 silly gunzTarPerm   420,
-5672 silly gunzTarPerm   438 ]
-5673 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/LICENSE
-5674 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/LICENSE', 420, 438 ]
-5675 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/global.js
-5676 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/global.js',
-5676 silly gunzTarPerm   420,
-5676 silly gunzTarPerm   438 ]
-5677 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/make.js
-5678 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/make.js', 420, 438 ]
-5679 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/shell.js
-5680 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/shell.js', 420, 438 ]
-5681 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/bin/shjs
-5682 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/bin/shjs', 493, 511 ]
-5683 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.travis.yml
-5684 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.travis.yml',
-5684 silly gunzTarPerm   420,
-5684 silly gunzTarPerm   438 ]
-5685 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.jshintrc
-5686 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.jshintrc',
-5686 silly gunzTarPerm   420,
-5686 silly gunzTarPerm   438 ]
-5687 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/scripts/generate-docs.js
-5688 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/scripts/generate-docs.js',
-5688 silly gunzTarPerm   493,
-5688 silly gunzTarPerm   511 ]
-5689 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/scripts/run-tests.js
-5690 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/scripts/run-tests.js',
-5690 silly gunzTarPerm   493,
-5690 silly gunzTarPerm   511 ]
-5691 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/.documentup.json
-5692 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/.documentup.json',
-5692 silly gunzTarPerm   420,
-5692 silly gunzTarPerm   438 ]
-5693 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/cat.js
-5694 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/cat.js',
-5694 silly gunzTarPerm   420,
-5694 silly gunzTarPerm   438 ]
-5695 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/exec.js
-5696 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/exec.js',
-5696 silly gunzTarPerm   420,
-5696 silly gunzTarPerm   438 ]
-5697 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/find.js
-5698 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/find.js',
-5698 silly gunzTarPerm   420,
-5698 silly gunzTarPerm   438 ]
-5699 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/grep.js
-5700 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/grep.js',
-5700 silly gunzTarPerm   420,
-5700 silly gunzTarPerm   438 ]
-5701 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/ls.js
-5702 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/ls.js',
-5702 silly gunzTarPerm   420,
-5702 silly gunzTarPerm   438 ]
-5703 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/error.js
-5704 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/error.js',
-5704 silly gunzTarPerm   420,
-5704 silly gunzTarPerm   438 ]
-5705 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/mv.js
-5706 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/mv.js',
-5706 silly gunzTarPerm   420,
-5706 silly gunzTarPerm   438 ]
-5707 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/popd.js
-5708 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/popd.js',
-5708 silly gunzTarPerm   420,
-5708 silly gunzTarPerm   438 ]
-5709 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/pushd.js
-5710 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/pushd.js',
-5710 silly gunzTarPerm   420,
-5710 silly gunzTarPerm   438 ]
-5711 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/pwd.js
-5712 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/pwd.js',
-5712 silly gunzTarPerm   420,
-5712 silly gunzTarPerm   438 ]
-5713 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/rm.js
-5714 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/rm.js',
-5714 silly gunzTarPerm   420,
-5714 silly gunzTarPerm   438 ]
-5715 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/echo.js
-5716 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/echo.js',
-5716 silly gunzTarPerm   420,
-5716 silly gunzTarPerm   438 ]
-5717 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/sed.js
-5718 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/sed.js',
-5718 silly gunzTarPerm   420,
-5718 silly gunzTarPerm   438 ]
-5719 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/dirs.js
-5720 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/dirs.js',
-5720 silly gunzTarPerm   420,
-5720 silly gunzTarPerm   438 ]
-5721 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/tempdir.js
-5722 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/tempdir.js',
-5722 silly gunzTarPerm   420,
-5722 silly gunzTarPerm   438 ]
-5723 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/cp.js
-5724 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/cp.js',
-5724 silly gunzTarPerm   420,
-5724 silly gunzTarPerm   438 ]
-5725 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/test.js
-5726 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/test.js',
-5726 silly gunzTarPerm   420,
-5726 silly gunzTarPerm   438 ]
-5727 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/common.js
-5728 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/common.js',
-5728 silly gunzTarPerm   420,
-5728 silly gunzTarPerm   438 ]
-5729 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/to.js
-5730 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/to.js',
-5730 silly gunzTarPerm   420,
-5730 silly gunzTarPerm   438 ]
-5731 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/chmod.js
-5732 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/chmod.js',
-5732 silly gunzTarPerm   420,
-5732 silly gunzTarPerm   438 ]
-5733 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/toEnd.js
-5734 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/toEnd.js',
-5734 silly gunzTarPerm   420,
-5734 silly gunzTarPerm   438 ]
-5735 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/cd.js
-5736 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/cd.js',
-5736 silly gunzTarPerm   420,
-5736 silly gunzTarPerm   438 ]
-5737 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/which.js
-5738 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/which.js',
-5738 silly gunzTarPerm   420,
-5738 silly gunzTarPerm   438 ]
-5739 silly gunzTarPerm extractEntry node_modules/simctl/node_modules/shelljs/src/mkdir.js
-5740 silly gunzTarPerm modified mode [ 'node_modules/simctl/node_modules/shelljs/src/mkdir.js',
-5740 silly gunzTarPerm   420,
-5740 silly gunzTarPerm   438 ]
-5741 silly gunzTarPerm extractEntry node_modules/simple-plist/package.json
-5742 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/package.json', 420, 438 ]
-5743 silly gunzTarPerm extractEntry node_modules/simple-plist/.npmignore
-5744 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/.npmignore', 420, 438 ]
-5745 silly gunzTarPerm extractEntry node_modules/simple-plist/README.md
-5746 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/README.md', 420, 438 ]
-5747 silly gunzTarPerm extractEntry node_modules/simple-plist/LICENSE
-5748 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/LICENSE', 420, 438 ]
-5749 silly gunzTarPerm extractEntry node_modules/simple-plist/simple-plist.js
-5750 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/simple-plist.js', 420, 438 ]
-5751 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/package.json
-5752 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/package.json',
-5752 silly gunzTarPerm   420,
-5752 silly gunzTarPerm   438 ]
-5753 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/.npmignore
-5754 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/.npmignore',
-5754 silly gunzTarPerm   420,
-5754 silly gunzTarPerm   438 ]
-5755 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/README.md
-5756 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/README.md',
-5756 silly gunzTarPerm   420,
-5756 silly gunzTarPerm   438 ]
-5757 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/bplistParser.js
-5758 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/bplistParser.js',
-5758 silly gunzTarPerm   420,
-5758 silly gunzTarPerm   438 ]
-5759 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/parseTest.js
-5760 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/parseTest.js',
-5760 silly gunzTarPerm   420,
-5760 silly gunzTarPerm   438 ]
-5761 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/airplay.bplist
-5762 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/airplay.bplist',
-5762 silly gunzTarPerm   420,
-5762 silly gunzTarPerm   438 ]
-5763 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/iTunes-small.bplist
-5764 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/iTunes-small.bplist',
-5764 silly gunzTarPerm   420,
-5764 silly gunzTarPerm   438 ]
-5765 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/sample1.bplist
-5766 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/sample1.bplist',
-5766 silly gunzTarPerm   420,
-5766 silly gunzTarPerm   438 ]
-5767 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/sample2.bplist
-5768 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/sample2.bplist',
-5768 silly gunzTarPerm   420,
-5768 silly gunzTarPerm   438 ]
-5769 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/uid.bplist
-5770 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/uid.bplist',
-5770 silly gunzTarPerm   420,
-5770 silly gunzTarPerm   438 ]
-5771 silly gunzTarPerm extractEntry node_modules/simple-plist/node_modules/bplist-parser/test/utf16.bplist
-5772 silly gunzTarPerm modified mode [ 'node_modules/simple-plist/node_modules/bplist-parser/test/utf16.bplist',
-5772 silly gunzTarPerm   420,
-5772 silly gunzTarPerm   438 ]
-5773 silly gunzTarPerm extractEntry node_modules/stream-buffers/package.json
-5774 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/package.json', 420, 438 ]
-5775 silly gunzTarPerm extractEntry node_modules/stream-buffers/README.md
-5776 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/README.md', 420, 438 ]
-5777 silly gunzTarPerm extractEntry node_modules/stream-buffers/.mailmap
-5778 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/.mailmap', 420, 438 ]
-5779 silly gunzTarPerm extractEntry node_modules/stream-buffers/.travis.yml
-5780 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/.travis.yml', 420, 438 ]
-5781 silly gunzTarPerm extractEntry node_modules/stream-buffers/UNLICENSE
-5782 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/UNLICENSE', 420, 438 ]
-5783 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/coverage.json
-5784 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/coverage.json',
-5784 silly gunzTarPerm   420,
-5784 silly gunzTarPerm   438 ]
-5785 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/prettify.js
-5786 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/prettify.js',
-5786 silly gunzTarPerm   420,
-5786 silly gunzTarPerm   438 ]
-5787 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/sorter.js
-5788 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/sorter.js',
-5788 silly gunzTarPerm   420,
-5788 silly gunzTarPerm   438 ]
-5789 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/base.css
-5790 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/base.css',
-5790 silly gunzTarPerm   420,
-5790 silly gunzTarPerm   438 ]
-5791 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/index.html
-5792 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/index.html',
-5792 silly gunzTarPerm   420,
-5792 silly gunzTarPerm   438 ]
-5793 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/constants.js.html
-5794 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/constants.js.html',
-5794 silly gunzTarPerm   420,
-5794 silly gunzTarPerm   438 ]
-5795 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/index.html
-5796 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/index.html',
-5796 silly gunzTarPerm   420,
-5796 silly gunzTarPerm   438 ]
-5797 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/readable_streambuffer.js.html
-5798 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/readable_streambuffer.js.html',
-5798 silly gunzTarPerm   420,
-5798 silly gunzTarPerm   438 ]
-5799 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/streambuffer.js.html
-5800 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/streambuffer.js.html',
-5800 silly gunzTarPerm   420,
-5800 silly gunzTarPerm   438 ]
-5801 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/lib/writable_streambuffer.js.html
-5802 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/lib/writable_streambuffer.js.html',
-5802 silly gunzTarPerm   420,
-5802 silly gunzTarPerm   438 ]
-5803 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/prettify.css
-5804 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/prettify.css',
-5804 silly gunzTarPerm   420,
-5804 silly gunzTarPerm   438 ]
-5805 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov-report/sort-arrow-sprite.png
-5806 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov-report/sort-arrow-sprite.png',
-5806 silly gunzTarPerm   420,
-5806 silly gunzTarPerm   438 ]
-5807 silly gunzTarPerm extractEntry node_modules/stream-buffers/coverage/lcov.info
-5808 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/coverage/lcov.info', 420, 438 ]
-5809 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/constants.js
-5810 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/constants.js', 420, 438 ]
-5811 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/readable_streambuffer.js
-5812 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/readable_streambuffer.js',
-5812 silly gunzTarPerm   420,
-5812 silly gunzTarPerm   438 ]
-5813 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/streambuffer.js
-5814 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/streambuffer.js', 420, 438 ]
-5815 silly gunzTarPerm extractEntry node_modules/stream-buffers/lib/writable_streambuffer.js
-5816 silly gunzTarPerm modified mode [ 'node_modules/stream-buffers/lib/writable_streambuffer.js',
-5816 silly gunzTarPerm   420,
-5816 silly gunzTarPerm   438 ]
-5817 silly gunzTarPerm extractEntry node_modules/tail/package.json
-5818 silly gunzTarPerm modified mode [ 'node_modules/tail/package.json', 420, 438 ]
-5819 silly gunzTarPerm extractEntry node_modules/tail/README.md
-5820 silly gunzTarPerm modified mode [ 'node_modules/tail/README.md', 420, 438 ]
-5821 silly gunzTarPerm extractEntry node_modules/tail/tail.js
-5822 silly gunzTarPerm modified mode [ 'node_modules/tail/tail.js', 420, 438 ]
-5823 silly gunzTarPerm extractEntry node_modules/underscore/package.json
-5824 silly gunzTarPerm modified mode [ 'node_modules/underscore/package.json', 420, 438 ]
-5825 silly gunzTarPerm extractEntry node_modules/underscore/README.md
-5826 silly gunzTarPerm modified mode [ 'node_modules/underscore/README.md', 420, 438 ]
-5827 silly gunzTarPerm extractEntry node_modules/underscore/LICENSE
-5828 silly gunzTarPerm modified mode [ 'node_modules/underscore/LICENSE', 420, 438 ]
-5829 silly gunzTarPerm extractEntry node_modules/underscore/underscore-min.js
-5830 silly gunzTarPerm modified mode [ 'node_modules/underscore/underscore-min.js', 420, 438 ]
-5831 silly gunzTarPerm extractEntry node_modules/underscore/underscore.js
-5832 silly gunzTarPerm modified mode [ 'node_modules/underscore/underscore.js', 420, 438 ]
-5833 silly gunzTarPerm extractEntry node_modules/underscore/underscore-min.map
-5834 silly gunzTarPerm modified mode [ 'node_modules/underscore/underscore-min.map', 420, 438 ]
-5835 silly gunzTarPerm extractEntry node_modules/unorm/package.json
-5836 silly gunzTarPerm modified mode [ 'node_modules/unorm/package.json', 420, 438 ]
-5837 silly gunzTarPerm extractEntry node_modules/unorm/README.md
-5838 silly gunzTarPerm modified mode [ 'node_modules/unorm/README.md', 420, 438 ]
-5839 silly gunzTarPerm extractEntry node_modules/unorm/LICENSE.md
-5840 silly gunzTarPerm modified mode [ 'node_modules/unorm/LICENSE.md', 420, 438 ]
-5841 silly gunzTarPerm extractEntry node_modules/unorm/lib/unorm.js
-5842 silly gunzTarPerm modified mode [ 'node_modules/unorm/lib/unorm.js', 420, 438 ]
-5843 silly gunzTarPerm extractEntry node_modules/util-deprecate/package.json
-5844 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/package.json', 420, 438 ]
-5845 silly gunzTarPerm extractEntry node_modules/util-deprecate/README.md
-5846 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/README.md', 420, 438 ]
-5847 silly gunzTarPerm extractEntry node_modules/util-deprecate/LICENSE
-5848 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/LICENSE', 420, 438 ]
-5849 silly gunzTarPerm extractEntry node_modules/util-deprecate/browser.js
-5850 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/browser.js', 420, 438 ]
-5851 silly gunzTarPerm extractEntry node_modules/util-deprecate/node.js
-5852 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/node.js', 420, 438 ]
-5853 silly gunzTarPerm extractEntry node_modules/util-deprecate/History.md
-5854 silly gunzTarPerm modified mode [ 'node_modules/util-deprecate/History.md', 420, 438 ]
-5855 silly gunzTarPerm extractEntry node_modules/wrappy/package.json
-5856 silly gunzTarPerm modified mode [ 'node_modules/wrappy/package.json', 420, 438 ]
-5857 silly gunzTarPerm extractEntry node_modules/wrappy/README.md
-5858 silly gunzTarPerm modified mode [ 'node_modules/wrappy/README.md', 420, 438 ]
-5859 silly gunzTarPerm extractEntry node_modules/wrappy/LICENSE
-5860 silly gunzTarPerm modified mode [ 'node_modules/wrappy/LICENSE', 420, 438 ]
-5861 silly gunzTarPerm extractEntry node_modules/wrappy/wrappy.js
-5862 silly gunzTarPerm modified mode [ 'node_modules/wrappy/wrappy.js', 420, 438 ]
-5863 silly gunzTarPerm extractEntry node_modules/xcode/package.json
-5864 silly gunzTarPerm modified mode [ 'node_modules/xcode/package.json', 420, 438 ]
-5865 silly gunzTarPerm extractEntry node_modules/xcode/.npmignore
-5866 silly gunzTarPerm modified mode [ 'node_modules/xcode/.npmignore', 420, 438 ]
-5867 silly gunzTarPerm extractEntry node_modules/xcode/README.md
-5868 silly gunzTarPerm modified mode [ 'node_modules/xcode/README.md', 420, 438 ]
-5869 silly gunzTarPerm extractEntry node_modules/xcode/LICENSE
-5870 silly gunzTarPerm modified mode [ 'node_modules/xcode/LICENSE', 420, 438 ]
-5871 silly gunzTarPerm extractEntry node_modules/xcode/index.js
-5872 silly gunzTarPerm modified mode [ 'node_modules/xcode/index.js', 420, 438 ]
-5873 silly gunzTarPerm extractEntry node_modules/xcode/AUTHORS
-5874 silly gunzTarPerm modified mode [ 'node_modules/xcode/AUTHORS', 420, 438 ]
-5875 silly gunzTarPerm extractEntry node_modules/xcode/Makefile
-5876 silly gunzTarPerm modified mode [ 'node_modules/xcode/Makefile', 420, 438 ]
-5877 silly gunzTarPerm extractEntry node_modules/xcode/lib/parseJob.js
-5878 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/parseJob.js', 420, 438 ]
-5879 silly gunzTarPerm extractEntry node_modules/xcode/lib/pbxFile.js
-5880 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/pbxFile.js', 420, 438 ]
-5881 silly gunzTarPerm extractEntry node_modules/xcode/lib/pbxProject.js
-5882 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/pbxProject.js', 420, 438 ]
-5883 silly gunzTarPerm extractEntry node_modules/xcode/lib/pbxWriter.js
-5884 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/pbxWriter.js', 420, 438 ]
-5885 silly gunzTarPerm extractEntry node_modules/xcode/lib/parser/pbxproj.js
-5886 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/parser/pbxproj.js', 420, 438 ]
-5887 silly gunzTarPerm extractEntry node_modules/xcode/lib/parser/pbxproj.pegjs
-5888 silly gunzTarPerm modified mode [ 'node_modules/xcode/lib/parser/pbxproj.pegjs', 420, 438 ]
-5889 silly gunzTarPerm extractEntry node_modules/xml-escape/package.json
-5890 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/package.json', 420, 438 ]
-5891 silly gunzTarPerm extractEntry node_modules/xml-escape/README.md
-5892 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/README.md', 420, 438 ]
-5893 silly gunzTarPerm extractEntry node_modules/xml-escape/LICENSE
-5894 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/LICENSE', 420, 438 ]
-5895 silly gunzTarPerm extractEntry node_modules/xml-escape/index.js
-5896 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/index.js', 420, 438 ]
-5897 silly gunzTarPerm extractEntry node_modules/xml-escape/test.js
-5898 silly gunzTarPerm modified mode [ 'node_modules/xml-escape/test.js', 420, 438 ]
-5899 silly gunzTarPerm extractEntry node_modules/xmlbuilder/package.json
-5900 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/package.json', 420, 438 ]
-5901 silly gunzTarPerm extractEntry node_modules/xmlbuilder/.npmignore
-5902 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/.npmignore', 420, 438 ]
-5903 silly gunzTarPerm extractEntry node_modules/xmlbuilder/README.md
-5904 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/README.md', 420, 438 ]
-5905 silly gunzTarPerm extractEntry node_modules/xmlbuilder/LICENSE
-5906 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/LICENSE', 420, 438 ]
-5907 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLAttribute.js
-5908 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLAttribute.js', 420, 438 ]
-5909 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDElement.js
-5910 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDElement.js', 420, 438 ]
-5911 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDEntity.js
-5912 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDEntity.js', 420, 438 ]
-5913 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDNotation.js
-5914 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDNotation.js', 420, 438 ]
-5915 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDTDAttList.js
-5916 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDTDAttList.js', 420, 438 ]
-5917 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDocType.js
-5918 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDocType.js', 420, 438 ]
-5919 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLElement.js
-5920 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLElement.js', 420, 438 ]
-5921 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLNode.js
-5922 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLNode.js', 420, 438 ]
-5923 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLProcessingInstruction.js
-5924 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLProcessingInstruction.js',
-5924 silly gunzTarPerm   420,
-5924 silly gunzTarPerm   438 ]
-5925 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLRaw.js
-5926 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLRaw.js', 420, 438 ]
-5927 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLComment.js
-5928 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLComment.js', 420, 438 ]
-5929 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLStringifier.js
-5930 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLStringifier.js', 420, 438 ]
-5931 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLCData.js
-5932 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLCData.js', 420, 438 ]
-5933 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLText.js
-5934 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLText.js', 420, 438 ]
-5935 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLBuilder.js
-5936 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLBuilder.js', 420, 438 ]
-5937 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/index.js
-5938 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/index.js', 420, 438 ]
-5939 silly gunzTarPerm extractEntry node_modules/xmlbuilder/lib/XMLDeclaration.js
-5940 silly gunzTarPerm modified mode [ 'node_modules/xmlbuilder/lib/XMLDeclaration.js', 420, 438 ]
-5941 silly gunzTarPerm extractEntry node_modules/xmldom/package.json
-5942 silly gunzTarPerm modified mode [ 'node_modules/xmldom/package.json', 420, 438 ]
-5943 silly gunzTarPerm extractEntry node_modules/xmldom/.npmignore
-5944 silly gunzTarPerm modified mode [ 'node_modules/xmldom/.npmignore', 420, 438 ]
-5945 silly gunzTarPerm extractEntry node_modules/xmldom/LICENSE
-5946 silly gunzTarPerm modified mode [ 'node_modules/xmldom/LICENSE', 420, 438 ]
-5947 silly gunzTarPerm extractEntry node_modules/xmldom/__package__.js
-5948 silly gunzTarPerm modified mode [ 'node_modules/xmldom/__package__.js', 420, 438 ]
-5949 silly gunzTarPerm extractEntry node_modules/xmldom/dom.js
-5950 silly gunzTarPerm modified mode [ 'node_modules/xmldom/dom.js', 420, 438 ]
-5951 silly gunzTarPerm extractEntry node_modules/xmldom/dom-parser.js
-5952 silly gunzTarPerm modified mode [ 'node_modules/xmldom/dom-parser.js', 420, 438 ]
-5953 silly gunzTarPerm extractEntry node_modules/xmldom/sax.js
-5954 silly gunzTarPerm modified mode [ 'node_modules/xmldom/sax.js', 420, 438 ]
-5955 silly gunzTarPerm extractEntry node_modules/xmldom/.travis.yml
-5956 silly gunzTarPerm modified mode [ 'node_modules/xmldom/.travis.yml', 420, 438 ]
-5957 silly gunzTarPerm extractEntry node_modules/xmldom/changelog
-5958 silly gunzTarPerm modified mode [ 'node_modules/xmldom/changelog', 420, 438 ]
-5959 silly gunzTarPerm extractEntry node_modules/xmldom/readme.md
-5960 silly gunzTarPerm modified mode [ 'node_modules/xmldom/readme.md', 420, 438 ]
-5961 silly gunzTarPerm extractEntry node_modules/xmldom/component.json
-5962 silly gunzTarPerm modified mode [ 'node_modules/xmldom/component.json', 420, 438 ]
-5963 silly doParallel preinstall 9
-5964 silly preinstall base64-js D:\my\miao\miaomiao\node_modules\.staging\base64-js-5c1787fbe1bfc3c9e4d61dc3027784fd
-5965 info lifecycle base64-js@1.1.2~preinstall: base64-js@1.1.2
-5966 silly preinstall pegjs D:\my\miao\miaomiao\node_modules\.staging\pegjs-0c4dc2389a7e57832a2fd0ea27e65c48
-5967 info lifecycle pegjs@0.10.0~preinstall: pegjs@0.10.0
-5968 silly preinstall stream-buffers D:\my\miao\miaomiao\node_modules\.staging\stream-buffers-e87baaf8a9955e3ae726aeca197aa30e
-5969 info lifecycle stream-buffers@2.2.0~preinstall: stream-buffers@2.2.0
-5970 silly preinstall bplist-creator D:\my\miao\miaomiao\node_modules\.staging\bplist-creator-4ba3843fe963017ba6823478568c1aaf
-5971 info lifecycle bplist-creator@0.0.7~preinstall: bplist-creator@0.0.7
-5972 silly preinstall xmlbuilder D:\my\miao\miaomiao\node_modules\.staging\xmlbuilder-665842ec8a22ed2cdf68ac2d6dc58449
-5973 info lifecycle xmlbuilder@8.2.2~preinstall: xmlbuilder@8.2.2
-5974 silly preinstall plist D:\my\miao\miaomiao\node_modules\.staging\plist-bd901baec826b0e0111f7b3069257555
-5975 info lifecycle plist@2.0.1~preinstall: plist@2.0.1
-5976 silly preinstall simple-plist D:\my\miao\miaomiao\node_modules\.staging\simple-plist-9289b236160454c6cc13b47c12a6df29
-5977 info lifecycle simple-plist@0.2.1~preinstall: simple-plist@0.2.1
-5978 silly preinstall xcode D:\my\miao\miaomiao\node_modules\.staging\xcode-8e03bd863748e03876d9f4aacfe3d34b
-5979 info lifecycle xcode@0.9.3~preinstall: xcode@0.9.3
-5980 silly preinstall cordova-ios D:\my\miao\miaomiao\node_modules\.staging\cordova-ios-85bc741f9d6ea59da9e70b73d321e52e
-5981 info lifecycle cordova-ios@4.4.0~preinstall: cordova-ios@4.4.0
-5982 silly lifecycle base64-js@1.1.2~preinstall: no script for preinstall, continuing
-5983 silly lifecycle pegjs@0.10.0~preinstall: no script for preinstall, continuing
-5984 silly lifecycle stream-buffers@2.2.0~preinstall: no script for preinstall, continuing
-5985 silly lifecycle bplist-creator@0.0.7~preinstall: no script for preinstall, continuing
-5986 silly lifecycle xmlbuilder@8.2.2~preinstall: no script for preinstall, continuing
-5987 silly lifecycle plist@2.0.1~preinstall: no script for preinstall, continuing
-5988 silly lifecycle simple-plist@0.2.1~preinstall: no script for preinstall, continuing
-5989 silly lifecycle xcode@0.9.3~preinstall: no script for preinstall, continuing
-5990 silly lifecycle cordova-ios@4.4.0~preinstall: no script for preinstall, continuing
-5991 silly doReverseSerial remove 0
-5992 silly doSerial move 0
-5993 silly doSerial finalize 9
-5994 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\base64-js
-5995 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\pegjs
-5996 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\stream-buffers
-5997 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\bplist-creator
-5998 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\xmlbuilder
-5999 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\plist
-6000 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\simple-plist
-6001 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode
-6002 silly finalize D:\my\miao\miaomiao\node_modules\cordova-ios
-6003 silly doSerial build 9
-6004 silly build base64-js
-6005 info linkStuff base64-js@1.1.2
-6006 silly linkStuff base64-js@1.1.2 has D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules as its parent node_modules
-6007 verbose linkBins base64-js@1.1.2
-6008 verbose linkMans base64-js@1.1.2
-6009 verbose rebuildBundles base64-js@1.1.2
-6010 silly build pegjs
-6011 info linkStuff pegjs@0.10.0
-6012 silly linkStuff pegjs@0.10.0 has D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules as its parent node_modules
-6013 verbose linkBins pegjs@0.10.0
-6014 verbose link bins [ { pegjs: 'bin/pegjs' },
-6014 verbose link bins   'D:\\my\\miao\\miaomiao\\node_modules\\cordova-ios\\node_modules\\xcode\\node_modules\\.bin',
-6014 verbose link bins   false ]
-6015 verbose linkMans pegjs@0.10.0
-6016 verbose rebuildBundles pegjs@0.10.0
-6017 verbose unlock done using C:\Users\Ben\AppData\Roaming\npm-cache\_locks\staging-74b969ae5f7bd371.lock for D:\my\miao\miaomiao\node_modules\.staging
-6018 silly rollbackFailedOptional Starting
-6019 silly rollbackFailedOptional Finishing
-6020 silly runTopLevelLifecycles Starting
-6021 silly runTopLevelLifecycles Finishing
-6022 silly install printInstalled
-6023 warn EPACKAGEJSON ionic-tabs@1.1.1 No repository field.
-6024 warn EPACKAGEJSON ionic-tabs@1.1.1 No license field.
-6025 verbose stack Error: ENOENT: no such file or directory, chmod 'D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\pegjs\bin\pegjs'
-6025 verbose stack     at Error (native)
-6026 verbose cwd D:\my\miao\miaomiao
-6027 error Windows_NT 10.0.14393
-6028 error argv "D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Web\\External\\node.exe" "D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Web\\External\\node_modules\\npm\\bin\\npm-cli.js" "install"
-6029 error node v5.4.1
-6030 error npm  v3.3.4
-6031 error path D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\pegjs\bin\pegjs
-6032 error code ENOENT
-6033 error errno -4058
-6034 error syscall chmod
-6035 error enoent ENOENT: no such file or directory, chmod 'D:\my\miao\miaomiao\node_modules\cordova-ios\node_modules\xcode\node_modules\pegjs\bin\pegjs'
-6035 error enoent This is most likely not a problem with npm itself
-6035 error enoent and is related to npm not being able to find a file.
-6036 verbose exit [ -4058, true ]

+ 3 - 2
miaomiao/package.json

xqd xqd xqd
@@ -3,6 +3,7 @@
   "version": "1.1.1",
   "description": "An Ionic project",
   "dependencies": {
+    "cordova-android": "^6.2.3",
     "cordova-hot-code-push-plugin": "~1.5.3",
     "cordova-ios": "^4.4.0",
     "cordova-plugin-actionsheet": "2.3.3",
@@ -27,7 +28,7 @@
     "gulp-sass": "^2.0.4",
     "ionic-plugin-keyboard": "~1.0.9",
     "jpush-phonegap-plugin": "^3.2.3",
-    "phonegap-plugin-barcodescanner": "https://github.com/phonegap/phonegap-plugin-barcodescanner.git"
+    "phonegap-plugin-barcodescanner": "git+https://github.com/phonegap/phonegap-plugin-barcodescanner.git"
   },
   "devDependencies": {
     "@ionic/cli-plugin-ionic1": "1.1.2",
@@ -92,4 +93,4 @@
       }
     }
   }
-}
+}

+ 0 - 17
miaomiao/plugins/android.json

xqd
@@ -37,23 +37,6 @@
         },
         "cordova-plugin-statusbar": {
             "PACKAGE_NAME": "com.miaomiao.app"
-        },
-        "cordova-plugin-wechat": {
-            "WECHATAPPID": "wxc5181c0d406023e6",
-            "PACKAGE_NAME": "com.miaomiao.app"
-        },
-        "cordova-plugin-whitelist": {
-            "PACKAGE_NAME": "com.miaomiao.app"
-        },
-        "ionic-plugin-keyboard": {
-            "PACKAGE_NAME": "com.miaomiao.app"
-        },
-        "jpush-phonegap-plugin": {
-            "APP_KEY": "041b70b4c7eee686870a32cd",
-            "PACKAGE_NAME": "com.miaomiao.app"
-        },
-        "phonegap-plugin-barcodescanner": {
-            "PACKAGE_NAME": "com.miaomiao.app"
         }
     },
     "dependent_plugins": {

+ 55 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/README.md

xqd
@@ -0,0 +1,55 @@
+## cordova-plugin-alipay ##
+
+Makes your Cordova application enable to use the [Alipay SDK](https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.hT44dE&treeId=54&articleId=104509&docType=1)
+for mobile payment with Alipay App or Mobile Web. Requires cordova-android 4.0 or greater.
+
+### ChangeLogs
+  本cordova插件是基于支付宝App支付SDK的Demo实现
+ - 升级支付宝SDK版本到20160825;
+ - 修改了一些bug;
+ - 支持Android和iOS Alipay SDK
+###主要功能
+
+ - 主要功能是:服务器把订单信息签名后,调用该插件调用支付宝sdk进行支付,支付完成后如支付成功,如果是9000状态,还要去服务端去验证是否真正支付
+
+### Install 安装
+
+The following directions are for cordova-cli (most people).  
+
+* Open an existing cordova project, with cordova-android 4.0.0+, and using the latest CLI. TBS X5  variables can be configured as an option when installing the plugin
+* Add this plugin
+
+  ```sh
+  cordova plugin add https://github.com/offbye/cordova-plugin-alipay.git --variable PARTNER_ID=[你的商户PID可以在账户中查询]
+  ```
+  (对于android,可以不传PARTNER_ID)
+
+   offline:下载后再进行安装 `cordova plugin add  YOUR_DIR`
+
+### 支持平台
+
+		Android IOS
+
+### Android API
+
+* js调用插件方法
+
+```js
+
+    //第一步:订单在服务端签名生成订单信息,具体请参考官网进行签名处理
+    var payInfo  = "xxxx";
+
+    //第二步:调用支付插件        	
+    cordova.plugins.AliPay.pay(payInfo,function success(e){},function error(e){});
+
+	 //e.resultStatus  状态代码  e.result  本次操作返回的结果数据 e.memo 提示信息
+	 //e.resultStatus  9000  订单支付成功 ;8000 正在处理中  调用function success
+	 //e.resultStatus  4000  订单支付失败 ;6001  用户中途取消 ;6002 网络连接出错  调用function error
+	 //当e.resultStatus为9000时,请去服务端验证支付结果
+	 			/**
+				 * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
+				 * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
+				 * docType=1) 建议商户依赖异步通知
+				 */
+
+```

Різницю між файлами не показано, бо вона завелика
+ 93 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/package.json


+ 76 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/plugin.xml

xqd
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
+xmlns:android="http://schemas.android.com/apk/res/android"
+    id="cordova-plugin-offbye-alipay"
+    version="1.0.1">
+    <name>AliPay</name>
+
+    <preference name="PARTNER_ID"/>
+    <js-module src="www/AliPay.js" name="AliPay">
+     		<clobbers target="cordova.plugins.AliPay" />
+    </js-module>
+    <platform name="android">
+        <config-file target="res/xml/config.xml" parent="/*">
+            <feature name="AliPay">
+                <param name="android-package" value="com.offbye.cordova.alipay.AliPay"/>
+            </feature>
+        </config-file>
+         <config-file target="AndroidManifest.xml" parent="/manifest">
+		      <uses-permission android:name="android.permission.INTERNET" />
+		      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+		      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+		      <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+		      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+        </config-file>
+        <config-file target="AndroidManifest.xml" parent="/manifest/application">
+                 <!-- alipay sdk begin -->
+        <activity
+            android:name="com.alipay.sdk.app.H5PayActivity"
+            android:configChanges="orientation|keyboardHidden|navigation|screenSize"
+            android:exported="false"
+            android:screenOrientation="behind"
+            android:windowSoftInputMode="adjustResize|stateHidden" >
+        </activity>
+        <!-- alipay sdk end -->
+        </config-file>
+        <source-file src="src/android/libs/alipaySdk-20160825.jar" target-dir="libs"/>
+        <source-file src="src/android/AliPay.java" target-dir="src/com/offbye/cordova/alipay" />
+        <source-file src="src/android/PayResult.java" target-dir="src/com/offbye/cordova/alipay" />
+    </platform>
+    <platform name="ios">
+        <config-file target="config.xml" parent="/widget">
+        <preference name="partner" value="$PARTNER_ID" />
+        <feature name="AliPay">
+            <param name="ios-package" value="AlipayPlugin" />
+            <param name="onload" value="true" />
+          </feature>
+        </config-file>
+
+        <config-file target="*-Info.plist" parent="CFBundleURLTypes">
+          <array>
+              <dict>
+                  <key>CFBundleURLName</key>
+                  <string>alipay</string>
+                  <key>CFBundleURLSchemes</key>
+                  <array>
+                      <string>a$PARTNER_ID</string>
+                  </array>
+              </dict>
+          </array>
+        </config-file>
+
+        <framework src="CoreTelephony.framework" weak="true" />
+        <framework src="Security.framework" weak="true" />
+        <framework src="SystemConfiguration.framework" weak="true" />
+        <framework src="CoreMotion.framework" weak="true" />
+        <framework src="CFNetwork.framework" weak="true" />
+        <framework src="libc++.tbd" weak="true" />
+
+        <framework src="src/ios/lib/AlipaySDK.framework" custom="true" />
+        <resource-file src="src/lib/AlipaySDK.bundle"/>
+
+        <header-file src="src/ios/AlipayPlugin.h"/>
+        <source-file src="src/ios/AlipayPlugin.m"/>
+
+    </platform>
+</plugin>

+ 109 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/src/android/AliPay.java

xqd
@@ -0,0 +1,109 @@
+package com.offbye.cordova.alipay;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PluginResult;
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.alipay.sdk.app.PayTask;
+
+public class AliPay extends CordovaPlugin {
+
+	private static final int SDK_PAY_FLAG = 1;
+	private static String TAG = "AliPay";
+
+	private Handler mHandler = new Handler() {
+		public void handleMessage(Message msg) {
+			switch (msg.what) {
+			case SDK_PAY_FLAG: {
+				PayResult payResult = new PayResult((String) msg.obj);
+				/**
+				 * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
+				 * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
+				 * docType=1) 建议商户依赖异步通知
+				 */
+				String resultInfo = payResult.getResult();// 同步返回需要验证的信息
+
+				String resultStatus = payResult.getResultStatus();
+				if (TextUtils.equals(resultStatus, "9000")) {
+					Toast.makeText(cordova.getActivity(), "支付成功",
+							Toast.LENGTH_SHORT).show();
+				} else {
+
+					if (TextUtils.equals(resultStatus, "8000")) {
+						Toast.makeText(cordova.getActivity(), "支付结果确认中",
+								Toast.LENGTH_SHORT).show();
+					} else {
+						Toast.makeText(cordova.getActivity(), "支付失败",
+								Toast.LENGTH_SHORT).show();
+					}
+				}
+				break;
+			}
+			default:
+				break;
+			}
+		}
+	};
+
+	@Override
+	public boolean execute(String action, JSONArray args,
+			final CallbackContext callbackContext) throws JSONException {
+		PluginResult result = null;
+		if ("pay".equals(action)) {
+
+			 //订单信息在服务端签名后返回
+			 final String payInfo = args.getString(0);
+
+			 if (payInfo == null || payInfo.equals("") || payInfo.equals("null")) {
+				callbackContext.error("Please enter order information");
+			 	return true;
+			 }
+
+			cordova.getThreadPool().execute(new Runnable() {
+				@Override
+				public void run() {
+					Log.i(TAG, " 构造PayTask 对象 ");
+					PayTask alipay = new PayTask(cordova.getActivity());
+					Log.i(TAG, " 调用支付接口,获取支付结果 ");
+					String result = alipay.pay(payInfo, true);
+
+					// 更新主ui的Toast
+					Message msg = new Message();
+					msg.what = SDK_PAY_FLAG;
+					msg.obj = result;
+					mHandler.sendMessage(msg);
+
+					PayResult payResult = new PayResult(result);
+					if (TextUtils.equals(payResult.getResultStatus(), "9000")) {
+						Log.i(TAG, " 9000则代表支付成功,具体状态码代表含义可参考接口文档 ");
+						callbackContext.success(payResult.toJson());
+					} else {
+						Log.i(TAG, " 为非9000则代表可能支付失败 ");
+						if (TextUtils.equals(payResult.getResultStatus(),
+								"8000")) {
+							Log.i(TAG,
+									" 8000代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态) ");
+							callbackContext.success(payResult.toJson());
+						} else {
+							Log.i(TAG, " 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误 ");
+							callbackContext.error(payResult.toJson());
+						}
+					}
+				}
+			});
+			return true;
+		} else {
+			callbackContext.error("no such method:" + action);
+			return false;
+		}
+	}
+
+}

+ 1 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/src/android/PayResult.java

xqd
@@ -0,0 +1 @@
+package com.offbye.cordova.alipay;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import android.text.TextUtils;

public class PayResult {
	private String resultStatus;
	private String result;
	private String memo;

	public PayResult(String rawResult) {

		if (TextUtils.isEmpty(rawResult))
			return;

		String[] resultParams = rawResult.split(";");
		for (String resultParam : resultParams) {
			if (resultParam.startsWith("resultStatus")) {
				resultStatus = gatValue(resultParam, "resultStatus");
			}
			if (resultParam.startsWith("result")) {
				result = gatValue(resultParam, "result");
			}
			if (resultParam.startsWith("memo")) {
				memo = gatValue(resultParam, "memo");
			}
		}
	}

	@Override
	public String toString() {
		return "resultStatus={" + resultStatus + "};memo={" + memo
				+ "};result={" + result + "}";
	}
    public JSONObject toJson(){
        Map<String, String> payResultsMap = new HashMap<String, String>() {{
            put("resultStatus", resultStatus);
            put("memo", memo);
            put("result", result);
        }};
        return new JSONObject(payResultsMap);
    }

	private String gatValue(String content, String key) {
		String prefix = key + "={";
		return content.substring(content.indexOf(prefix) + prefix.length(),
				content.lastIndexOf("}"));
	}

	/**
	 * @return the resultStatus
	 */
	public String getResultStatus() {
		return resultStatus;
	}

	/**
	 * @return the memo
	 */
	public String getMemo() {
		return memo;
	}

	/**
	 * @return the result
	 */
	public String getResult() {
		return result;
	}
}

BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/android/libs/alipaySdk-20160825.jar


+ 11 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/AlipayPlugin.h

xqd
@@ -0,0 +1,11 @@
+#import <Cordova/CDV.h>
+
+@interface AlipayPlugin : CDVPlugin
+
+@property(nonatomic,strong)NSString *partner;
+// @property(nonatomic,strong)NSString *seller;
+// @property(nonatomic,strong)NSString *privateKey;
+@property(nonatomic,strong)NSString *currentCallbackId;
+
+- (void) pay:(CDVInvokedUrlCommand*)command;
+@end

+ 83 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/AlipayPlugin.m

xqd
@@ -0,0 +1,83 @@
+#import "AlipayPlugin.h"
+#import <AlipaySDK/AlipaySDK.h>
+
+@implementation AlipayPlugin
+
+-(void)pluginInitialize{
+    CDVViewController *viewController = (CDVViewController *)self.viewController;
+    self.partner = [viewController.settings objectForKey:@"partner"];
+}
+
+- (void) pay:(CDVInvokedUrlCommand*)command
+{
+    self.currentCallbackId = command.callbackId;
+    //partner和seller获取失败,提示
+    if ([self.partner length] == 0)
+    {
+        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
+                                                        message:@"缺少partner。"
+                                                       delegate:self
+                                              cancelButtonTitle:@"确定"
+                                              otherButtonTitles:nil];
+        [alert show];
+        return;
+    }
+
+    //从API请求获取支付信息
+    NSString *signedString = [command argumentAtIndex:0];
+
+    if (signedString != nil) {
+
+        [[AlipaySDK defaultService] payOrder:signedString fromScheme:[NSString stringWithFormat:@"a%@", self.partner] callback:^(NSDictionary *resultDic) {
+            if ([[resultDic objectForKey:@"resultStatus"]  isEqual: @"9000"]) {
+                [self successWithCallbackID:self.currentCallbackId messageAsDictionary:resultDic];
+            } else {
+                [self failWithCallbackID:self.currentCallbackId messageAsDictionary:resultDic];
+            }
+            
+            NSLog(@"reslut = %@",resultDic);
+        }];
+
+    }
+}
+
+- (void)handleOpenURL:(NSNotification *)notification
+{
+    NSURL* url = [notification object];
+    
+    if ([url isKindOfClass:[NSURL class]] && [url.scheme isEqualToString:[NSString stringWithFormat:@"a%@", self.partner]])
+    {
+        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
+            if ([[resultDic objectForKey:@"resultStatus"]  isEqual: @"9000"]) {
+                [self successWithCallbackID:self.currentCallbackId messageAsDictionary:resultDic];
+            } else {
+                [self failWithCallbackID:self.currentCallbackId messageAsDictionary:resultDic];
+            }
+        }];
+    }
+}
+
+- (void)successWithCallbackID:(NSString *)callbackID withMessage:(NSString *)message
+{
+    CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
+    [self.commandDelegate sendPluginResult:commandResult callbackId:callbackID];
+}
+
+- (void)failWithCallbackID:(NSString *)callbackID withMessage:(NSString *)message
+{
+    CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:message];
+    [self.commandDelegate sendPluginResult:commandResult callbackId:callbackID];
+}
+- (void)successWithCallbackID:(NSString *)callbackID messageAsDictionary:(NSDictionary *)message
+{
+    CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message];
+    [self.commandDelegate sendPluginResult:commandResult callbackId:callbackID];
+}
+
+- (void)failWithCallbackID:(NSString *)callbackID messageAsDictionary:(NSDictionary *)message
+{
+    CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:message];
+    [self.commandDelegate sendPluginResult:commandResult callbackId:callbackID];
+}
+
+@end

BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/bar@2x.png


BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/refresh@2x.png


BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/refresh_click@2x.png


BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/shutdown@2x.png


BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.bundle/shutdown_click@2x.png


BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/AlipaySDK


+ 33 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/Headers/APayAuthInfo.h

xqd
@@ -0,0 +1,33 @@
+//
+//  APAuthInfo.h
+//  AliSDKDemo
+//
+//  Created by 方彬 on 14-7-18.
+//  Copyright (c) 2014年 Alipay.com. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface APayAuthInfo : NSObject
+
+@property(nonatomic, copy)NSString *appID;
+@property(nonatomic, copy)NSString *pid;
+@property(nonatomic, copy)NSString *redirectUri;
+
+/**
+ *  初始化AuthInfo
+ *
+ *  @param appIDStr     应用ID
+ *  @param productIDStr 产品码 该商户在aboss签约的产品,用户获取pid获取的参数
+ *  @param pidStr       商户ID   可不填
+ *  @param uriStr       授权的应用回调地址  比如:alidemo://auth
+ *
+ *  @return authinfo实例
+ */
+- (id)initWithAppID:(NSString *)appIDStr
+                pid:(NSString *)pidStr
+        redirectUri:(NSString *)uriStr;
+
+- (NSString *)description;
+- (NSString *)wapDescription;
+@end

+ 177 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/Headers/AlipaySDK.h

xqd
@@ -0,0 +1,177 @@
+//
+//  AlipaySDK.h
+//  AlipaySDK
+//
+//  Created by 方彬 on 14-4-28.
+//  Copyright (c) 2014年 Alipay. All rights reserved.
+//
+
+
+////////////////////////////////////////////////////////
+////////////////version:2.1  motify:2014.12.24//////////
+///////////////////Merry Christmas=。=//////////////////
+////////////////////////////////////////////////////////
+
+
+#import "APayAuthInfo.h"
+typedef enum {
+    ALIPAY_TIDFACTOR_IMEI,
+    ALIPAY_TIDFACTOR_IMSI,
+    ALIPAY_TIDFACTOR_TID,
+    ALIPAY_TIDFACTOR_CLIENTKEY,
+    ALIPAY_TIDFACTOR_VIMEI,
+    ALIPAY_TIDFACTOR_VIMSI,
+    ALIPAY_TIDFACTOR_CLIENTID,
+    ALIPAY_TIDFACTOR_APDID,
+    ALIPAY_TIDFACTOR_MAX
+} AlipayTidFactor;
+
+typedef void(^CompletionBlock)(NSDictionary *resultDic);
+
+@interface AlipaySDK : NSObject
+
+/**
+ *  创建支付单例服务
+ *
+ *  @return 返回单例对象
+ */
++ (AlipaySDK *)defaultService;
+
+/**
+ *  用于设置SDK使用的window,如果没有自行创建window无需设置此接口
+ */
+@property (nonatomic, weak) UIWindow *targetWindow;
+
+/**
+ *  支付接口
+ *
+ *  @param orderStr       订单信息
+ *  @param schemeStr      调用支付的app注册在info.plist中的scheme
+ *  @param compltionBlock 支付结果回调Block,用于wap支付结果回调(非跳转钱包支付)
+ */
+- (void)payOrder:(NSString *)orderStr
+      fromScheme:(NSString *)schemeStr
+        callback:(CompletionBlock)completionBlock;
+
+/**
+ *  处理钱包或者独立快捷app支付跳回商户app携带的支付结果Url
+ *
+ *  @param resultUrl        支付结果url
+ *  @param completionBlock  支付结果回调
+ */
+- (void)processOrderWithPaymentResult:(NSURL *)resultUrl
+                      standbyCallback:(CompletionBlock)completionBlock;
+
+
+
+/**
+ *  获取交易token。
+ *
+ *  @return 交易token,若无则为空。
+ */
+- (NSString *)fetchTradeToken;
+
+/**
+ *  是否已经使用过
+ *
+ *  @return YES为已经使用过,NO反之
+ */
+- (BOOL)isLogined;
+
+/**
+ *  当前版本号
+ *
+ *  @return 当前版本字符串
+ */
+- (NSString *)currentVersion;
+
+/**
+ *  当前版本号
+ *
+ *  @return tid相关信息
+ */
+- (NSString*)queryTidFactor:(AlipayTidFactor)factor;
+
+/**
+ *  測試所用,realse包无效
+ *
+ *  @param url  测试环境
+ */
+- (void)setUrl:(NSString *)url;
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////h5 拦截支付入口///////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ *  url order 获取接口
+ *
+ *  @param urlStr     拦截的 url string
+ *
+ *  @return 获取到的url order info
+ */
+- (NSString*)fetchOrderInfoFromH5PayUrl:(NSString*)urlStr;
+
+
+/**
+ *  url支付接口
+ *
+ *  @param orderStr       订单信息
+ *  @param schemeStr      调用支付的app注册在info.plist中的scheme
+ *  @param compltionBlock 支付结果回调Block
+ */
+- (void)payUrlOrder:(NSString *)orderStr
+         fromScheme:(NSString *)schemeStr
+           callback:(CompletionBlock)completionBlock;
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////授权1.0//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ *  快登授权
+ *  @param authInfo         需授权信息
+ *  @param completionBlock  授权结果回调,若在授权过程中,调用方应用被系统终止,则此block无效,
+                            需要调用方在appDelegate中调用processAuthResult:standbyCallback:方法获取授权结果
+ */
+- (void)authWithInfo:(APayAuthInfo *)authInfo
+             callback:(CompletionBlock)completionBlock;
+
+
+/**
+ *  处理授权信息Url
+ *
+ *  @param resultUrl        钱包返回的授权结果url
+ *  @param completionBlock  授权结果回调
+ */
+- (void)processAuthResult:(NSURL *)resultUrl
+          standbyCallback:(CompletionBlock)completionBlock;
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////授权2.0//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ *  快登授权2.0
+ *
+ *  @param infoStr          授权请求信息字符串
+ *  @param schemeStr        调用授权的app注册在info.plist中的scheme
+ *  @param completionBlock  授权结果回调,若在授权过程中,调用方应用被系统终止,则此block无效,
+                            需要调用方在appDelegate中调用processAuth_V2Result:standbyCallback:方法获取授权结果
+ */
+- (void)auth_V2WithInfo:(NSString *)infoStr
+             fromScheme:(NSString *)schemeStr
+               callback:(CompletionBlock)completionBlock;
+
+/**
+ *  处理授权信息Url
+ *
+ *  @param resultUrl        钱包返回的授权结果url
+ *  @param completionBlock  授权结果回调
+ */
+- (void)processAuth_V2Result:(NSURL *)resultUrl
+             standbyCallback:(CompletionBlock)completionBlock;
+
+@end

BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/Info.plist


BIN
miaomiao/plugins/cordova-plugin-offbye-alipay/src/ios/lib/AlipaySDK.framework/en.lproj/InfoPlist.strings


+ 9 - 0
miaomiao/plugins/cordova-plugin-offbye-alipay/www/AliPay.js

xqd
@@ -0,0 +1,9 @@
+var exec = require('cordova/exec');
+
+exports.pay = function (paymentInfo, successCallback, errorCallback) {   
+		if(!paymentInfo){
+			errorCallback && errorCallback("Please enter order information");  
+		}else{
+			exec(successCallback, errorCallback, "AliPay", "pay", [paymentInfo]);
+		}
+};

+ 22 - 0
miaomiao/plugins/cordova-plugin-weibosdk/LICENSE

xqd
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Van
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+

+ 119 - 0
miaomiao/plugins/cordova-plugin-weibosdk/README.md

xqd
@@ -0,0 +1,119 @@
+# cordova-plugin-weibosdk
+[![npm](https://img.shields.io/npm/v/cordova-plugin-weibosdk.svg)](https://www.npmjs.com/package/cordova-plugin-weibosdk)
+[![npm](https://img.shields.io/npm/dm/cordova-plugin-weibosdk.svg)](https://www.npmjs.com/package/cordova-plugin-weibosdk)
+[![platform](https://img.shields.io/badge/platform-iOS%2FAndroid-lightgrey.svg?style=flat)](https://github.com/iVanPan/cordova_weibo)
+[![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat)](https://github.com/iVanPan/cordova_weibo/blob/master/LICENSE)
+
+A Cordova wrapper around the Sina WeiboSDK for Android and iOS. Provides access to ssoLogin, WeiboSharing etc... [简体中文](https://github.com/iVanPan/cordova_weibo/blob/master/README_ZH.md)  
+
+
+## Feature
+- Weibo SSO Login
+- Weibo Logout
+- Weibo Share (WebPage,Text,Image)
+- Check Weibo Client is Installed
+
+## Requirements
+- Cordova Version 3.5+
+- Cordova-Android >= 4.0
+- Cordova-iOS >= 4.0			
+
+## Installation
+1. ```cordova plugin add cordova-plugin-weibosdk --variable WEIBO_APP_ID=YOUR_WEIBO_APPID```
+2. Add ```<preference name="REDIRECTURI" value="YOUR_WEIBO_REDIRECTURI" />``` in your config.xml If you don't add this preference the defualt redirecturi is https://api.weibo.com/oauth2/default.html               
+3. cordova build
+
+
+## Notes
+1. This plugin is required Cordova-Android version >= 4.0,so using Cordova 5.0 or higher is recommended
+2. This plugin should be used after the deviceready event has been fired!!!				
+3. ~~If Cordova version  <5.1.1,when two Cordova plugins are modifying “*-Info.plist” CFBundleURLTypes, only the first added plugin is getting the changes applied.so after installing plugin,please check the URLTypes in your Xcode project.You can find this issue [here](https://issues.apache.org/jira/browse/CB-8007).~~  Update:This Bug is fixed in last Cordova version(5.1.1)	
+
+
+## Usage
+
+### Weibo SSO Login
+```Javascript
+WeiboSDK.ssoLogin(function (args) {
+   alert('access token is ' + args.access_token);
+   alert('userId is ' + args.userId);
+   alert('expires_time is ' + new Date(parseInt(args.expires_time)) + ' TimeStamp is ' + args.expires_time);
+}, function (failReason) {
+   alert(failReason);
+});
+```
+
+### Weibo Logout
+```Javascript
+WeiboSDK.logout(function () {
+   alert('logout success');
+}, function (failReason) {
+   alert(failReason);
+});
+```
+
+### Weibo WebPage Share
+```Javascript
+var args = {};
+args.url = 'https://cordova.apache.org/';
+args.title = 'Apache Cordova';
+args.description = 'This is a Cordova Plugin';
+args.image = 'https://cordova.apache.org/static/img/pluggy.png';
+WeiboSDK.shareToWeibo(function () {
+   alert('share success');
+}, function (failReason) {
+   alert(failReason);
+}, args);
+```
+### Weibo Image Share
+```Javascript
+var args = {};
+args.image = 'https://cordova.apache.org/static/img/pluggy.png';
+WeiboSDK.shareImageToWeibo(function () {
+   alert('share success');
+}, function (failReason) {
+   alert(failReason);
+}, args);
+```
+### Weibo Text Share
+```Javascript
+var args = {};
+args.text = 'This is a Cordova Plugin';
+WeiboSDK.shareTextToWeibo(function () {
+   alert('share success');
+}, function (failReason) {
+   alert(failReason);
+}, args);
+```
+### CheckClientInstalled
+```Javascript
+WeiboSDK.checkClientInstalled(function () {
+   alert('client is installed');
+}, function () {
+   alert('client is not installed');
+});
+```
+### GetUserInfo
+```Javascript
+var url = 'https://api.weibo.com/2/users/show.json?uid=' + usrid + '&&access_token=' + token;
+http.get(url)
+```
+
+## Example			
+1. install this plugin
+2. backup www folder in your cordova project
+3. replace www by example_www
+4. cordova build & test
+
+<div style="text-align:center"><img src="https://github.com/iVanPan/cordova_weibo/blob/master/ScreenShot.png?raw=true" alt="example" style="width:300px"></div> 
+
+## About WeiboSdk
+you can downlaod last weibosdk [here](https://github.com/sinaweibosdk) .if you find any problem about weibosdk, open an isssus please.
+
+## Contributing
+Feel free to contribute                 
+
+## License
+
+**cordova-plugin-weibosdk** is released under the **MIT** license. See [LICENSE](https://github.com/iVanPan/cordova_weibo/blob/master/LICENSE) file for more information.
+

+ 118 - 0
miaomiao/plugins/cordova-plugin-weibosdk/README_ZH.md

xqd
@@ -0,0 +1,118 @@
+# cordova-plugin-weibosdk
+[![npm](https://img.shields.io/npm/v/cordova-plugin-weibosdk.svg)](https://www.npmjs.com/package/cordova-plugin-weibosdk)
+[![npm](https://img.shields.io/npm/dm/cordova-plugin-weibosdk.svg)](https://www.npmjs.com/package/cordova-plugin-weibosdk)
+[![platform](https://img.shields.io/badge/platform-iOS%2FAndroid-lightgrey.svg?style=flat)](https://github.com/iVanPan/cordova_weibo)
+[![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat)](https://github.com/iVanPan/cordova_weibo/blob/master/LICENSE)
+
+
+这是一个微博的 Cordova 插件. [English](https://github.com/iVanPan/cordova_weibo)    
+如果有任何问题或是建议,请开 issuss,也欢迎 star 或是 fork。微博SDK部分如有涉及版权问题,版权归新浪微博所有
+
+## 功能
+- 微博 SSO 登录
+- 微博登出
+- 微博分享(网页、文字、图片)
+- 检查微博官方客户端是否安装
+
+## 安装要求
+- Cordova Version >= 3.5
+- Cordova-Android >= 4.0
+- Cordova-iOS >= 4.0
+
+## 安装
+1. 命令行运行 ```cordova plugin add cordova-plugin-weibosdk --variable WEIBO_APP_ID=YOUR_WEIBO_APPID```			
+2. 在你的config.xml文件中添加 ```<preference name="REDIRECTURI" value="YOUR_WEIBO_REDIRECTURI" />``` 如果你不添加这个选项,那么默认的 redirecturi 是 https://api.weibo.com/oauth2/default.html               
+3. 命令行运行 cordova build   					
+
+# 注意事项
+1. 这个插件要求 Cordova-Android 的版本 >=4.0,推荐使用 Cordova 5.0 或更高的版本,因为从 Cordova 5.0 开始 Cordova-Android 4.0 是默认使用的 Android 版本
+2. 请在 Cordova 的 deviceready 事件触发以后再调用本插件!!!!!  
+3. <del>在低于5.1.1的 Cordova 版本中存在一个 Bug,如果你有多个插件要修改 iOS 工程中的 “*-Info.plist” CFBundleURLTypes, 只有第一个安装的插件才会生效.所以安装完插件请务必在你的 Xcode 工程里面检查一下 URLTypes。 关于这个 bug 的详情你可以在 [这里](https://issues.apache.org/jira/browse/CB-8007)找到</del> 建议安装使用5.1.1及以上的 Cordova 版本 						
+
+## 使用方法
+### 微博SSO登录
+```Javascript
+WeiboSDK.ssoLogin(function (args) {
+   alert('access token is ' + args.access_token);
+   alert('userId is ' + args.userId);
+   alert('expires_time is ' + new Date(parseInt(args.expires_time)) + ' TimeStamp is ' + args.expires_time);
+}, function (failReason) {
+   alert(failReason);
+});
+```
+
+
+### 微博登出
+```Javascript
+WeiboSDK.logout(function () {
+   alert('logout success');
+}, function (failReason) {
+   alert(failReason);
+});
+```
+
+### 微博网页分享
+```Javascript
+var args = {};
+args.url = 'https://cordova.apache.org/';
+args.title = 'Apache Cordova';
+args.description = 'This is a Cordova Plugin';
+args.image = 'https://cordova.apache.org/static/img/pluggy.png';
+WeiboSDK.shareToWeibo(function () {
+   alert('share success');
+}, function (failReason) {
+   alert(failReason);
+}, args);
+```
+
+### 微博图片分享
+```Javascript
+var args = {};
+args.image = 'https://cordova.apache.org/static/img/pluggy.png';
+WeiboSDK.shareImageToWeibo(function () {
+   alert('share success');
+}, function (failReason) {
+   alert(failReason);
+}, args);
+```
+
+### 微博文字分享
+```Javascript
+var args = {};
+args.text = 'This is a Cordova Plugin';
+WeiboSDK.shareTextToWeibo(function () {
+   alert('share success');
+}, function (failReason) {
+   alert(failReason);
+}, args);
+```
+
+### 检查微博客户端是否安装
+```Javascript
+WeiboSDK.checkClientInstalled(function () {
+   alert('client is installed');
+}, function () {
+   alert('client is not installed');
+});
+```
+
+### 获取用户信息
+```Javascript
+var url = 'https://api.weibo.com/2/users/show.json?uid=' + usrid + '&&access_token=' + token;
+http.get(url)
+```
+
+# 测试Demo
+在安装完这个插件以后,把 Cordova 工程中的代码替换为 example_www 中的代码,在 build 以后可以进行各个功能测试,以下为运行效果图:
+<div style="text-align:center"><img src="https://github.com/iVanPan/cordova_weibo/blob/master/ScreenShot.png?raw=true" alt="example" style="width:300px"></div>		
+
+## 关于微博SDK
+你可以在[这里](https://github.com/sinaweibosdk),找到最新的微博 SDK,如果发现 bug 请开 issus,同时也欢迎 star 和 fork
+
+## 贡献代码
+欢迎提交 PR,贡献你的代码,如果有新功能,请提供 Demo。
+
+## 开源证书
+
+**cordova-plugin-weibosdk** 遵照了 **MIT** 证书. 详情可以查看 [证书](https://github.com/iVanPan/cordova_weibo/blob/master/LICENSE) 文件
+

BIN
miaomiao/plugins/cordova-plugin-weibosdk/ScreenShot.png


+ 802 - 0
miaomiao/plugins/cordova-plugin-weibosdk/example_www/css/bootstrap.css

xqd
@@ -0,0 +1,802 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2017 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*!
+ * Generated using the Bootstrap Customizer (<none>)
+ * Config saved to config.json and <none>
+ */
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+  font-family: sans-serif;
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+audio,
+canvas,
+progress,
+video {
+  display: inline-block;
+  vertical-align: baseline;
+}
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+[hidden],
+template {
+  display: none;
+}
+a {
+  background-color: transparent;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: bold;
+}
+dfn {
+  font-style: italic;
+}
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+mark {
+  background: #ff0;
+  color: #000;
+}
+small {
+  font-size: 80%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+img {
+  border: 0;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure {
+  margin: 1em 40px;
+}
+hr {
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+  height: 0;
+}
+pre {
+  overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit;
+  font: inherit;
+  margin: 0;
+}
+button {
+  overflow: visible;
+}
+button,
+select {
+  text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+legend {
+  border: 0;
+  padding: 0;
+}
+textarea {
+  overflow: auto;
+}
+optgroup {
+  font-weight: bold;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td,
+th {
+  padding: 0;
+}
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+*:before,
+*:after {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+html {
+  font-size: 10px;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #333333;
+  background-color: #ffffff;
+}
+input,
+button,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+a {
+  color: #337ab7;
+  text-decoration: none;
+}
+a:hover,
+a:focus {
+  color: #23527c;
+  text-decoration: underline;
+}
+a:focus {
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+figure {
+  margin: 0;
+}
+img {
+  vertical-align: middle;
+}
+.img-responsive {
+  display: block;
+  max-width: 100%;
+  height: auto;
+}
+.img-rounded {
+  border-radius: 6px;
+}
+.img-thumbnail {
+  padding: 4px;
+  line-height: 1.42857143;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -o-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+  display: inline-block;
+  max-width: 100%;
+  height: auto;
+}
+.img-circle {
+  border-radius: 50%;
+}
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eeeeee;
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  margin: -1px;
+  padding: 0;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+[role="button"] {
+  cursor: pointer;
+}
+.btn {
+  display: inline-block;
+  margin-bottom: 0;
+  font-weight: normal;
+  text-align: center;
+  vertical-align: middle;
+  -ms-touch-action: manipulation;
+      touch-action: manipulation;
+  cursor: pointer;
+  background-image: none;
+  border: 1px solid transparent;
+  white-space: nowrap;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  border-radius: 4px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+  color: #333333;
+  text-decoration: none;
+}
+.btn:active,
+.btn.active {
+  outline: 0;
+  background-image: none;
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+  cursor: not-allowed;
+  opacity: 0.65;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+  pointer-events: none;
+}
+.btn-default {
+  color: #333333;
+  background-color: #ffffff;
+  border-color: #cccccc;
+}
+.btn-default:focus,
+.btn-default.focus {
+  color: #333333;
+  background-color: #e6e6e6;
+  border-color: #8c8c8c;
+}
+.btn-default:hover {
+  color: #333333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  color: #333333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+  color: #333333;
+  background-color: #d4d4d4;
+  border-color: #8c8c8c;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  background-image: none;
+}
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+  background-color: #ffffff;
+  border-color: #cccccc;
+}
+.btn-default .badge {
+  color: #ffffff;
+  background-color: #333333;
+}
+.btn-primary {
+  color: #ffffff;
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary:focus,
+.btn-primary.focus {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #122b40;
+}
+.btn-primary:hover {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  color: #ffffff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+  color: #ffffff;
+  background-color: #204d74;
+  border-color: #122b40;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  background-image: none;
+}
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus {
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary .badge {
+  color: #337ab7;
+  background-color: #ffffff;
+}
+.btn-success {
+  color: #ffffff;
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success:focus,
+.btn-success.focus {
+  color: #ffffff;
+  background-color: #449d44;
+  border-color: #255625;
+}
+.btn-success:hover {
+  color: #ffffff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  color: #ffffff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+  color: #ffffff;
+  background-color: #398439;
+  border-color: #255625;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  background-image: none;
+}
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus {
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success .badge {
+  color: #5cb85c;
+  background-color: #ffffff;
+}
+.btn-info {
+  color: #ffffff;
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info:focus,
+.btn-info.focus {
+  color: #ffffff;
+  background-color: #31b0d5;
+  border-color: #1b6d85;
+}
+.btn-info:hover {
+  color: #ffffff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  color: #ffffff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+  color: #ffffff;
+  background-color: #269abc;
+  border-color: #1b6d85;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  background-image: none;
+}
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus {
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info .badge {
+  color: #5bc0de;
+  background-color: #ffffff;
+}
+.btn-warning {
+  color: #ffffff;
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning:focus,
+.btn-warning.focus {
+  color: #ffffff;
+  background-color: #ec971f;
+  border-color: #985f0d;
+}
+.btn-warning:hover {
+  color: #ffffff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  color: #ffffff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+  color: #ffffff;
+  background-color: #d58512;
+  border-color: #985f0d;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  background-image: none;
+}
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus {
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning .badge {
+  color: #f0ad4e;
+  background-color: #ffffff;
+}
+.btn-danger {
+  color: #ffffff;
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger:focus,
+.btn-danger.focus {
+  color: #ffffff;
+  background-color: #c9302c;
+  border-color: #761c19;
+}
+.btn-danger:hover {
+  color: #ffffff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  color: #ffffff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+  color: #ffffff;
+  background-color: #ac2925;
+  border-color: #761c19;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  background-image: none;
+}
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus {
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger .badge {
+  color: #d9534f;
+  background-color: #ffffff;
+}
+.btn-link {
+  color: #337ab7;
+  font-weight: normal;
+  border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+  background-color: transparent;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+  border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+  color: #23527c;
+  text-decoration: underline;
+  background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+  color: #777777;
+  text-decoration: none;
+}
+.btn-lg {
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+.btn-sm {
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-xs {
+  padding: 1px 5px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-block {
+  display: block;
+  width: 100%;
+}
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+  width: 100%;
+}
+.clearfix:before,
+.clearfix:after {
+  content: " ";
+  display: table;
+}
+.clearfix:after {
+  clear: both;
+}
+.center-block {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+.pull-right {
+  float: right !important;
+}
+.pull-left {
+  float: left !important;
+}
+.hide {
+  display: none !important;
+}
+.show {
+  display: block !important;
+}
+.invisible {
+  visibility: hidden;
+}
+.text-hide {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+.hidden {
+  display: none !important;
+}
+.affix {
+  position: fixed;
+}

+ 115 - 0
miaomiao/plugins/cordova-plugin-weibosdk/example_www/css/index.css

xqd
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+* {
+    -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */
+}
+
+body {
+    -webkit-touch-callout: none;                /* prevent callout to copy image, etc when tap to hold */
+    -webkit-text-size-adjust: none;             /* prevent webkit from resizing text to fit */
+    -webkit-user-select: none;                  /* prevent copy paste, to allow, change 'none' to 'text' */
+    background-color:#E4E4E4;
+    background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
+    background-image:-webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
+    background-image:-ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
+    background-image:-webkit-gradient(
+        linear,
+        left top,
+        left bottom,
+        color-stop(0, #A7A7A7),
+        color-stop(0.51, #E4E4E4)
+    );
+    background-attachment:fixed;
+    font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif;
+    font-size:12px;
+    height:100%;
+    margin:0px;
+    padding:0px;
+    text-transform:uppercase;
+    width:100%;
+}
+
+/* Portrait layout (default) */
+.app {
+    background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */
+    position:absolute;             /* position in the center of the screen */
+    left:50%;
+    top:25%;
+    height:50px;                   /* text area height */
+    width:225px;                   /* text area width */
+    text-align:center;
+    padding:180px 0px 0px 0px;     /* image height is 200px (bottom 20px are overlapped with text) */
+    margin:-115px 0px 0px -112px;  /* offset vertical: half of image height and text area height */
+                                   /* offset horizontal: half of text area width */
+}
+
+/* Landscape layout (with min-width) */
+@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) {
+    .app {
+        background-position:left center;
+        padding:75px 0px 75px 170px;  /* padding-top + padding-bottom + text area = image height */
+        margin:-90px 0px 0px -198px;  /* offset vertical: half of image height */
+                                      /* offset horizontal: half of image width and text area width */
+    }
+}
+
+h1 {
+    font-size:24px;
+    font-weight:normal;
+    margin:0px;
+    overflow:visible;
+    padding:0px;
+    text-align:center;
+}
+
+.event {
+    border-radius:4px;
+    -webkit-border-radius:4px;
+    color:#FFFFFF;
+    font-size:12px;
+    margin:0px 30px;
+    padding:2px 0px;
+}
+
+.event.listening {
+    background-color:#333333;
+    display:block;
+}
+
+.event.received {
+    background-color:#4B946A;
+    display:none;
+}
+
+@keyframes fade {
+    from { opacity: 1.0; }
+    50% { opacity: 0.4; }
+    to { opacity: 1.0; }
+}
+ 
+@-webkit-keyframes fade {
+    from { opacity: 1.0; }
+    50% { opacity: 0.4; }
+    to { opacity: 1.0; }
+}
+ 
+.blink {
+    animation:fade 3000ms infinite;
+    -webkit-animation:fade 3000ms infinite;
+}

BIN
miaomiao/plugins/cordova-plugin-weibosdk/example_www/img/logo.png


+ 31 - 0
miaomiao/plugins/cordova-plugin-weibosdk/example_www/index.html

xqd
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8"/>
+    <meta name="format-detection" content="telephone=no"/>
+    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=3, minimum-scale=1, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="css/index.css"/>
+    <link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
+    <script type="text/javascript" src="cordova.js"></script>
+    <script type="text/javascript" src="js/index.js"></script>
+    <script type="text/javascript">
+     document.addEventListener("deviceready", function(){
+      alert('device ready now');
+      appintance = new app();
+     }, true); 
+</script>
+<title>Corodva Weibo Plugin Exmaple</title>
+</head>
+<body>
+    <div class="app">
+        <div id="deviceready">
+          <button type="button" class="btn btn-primary btn-block" onclick="appintance.checkClientInstalled()">检查客户端是否安装</button>
+          <button type="button" class="btn btn-primary btn-block" onclick="appintance.ssoLogin()">微博登录</button>
+          <button type="button" class="btn btn-primary btn-block" onclick="appintance.logout()">微博登出</button>
+          <button type="button" class="btn btn-primary btn-block" onclick="appintance.shareToWeibo()">网页分享</button>
+          <button type="button" class="btn btn-primary btn-block" onclick="appintance.shareImageToWeibo()">图片分享</button>
+          <button type="button" class="btn btn-primary btn-block" onclick="appintance.shareTextToWeibo()">文字分享</button>
+        </div>
+      </div>
+    </body>
+    </html>

+ 60 - 0
miaomiao/plugins/cordova-plugin-weibosdk/example_www/js/index.js

xqd
@@ -0,0 +1,60 @@
+var app = function () {
+  this.checkClientInstalled = function () {
+    WeiboSDK.checkClientInstalled(function () {
+      alert('client is installed');
+    }, function () {
+      alert('client is not installed');
+    });
+  };
+
+  this.ssoLogin = function () {
+    WeiboSDK.ssoLogin(function (args) {
+      alert('access token is ' + args.access_token);
+      alert('userId is ' + args.userId);
+      alert('expires_time is ' + new Date(parseInt(args.expires_time)) + ' TimeStamp is ' + args.expires_time);
+    }, function (failReason) {
+      alert(failReason);
+    });
+  };
+
+  this.shareToWeibo = function () {
+    var args = {};
+    args.url = 'https://cordova.apache.org/';
+    args.title = 'Apache Cordova';
+    args.description = 'This is a Cordova Plugin';
+    args.image = 'https://cordova.apache.org/static/img/pluggy.png';
+    WeiboSDK.shareToWeibo(function () {
+      alert('share success');
+    }, function (failReason) {
+      alert(failReason);
+    }, args);
+  };
+
+  this.shareImageToWeibo = function () {
+    var args = {};
+    args.image = 'https://cordova.apache.org/static/img/pluggy.png';
+    WeiboSDK.shareImageToWeibo(function () {
+      alert('share success');
+    }, function (failReason) {
+      alert(failReason);
+    }, args);
+  };
+
+  this.shareTextToWeibo = function () {
+    var args = {};
+    args.text = 'This is a Cordova Plugin';
+    WeiboSDK.shareTextToWeibo(function () {
+      alert('share success');
+    }, function (failReason) {
+      alert(failReason);
+    }, args);
+  };
+
+  this.logout = function () {
+    WeiboSDK.logout(function () {
+      alert('logout success');
+    }, function (failReason) {
+      alert(failReason);
+    });
+  }
+}

+ 104 - 0
miaomiao/plugins/cordova-plugin-weibosdk/package.json

xqd
@@ -0,0 +1,104 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "cordova-plugin-weibosdk@0.6.0",
+        "scope": null,
+        "escapedName": "cordova-plugin-weibosdk",
+        "name": "cordova-plugin-weibosdk",
+        "rawSpec": "0.6.0",
+        "spec": "0.6.0",
+        "type": "version"
+      },
+      "D:\\my\\miao\\miaomiao\\node_modules"
+    ]
+  ],
+  "_from": "cordova-plugin-weibosdk@0.6.0",
+  "_id": "cordova-plugin-weibosdk@0.6.0",
+  "_inCache": true,
+  "_location": "/cordova-plugin-weibosdk",
+  "_nodeVersion": "6.11.0",
+  "_npmOperationalInternal": {
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/cordova-plugin-weibosdk-0.6.0.tgz_1501734562893_0.7814945403952152"
+  },
+  "_npmUser": {
+    "name": "vanpan",
+    "email": "fan543119@gmail.com"
+  },
+  "_npmVersion": "3.10.10",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "cordova-plugin-weibosdk@0.6.0",
+    "scope": null,
+    "escapedName": "cordova-plugin-weibosdk",
+    "name": "cordova-plugin-weibosdk",
+    "rawSpec": "0.6.0",
+    "spec": "0.6.0",
+    "type": "version"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/cordova-plugin-weibosdk/-/cordova-plugin-weibosdk-0.6.0.tgz",
+  "_shasum": "fd5f85fea174a23ae931017c2dc9725343b027e8",
+  "_shrinkwrap": null,
+  "_spec": "cordova-plugin-weibosdk@0.6.0",
+  "_where": "D:\\my\\miao\\miaomiao\\node_modules",
+  "author": {
+    "name": "https://github.com/iVanPan"
+  },
+  "bugs": {
+    "url": "https://github.com/iVanPan/cordova_weibo/issues"
+  },
+  "cordova": {
+    "id": "cordova-plugin-weibosdk",
+    "platforms": [
+      "android",
+      "ios"
+    ]
+  },
+  "dependencies": {},
+  "description": "codrova/phonegap wrapper for weibo sdk",
+  "devDependencies": {},
+  "directories": {},
+  "dist": {
+    "shasum": "fd5f85fea174a23ae931017c2dc9725343b027e8",
+    "tarball": "https://registry.npmjs.org/cordova-plugin-weibosdk/-/cordova-plugin-weibosdk-0.6.0.tgz"
+  },
+  "gitHead": "94f39de4bccf2e305e515cbd544b7a7621276362",
+  "homepage": "https://github.com/iVanPan/cordova_weibo",
+  "keywords": [
+    "ecosystem:cordova",
+    "cordova-android",
+    "cordova-ios",
+    "cordova",
+    "phonegap",
+    "plugin",
+    "weibosdk",
+    "weibo",
+    "sina",
+    "login",
+    "share"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "maintainers": [
+    {
+      "name": "vanpan",
+      "email": "fan543119@gmail.com"
+    }
+  ],
+  "name": "cordova-plugin-weibosdk",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/iVanPan/cordova_weibo.git"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "version": "0.6.0"
+}

+ 126 - 0
miaomiao/plugins/cordova-plugin-weibosdk/plugin.xml

xqd
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  id="cordova-plugin-weibosdk"
+  version="0.6.0">
+
+  <name>WeiboSDK</name>
+  <description>A Cordova wrapper around the Sina WeiboSDK for Android and iOS. Provides access to ssoLogin, WeiboShating etc</description>
+  <license>MIT</license>
+  <keywords>Cordova,Weibo</keywords>
+  <repo>https://github.com/iVanPan/cordova_weibo.git</repo>
+  <issue>https://github.com/iVanPan/cordova_weibo/issues</issue>
+
+  <preference name="WEIBO_APP_ID" />
+  <!--require cordova version -->
+  <engines>
+    <engine name="cordova" version=">=3.5.0" />
+    <engine name="cordova-android" version=">=4.0.0" />
+    <engine name="cordova-ios" version=">=4.0.0" />
+  </engines>
+
+  <!-- js module-->
+  <js-module src="www/weibo.js" name="WeiboSDK">
+    <clobbers target="WeiboSDK" />
+  </js-module>
+
+  <!-- ios -->
+  <platform name="ios">
+    <config-file target="config.xml" parent="/*">
+      <feature name="WeiboSDK">
+        <param name="ios-package" value="CDVWeiboSDK"/>
+      </feature>
+     <access origin="http://*.weibo.cn" minimum-tls-version='TLSv1.0' requires-forward-secrecy='false'/>
+     <access origin="http://*.sina.cn" minimum-tls-version='TLSv1.0' requires-forward-secrecy='false'/>
+     <access origin="http://*.sinaimg.cn" minimum-tls-version='TLSv1.0' requires-forward-secrecy='false'/>
+     <access origin="http://*.weibo.com" minimum-tls-version='TLSv1.0' requires-forward-secrecy='false'/>
+     <access origin="http://*.sinajs.cn" minimum-tls-version='TLSv1.0' requires-forward-secrecy='false'/>
+     <access origin="http://*.sina.com.cn" minimum-tls-version='TLSv1.0' requires-forward-secrecy='false'/>
+     <preference name="WEIBO_APP_ID" value="$WEIBO_APP_ID"/>
+   </config-file>
+   <!--set ios URLTypes for Weibo -->
+   <config-file platform="ios" target="*-Info.plist" parent="CFBundleURLTypes">
+    <array>
+      <dict>
+        <key>CFBundleTypeRole</key>
+        <string>Editor</string>
+        <key>CFBundleURLName</key>
+        <string>$PACKAGE_NAME</string>
+        <key>CFBundleURLSchemes</key>
+        <array>
+          <string>wb$WEIBO_APP_ID</string>
+        </array>
+      </dict>
+    </array>
+  </config-file>
+  <!--scheme query whitlist-->
+  <config-file platform="ios" target="*-Info.plist" parent="LSApplicationQueriesSchemes">
+      <array>
+		    <string>sinaweibohd</string>
+		    <string>sinaweibo</string>
+		    <string>weibosdk</string>
+		    <string>weibosdk2.5</string>
+      </array>
+  </config-file>
+  <header-file src="src/ios/CDVWeiboSDK.h"/>
+  <source-file src="src/ios/CDVWeiboSDK.m"/>
+  <!-- Weibo sdk version 3.2.0 https://github.com/sinaweibosdk/weibo_ios_sdk -->
+  <header-file src="src/ios/libWeiboSDK/WBHttpRequest.h" />
+  <header-file src="src/ios/libWeiboSDK/WBHttpRequest+WeiboToken.h" />
+  <header-file src="src/ios/libWeiboSDK/WeiboSDK.h" />
+  <header-file src="src/ios/libWeiboSDK/WeiboSDK+Statistics.h" />
+  <source-file src="src/ios/libWeiboSDK/libWeiboSDK.a" framework="true"  compiler-flags="-objc"/>
+  <resource-file src="src/ios/libWeiboSDK/WeiboSDK.bundle" />
+
+  <!--required frameworks for weibo sdk-->
+  <framework src="QuartzCore.framework" />
+  <framework src="ImageIO.framework" />
+  <framework src="SystemConfiguration.framework" />
+  <framework src="Security.framework" />
+  <framework src="CoreTelephony.framework" />
+  <framework src="CoreText.framework" />
+  <framework src="Foundation.framework" />
+  <framework src="CoreGraphics.framework" />
+  <framework src="libz.tbd" />
+  <framework src="libsqlite3.tbd" />
+  <info>
+    1.安装完这个插件,请用 Xcode 打开工程,查看 URL Types 里面 Weibo 的 URL Type 有没有,如果没有请手动添加。
+    
+    1.after installing this plugin,check the URL Types in your Xcode project.If you don't find URL Types for weibosdk,manually add it.
+  </info>
+</platform>
+<!-- android -->
+<platform name="android">
+  <config-file target="res/xml/config.xml" parent="/*">
+    <feature name="WeiboSDK" >
+      <param name="android-package" value="me.vanpan.weibosdk.WeiboSDKPlugin"/>
+    </feature>
+    <access origin="https://open.weibo.cn/*" />
+    <access origin="https://login.sina.com.cn/*" />
+    <access origin="https://passport.weibo.cn/*"/>
+    <access origin="http://*.sinaimg.cn/*"/>
+    <access origin="https://api.weibo.com/*"/>
+    <preference name="WEIBO_APP_ID" value="$WEIBO_APP_ID"/>
+  </config-file>
+  <!-- android  uses-permission for weibo sdk-->
+  <config-file target="AndroidManifest.xml" parent="/manifest">
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+  </config-file>
+
+  <source-file src="src/android/WeiboSDKPlugin.java" target-dir="src/me/vanpan/weibosdk" />
+  <!-- android weibo sdk version 4.0.0(2.0.6)  https://github.com/sinaweibosdk/weibo_android_sdk-->
+  <source-file src="src/android/libs/so/arm64-v8a/libweibosdkcore.so" target-dir="libs/arm64-v8a/"/>
+  <source-file src="src/android/libs/so/armeabi/libweibosdkcore.so" target-dir="libs/armeabi/"/>
+  <source-file src="src/android/libs/so/armeabi-v7a/libweibosdkcore.so" target-dir="libs/armeabi-v7a/"/>
+  <source-file src="src/android/libs/so/mips/libweibosdkcore.so" target-dir="libs/mips/"/>
+  <source-file src="src/android/libs/so/mips64/libweibosdkcore.so" target-dir="libs/mips64/"/>
+  <source-file src="src/android/libs/so/x86/libweibosdkcore.so" target-dir="libs/x86/"/>
+  <source-file src="src/android/libs/so/x86_64/libweibosdkcore.so" target-dir="libs/x86_64/"/>
+  <source-file src="src/android/libs/openDefault-2.0.6.aar" target-dir="libs/" />
+  <framework src="src/android/libs/WeiboSDKPlugin.gradle" custom="true" type="gradleReference" />
+</platform>
+</plugin>

+ 457 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/android/WeiboSDKPlugin.java

xqd
@@ -0,0 +1,457 @@
+package me.vanpan.weibosdk;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.util.Base64;
+import android.webkit.URLUtil;
+
+import com.sina.weibo.sdk.WbSdk;
+import com.sina.weibo.sdk.WeiboAppManager;
+import com.sina.weibo.sdk.api.ImageObject;
+import com.sina.weibo.sdk.api.TextObject;
+import com.sina.weibo.sdk.api.WeiboMultiMessage;
+import com.sina.weibo.sdk.auth.AccessTokenKeeper;
+import com.sina.weibo.sdk.auth.AuthInfo;
+import com.sina.weibo.sdk.auth.Oauth2AccessToken;
+import com.sina.weibo.sdk.auth.WbAppInfo;
+import com.sina.weibo.sdk.auth.WbConnectErrorMessage;
+import com.sina.weibo.sdk.auth.sso.SsoHandler;
+import com.sina.weibo.sdk.share.WbShareCallback;
+import com.sina.weibo.sdk.share.WbShareHandler;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaArgs;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PluginResult;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class WeiboSDKPlugin extends CordovaPlugin implements WbShareCallback {
+
+    private static final String SCOPE = "email,direct_messages_read,direct_messages_write,"
+            + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
+            + "follow_app_official_microblog," + "invitation_write";
+    private static final String WEBIO_APP_ID = "weibo_app_id";
+    private static final String WEBIO_REDIRECT_URL = "redirecturi";
+    private static final String DEFAULT_URL = "https://api.weibo.com/oauth2/default.html";
+    private static final String CANCEL_BY_USER = "cancel by user";
+    private static final String WEIBO_EXCEPTION = "weibo exception";
+    private static final String PARAM_ERROR = "param error";
+    private static final String ONLY_GET_CODE = "only get code";
+    private static final String SHARE_FAIL ="sharefail";
+    private static final String WEIBO_CLIENT_NOT_INSTALLED = "weibo client is not installed";
+    public static CallbackContext currentCallbackContext;
+    public static String APP_KEY;
+    public static WbShareHandler shareHandler = null;
+    private Oauth2AccessToken mAccessToken;
+    private String REDIRECT_URL;
+    private SsoHandler mSsoHandler;
+
+    @Override
+    protected void pluginInitialize() {
+        super.pluginInitialize();
+        APP_KEY = webView.getPreferences().getString(WEBIO_APP_ID, "");
+        REDIRECT_URL = webView.getPreferences().getString(WEBIO_REDIRECT_URL, DEFAULT_URL);
+        WbSdk.install(WeiboSDKPlugin.this.cordova.getActivity(),new AuthInfo(WeiboSDKPlugin.this.cordova.getActivity(), APP_KEY, REDIRECT_URL, SCOPE));
+    }
+
+    @Override
+    public boolean execute(String action, final CordovaArgs args,
+                           final CallbackContext callbackContext) throws JSONException {
+        if (action.equalsIgnoreCase("ssoLogin")) {
+            return ssoLogin(callbackContext);
+        } else if (action.equalsIgnoreCase("logout")) {
+            return logout(callbackContext);
+        } else if (action.equalsIgnoreCase("shareToWeibo")) {
+            return shareToWeibo(callbackContext, args);
+        } else if (action.equalsIgnoreCase("checkClientInstalled")) {
+            return checkClientInstalled(callbackContext);
+        } else if (action.equalsIgnoreCase("shareImageToWeibo")) {
+            return shareImageToWeibo(callbackContext,args);
+        } else if (action.equalsIgnoreCase("shareTextToWeibo")) {
+            return shareTextToWeibo(callbackContext,args);
+        }
+        return super.execute(action, args, callbackContext);
+    }
+
+    /**
+     * weibo sso 登录
+     *
+     * @param callbackContext
+     * @return
+     */
+    private boolean ssoLogin(CallbackContext callbackContext) {
+        currentCallbackContext = callbackContext;
+        mSsoHandler = new SsoHandler(WeiboSDKPlugin.this.cordova.getActivity());
+        Runnable runnable = new Runnable() {
+            public void run() {
+                if (mSsoHandler != null) {
+                    mSsoHandler.authorize(new SelfWbAuthListener());
+                }
+            }
+        };
+        this.cordova.setActivityResultCallback(this);
+        this.cordova.getActivity().runOnUiThread(runnable);
+        return true;
+    }
+
+    /**
+     * 检查微博客户端是否安装
+     *
+     * @param callbackContext
+     * @return
+     */
+    private boolean checkClientInstalled(CallbackContext callbackContext) {
+        WbAppInfo wbAppInfo = WeiboAppManager.getInstance(WeiboSDKPlugin.this.cordova.getActivity()).getWbAppInfo();
+        Boolean installed = (wbAppInfo != null && wbAppInfo.isLegal());
+        if (installed) {
+            callbackContext.success();
+        } else {
+            callbackContext.error(WEIBO_CLIENT_NOT_INSTALLED);
+        }
+        return true;
+    }
+
+    /**
+     * 微博登出
+     *
+     * @param callbackContext
+     * @return
+     */
+    private boolean logout(CallbackContext callbackContext) {
+        AccessTokenKeeper.clear(this.cordova.getActivity());
+        mAccessToken = new Oauth2AccessToken();
+        callbackContext.success();
+        return true;
+    }
+
+    /**
+     * 微博分享网页
+     *
+     * @param callbackContext
+     * @param args
+     * @return
+     */
+    private boolean shareToWeibo(final CallbackContext callbackContext,
+                                 final CordovaArgs args) {
+        currentCallbackContext = callbackContext;
+        if (shareHandler == null) {
+            shareHandler = new WbShareHandler(WeiboSDKPlugin.this.cordova.getActivity());
+        }
+        shareHandler.registerApp();
+        cordova.getThreadPool().execute(new Runnable() {
+
+            @Override
+            public void run() {
+                sendMultiMessage(callbackContext,args);
+            }
+        });
+        return true;
+    }
+
+    /**
+     * 微博图片分享
+     * @param callbackContext
+     * @param args
+     * @return
+     */
+    private boolean shareImageToWeibo(final CallbackContext callbackContext,
+        final CordovaArgs args) {
+        currentCallbackContext = callbackContext;
+        if (shareHandler == null) {
+            shareHandler = new WbShareHandler(WeiboSDKPlugin.this.cordova.getActivity());
+        }
+        shareHandler.registerApp();
+        cordova.getThreadPool().execute(new Runnable() {
+
+            @Override
+            public void run() {
+                sendImageMessage(callbackContext,args);
+            }
+        });
+        return true;
+    }
+
+    /**
+     * 分享文字到微博
+     * @param callbackContext
+     * @param args
+     * @return
+     */
+    private boolean shareTextToWeibo(final CallbackContext callbackContext,
+        final CordovaArgs args) {
+        currentCallbackContext = callbackContext;
+        if (shareHandler == null) {
+            shareHandler = new WbShareHandler(WeiboSDKPlugin.this.cordova.getActivity());
+        }
+        shareHandler.registerApp();
+        cordova.getThreadPool().execute(new Runnable() {
+
+            @Override
+            public void run() {
+                sendTextMessage(callbackContext,args);
+            }
+        });
+        return true;
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+        super.onActivityResult(requestCode, resultCode, intent);
+        if (mSsoHandler != null) {
+            mSsoHandler.authorizeCallBack(requestCode, resultCode, intent);
+        }
+    }
+
+    /**
+     * 第三方应用发送请求消息到微博,唤起微博分享界面。
+     */
+    private void sendMultiMessage(final CallbackContext callbackContext, CordovaArgs args) {
+        // 1. 初始化微博的分享消息
+        WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
+        final JSONObject data;
+        try {
+            data = args.getJSONObject(0);
+            String title = data.has("title")?  data.getString("title"): "";
+            String url = data.has("url")?  data.getString("url"): "";
+            String description = data.has("description")?  data.getString("description"): "";
+            String image = data.has("image")?  data.getString("image"): "";
+            Bitmap imageData = processImage(image);
+            //WebpageObject mediaObject = new WebpageObject();
+            //mediaObject.identify = Utility.generateGUID();
+            //mediaObject.title = title;
+            //mediaObject.description = description;
+            //mediaObject.actionUrl = url;
+            if (imageData != null) {
+                //注意:最终压缩过的缩略图大小不得超过 32kb。
+                ImageObject imageObject = new ImageObject();
+                imageObject.setImageObject(imageData);
+                weiboMessage.imageObject = imageObject;
+               // mediaObject.setThumbImage(imageData);
+            }
+           // weiboMessage.mediaObject = mediaObject;
+            TextObject textObject = new TextObject();
+            textObject.text = description + " " + url;
+            textObject.title = title;
+            weiboMessage.textObject = textObject;
+            shareHandler.shareMessage(weiboMessage, false);
+        } catch (JSONException e) {
+            WeiboSDKPlugin.this.webView.sendPluginResult(new PluginResult(
+                    PluginResult.Status.ERROR, PARAM_ERROR),
+                callbackContext.getCallbackId());
+        }
+    }
+
+    /**
+     * 组装图片分享消息
+     * @param callbackContext
+     * @param args
+     */
+    private void sendImageMessage(final CallbackContext callbackContext, CordovaArgs args) {
+        WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
+        final JSONObject data;
+        try {
+            data = args.getJSONObject(0);
+            String image = data.has("image")?  data.getString("image"): "";
+            Bitmap imageData = processImage(image);
+            if (imageData != null) {
+                //注意:最终压缩过的缩略图大小不得超过 32kb。
+                ImageObject imageObject = new ImageObject();
+                imageObject.setImageObject(imageData);
+                weiboMessage.imageObject = imageObject;
+            }
+            shareHandler.shareMessage(weiboMessage, false);
+        } catch (JSONException e) {
+            WeiboSDKPlugin.this.webView.sendPluginResult(new PluginResult(
+                    PluginResult.Status.ERROR, PARAM_ERROR),
+                callbackContext.getCallbackId());
+        }
+    }
+
+    /**
+     * 组装微博文字分享消息
+     * @param callbackContext
+     * @param args
+     */
+    private void sendTextMessage(final CallbackContext callbackContext, CordovaArgs args) {
+        // 1. 初始化微博的分享消息
+        WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
+        final JSONObject data;
+        try {
+            data = args.getJSONObject(0);
+            String text = data.has("text")?  data.getString("text"): "";
+            TextObject textObject = new TextObject();
+            textObject.text = text;
+            weiboMessage.textObject = textObject;
+            shareHandler.shareMessage(weiboMessage, false);
+        } catch (JSONException e) {
+            WeiboSDKPlugin.this.webView.sendPluginResult(new PluginResult(
+                    PluginResult.Status.ERROR, PARAM_ERROR),
+                callbackContext.getCallbackId());
+        }
+    }
+    /**
+     * 组装JSON
+     *
+     * @param access_token
+     * @param userId
+     * @param expires_time
+     * @return
+     */
+    private JSONObject makeJson(String access_token, String userId, long expires_time) {
+        String json = "{\"access_token\": \"" + access_token + "\", " +
+            " \"userId\": \"" + userId
+            + "\", " +
+            " \"expires_time\": \"" + String.valueOf(expires_time) + "\"" +
+            "}";
+        JSONObject jo = null;
+        try {
+            jo = new JSONObject(json);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return jo;
+    }
+    /**
+     * 处理图片
+     * @param image
+     * @return
+     */
+    private Bitmap processImage(String image) {
+        if(URLUtil.isHttpUrl(image) || URLUtil.isHttpsUrl(image)) {
+            return getBitmapFromURL(image);
+        } else if (isBase64(image)) {
+            return decodeBase64ToBitmap(image);
+        } else {
+            return getBitmapByPath(image);
+        }
+    }
+
+    /**
+     * 检查图片字符串是不是Base64
+     * @param image
+     * @return
+     */
+    private boolean isBase64(String image) {
+        try {
+            byte[] decodedString = Base64.decode(image, Base64.DEFAULT);
+            Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
+            if (bitmap == null) {
+                return false;
+            }
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * 将图片的 URL 转化为 Bitmap
+     * @param src
+     * @return
+     */
+    public static Bitmap getBitmapFromURL(String src) {
+        try {
+            URL url = new URL(src);
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setDoInput(true);
+            connection.connect();
+            InputStream input = connection.getInputStream();
+            Bitmap bitmap = BitmapFactory.decodeStream(input);
+            return bitmap;
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
+    /**
+     * 根据文件路径生成 Bitmap
+     * @param path
+     * @return
+     */
+    public static Bitmap getBitmapByPath(String path) {
+        if (path == null)
+            return null;
+        try {
+            Bitmap bitmap = BitmapFactory.decodeFile(path);
+            return bitmap;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } catch (Error e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 将Base64解码成Bitmap
+     */
+
+    private Bitmap decodeBase64ToBitmap(String Base64String) {
+        byte[] decode = Base64.decode(Base64String, Base64.DEFAULT);
+        Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
+        return bitmap;
+    }
+
+    @Override public void onWbShareSuccess() {
+        WeiboSDKPlugin.currentCallbackContext.success();
+    }
+
+    @Override public void onWbShareCancel() {
+        WeiboSDKPlugin.currentCallbackContext.error(CANCEL_BY_USER);
+    }
+
+    @Override public void onWbShareFail() {
+        WeiboSDKPlugin.currentCallbackContext.error(SHARE_FAIL);
+    }
+
+    @Override
+    public void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        WeiboSDKPlugin.shareHandler.doResultIntent(intent,this);
+    }
+
+    private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener{
+        @Override
+        public void onSuccess(final Oauth2AccessToken token) {
+            mAccessToken = token;
+            if (mAccessToken.isSessionValid()) {
+                AccessTokenKeeper.writeAccessToken(
+                    WeiboSDKPlugin.this.cordova.getActivity(), mAccessToken);
+                JSONObject jo = makeJson(mAccessToken.getToken(),
+                    mAccessToken.getUid(),mAccessToken.getExpiresTime());
+                WeiboSDKPlugin.this.webView.sendPluginResult(new PluginResult(
+                    PluginResult.Status.OK, jo), currentCallbackContext.getCallbackId());
+            } else {
+                // 以下几种情况,您会收到 Code:
+                // 1. 当您未在平台上注册的应用程序的包名与签名时;
+                // 2. 当您注册的应用程序包名与签名不正确时;
+                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
+                // String code = values.getString("code");
+                WeiboSDKPlugin.this.webView.sendPluginResult(new PluginResult(
+                        PluginResult.Status.ERROR, ONLY_GET_CODE),
+                    currentCallbackContext.getCallbackId());
+            }
+        }
+
+        @Override
+        public void cancel() {
+            WeiboSDKPlugin.this.webView.sendPluginResult(new PluginResult(
+                    PluginResult.Status.ERROR, CANCEL_BY_USER),
+                currentCallbackContext.getCallbackId());
+        }
+
+        @Override
+        public void onFailure(WbConnectErrorMessage errorMessage) {
+            WeiboSDKPlugin.this.webView.sendPluginResult(new PluginResult(
+                    PluginResult.Status.ERROR, WEIBO_EXCEPTION),
+                currentCallbackContext.getCallbackId());
+        }
+    }
+}

+ 10 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/WeiboSDKPlugin.gradle

xqd
@@ -0,0 +1,10 @@
+
+repositories{
+    flatDir {
+        dirs 'libs'
+    }
+}
+
+dependencies {
+    compile(name: 'openDefault-2.0.6', ext: 'aar')
+}

BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/openDefault-2.0.6.aar


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/arm64-v8a/libweibosdkcore.so


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/armeabi-v7a/libweibosdkcore.so


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/armeabi/libweibosdkcore.so


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/mips/libweibosdkcore.so


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/mips64/libweibosdkcore.so


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/x86/libweibosdkcore.so


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/android/libs/so/x86_64/libweibosdkcore.so


+ 22 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/CDVWeiboSDK.h

xqd
@@ -0,0 +1,22 @@
+#import <Cordova/CDVPlugin.h>
+#import "WeiboSDK.h"
+
+@interface CDVWeiboSDK : CDVPlugin <WeiboSDKDelegate, WBHttpRequestDelegate>
+
+@property (nonatomic, copy) NSString *callbackId;
+@property (nonatomic, copy) NSString *redirectURI;
+@property (nonatomic, copy) NSString *weiboAppId;
+
+- (void)ssoLogin:(CDVInvokedUrlCommand *)command;
+
+- (void)logout:(CDVInvokedUrlCommand *)command;
+
+- (void)shareToWeibo:(CDVInvokedUrlCommand *)command;
+
+- (void)checkClientInstalled:(CDVInvokedUrlCommand *)command;
+
+- (void)shareImageToWeibo:(CDVInvokedUrlCommand *)command;
+
+- (void)shareTextToWeibo:(CDVInvokedUrlCommand *)command;
+
+@end

+ 314 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/CDVWeiboSDK.m

xqd
@@ -0,0 +1,314 @@
+#import "CDVWeiboSDK.h"
+
+NSString *WEBIO_APP_ID = @"weibo_app_id";
+NSString *WEBIO_REDIRECT_URI = @"redirecturi";
+NSString *WEBIO_DEFUALT_REDIRECT_URI = @"https://api.weibo.com/oauth2/default.html";
+NSString *WEIBO_CANCEL_BY_USER = @"cancel by user";
+NSString *WEIBO_SHARE_INSDK_FAIL = @"share in sdk failed";
+NSString *WEIBO_SEND_FAIL = @"send failed";
+NSString *WEIBO_UNSPPORTTED = @"Weibo unspport";
+NSString *WEIBO_AUTH_ERROR = @"Weibo auth error";
+NSString *WEIBO_UNKNOW_ERROR = @"Weibo unknow error";
+NSString *WEIBO_TOKEN_EMPTY = @"Weibo token is empty";
+NSString *WEIBO_USER_CANCEL_INSTALL = @"user cancel install weibo";
+
+@implementation CDVWeiboSDK
+/**
+ *  插件初始化主要用于appkey的注册
+ */
+- (void)pluginInitialize {
+    NSString *weiboAppId = [[self.commandDelegate settings] objectForKey:WEBIO_APP_ID];
+    self.weiboAppId = weiboAppId;
+    [WeiboSDK registerApp:weiboAppId];
+    NSString *redirectURI = [[self.commandDelegate settings] objectForKey:WEBIO_REDIRECT_URI];
+    if (nil == redirectURI) {
+        self.redirectURI = WEBIO_DEFUALT_REDIRECT_URI;
+    } else {
+        self.redirectURI = redirectURI;
+    }
+}
+/**
+ *  检查微博官方客户端是否安装
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)checkClientInstalled:(CDVInvokedUrlCommand *)command {
+    if ([WeiboSDK isWeiboAppInstalled]) {
+        CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    } else {
+        CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    }
+}
+
+/**
+ *  微博单点登录
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)ssoLogin:(CDVInvokedUrlCommand *)command {
+    self.callbackId = command.callbackId;
+    WBAuthorizeRequest *request = [WBAuthorizeRequest request];
+    request.redirectURI = self.redirectURI;
+    request.scope = @"all";
+    request.userInfo = @{ @"SSO_From" : @"CDVWeiboSDK",
+                          @"Other_Info_1" : [NSNumber numberWithInt:123],
+                          @"Other_Info_2" : @[ @"obj1", @"obj2" ],
+                          @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
+    [WeiboSDK sendRequest:request];
+}
+
+/**
+ *  微博登出
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)logout:(CDVInvokedUrlCommand *)command {
+    NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
+    NSString *token = [saveDefaults objectForKey:@"access_token"];
+    [saveDefaults removeObjectForKey:@"userId"];
+    [saveDefaults removeObjectForKey:@"access_token"];
+    [saveDefaults removeObjectForKey:@"expires_time"];
+    [saveDefaults synchronize];
+    if (token) {
+        [WeiboSDK logOutWithToken:token delegate:self withTag:nil];
+        self.callbackId = command.callbackId;
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_TOKEN_EMPTY];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+
+/**
+ *  分享网页到微博
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+ - (void)shareToWeibo:(CDVInvokedUrlCommand *)command {
+     self.callbackId = command.callbackId;
+     WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
+     authRequest.redirectURI = self.redirectURI;
+     authRequest.scope = @"all";
+     NSDictionary *params = [command.arguments objectAtIndex:0];
+     WBMessageObject *message = [WBMessageObject message];
+     WBWebpageObject *webpage = [WBWebpageObject object];
+     webpage.objectID = [NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]];
+     webpage.title = [self check:@"title" in:params];
+     webpage.description = [NSString stringWithFormat:[self check:@"description" in:params], [[NSDate date] timeIntervalSince1970]];
+     webpage.webpageUrl = [self check:@"url" in:params];
+     NSString *image = [self check:@"image" in:params];
+     NSData *imageData = [self processImage:image];
+     webpage.thumbnailData = imageData;
+     message.mediaObject = webpage;
+     NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
+     NSString *token = [saveDefaults objectForKey:@"access_token"];
+     WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:token];
+     request.userInfo = @{ @"ShareMessageFrom" : @"CDVWeiboSDK",
+                           @"Other_Info_1" : [NSNumber numberWithInt:123],
+                           @"Other_Info_2" : @[ @"obj1", @"obj2" ],
+                           @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
+     [WeiboSDK sendRequest:request];
+ }
+/**
+ *  分享图片到微博
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)shareImageToWeibo:(CDVInvokedUrlCommand *)command {
+    self.callbackId = command.callbackId;
+    WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
+    authRequest.redirectURI = self.redirectURI;
+    authRequest.scope = @"all";
+    NSDictionary *params = [command.arguments objectAtIndex:0];
+    WBMessageObject *message = [WBMessageObject message];
+    WBImageObject *imageObject = [WBImageObject object];
+    NSString *image = [self check:@"image" in:params];
+    NSData *imageData = [self processImage:image];
+    imageObject.imageData = imageData;
+    message.imageObject = imageObject;
+    NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
+    NSString *token = [saveDefaults objectForKey:@"access_token"];
+    WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:token];
+    request.userInfo = @{ @"ShareMessageFrom" : @"CDVWeiboSDK",
+                          @"Other_Info_1" : [NSNumber numberWithInt:123],
+                          @"Other_Info_2" : @[ @"obj1", @"obj2" ],
+                          @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
+    [WeiboSDK sendRequest:request];
+}
+/**
+ *  分享文字到微博
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)shareTextToWeibo:(CDVInvokedUrlCommand *)command {
+    self.callbackId = command.callbackId;
+    WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
+    authRequest.redirectURI = self.redirectURI;
+    authRequest.scope = @"all";
+    NSDictionary *params = [command.arguments objectAtIndex:0];
+    WBMessageObject *message = [WBMessageObject message];
+    NSString *text = [self check:@"text" in:params];
+    message.text = text;
+    NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
+    NSString *token = [saveDefaults objectForKey:@"access_token"];
+    WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:token];
+    request.userInfo = @{ @"ShareMessageFrom" : @"CDVWeiboSDK",
+                          @"Other_Info_1" : [NSNumber numberWithInt:123],
+                          @"Other_Info_2" : @[ @"obj1", @"obj2" ],
+                          @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
+    [WeiboSDK sendRequest:request];
+}
+
+/**
+ *  处理URL
+ *
+ *  @param notification cordova传递的消息对象
+ */
+- (void)handleOpenURL:(NSNotification *)notification {
+    NSURL *url = [notification object];
+    if ([url isKindOfClass:[NSURL class]] && [url.absoluteString hasPrefix:[@"wb" stringByAppendingString:self.weiboAppId]]) {
+        [WeiboSDK handleOpenURL:url delegate:self];
+    }
+}
+
+#pragma mark - WeiboSDKDelegate
+- (void)didReceiveWeiboResponse:(WBBaseResponse *)response {
+    if ([response isKindOfClass:WBSendMessageToWeiboResponse.class]) {
+        if (response.statusCode == WeiboSDKResponseStatusCodeSuccess) {
+            WBSendMessageToWeiboResponse *sendMessageToWeiboResponse = (WBSendMessageToWeiboResponse *)response;
+            NSString *accessToken = [sendMessageToWeiboResponse.authResponse accessToken];
+            NSString *userId = [sendMessageToWeiboResponse.authResponse userID];
+            NSString *expirationTime = [NSString stringWithFormat:@"%f", [sendMessageToWeiboResponse.authResponse.expirationDate timeIntervalSince1970] * 1000];
+            if (accessToken && userId && expirationTime) {
+                NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
+                [saveDefaults setValue:accessToken forKey:@"access_token"];
+                [saveDefaults setValue:userId forKey:@"userId"];
+                [saveDefaults setValue:expirationTime forKey:@"expires_time"];
+                [saveDefaults synchronize];
+            }
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancel) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_CANCEL_BY_USER];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeSentFail) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SEND_FAIL];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeShareInSDKFailed) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SHARE_INSDK_FAIL];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUnsupport) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNSPPORTTED];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUnknown) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNKNOW_ERROR];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeAuthDeny) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_AUTH_ERROR];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancelInstall) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_USER_CANCEL_INSTALL];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        }
+    } else if ([response isKindOfClass:WBAuthorizeResponse.class]) {
+        if (response.statusCode == WeiboSDKResponseStatusCodeSuccess) {
+            NSMutableDictionary *Dic = [NSMutableDictionary dictionaryWithCapacity:2];
+            [Dic setObject:[(WBAuthorizeResponse *)response userID] forKey:@"userId"];
+            [Dic setObject:[(WBAuthorizeResponse *)response accessToken] forKey:@"access_token"];
+            [Dic setObject:[NSString stringWithFormat:@"%f", [(WBAuthorizeResponse *)response expirationDate].timeIntervalSince1970 * 1000] forKey:@"expires_time"];
+            NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
+            [saveDefaults setValue:[(WBAuthorizeResponse *)response userID] forKey:@"userId"];
+            [saveDefaults setValue:[(WBAuthorizeResponse *)response accessToken] forKey:@"access_token"];
+            [saveDefaults setValue:[NSString stringWithFormat:@"%f", [(WBAuthorizeResponse *)response expirationDate].timeIntervalSince1970 * 1000] forKey:@"expires_time"];
+            [saveDefaults synchronize];
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:Dic];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancel) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_CANCEL_BY_USER];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeSentFail) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SEND_FAIL];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeShareInSDKFailed) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SHARE_INSDK_FAIL];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUnsupport) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNSPPORTTED];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUnknown) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNKNOW_ERROR];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeAuthDeny) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_AUTH_ERROR];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancelInstall) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_USER_CANCEL_INSTALL];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+        }
+    }
+}
+
+- (void)didReceiveWeiboRequest:(WBBaseRequest *)request {
+}
+
+#pragma mark - WBHttpRequestDelegate
+
+- (void)request:(WBHttpRequest *)request didFinishLoadingWithResult:(NSString *)result {
+    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+    [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+}
+
+- (void)request:(WBHttpRequest *)request didFailWithError:(NSError *)error {
+    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+    [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
+}
+/**
+ 图片处理
+
+ @param image 图片数据
+ @return 图片NSdata数据
+ */
+- (NSData *)processImage:(NSString *)image {
+    if ([self isBase64Data:image]) {
+        return [[NSData alloc] initWithBase64EncodedString:image options:0];
+    } else if ([image hasPrefix:@"http://"] || [image hasPrefix:@"https://"]) {
+        NSURL *url = [NSURL URLWithString:image];
+        return [NSData dataWithContentsOfURL:url];
+    } else {
+        return [NSData dataWithContentsOfFile:image];
+    }
+}
+
+/**
+ 检查图片是不是Base64
+
+ @param data 图片数据
+ @return 结果true or false
+ */
+- (BOOL)isBase64Data:(NSString *)data {
+    data = [[data componentsSeparatedByCharactersInSet:
+             [NSCharacterSet whitespaceAndNewlineCharacterSet]]
+            componentsJoinedByString:@""];
+    if ([data length] % 4 == 0) {
+        static NSCharacterSet *invertedBase64CharacterSet = nil;
+        if (invertedBase64CharacterSet == nil) {
+            invertedBase64CharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="] invertedSet];
+        }
+        return [data rangeOfCharacterFromSet:invertedBase64CharacterSet options:NSLiteralSearch].location == NSNotFound;
+    }
+    return NO;
+}
+
+/**
+ 检查参数是否存在
+
+ @param param 要检查的参数
+ @param args 参数字典
+ @return 参数
+ */
+- (NSString *)check:(NSString *)param in:(NSDictionary *)args {
+    NSString *data = [args objectForKey:param];
+    return data?data:@"";
+}
+@end

+ 30 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WBHttpRequest+WeiboToken.h

xqd
@@ -0,0 +1,30 @@
+//
+//  WBHttpRequest+WeiboToken.h
+//  WeiboSDK
+//
+//  Created by DannionQiu on 14/11/6.
+//  Copyright (c) 2014年 SINA iOS Team. All rights reserved.
+//
+
+#import "WBHttpRequest.h"
+
+@interface WBHttpRequest (WeiboToken)
+/*!
+ @method
+ 
+ @abstract
+ 使用RefreshToken去换取新的身份凭证AccessToken.
+ 
+ @discussion
+ 在SSO授权登录后,服务器会下发有效期为7天的refreshToken以及有效期为1天的AccessToken。
+ 当有效期为1天的AccessToken过期时,可以调用该接口带着refreshToken信息区换取新的AccessToken。
+ @param refreshToken        refreshToken
+ 
+ @param queue               指定发送请求的NSOperationQueue,如果这个参数为nil,则请求会发送在MainQueue( [NSOperationQueue mainQueue] )中。
+ 
+ @param handler             完成请求后会回调handler,处理完成请求后的逻辑。
+ */
++ (WBHttpRequest *)requestForRenewAccessTokenWithRefreshToken:(NSString*)refreshToken
+                                                        queue:(NSOperationQueue*)queue
+                                        withCompletionHandler:(WBRequestHandler)handler;
+@end

+ 184 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WBHttpRequest.h

xqd
@@ -0,0 +1,184 @@
+//
+//  WBHttpRequest.h
+//  WeiboSDK
+//
+//  Created by DannionQiu on 14-9-18.
+//  Copyright (c) 2014年 SINA iOS Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+#pragma mark - WBHttpRequest and WBHttpRequestDelegate
+@class WBHttpRequest;
+
+/**
+ 接收并处理来自微博sdk对于网络请求接口的调用响应 以及logOutWithToken的请求
+ */
+@protocol WBHttpRequestDelegate <NSObject>
+
+/**
+ 收到一个来自微博Http请求的响应
+ 
+ @param response 具体的响应对象
+ */
+@optional
+- (void)request:(WBHttpRequest *)request didReceiveResponse:(NSURLResponse *)response;
+
+/**
+ 收到一个来自微博Http请求失败的响应
+ 
+ @param error 错误信息
+ */
+@optional
+- (void)request:(WBHttpRequest *)request didFailWithError:(NSError *)error;
+
+/**
+ 收到一个来自微博Http请求的网络返回
+ 
+ @param result 请求返回结果
+ */
+@optional
+- (void)request:(WBHttpRequest *)request didFinishLoadingWithResult:(NSString *)result;
+
+/**
+ 收到一个来自微博Http请求的网络返回
+ 
+ @param data 请求返回结果
+ */
+@optional
+- (void)request:(WBHttpRequest *)request didFinishLoadingWithDataResult:(NSData *)data;
+
+/**
+ 收到快速SSO授权的重定向
+ 
+ @param URI
+ */
+@optional
+- (void)request:(WBHttpRequest *)request didReciveRedirectResponseWithURI:(NSURL *)redirectUrl;
+
+@end
+
+
+/**
+ 微博封装Http请求的消息结构
+ 
+ */
+@interface WBHttpRequest : NSObject
+{
+    NSURLConnection                 *connection;
+    NSMutableData                   *responseData;
+}
+
+/**
+ 用户自定义请求地址URL
+ */
+@property (nonatomic, strong) NSString *url;
+
+/**
+ 用户自定义请求方式
+ 
+ 支持"GET" "POST"
+ */
+@property (nonatomic, strong) NSString *httpMethod;
+
+/**
+ 用户自定义请求参数字典
+ */
+@property (nonatomic, strong) NSDictionary *params;
+
+/**
+ WBHttpRequestDelegate对象,用于接收微博SDK对于发起的接口请求的请求的响应
+ */
+@property (nonatomic, weak) id<WBHttpRequestDelegate> delegate;
+
+/**
+ 用户自定义TAG
+ 
+ 用于区分回调Request
+ */
+@property (nonatomic, strong) NSString* tag;
+
+/**
+ 统一HTTP请求接口
+ 调用此接口后,将发送一个HTTP网络请求
+ @param url 请求url地址
+ @param httpMethod  支持"GET" "POST"
+ @param params 向接口传递的参数结构
+ @param delegate WBHttpRequestDelegate对象,用于接收微博SDK对于发起的接口请求的请求的响应
+ @param tag 用户自定义TAG,将通过回调WBHttpRequest实例的tag属性返回
+ */
++ (WBHttpRequest *)requestWithURL:(NSString *)url
+                       httpMethod:(NSString *)httpMethod
+                           params:(NSDictionary *)params
+                         delegate:(id<WBHttpRequestDelegate>)delegate
+                          withTag:(NSString *)tag;
+
+/**
+ 统一微博Open API HTTP请求接口
+ 调用此接口后,将发送一个HTTP网络请求(用于访问微博open api)
+ @param accessToken 应用获取到的accessToken,用于身份验证
+ @param url 请求url地址
+ @param httpMethod  支持"GET" "POST"
+ @param params 向接口传递的参数结构
+ @param delegate WBHttpRequestDelegate对象,用于接收微博SDK对于发起的接口请求的请求的响应
+ @param tag 用户自定义TAG,将通过回调WBHttpRequest实例的tag属性返回
+ */
+
++ (WBHttpRequest *)requestWithAccessToken:(NSString *)accessToken
+                                      url:(NSString *)url
+                               httpMethod:(NSString *)httpMethod
+                                   params:(NSDictionary *)params
+                                 delegate:(id<WBHttpRequestDelegate>)delegate
+                                  withTag:(NSString *)tag;
+
+
+
+/**
+ 取消网络请求接口
+ 调用此接口后,将取消当前网络请求,建议同时[WBHttpRequest setDelegate:nil];
+ 注意:该方法只对使用delegate的request方法有效。无法取消任何使用block的request的网络请求接口。
+ */
+- (void)disconnect;
+
+#pragma mark - block extension
+
+typedef void (^WBRequestHandler)(WBHttpRequest *httpRequest,
+                                 id result,
+                                 NSError *error);
+
+/**
+ 统一微博Open API HTTP请求接口
+ 调用此接口后,将发送一个HTTP网络请求(用于访问微博open api)
+ @param url 请求url地址
+ @param httpMethod  支持"GET" "POST"
+ @param params 向接口传递的参数结构
+ @param queue 发起请求的NSOperationQueue对象,如queue为nil,则在主线程([NSOperationQueue mainQueue])发起请求。
+ @param handler 接口请求返回调用的block方法
+ */
++ (WBHttpRequest *)requestWithURL:(NSString *)url
+                       httpMethod:(NSString *)httpMethod
+                           params:(NSDictionary *)params
+                            queue:(NSOperationQueue*)queue
+            withCompletionHandler:(WBRequestHandler)handler;
+
+
+/**
+ 统一HTTP请求接口
+ 调用此接口后,将发送一个HTTP网络请求
+ @param url 请求url地址
+ @param httpMethod  支持"GET" "POST"
+ @param params 向接口传递的参数结构
+ @param queue 发起请求的NSOperationQueue对象,如queue为nil,则在主线程([NSOperationQueue mainQueue])发起请求。
+ @param handler 接口请求返回调用的block方法
+ */
+
++ (WBHttpRequest *)requestWithAccessToken:(NSString *)accessToken
+                                      url:(NSString *)url
+                               httpMethod:(NSString *)httpMethod
+                                   params:(NSDictionary *)params
+                                    queue:(NSOperationQueue*)queue
+                    withCompletionHandler:(WBRequestHandler)handler;
+
+
+@end

+ 89 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK+Statistics.h

xqd
@@ -0,0 +1,89 @@
+//
+//  WeiboSDK+Statistics.h
+//  WeiboSDK
+//
+//  Created by DannionQiu on 15/4/13.
+//  Copyright (c) 2015年 SINA iOS Team. All rights reserved.
+//
+
+#import "WeiboSDK.h"
+
+@interface WeiboSDK(Statistics)
+
+/** 设置是否开启统计模式, 默认为NO.
+ @param value 为YES, SDK会开启统计功能,记录日志,并在合适的实际传上服务器。
+ @return void.
+ */
++ (void)setStatisticsEnabled:(BOOL)value;
+
+#pragma mark - Optional Configs Setting
+/** 设置是否打印SDK的log信息, 默认NO(不打印log).
+ @param value 设置为YES, WeiboSDK 会输出log信息可供调试参考. 除非特殊需要,否则发布产品时需改回NO.
+ @return void.
+ */
++ (void)setStatisticsLogEnabled:(BOOL)value;
+
+/** 设置版本信息.
+ @param version 版本号,为nil或@""时, 默认为Build号(CFBundleVersion)
+ @return void.
+ */
++ (void)setVersion:(NSString*)version;
+
+/** 设置渠道信息.
+ @param channelID 渠道名称, 为nil或@""时, 默认为@"AppStore"渠道
+ @return void.
+ */
++ (void)setChannelID:(NSString*)channelID;
+
+/** 设定日志上传的发送间隔
+ @param frequecy 单位为秒,最小30秒,最大8*60*60秒(8小时)。默认为180秒(3分钟)
+ @return void.
+ */
++ (void)setUploadFrequecy:(NSTimeInterval)frequecy;
+
+#pragma mark - Statistics Api
+/** 自动页面时长统计, 开始记录某个页面展示时长.
+ 使用方法:必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。
+ 在该页面展示时调用beginLogPageView:,当退出该页面时调用endLogPageView:
+ @param pageName 统计的页面名称.
+ @return void.
+ */
++ (void)beginLogPageView:(NSString *)pageName;
+
+/** 自动页面时长统计, 结束记录某个页面展示时长.
+ 使用方法:必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。
+ 在该页面展示时调用beginLogPageView:,当退出该页面时调用endLogPageView:
+ @param pageName 统计的页面名称.
+ @return void.
+ */
++ (void)endLogPageView:(NSString *)pageName;
+
+
+/** 自动事件时长统计, 开始记录某个事示时长.
+ 使用方法:调用event:函数来完成自动统计。
+ @param eventID 统计的事件标识符.
+ @warning eventID不能使用空格和特殊字符,且长度不能超过255个字符(否则将截取前255个字符)
+ */
++ (void)event:(NSString *)eventID;
+
+/** 自动事件时长统计, 开始记录某个事示时长.
+ 使用方法:调用event:函数来完成自动统计。
+ @param eventID 统计的事件标识符.
+ @param pageName 事件发生时所在页面.
+ @param userInfo 事件相关信息.
+ @return void.
+ 
+ @warning 每个event的userInfo不能超过10个
+ eventID、pageName、userInfo中key和value都不能使用空格和特殊字符,且长度不能超过255个字符(否则将截取前255个字符)
+ */
++ (void)event:(NSString *)eventID onPageView:(NSString*)pageName withUserInfo:(NSDictionary*)userInfo;
+
+/** 强制日志上传
+ 调用后,若距离上次成功上传日志时间不小于30秒,立刻上传日志。
+ */
++ (void)forceUploadRecords;
+
+
+
+
+@end

BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/images/common_button_white@2x.png


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/images/common_button_white_highlighted@2x.png


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/images/empty_failed@2x.png


BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.bundle/others/mfp.cer


+ 573 - 0
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/WeiboSDK.h

xqd
@@ -0,0 +1,573 @@
+//
+//  WeiboSDKHeaders.h
+//  WeiboSDKDemo
+//
+//  Created by Wade Cheng on 4/3/13.
+//  Copyright (c) 2013 SINA iOS Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+#import "WBHttpRequest.h"
+#import "WBHttpRequest+WeiboToken.h"
+
+typedef NS_ENUM(NSInteger, WeiboSDKResponseStatusCode)
+{
+    WeiboSDKResponseStatusCodeSuccess               = 0,//成功
+    WeiboSDKResponseStatusCodeUserCancel            = -1,//用户取消发送
+    WeiboSDKResponseStatusCodeSentFail              = -2,//发送失败
+    WeiboSDKResponseStatusCodeAuthDeny              = -3,//授权失败
+    WeiboSDKResponseStatusCodeUserCancelInstall     = -4,//用户取消安装微博客户端
+    WeiboSDKResponseStatusCodePayFail               = -5,//支付失败
+    WeiboSDKResponseStatusCodeShareInSDKFailed      = -8,//分享失败 详情见response UserInfo
+    WeiboSDKResponseStatusCodeUnsupport             = -99,//不支持的请求
+    WeiboSDKResponseStatusCodeUnknown               = -100,
+};
+
+@protocol WeiboSDKDelegate;
+@protocol WBHttpRequestDelegate;
+@class WBBaseRequest;
+@class WBBaseResponse;
+@class WBMessageObject;
+@class WBImageObject;
+@class WBBaseMediaObject;
+@class WBHttpRequest;
+
+/**
+ 微博SDK接口类
+ */
+@interface WeiboSDK : NSObject
+
+/**
+ 检查用户是否安装了微博客户端程序
+ @return 已安装返回YES,未安装返回NO
+ */
++ (BOOL)isWeiboAppInstalled;
+
+/**
+ 检查用户是否可以通过微博客户端进行分享
+ @return 可以使用返回YES,不可以使用返回NO
+ */
++ (BOOL)isCanShareInWeiboAPP;
+
+/**
+ 检查用户是否可以使用微博客户端进行SSO授权
+ @return 可以使用返回YES,不可以使用返回NO
+ */
++ (BOOL)isCanSSOInWeiboApp;
+
+/**
+ 打开微博客户端程序
+ @return 成功打开返回YES,失败返回NO
+ */
++ (BOOL)openWeiboApp;
+
+
+/**
+ 获取微博客户端程序的itunes安装地址
+ @return 微博客户端程序的itunes安装地址
+ */
++ (NSString *)getWeiboAppInstallUrl;
+
+/**
+ 获取当前微博SDK的版本号
+ @return 当前微博SDK的版本号
+ */
++ (NSString *)getSDKVersion;
+
+
+extern NSString * const WeiboSDKGetAidSucessNotification;
+extern NSString * const WeiboSDKGetAidFailNotification;
+/**
+ 获取当前微博SDK的aid
+ 返回的aid值可能为 nil ,当值为 nil 时会尝试获取 aid 值。
+ 当获取成功( aid 值变为有效值)时,SDK会发出名为 WeiboSDKGetAidSucessNotification 的通知,通知中带有 aid 值。
+ 当获取失败时,SDK会发出名为 WeiboSDKGetAidFailNotification 的通知,通知中带有 NSError 对象。
+ @return aid 用于广告的与设备信息相关的标识符
+ */
++ (NSString *)getWeiboAid;
+
+
+/**
+ 向微博客户端程序注册第三方应用
+ @param appKey 微博开放平台第三方应用appKey
+ @return 注册成功返回YES,失败返回NO
+ */
++ (BOOL)registerApp:(NSString *)appKey;
+
+/**
+ 处理微博客户端程序通过URL启动第三方应用时传递的数据
+ 
+ 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用
+ @param url 启动第三方应用的URL
+ @param delegate WeiboSDKDelegate对象,用于接收微博触发的消息
+ @see WeiboSDKDelegate
+ */
++ (BOOL)handleOpenURL:(NSURL *)url delegate:(id<WeiboSDKDelegate>)delegate;
+
+/**
+ 发送请求给微博客户端程序,并切换到微博
+ 
+ 请求发送给微博客户端程序之后,微博客户端程序会进行相关的处理,处理完成之后一定会调用 [WeiboSDKDelegate didReceiveWeiboResponse:] 方法将处理结果返回给第三方应用
+ 
+ @param request 具体的发送请求
+ 
+ @see [WeiboSDKDelegate didReceiveWeiboResponse:]
+ @see WBBaseResponse
+ */
++ (BOOL)sendRequest:(WBBaseRequest *)request;
+
+/**
+ 收到微博客户端程序的请求后,发送对应的应答给微博客户端端程序,并切换到微博
+ 
+ 第三方应用收到微博的请求后,异步处理该请求,完成后必须调用该函数将应答返回给微博
+ 
+ @param response 具体的应答内容
+ @see WBBaseRequest
+ */
++ (BOOL)sendResponse:(WBBaseResponse *)response;
+
+/**
+ 设置WeiboSDK的调试模式
+ 
+ 当开启调试模式时,WeiboSDK会在控制台输出详细的日志信息,开发者可以据此调试自己的程序。默认为 NO
+ @param enabled 开启或关闭WeiboSDK的调试模式
+ */
++ (void)enableDebugMode:(BOOL)enabled;
+
+/**
+ 取消授权,登出接口
+ 调用此接口后,token将失效
+ @param token 第三方应用之前申请的Token
+ @param delegate WBHttpRequestDelegate对象,用于接收微博SDK对于发起的接口请求的请求的响应
+ @param tag 用户自定义TAG,将通过回调WBHttpRequest实例的tag属性返回
+ 
+ */
++ (void)logOutWithToken:(NSString *)token delegate:(id<WBHttpRequestDelegate>)delegate withTag:(NSString*)tag;
+
+/**
+ 呼起微博客户端或打开微博H5页面,SDK自动检测是否安装微博客户端,当调用SDK相关方法时:
+ 
+ 有的话呼起微博客户端定位到对应界面;
+ 没有的话打开 webView 加载相应的微博H5页面;
+ @param uid 用户id
+ @param mid 微博id
+ @param aid 文章id
+*/
+
+//连接到指定用户的微博个人主页,连接后可进行加关注等互动
++ (void)linkToUser:(NSString *)uid;
+
+//连接到指定的单条微博详情页,连接后可对这条微博进行转、评、赞等互动
++ (void)linkToSingleBlog:(NSString *)uid blogID:(NSString *)mid;
+
+//连接到指定的微博头条文章页
++ (void)linkToArticle:(NSString *)aid;
+
+//分享到微博
++ (void)shareToWeibo:(NSString *)content;
+
+//评论指定的微博
++ (void)commentToWeibo:(NSString *)mid;
+
+//连接到微博搜索内容流
++ (void)linkToSearch:(NSString *)keyword;
+
+//连接到我的微博消息流
++ (void)linkToTimeLine;
+
+//连接到我的微博个人主页
++ (void)linkToProfile;
+
+@end
+
+/**
+ 接收并处理来至微博客户端程序的事件消息
+ */
+@protocol WeiboSDKDelegate <NSObject>
+
+/**
+ 收到一个来自微博客户端程序的请求
+ 
+ 收到微博的请求后,第三方应用应该按照请求类型进行处理,处理完后必须通过 [WeiboSDK sendResponse:] 将结果回传给微博
+ @param request 具体的请求对象
+ */
+- (void)didReceiveWeiboRequest:(WBBaseRequest *)request;
+
+/**
+ 收到一个来自微博客户端程序的响应
+ 
+ 收到微博的响应后,第三方应用可以通过响应类型、响应的数据和 WBBaseResponse.userInfo 中的数据完成自己的功能
+ @param response 具体的响应对象
+ */
+- (void)didReceiveWeiboResponse:(WBBaseResponse *)response;
+
+@end
+
+
+#pragma mark - DataTransferObject and Base Request/Response
+
+/**
+ 微博客户端程序和第三方应用之间传输数据信息的基类
+ */
+@interface WBDataTransferObject : NSObject
+
+/**
+ 自定义信息字典,用于数据传输过程中存储相关的上下文环境数据
+ 
+ 第三方应用给微博客户端程序发送 request 时,可以在 userInfo 中存储请求相关的信息。
+ 
+ @warning userInfo中的数据必须是实现了 `NSCoding` 协议的对象,必须保证能序列化和反序列化
+ @warning 序列化后的数据不能大于10M
+ */
+@property (nonatomic, strong) NSDictionary *userInfo;
+
+
+/**
+ 发送该数据对象的SDK版本号
+ 
+ 如果数据对象是自己生成的,则sdkVersion为当前SDK的版本号;如果是接收到的数据对象,则sdkVersion为数据发送方SDK版本号
+ */
+@property (strong, nonatomic, readonly) NSString *sdkVersion;
+
+
+/**
+ 当用户没有安装微博客户端程序时是否提示用户打开微博安装页面
+ 
+ 如果设置为YES,当用户未安装微博时会弹出Alert询问用户是否要打开微博App的安装页面。默认为YES
+ */
+@property (nonatomic, assign) BOOL shouldOpenWeiboAppInstallPageIfNotInstalled;
+
+
+@end
+
+
+/**
+ 微博SDK所有请求类的基类
+ */
+@interface WBBaseRequest : WBDataTransferObject
+
+/**
+ 返回一个 WBBaseRequest 对象
+ 
+ @return 返回一个*自动释放的*WBBaseRequest对象
+ */
++ (id)request;
+
+@end
+
+
+/**
+ 微博SDK所有响应类的基类
+ */
+@interface WBBaseResponse : WBDataTransferObject
+
+/**
+ 对应的 request 中的自定义信息字典
+ 
+ 如果当前 response 是由微博客户端响应给第三方应用的,则 requestUserInfo 中会包含原 request.userInfo 中的所有数据
+ 
+ @see WBBaseRequest.userInfo
+ */
+@property (strong, nonatomic, readonly) NSDictionary *requestUserInfo;
+
+/**
+ 响应状态码
+ 
+ 第三方应用可以通过statusCode判断请求的处理结果
+ */
+@property (nonatomic, assign) WeiboSDKResponseStatusCode statusCode;
+
+/**
+ 返回一个 WBBaseResponse 对象
+ 
+ @return 返回一个*自动释放的*WBBaseResponse对象
+ */
++ (id)response;
+
+@end
+
+#pragma mark - Authorize Request/Response
+
+/**
+ 第三方应用向微博客户端请求认证的消息结构
+ 
+ 第三方应用向微博客户端申请认证时,需要调用 [WeiboSDK sendRequest:] 函数, 向微博客户端发送一个 WBAuthorizeRequest 的消息结构。
+ 微博客户端处理完后会向第三方应用发送一个结构为 WBAuthorizeResponse 的处理结果。
+ */
+@interface WBAuthorizeRequest : WBBaseRequest
+
+/**
+ 微博开放平台第三方应用授权回调页地址,默认为`http://`
+ 
+ 参考 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E#.E5.AE.A2.E6.88.B7.E7.AB.AF.E9.BB.98.E8.AE.A4.E5.9B.9E.E8.B0.83.E9.A1.B5
+ 
+ @warning 必须保证和在微博开放平台应用管理界面配置的“授权回调页”地址一致,如未进行配置则默认为`http://`
+ @warning 不能为空,长度小于1K
+ */
+@property (nonatomic, strong) NSString *redirectURI;
+
+/**
+ 微博开放平台第三方应用scope,多个scrope用逗号分隔
+ 
+ 参考 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E#scope
+ 
+ @warning 长度小于1K
+ */
+@property (nonatomic, strong) NSString *scope;
+
+/**
+ 当用户没有安装微博客户端或微博客户端过低无法支持SSO的时候是否弹出SDK自带的Webview进行授权
+ 
+ 如果设置为YES,当用户没有安装微博客户端或微博客户端过低无法支持SSO的时候会自动弹出SDK自带的Webview进行授权。
+
+ 如果设置为NO,会根据 shouldOpenWeiboAppInstallPageIfNotInstalled 属性判断是否弹出安装/更新微博的对话框
+ 
+ 默认为YES
+ */
+@property (nonatomic, assign) BOOL shouldShowWebViewForAuthIfCannotSSO;
+
+@end
+
+
+/**
+ 微博客户端处理完第三方应用的认证申请后向第三方应用回送的处理结果
+ 
+ WBAuthorizeResponse 结构中仅包含常用的 userID 、accessToken 和 expirationDate 信息,其他的认证信息(比如部分应用可以获取的 refresh_token 信息)会统一存放到 userInfo 中
+ */
+@interface WBAuthorizeResponse : WBBaseResponse
+
+/**
+ 用户ID
+ */
+@property (nonatomic, strong) NSString *userID;
+
+/**
+ 认证口令
+ */
+@property (nonatomic, strong) NSString *accessToken;
+
+/**
+ 认证过期时间
+ */
+@property (nonatomic, strong) NSDate *expirationDate;
+
+/**
+ 当认证口令过期时用于换取认证口令的更新口令
+ */
+@property (nonatomic, strong) NSString *refreshToken;
+
+@end
+
+#pragma mark - ProvideMessageForWeibo Request/Response
+
+/**
+ 微博客户端向第三方程序请求提供内容的消息结构
+ */
+@interface WBProvideMessageForWeiboRequest : WBBaseRequest
+
+@end
+
+/**
+ 微博客户端向第三方应用请求提供内容,第三方应用向微博客户端返回的消息结构
+ */
+@interface WBProvideMessageForWeiboResponse : WBBaseResponse
+
+/**
+ 提供给微博客户端的消息
+ */
+@property (nonatomic, strong) WBMessageObject *message;
+
+/**
+ 返回一个 WBProvideMessageForWeiboResponse 对象
+ @param message 需要回送给微博客户端程序的消息对象
+ @return 返回一个*自动释放的*WBProvideMessageForWeiboResponse对象
+ */
++ (id)responseWithMessage:(WBMessageObject *)message;
+
+@end
+
+#pragma mark - SendMessageToWeibo Request/Response
+
+/**
+ 第三方应用发送消息至微博客户端程序的消息结构体
+ */
+@interface WBSendMessageToWeiboRequest : WBBaseRequest
+
+/**
+ 发送给微博客户端的消息
+ */
+@property (nonatomic, strong) WBMessageObject *message;
+
+/**
+ 返回一个 WBSendMessageToWeiboRequest 对象
+ 此方法生成对象被[WeiboSDK sendRequest:]会唤起微博客户端的发布器进行分享,如果未安装微博客户端或客户端版本太低
+ 会根据 shouldOpenWeiboAppInstallPageIfNotInstalled 属性判断是否弹出安装/更新微博的对话框
+ @param message 需要发送给微博客户端的消息对象
+ @return 返回一个*自动释放的*WBSendMessageToWeiboRequest对象
+ */
++ (id)requestWithMessage:(WBMessageObject *)message;
+
+/**
+ 返回一个 WBSendMessageToWeiboRequest 对象
+ 
+ 当用户安装了可以支持微博客户端內分享的微博客户端时,会自动唤起微博并分享
+ 当用户没有安装微博客户端或微博客户端过低无法支持通过客户端內分享的时候会自动唤起SDK內微博发布器
+ 
+ @param message 需要发送给微博的消息对象
+ @param authRequest 授权相关信息,与access_token二者至少有一个不为空,当access_token为空并且需要弹出SDK內发布器时会通过此信息先进行授权后再分享
+ @param access_token 第三方应用之前申请的Token,当此值不为空并且无法通过客户端分享的时候,会使用此token进行分享。
+ @return 返回一个*自动释放的*WBSendMessageToWeiboRequest对象
+ */
++ (id)requestWithMessage:(WBMessageObject *)message
+                authInfo:(WBAuthorizeRequest *)authRequest
+            access_token:(NSString *)access_token;
+
+@end
+
+/**
+ WBSendMessageToWeiboResponse
+ */
+@interface WBSendMessageToWeiboResponse : WBBaseResponse
+
+/**
+ 可能在分享过程中用户进行了授权操作,当此值不为空时,为用户相应授权信息
+ */
+@property (nonatomic,strong) WBAuthorizeResponse *authResponse;
+@end
+
+
+
+#pragma mark - MessageObject / ImageObject
+
+/**
+ 微博客户端程序和第三方应用之间传递的消息结构
+ 
+ 一个消息结构由三部分组成:文字、图片和多媒体数据。三部分内容中至少有一项不为空,图片和多媒体数据不能共存。
+ */
+@interface WBMessageObject : NSObject
+
+/**
+ 消息的文本内容
+ 
+ @warning 长度小于2000个汉字
+ */
+@property (nonatomic, strong) NSString *text;
+
+/**
+ 消息的图片内容
+ 
+ @see WBImageObject
+ */
+@property (nonatomic, strong) WBImageObject *imageObject;
+
+/**
+ 消息的多媒体内容
+ 
+ @see WBBaseMediaObject
+ */
+@property (nonatomic, strong) WBBaseMediaObject *mediaObject;
+
+/**
+ 返回一个 WBMessageObject 对象
+ 
+ @return 返回一个*自动释放的*WBMessageObject对象
+ */
++ (id)message;
+
+@end
+
+/**
+ 消息中包含的图片数据对象
+ */
+@interface WBImageObject : NSObject
+
+/**
+ 图片真实数据内容
+ 
+ @warning 大小不能超过10M
+ */
+@property (nonatomic, strong) NSData *imageData;
+
+/**
+ 返回一个 WBImageObject 对象
+ 
+ @return 返回一个*自动释放的*WBImageObject对象
+ */
++ (id)object;
+
+/**
+ 返回一个 UIImage 对象
+ 
+ @return 返回一个*自动释放的*UIImage对象
+ */
+- (UIImage *)image;
+
+@end
+
+#pragma mark - Message Media Objects
+
+/**
+ 消息中包含的多媒体数据对象基类,该类后期会被废弃,在发布器不再显示为linkcard样式,只显示为普通网络连接
+ */
+@interface WBBaseMediaObject : NSObject
+
+/**
+ 对象唯一ID,用于唯一标识一个多媒体内容
+ 
+ 当第三方应用分享多媒体内容到微博时,应该将此参数设置为被分享的内容在自己的系统中的唯一标识
+ @warning 不能为空,长度小于255
+ */
+@property (nonatomic, strong) NSString *objectID;
+
+/**
+ 多媒体内容标题
+ @warning 不能为空且长度小于1k
+ */
+@property (nonatomic, strong) NSString *title;
+
+/**
+ 多媒体内容描述
+ @warning 长度小于1k
+ */
+@property (nonatomic, strong) NSString *description;
+
+/**
+ 多媒体内容缩略图
+ @warning 大小小于32k
+ */
+@property (nonatomic, strong) NSData *thumbnailData;
+
+/**
+ 点击多媒体内容之后呼起第三方应用特定页面的scheme
+ @warning 长度小于255
+ */
+@property (nonatomic, strong) NSString *scheme;
+
+/**
+ 返回一个 WBBaseMediaObject 对象
+ 
+ @return 返回一个*自动释放的*WBBaseMediaObject对象
+ */
++ (id)object;
+
+@end
+
+#pragma mark - Message WebPage Objects
+
+/**
+ 消息中包含的网页数据对象
+ */
+@interface WBWebpageObject : WBBaseMediaObject
+
+/**
+ 网页的url地址
+ 
+ @warning 不能为空且长度不能超过255
+ */
+@property (nonatomic, strong) NSString *webpageUrl;
+
+@end
+
+

BIN
miaomiao/plugins/cordova-plugin-weibosdk/src/ios/libWeiboSDK/libWeiboSDK.a


+ 30 - 0
miaomiao/plugins/cordova-plugin-weibosdk/www/weibo.js

xqd
@@ -0,0 +1,30 @@
+var cordova = require('cordova');
+module.exports = {
+	checkClientInstalled:function(successCallback, errorCallback){
+		cordova.exec(successCallback, errorCallback, "WeiboSDK", "checkClientInstalled", []);
+	},
+	ssoLogin:function(successCallback, errorCallback){
+		cordova.exec(successCallback, errorCallback, "WeiboSDK", "ssoLogin", []);
+	},
+	logout:function(successCallback, errorCallback){
+		cordova.exec(successCallback, errorCallback, "WeiboSDK", "logout", []);
+	},
+	shareToWeibo:function(successCallback, errorCallback, args){
+		if(args == undefined){
+			args = {};
+		}
+		cordova.exec(successCallback, errorCallback, "WeiboSDK", "shareToWeibo", [args]);
+	},
+	shareImageToWeibo:function(successCallback, errorCallback, args){
+		if(args == undefined){
+			args = {};
+		}
+		cordova.exec(successCallback, errorCallback, "WeiboSDK", "shareImageToWeibo", [args]);
+	},
+	shareTextToWeibo:function(successCallback, errorCallback, args){
+		if(args == undefined){
+			args = {};
+		}
+		cordova.exec(successCallback, errorCallback, "WeiboSDK", "shareTextToWeibo", [args]);
+	}
+};

+ 9 - 4
miaomiao/plugins/fetch.json

xqd xqd xqd
@@ -127,7 +127,7 @@
     "cordova-plugin-offbye-alipay": {
         "source": {
             "type": "registry",
-            "id": "https://github.com/offbye/cordova-plugin-alipay.git"
+            "id": "cordova-plugin-offbye-alipay@git+https://github.com/offbye/cordova-plugin-alipay.git"
         },
         "is_top_level": true,
         "variables": {
@@ -145,10 +145,13 @@
     "jpush-phonegap-plugin": {
         "source": {
             "type": "registry",
-            "id": "jpush-phonegap-plugin@2.2.8"
+            "id": "jpush-phonegap-plugin@^3.2.3"
         },
         "is_top_level": true,
-        "variables": {}
+        "variables": {
+            "APP_KEY": "041b70b4c7eee686870a32cd",
+            "API_KEY": "041b70b4c7eee686870a32cd"
+        }
     },
     "cordova-plugin-weibosdk": {
         "source": {
@@ -156,6 +159,8 @@
             "id": "cordova-plugin-weibosdk@^0.6.0"
         },
         "is_top_level": true,
-        "variables": {}
+        "variables": {
+            "WEIBO_APP_ID": "YOUR_WEIBO_APPID"
+        }
     }
 }

+ 127 - 0
miaomiao/plugins/jpush-phonegap-plugin/README.md

xqd
@@ -0,0 +1,127 @@
+# JPush PhoneGap / Cordova Plugin
+
+[![Build Status](https://travis-ci.org/jpush/jpush-phonegap-plugin.svg?branch=master)](https://travis-ci.org/jpush/jpush-phonegap-plugin)
+[![release](https://img.shields.io/badge/release-3.2.3-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
+[![platforms](https://img.shields.io/badge/platforms-iOS%7CAndroid-lightgrey.svg)](https://github.com/jpush/jpush-phonegap-plugin)
+[![weibo](https://img.shields.io/badge/weibo-JPush-blue.svg)](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1)
+
+极光官方支持的 cordova 推送插件。
+
+- 如需要 IM 功能的插件,可关注 [jmessage-phonegap-plugin](https://github.com/jpush/jmessage-phonegap-plugin)
+- 如需要短信验证码功能插件,可关注 [cordova-plugin-jsms](https://github.com/jpush/cordova-plugin-jsms)
+- 如需要统计分析功能插件,可关注 [cordova-plugin-janalytics](https://github.com/jpush/cordova-plugin-janalytics)
+
+## Install
+
+- 通过 Cordova Plugins 安装,要求 Cordova CLI 5.0+:
+
+  ```shell
+  cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey
+  ```
+
+- 或直接通过 url 安装:
+
+  ```shell
+  cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey
+  ```
+
+- 或下载到本地安装:
+
+  ```shell
+  cordova plugin add Your_Plugin_Path  --variable APP_KEY=your_jpush_appkey
+  ```
+
+> 在使用 Xcode 8 调试 iOS 项目时,需要先在项目配置界面的 Capabilities 中打开 Push Notifications 开关。
+
+## Usage
+
+### API
+
+- [Common](/doc/Common_detail_api.md)
+- [iOS](/doc/iOS_API.md)
+- [Android](/doc/Android_detail_api.md)
+
+### Demo
+
+插件项目中包含一个简单的 Demo。若想参考,可以在 */example* 文件夹内找到并拷贝以下文件:
+
+    example/index.html -> www/index.html
+    example/css/* -> www/css
+    example/js/* -> www/js
+
+### 关于 PhoneGap build 云服务
+
+该项目基于 Cordova 实现,目前无法使用 PhoneGap build 云服务进行打包,建议使用本地环境进行打包。
+
+## FAQ
+
+> 如果遇到了疑问,请优先参考 Demo 和 API 文档。若还无法解决,可到 [Issues](https://github.com/jpush/jpush-phonegap-plugin/issues) 提问。
+
+### Android
+
+#### 在 Eclipse 中 import 工程之后出现:*Type CallbackContext cannot be resolved to a type*
+
+右键单击工程名 -> Build Path -> Config Build Path -> Projects -> 选中工程名称 -> CordovaLib -> 点击 add。
+
+#### 如何自定义通知声音?
+
+Android 因为各 Rom 的高度定制化,不像 iOS 一样能有一个统一的管理,如果在 Android 中想自定义通知铃声,推荐通过 JPush 推送自定义
+消息,之后在 `jpush.receiveMessage` 事件监听中通过 [Cordova Local-Notification Plugin](https://github.com/katzer/cordova-plugin-local-notifications) 触发通知,再配合 [Cordova Background Plugin](https://github.com/katzer/cordova-plugin-background-mode) 插件保证应用的后台运行。
+
+#### 关闭 App 后收不到通知
+
+Android 的推送通过长连接的方式实现,只有在连接保持的情况下才能收到通知。而有的第三方 ROM 会限制一般应用服务的自启动,也就是
+在退出应用后,应用的所有服务均被杀死,且无法自启动,所以就会收不到通知。
+
+目前 JPush 是做了应用互相拉起机制的,也就是当用户打开其他集成了 JPush 的应用时,你的应用也能同时收到推送消息。
+
+如果你的应用希望随时都能收到推送,官方推荐是通过文案的方式引导用户在设置中允许你的应用能够自启动,常见机型的设置方法可以参考[这里](https://docs.jiguang.cn/jpush/client/Android/android_faq/#_2)。
+
+或者自己实现应用保活,网上有很多相关文章(不推荐)。
+
+> 为什么 QQ、微信之类的应用退出后还能够收到通知?因为这些大厂应用,手机厂商默认都会加入自启动白名单中,也不会在应用退出后杀死它们的相关服务。
+> 如果你多加留意,就会发现非大厂的应用如果你一段时间不用都是收不到推送的。
+
+### iOS
+
+#### 打包时遇到 i386 打包失败怎么办?
+
+```shell
+cordova platform update ios
+```
+
+#### ionic 2 如何调用 API?
+
+[issue 179](https://github.com/jpush/jpush-phonegap-plugin/issues/179)
+
+#### PushConfig.plist 文件中的字段都是什么意思?
+
+- Appkey:应用标识。
+- Channel:渠道标识。
+- IsProduction:是否生产环境。
+- IsIDFA:是否使用 IDFA 启动 SDK。
+
+#### 刚集成完插件收不到推送怎么办?
+
+请首先按照正确方式再次配置证书、描述文件,具体可参考 [iOS 证书设置指南](https://docs.jiguang.cn/jpush/client/iOS/ios_cer_guide/)。
+
+#### iOS 集成插件白屏、或无法启动插件、或打包报错无法找到需要引入的文件怎么办?
+
+按照以下步骤逐个尝试:
+
+- 升级至最新版本 Xcode
+- 删除插件、再重装插件(先使用 `cordova platform add ios`,后使用 `cordova plugin add`)
+
+## Support
+
+- QQ 群:413602425 / 524248013
+- [JPush 官网文档](https://docs.jiguang.cn/jpush/guideline/intro/)
+- [极光社区](http://community.jiguang.cn/)
+
+## Contribute
+
+Please contribute! [Look at the issues](https://github.com/jpush/jpush-phonegap-plugin/issues).
+
+## License
+
+MIT © [JiGuang](/license)

+ 347 - 0
miaomiao/plugins/jpush-phonegap-plugin/doc/Android_detail_api.md

xqd
@@ -0,0 +1,347 @@
+# Android API 简介
+
+- [注册成功事件](#注册成功事件)
+- [接收通知时获得通知的内容](#接收通知时获得通知的内容)
+- [打开通知时获得通知的内容](#打开通知时获得通知的内容)
+- [收到自定义消息时获取消息的内容](#收到自定义消息时获取消息的内容)
+- [获取集成日志(同时适用于 iOS)](#获取集成日志同时适用于-ios)
+- [接收消息和点击通知事件](#接收消息和点击通知事件)
+- [统计分析](#统计分析)
+- [清除通知](#清除通知)
+- [设置允许推送时间](#设置允许推送时间)
+- [设置通知静默时间](#设置通知静默时间)
+- [通知栏样式定制](#通知栏样式定制)
+- [设置保留最近通知条数](#设置保留最近通知条数)
+- [本地通知](#本地通知)
+- [富媒体页面 JavaScript 回调 API](#富媒体页面-javascript-回调-api)
+
+## 注册成功事件
+### jpush.receiveRegistrationId
+集成了 JPush SDK 的应用程序在第一次成功注册到 JPush 服务器时,JPush 服务器会给客户端返回一个唯一的该设备的标识 - RegistrationID。
+就会触发这个事件(注意只有第一次会触发该事件,之后如果想要取到 registrationId,可以直接调用 *getRegistrationID* 方法)。
+
+#### 代码示例
+```Javascript
+document.addEventListener('jpush.receiveRegistrationId', function (event) {
+    console.log(event.registrationId)
+}, false)
+```
+
+## 接收通知时获得通知的内容
+
+- 内容:
+    window.plugins.jPushPlugin.receiveNotification.alert
+- 标题:
+    window.plugins.jPushPlugin.receiveNotification.title
+- 附加字段:
+    window.plugins.jPushPlugin.receiveNotification.extras.yourKey
+
+## 打开通知时获得通知的内容
+
+- 内容:
+    window.plugins.jPushPlugin.openNotification.alert
+- 标题:
+    window.plugins.jPushPlugin.openNotification.title
+- 附加字段
+    window.plugins.jPushPlugin.openNotification.extras.yourKey
+
+## 收到自定义消息时获取消息的内容
+
+- 内容:
+    window.plugins.jPushPlugin.receiveMessage.message
+- 附加字段:
+    window.plugins.jPushPlugin.receiveMessage.extras.yourKey
+
+## 获取集成日志(同时适用于 iOS)
+
+### API - setDebugMode
+
+用于开启调试模式,可以查看集成 JPush 过程中的 Log,如果集成失败,可方便定位问题所在。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.setDebugMode(mode)
+
+#### 参数说明
+
+- mode:
+	- true  显示集成日志。
+	- false 不显示集成日志。
+
+##  接收消息和点击通知事件
+### API - receiveMessageInAndroidCallback
+
+用于 Android 收到应用内消息的回调函数(请注意和通知的区别),该函数不需要主动调用。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.receiveMessageInAndroidCallback(data)
+
+#### 参数说明
+
+- data: 接收到的 js 字符串,包含的 key:value 请进入该函数体查看。
+
+
+### API - openNotificationInAndroidCallback
+
+当点击 Android 手机的通知栏进入应用程序时,会调用这个函数,这个函数不需要主动调用,是作为回调函数来用的。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.openNotificationInAndroidCallback(data)
+
+#### 参数说明
+
+- data: js 字符串。
+
+##  统计分析
+
+### API - onResume / onPause
+
+这是一个 Android Local API,不是 js 的 API,请注意。
+本 API 用于“用户使用时长”,“活跃用户”,“用户打开次数”的统计,并上报到服务器,在 Portal 上展示给开发者。
+
+#### 接口定义
+
+	public static void onResume(final Activity activity)
+	public static void onPause(final Activity activity)
+
+#### 参数说明
+
+ - Activity: 当前所在的 Activity。
+
+#### 调用说明
+
+应在所有的 Activity 的 onResume / onPause 方法里调用。
+
+#### 代码示例
+
+	@Override
+	protected void onResume() {
+	    super.onResume();
+	    JPushInterface.onResume(this);
+	}
+
+	@Override
+	protected void onPause() {
+	    super.onPause();
+	    JPushInterface.onPause(this);
+	}
+
+### API - setStatisticsOpen
+
+用于在 js 中控制是否打开应用的统计分析功能,但如果已经添加了上面的 onResume / onPause 方法,
+就不能再通过这个方法来控制统计分析功能了。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.setStatisticsOpen(boolean)
+
+#### 参数说明
+
+- boolean:
+	- true: 打开统计分析功能。
+	- false: 关闭统计分析功能。
+
+### API - reportNotificationOpened
+
+用于上报用户的通知栏被打开,或者用于上报用户自定义消息被展示等客户端需要统计的事件。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.reportNotificationOpened(msgID)
+
+#### 参数说明
+
+- msgID: 收到的通知或者自定义消息的 id。
+
+
+##  清除通知
+
+### API - clearAllNotification
+
+推送通知到客户端时,由 JPush SDK 展现通知到通知栏上。
+
+此 API 提供清除通知的功能,包括:清除所有 JPush 展现的通知(不包括非 JPush SDK 展现的)。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.clearAllNotification()
+
+### API - clearNotificationById
+根据通知 Id 清除通知(包括本地通知)。
+
+#### 接口定义
+
+    window.plugins.jPushPlugin.clearNotificationById(notificationId)
+
+#### 参数说明
+- notificationId:int,通知的 id。
+
+#### 代码示例
+
+    window.plugins.jPushPlugin.clearNotificationById(1)
+
+## 设置允许推送时间
+
+### API - setPushTime
+默认情况下用户在任何时间都允许推送。即任何时候有推送下来,客户端都会收到,并展示。
+开发者可以调用此 API 来设置允许推送的时间。
+如果不在该时间段内收到消息,当前的行为是:推送到的通知会被扔掉。
+
+#### 接口定义
+
+    window.plugins.jPushPlugin.setPushTime(days, startHour, endHour)
+
+#### 参数说明
+- days: 数组,0 表示星期天,1 表示星期一,以此类推(7天制,数组中值的范围为 0 到 6 )。
+数组的值为 null, 表示任何时间都可以收到消息和通知,数组的 size 为 0,则表示任何时间都收不到消息和通知。
+- startHour: 整形,允许推送的开始时间 (24 小时制:startHour 的范围为 0 到 23)。
+- endHour: 整形,允许推送的结束时间 (24 小时制:endHour 的范围为 0 到 23)。
+
+##  设置通知静默时间
+
+### API - setSilenceTime
+默认情况下用户在收到推送通知时,客户端可能会有震动,响铃等提示。
+但用户在睡觉、开会等时间点希望为 "免打扰" 模式,也是静音时段的概念。
+开发者可以调用此 API 来设置静音时段。如果在该时间段内收到消息,则:不会有铃声和震动。
+
+#### 接口定义
+
+    window.plugins.jPushPlugin.setSilenceTime(startHour, startMinute, endHour, endMinute)
+
+#### 参数说明
+
+- startHour: 整形,静音时段的开始时间 - 小时 (24小时制,范围:0~23 )。
+- startMinute: 整形,静音时段的开始时间 - 分钟(范围:0~59 )。
+- endHour: 整形,静音时段的结束时间 - 小时 (24小时制,范围:0~23 )。
+- endMinute: 整形,静音时段的结束时间 - 分钟(范围:0~59 )。
+
+
+##  通知栏样式定制
+
+### API - setBasicPushNotificationBuilder, setCustomPushNotificationBuilder
+
+当用户需要定制默认的通知栏样式时,则可调用此方法。
+需要用户去自定义 ../JPushPlugin.java 中的同名方法代码,然后再在 js 端 调用该方法。
+
+具体用法可参考[官方文档](http://docs.jiguang.cn/jpush/client/Android/android_api/#api_6)。
+
+JPush SDK 提供了 2 个用于定制通知栏样式的构建类:
+
+- setBasicPushNotificationBuilder:
+    Basic 用于定制 Android Notification 里的 defaults / flags / icon 等基础样式(行为)。
+- setCustomPushNotificationBuilder:
+    继承 Basic 进一步让开发者定制 Notification Layout。
+
+如果不调用此方法定制,则极光 Push SDK 默认的通知栏样式是 Android 标准的通知栏。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.setBasicPushNotificationBuilder()
+	window.plugins.jPushPlugin.setCustomPushNotificationBuilder()
+
+
+##  设置保留最近通知条数
+
+### API - setLatestNotificationNum
+
+通过极光推送,推送了很多通知到客户端时,如果用户不去处理,就会有很多保留在那里。
+
+默认为保留最近 5 条通知,开发者可通过调用此 API 来定义为不同的数量。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.setLatestNotificationNum(num)
+
+#### 参数说明
+
+- num: 保存的条数。
+
+
+##  本地通知
+### API - addLocalNotification, removeLocalNotification, clearLocalNotifications
+本地通知 API 不依赖于网络,无网条件下依旧可以触发。
+
+本地通知与网络推送的通知是相互独立的,不受保留最近通知条数上限的限制。
+
+本地通知的定时时间是自发送时算起的,不受中间关机等操作的影响。
+
+三个接口的功能分别为:添加一个本地通知,清除一个本地通知,清除所有的本地通知。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.addLocalNotification(builderId, content, title,
+         notificaitonID, broadcastTime, extras)
+	window.plugins.jPushPlugin.removeLocalNotification(notificationID)
+	window.plugins.jPushPlugin.clearLocalNotifications() // 同时适用于 iOS
+
+#### 参数说明
+
+- builderId: 设置本地通知样式。
+- content: 设置本地通知的 content。
+- title: 设置本地通知的 title。
+- notificaitonID: 设置本地通知的 ID(不要为 0)。
+- broadcastTime: 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒。
+- extras: 设置额外的数据信息 extras 为 json 字符串。
+
+
+## 富媒体页面 JavaScript 回调 API
+富媒体推送通知时,用户可以用自定义的Javascript 函数来控制页面,如关闭当前页面,点击按钮跳转到指定的 Activity,通知应用程序做一些指定的动作等。
+
+此 API 提供的回调函数包括:关闭当前页面、打开应用的主 Activity、根据 Activity 名字打开对应的 Activity、以广播的形式传递页面参数到应用程序等功能。
+
+### API - 关闭当前页面
+
+    JPushWeb.close();   // 在富文本 HTML 页面中调用后会关闭当前页面。
+
+### API - 打开主 Activity
+
+    JPushWeb.startMainActivity(String params);
+
+在HTML中调用此函数后,会打开程序的主Activity, 并在对应的 Intent 传入参数 ”params“ ,Key 为 JPushInterface.EXTRA_EXTRA。
+
+对应 Activity 获取 params 示例代码:
+
+    Intent intent = getIntent();
+    if (null != intent ) {
+        String params = intent.getStringExtra(JPushInterface.EXTRA_EXTRA);
+    }
+
+### API - 触发应用中的操作
+
+    JPushWeb.triggerNativeAction(String params);
+
+调用了该方法后需要在 MyReceiver.java 中实现后面的业务逻辑:
+
+    if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
+        Log.d(TAG, "用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
+        //在这里根据 JPushInterface.EXTRA_EXTRA 的内容触发客户端动作,比如打开新的Activity 、打开一个网页等。
+    }
+
+#### 代码示例
+
+    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+    <html>
+     <head>
+      <title>JPush Webview Test</title>
+      <script>
+           function clickButton() {
+             JPushWeb.close();
+           }
+
+          function openUrl() {
+             var json = "{'action':'open', 'url':'www.jpush.cn'}";
+             JPushWeb.triggerNativeAction(json);
+             JPushWeb.close(); //客服端在广播中收到json 后,可以打开对应的URL。
+          }
+     </script>
+     </head>
+     <body>
+         <button onclick="javascript:clickButton(this);return false;">Close</button>
+         <button onclick="javascript:JPushWeb.startMainActivity('test - startMainActivity');return false;">StartMainActivity</button>
+         <button onclick="javascript:JPushWeb.triggerNativeAction('test - triggerNativeAction');Javascript:JPushWeb.close();">triggerNativeAction and Close current webwiew</button>
+         <button onclick="javascript:JPushWeb.startActivityByName('com.example.jpushdemo.TestActivity','test - startActivityByName');">startActivityByName</button>
+         <button onclick="javascript:openUrl();">open a url</button>
+     </body>
+    </html>

+ 135 - 0
miaomiao/plugins/jpush-phonegap-plugin/doc/Android_handle_install.md

xqd
@@ -0,0 +1,135 @@
+#Android 手动安装
+
+下载 JPush PhoneGap 插件,并解压缩,标记插件目录为:`$JPUSH_PLUGIN_DIR`
+
+1. 复制:$JPUSH_PLUGIN_DIR/src/android/*.java 到 cn/jpush/phonega/ 目录下(即:cn.jpush.phonegap 的包下)
+2. 复制:$JPUSH_PLUGIN_DIR/src/android/armeabi/libjpush.so 到 lib/armeabi/
+3. 复制:$JPUSH_PLUGIN_DIR/src/android/jpush-sdk-release2.0.6.jar 到 lib/
+4. 复制:$JPUSH_PLUGIN_DIR/src/android/test_notification_layout.xml 到 res/layout/
+5. 复制:$JPUSH_PLUGIN_DIR/src/android/jpush_notification_icon.png 到 res/drawable/
+6. 复制:$JPUSH_PLUGIN_DIR/www/JPushPlugin.js 到 assets/www/plugins/cn.jpush.phonegap.JPushPlugin.www/
+   和 platform_www/plugins/cn.jpush.phonegap.JPushPlugin/www/
+   并在 JPushPlugin.js 文件的代码外添加:
+
+        cordova.define("cn.jpush.phonegap.JPushPlugin.JPushPlugin", function(require, exports, module) {
+            // 代码
+        });
+
+7. 修改 AndroidManifest.xml 在 manifest 节点下添加以下权限
+
+		<!-- Required 一些系统要求的权限,如访问网络等-->
+		<uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"/>
+		<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT"/>
+		<uses-permission android:name="android.permission.INTERNET"/>
+		<uses-permission android:name="android.permission.WAKE_LOCK"/>
+		<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+		<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+		<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+		<uses-permission android:name="android.permission.VIBRATE"/>
+		<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
+		<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+		<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
+		<permission
+		      android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
+		      android:protectionLevel="signature"/>
+
+7. 修改 AndroidManifest.xml 在 manifest/application 节点下添加SDK相关组件声明
+
+		<activity
+			android:name="cn.jpush.android.ui.PushActivity"
+			android:theme="@android:style/Theme.Translucent.NoTitleBar"
+			android:configChanges="orientation|keyboardHidden">
+			<intent-filter>
+				<action android:name="cn.jpush.android.ui.PushActivity"/>
+
+				<category android:name="android.intent.category.DEFAULT"/>
+				<category android:name="$PACKAGE_NAME"/>
+			</intent-filter>
+		</activity>
+
+		<!-- Required  SDK 核心功能-->
+		<service
+			android:name="cn.jpush.android.service.DownloadService"
+			android:enabled="true"
+			android:exported="false">
+		</service>
+
+		<!-- Required SDK 核心功能-->
+		<service
+			android:name="cn.jpush.android.service.PushService"
+			android:enabled="true"
+			android:exported="false">
+			<intent-filter>
+				<action android:name="cn.jpush.android.intent.REGISTER"/>
+				<action android:name="cn.jpush.android.intent.REPORT"/>
+				<action android:name="cn.jpush.android.intent.PushService"/>
+				<action android:name="cn.jpush.android.intent.PUSH_TIME"/>
+			</intent-filter>
+		</service>
+
+		<!-- Required SDK 核心功能-->
+		<receiver
+			android:name="cn.jpush.android.service.PushReceiver"
+			android:enabled="true">
+			<intent-filter android:priority="1000">
+				<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
+
+				<!--Required  显示通知栏 -->
+				<category android:name="$PACKAGE_NAME"/>
+			</intent-filter>
+
+			<intent-filter>
+				<action android:name="android.intent.action.USER_PRESENT"/>
+				<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
+			</intent-filter>
+
+			<!-- Optional -->
+			<intent-filter>
+				<action android:name="android.intent.action.PACKAGE_ADDED"/>
+				<action android:name="android.intent.action.PACKAGE_REMOVED"/>
+				<data android:scheme="package"/>
+			</intent-filter>
+		</receiver>
+
+		<!-- User defined.  For test only  用户自定义的广播接收器 -->
+		<receiver
+			android:name="cn.jpush.phonegap.MyReceiver"
+			android:enabled="true">
+			<intent-filter android:priority="1000">
+				<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
+
+				<!-- Required  显示通知栏 -->
+				<category android:name="$PACKAGE_NAME"/>
+			</intent-filter>
+
+			<intent-filter>
+				<action android:name="cn.jpush.android.intent.REGISTRATION"/>
+
+				<!-- Required  用户注册 SDK 的intent -->
+				<action android:name="cn.jpush.android.intent.UNREGISTRATION"/>
+				<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED"/>
+
+				<!-- Required  用户接收 SDK 消息的intent -->
+				<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED"/>
+
+				<!-- Required  用户接收 SDK 通知栏信息的intent -->
+				<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED"/>
+
+				<!-- Required  用户打开自定义通知栏的intent -->
+				<action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK"/>
+
+				<!-- Optional 用户接受 Rich Push Javascript 回调函数的intent -->
+				<category android:name="$PACKAGE_NAME"/>
+			</intent-filter>
+		</receiver>
+
+		<!-- Required SDK核心功能-->
+		<receiver
+			android:name="cn.jpush.android.service.AlarmReceiver"/>
+
+		<!-- Required. Enable it you can get statistics data with channel -->
+		<meta-data
+	 		android:name="JPUSH_CHANNEL" android:value="developer-default"/>
+
+		<meta-data
+			android:name="JPUSH_APPKEY" android:value="299d0fee887820e7d90a68b2"/>

+ 379 - 0
miaomiao/plugins/jpush-phonegap-plugin/doc/Common_detail_api.md

xqd
@@ -0,0 +1,379 @@
+# 通用 API 说明(同时适用于 Android 和 iOS 系统)
+
+- [停止与恢复推送服务](#停止与恢复推送服务)
+- [获取 RegistrationID](#获取-registrationid)
+- [设置别名与标签](#设置别名与标签)
+- [获取点击通知内容](#获取点击通知内容)
+- [获取通知内容](#获取通知内容)
+- [获取自定义消息推送内容](#获取自定义消息推送内容)
+- [判断系统设置中是否允许当前应用推送](#判断系统设置中是否允许当前应用推送)
+
+## 停止与恢复推送服务
+### API - init
+
+调用此 API,用来开启 JPush SDK 提供的推送服务。
+
+开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务。当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
+
+本功能是一个完全本地的状态操作,也就是说:停止推送服务的状态不会保存到服务器上。
+
+如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,JPush SDK 会恢复正常的默认行为(因为保存在本地的状态数据被清除掉了)。
+
+本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.init()
+
+### API - stopPush
++ Android 平台:
+
+	+ 开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
+
+	+ 调用了本 API 后,JPush 推送服务完全被停止,具体表现为:
+
+		+ JPush Service 不在后台运行。
+		+ 收不到推送消息。
+		+ 不能通过 JPushInterface.init 恢复,需要调用 resumePush 恢复。
+		+ 极光推送所有的其他 API 调用都无效。
+
++ iOS 平台:
+
+	+ 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。**建议设置一个 UI 界面, 提醒用户在 设置-通知 中关闭推送服务**。
+
+#### 接口定义
+
+    window.plugins.jPushPlugin.stopPush()
+
+### API - resumePush
+
+恢复推送服务。调用了此 API 后:
+
++ Android 平台:
+
+	+ 极光推送完全恢复正常工作。
+
++ iOS 平台:
+
+	+ 重新去 APNS 注册。
+
+#### 接口定义
+
+	window.plugins.jPushPlugin.resumePush()
+
+### API - isPushStopped
+
++ Android 平台:
+
+	+ 用来检查 Push Service 是否已经被停止。
+
++ iOS 平台:
+
+	+ 平台检查推送服务是否注册。
+
+#### 接口定义
+
+    window.plugins.jPushPlugin.isPushStopped(callback)
+
+#### 参数说明
+
++ callback: 回调函数,用来通知 JPush 的推送服务是否开启。
+
+#### 代码示例
+
+	window.plugins.jPushPlugin.isPushStopped(function (result) {
+	   if (result == 0) {
+		    // 开启
+		 } else {
+		    // 关闭
+		 }
+    })
+
+## 开启 Debug 模式
+### API - setDebugMode
+用于开启 Debug 模式,显示更多的日志信息。
+
+#### 接口定义
+
+		JPushPlugin.prototype.setDebugMode(isOpen)
+
+#### 参数说明
+- isOpen: true,开启 Debug 模式;false,关闭 Debug 模式,不显示错误信息之外的日志信息。
+
+#### 代码示例
+
+		window.plugins.jPushPlugin.setDebugMode(true)
+
+## 获取 RegistrationID
+
+### API - getRegistrationID
+
+RegistrationID 定义:
+
+集成了 JPush SDK 的应用程序在第一次成功注册到 JPush 服务器时,JPush 服务器会给客户端返回一个唯一的该设备的标识 - RegistrationID。
+JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
+
+应用程序可以把此 RegistrationID 保存以自己的应用服务器上,然后就可以根据 RegistrationID 来向设备推送消息或者通知。
+
+#### 接口定义
+
+	JPushPlugin.prototype.getRegistrationID(callback)
+
+#### 返回值
+
+调用此 API 来取得应用程序对应的 RegistrationID。 只有当应用程序成功注册到 JPush 的服务器时才返回对应的值,否则返回空字符串。
+
+#### 代码示例
+
+     window.plugins.jPushPlugin.getRegistrationID(function(data) {
+       console.log("JPushPlugin:registrationID is " + data)
+     })
+
+## 设置别名与标签
+
+### API - setTagsWithAlias, setTags, setAlias
+
+提供几个相关 API 用来设置别名(alias)与标签(tags)。
+
+这几个 API 可以在 App 里任何地方调用。
+
+**别名 Alias**:
+
+为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。
+
+每个用户只能指定一个别名。
+
+同一个应用程序内,对不同的用户,建议取不同的别名。这样,尽可能根据别名来唯一确定用户。
+
+系统不限定一个别名只能指定一个用户。如果一个别名被指定到了多个用户,当给指定这个别名发消息时,服务器端 API 会同时给这多个用户发送消息。
+
+举例:在一个用户要登录的游戏中,可能设置别名为 userId。游戏运营时,发现该用户 3 天没有玩游戏了,则根据 userId 调用服务器端 API 发通知到客户端提醒用户。
+
+**标签 Tag**:
+
+为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发 Push 消息。
+
+可为每个用户打多个标签。
+
+不同应用程序、不同的用户,可以打同样的标签。
+
+举例: game, old_page, women。
+
+#### 接口定义
+
+```js
+JPushPlugin.prototype.setTagsWithAlias(tags, alias, successCallback, errorCallback)
+JPushPlugin.prototype.setTags(tags, successCallback, errorCallback)
+JPushPlugin.prototype.setAlias(alias, successCallback, errorCallback)
+```
+
+#### 参数说明
+* tags:
+	* 参数类型为数组。
+	* nil 此次调用不设置此值。
+	* 空集合表示取消之前的设置。
+	* 每次调用至少设置一个 tag,覆盖之前的设置,不是新增。
+	* 有效的标签组成:字母(区分大小写)、数字、下划线、汉字。
+	* 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 100 个 tag,但总长度不得超过1K字节(判断长度需采用 UTF-8 编码)。
+	* 单个设备最多支持设置 100 个 tag,App 全局 tag 数量无限制。
+* alias:
+	* 参数类型为字符串。
+	* nil 此次调用不设置此值。
+	* 空字符串 ("")表示取消之前的设置。
+	* 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。
+	* 限制:alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
+
+#### 代码示例
+
+```js
+window.plugins.jPushPlugin.setTagsWithAlias([tag1, tag2], alias1, function () {
+  // success callback.
+}, function (errorMsg) {
+  // errorMsg 格式为 'errorCode: error message'.
+})
+```
+
+#### 错误码定义
+
+|Code|描述                   		       |详细解释 |
+|----|:----------------------------------------|:--------|
+|6001|无效的设置,tag / alias 不应参数都为 null。  |   	 |
+|6002|设置超时。			       	       |建议重试。|
+|6003|alias 字符串不合法。	               |有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。|
+|6004|alias超长。			       |最多 40个字节,中文 UTF-8 是 3 个字节。|
+|6005|某一个 tag 字符串不合法。		       |有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。|
+|6006|某一个 tag 超长。			       |一个 tag 最多 40个字节,中文 UTF-8 是 3 个字节。|
+|6007|tags 数量超出限制,最多 100 个。	       |这是一台设备的限制,一个应用全局的标签数量无限制。|
+|6008|tag / alias 超出总长度限制。	       	       |总长度最多 1K 字节。|
+|6011|10s内设置 tag 或 alias 大于 3 次。	       |短时间内操作过于频繁。|
+
+
+## 获取点击通知内容
+
+### event - jpush.openNotification
+
+点击通知进入应用程序时会出发改事件。
+
+#### 代码示例
+
+- 在你需要接收通知的的 js 文件中加入:
+
+        document.addEventListener("jpush.openNotification", function (event) {
+	      var alertContent
+          if(device.platform == "Android") {
+            alertContent = event.alert
+          } else {
+            alertContent = event.aps.alert
+          }
+	    }, false)
+
+> ps:点击通知后传递的 json object 保存在 window.plugins.jPushPlugin.openNotification,直接访问即可,字段示例,根据实际推送情况,可能略有差别,请注意。
+
++ Android:
+
+		{
+			"title": "title",
+			"alert":"ding",
+			"extras":{
+				"yourKey": "yourValue",
+			    "cn.jpush.android.MSG_ID": "1691785879",
+			    "app": "com.thi.pushtest",
+			    "cn.jpush.android.ALERT": "ding",
+			    "cn.jpush.android.EXTRA": {},
+			    "cn.jpush.android.PUSH_ID": "1691785879",
+			    "cn.jpush.android.NOTIFICATION_ID": 1691785879,
+			    "cn.jpush.android.NOTIFICATION_TYPE": "0"
+			}
+		}
+
++ iOS:
+
+		{
+			"aps":{
+			  	"badge": 1,
+			  	"sound": "default",
+			  	"alert": "今天去哪儿"
+			 },
+			"key1": "value1",
+			"key2": "value2",
+			"_j_msgid": 154604475
+		}
+
+## 获取通知内容
+
+### event - jpush.receiveNotification
+
+收到通知时会触发该事件。
+
+#### 代码示例
+
+- 在你需要接收通知的的 js 文件中加入:
+
+		  document.addEventListener("jpush.receiveNotification", function (event) {
+		    var alertContent
+	        if(device.platform == "Android") {
+	          alertContent = event.alert
+	        } else {
+	          alertContent = event.aps.alert
+	        }
+	        alert("open Notificaiton:" + alertContent)
+		  }, false)
+
+
+> ps:点击通知后传递的 json object 保存在 window.plugins.jPushPlugin.receiveNotification,直接访问即可,字段示例,根据实际推送情况,可能略有差别,请注意。
+
++ Android:
+
+		{
+			"title": "title",
+			"alert":"ding",
+			"extras":{
+				"yourKey": "yourValue",
+			    "cn.jpush.android.MSG_ID":"1691785879",
+			    "app":"com.thi.pushtest",
+			    "cn.jpush.android.ALERT":"ding",
+			    "cn.jpush.android.EXTRA":{},
+			    "cn.jpush.android.PUSH_ID":"1691785879",
+			    "cn.jpush.android.NOTIFICATION_ID":1691785879,
+			 	"cn.jpush.android.NOTIFICATION_TYPE":"0"
+			}
+		}
+
++ iOS:
+
+		{
+			"aps":{
+				"badge":1,
+				"sound":"default",
+				"alert":"今天去哪儿"
+			},
+			"key1":"value1",
+			"key2":"value2",
+			"_j_msgid":154604475
+		}
+
+
+## 获取自定义消息推送内容
+
+### event - jpush.receiveMessage
+
+收到自定义消息时触发这个事件,推荐使用事件的方式传递。
+
+但同时保留了 receiveMessageIniOSCallback 的回调函数,兼容以前的代码。
+
+#### 代码示例
+
+- 在你需要接收通知的的 js 文件中加入:
+
+	    document.addEventListener("jpush.receiveMessage", function (event) {
+	      var message
+          if(device.platform == "Android") {
+            message = event.message;
+          } else {
+            message = event.content;
+          }      
+	    }, false)
+
+> ps:点击通知后传递的 json object 保存在 window.plugins.jPushPlugin.receiveMessage,直接访问即可,字段示例,根据实际推送情况,可能略有差别,请注意。
+
++ Android:
+
+		{
+			"message":"今天去哪儿",
+			"extras"{
+				"yourKey": "yourValue",
+				"cn.jpush.android.MSG_ID":"154378013",
+				"cn.jpush.android.CONTENT_TYPE":"",
+				"cn.jpush.android.EXTRA":{"key":"不添没有"}
+			}
+		}
+
++ iOS:
+
+		{
+			 "content":"今天去哪儿",
+			 "extras":{"key":"不填写没有"}
+		}
+
+## 判断系统设置中是否允许当前应用推送
+### API - getUserNotificationSettings
+判断系统设置中是否允许当前应用推送。
+
+在 Android 中,返回值为 0 时,代表系统设置中关闭了推送;为 1 时,代表打开了推送(目前仅适用于Android 4.4+)。
+
+在 iOS 中,返回值为 0 时,代表系统设置中关闭了推送;大于 0 时,代表打开了推送,且能够根据返回值判断具体通知形式:
+
+	UIRemoteNotificationTypeNone    = 0,		// 0
+	UIRemoteNotificationTypeBadge   = 1 << 0,	// 1
+	UIRemoteNotificationTypeSound   = 1 << 1,	// 2
+	UIRemoteNotificationTypeAlert   = 1 << 2,	// 4
+	UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3	// 8
+
+#### 代码示例
+
+	window.plugins.jPushPlugin.getUserNotificationSettings(function(result) {
+		if(result == 0) {
+			// 系统设置中已关闭应用推送。
+		} else if(result > 0) {
+			// 系统设置中打开了应用推送。
+		})

+ 865 - 0
miaomiao/plugins/jpush-phonegap-plugin/doc/iOS_API.md

xqd
@@ -0,0 +1,865 @@
+# iOS API
+
+- [延迟注册和启动推送通知服务](#延迟注册和启动推送通知服务)
+- [开始与停止推送服务](#开始与停止推送服务)
+- [获取 RegistrationID](#获取-registrationid)
+- [别名与标签](#别名与标签)
+- [获取 APNS 推送内容](#获取-apns-推送内容)
+  - [点击推送通知](#点击推送通知)
+  - [前台收到推送](#前台收到推送)
+  - [后台收到推送](#后台收到推送)
+- [获取自定义消息内容](#获取自定义消息内容)
+- [设置Badge](#设置badge)
+- [本地通知](#本地通知)
+- [获取本地通知内容](#获取本地通知内容)
+- [页面的统计](#页面的统计)
+- [日志等级设置](#日志等级设置)
+- [地理位置上报](#地理位置上报)
+- [设备平台判断](#设备平台判断)
+- [iOS 10 进阶推送特性](#ios-10-进阶推送特性)
+- [获取用户推送设置](#获取用户推送设置)
+- [监听事件统一说明](#监听事件统一说明)
+
+
+## 延迟注册和启动推送通知服务
+
+本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」,其中:
+
+- 「注册苹果通知服务」会弹出提示窗口向用户请求权限。
+- 「启动 JPush SDK」是使用 JPush 各项 API 的必要条件。
+
+开发者可以根据自己的需求,延迟注册和启动,需做以下操作:
+
+1. 查找并配置 `PushConfig.plist` 文件中的 `Delay` 字段为 `YES`,表明会延迟使用,此时插件不再自动注册、启动通知。
+2. 在需要注册并启动通知的地方调用 API - startJPushSDK。
+
+### API - startJPushSDK
+
+注册苹果通知服务,并启动 JPush SDK。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.startJPushSDK()
+```
+
+
+## 开始与停止推送服务
+
+### API - init
+
+调用此 API,用来开启 JPush SDK 提供的推送服务。
+
+开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
+
+```
+本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
+如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
+JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
+本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
+恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
+```
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.init()
+```
+
+### API - stopPush
+
+- 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。
+- 推荐:设置一个 UI 界面,提醒用户在 设置-通知 中关闭推送服务。
+
+#### 接口定义
+
+  window.plugins.jPushPlugin.stopPush()
+
+### API - resumePush
+
+恢复推送服务。调用了此 API 后,iOS平台,重新去APNS注册。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.resumePush()
+```
+
+### API - isPushStopped
+
+iOS平台,检查推送服务是否停止。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.isPushStopped(callback)
+```
+
+#### 参数说明
+
+- callback 回调函数,用来通知 JPush 的推送服务是否开启。
+
+#### 代码示例
+
+```js
+window.plugins.jPushPlugin.isPushStopped(function(data) {
+	  if(data > 0) {
+	    // 已关闭
+	  } else {
+	    // 已开启
+	  }
+  })
+```
+
+## 获取 RegistrationID
+
+### API - getRegistrationID
+
+RegistrationID 定义:
+
+集成了 JPush SDK 的应用程序在第一次成功注册到 JPush 服务器时,JPush 服务器会给客户端返回一个唯一的该设备的标识 - RegistrationID。
+JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
+
+应用程序可以把此 RegistrationID 保存以自己的应用服务器上,然后就可以根据 RegistrationID 来向设备推送消息或者通知。
+
+#### 接口定义
+
+```js
+JPushPlugin.prototype.getRegistrationID(callback)
+```
+
+#### 返回值
+
+调用此 API 来取得应用程序对应的 RegistrationID。只有当应用程序成功注册到 JPush 的服务器时才返回对应的值,否则返回空字符串。
+
+#### 调用示例
+
+```js
+window.plugins.jPushPlugin.getRegistrationID(function(data) {
+	console.log("JPushPlugin:registrationID is " + data)
+})
+```
+
+
+
+## 别名与标签
+
+### API - setTagsWithAlias, setTags, setAlias
+
+提供几个相关 API 用来设置别名(alias)与标签(tags)。
+
+这几个 API 可以在 App 里任何地方调用。
+
+**别名 Alias**
+
+为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。
+
+每个用户只能指定一个别名。
+
+同一个应用程序内,对不同的用户,建议取不同的别名。这样,尽可能根据别名来唯一确定用户。
+
+系统不限定一个别名只能指定一个用户。如果一个别名被指定到了多个用户,当给指定这个别名发消息时,服务器端 API 会同时给这多个用户发送消息。
+
+举例:在一个用户要登录的游戏中,可能设置别名为 userid。游戏运营时,发现该用户 3 天没有玩游戏了,则根据 userid 调用服务器端 API 发通知到客户端提醒用户。
+
+**标签 Tag**
+
+为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发 Push 消息。
+
+可为每个用户打多个标签。
+
+不同应用程序、不同的用户,可以打同样的标签。
+
+举例: game, old_page, women。
+
+#### 接口定义
+
+```
+JPushPlugin.prototype.setTagsWithAlias(tags, alias, successCallback, errorCallback)
+JPushPlugin.prototype.setTags(tags, successCallback)
+JPushPlugin.prototype.setAlias(alias, errorCallback)
+```
+
+#### 参数说明
+
+- tags:
+  - 参数类型为数组。
+  - nil 此次调用不设置此值。
+  - 空集合表示取消之前的设置。
+  - 每次调用至少设置一个 tag,覆盖之前的设置,不是新增。
+  - 有效的标签组成:字母(区分大小写)、数字、下划线、汉字。
+  - 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 100 个 tag,但总长度不得超过1K字节(判断长度需采用UTF-8编码)。
+  - 单个设备最多支持设置 100 个 tag,App 全局 tag 数量无限制。
+- alias:
+  - 参数类型为字符串。
+  - nil 此次调用不设置此值。
+  - 空字符串 ("")表示取消之前的设置。
+  - 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。
+  - 限制:alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
+
+#### 错误码定义
+
+| Code | 描述                          | 详细解释                              |
+| ---- | :-------------------------- | :-------------------------------- |
+| 6001 | 无效的设置,tag/alias 不应参数都为 null |                                   |
+| 6002 | 设置超时                        | 建议重试。                             |
+| 6003 | alias 字符串不合法                | 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。   |
+| 6004 | alias超长                     | 最多 40个字节	中文 UTF-8 是 3 个字节。        |
+| 6005 | 某一个 tag 字符串不合法              | 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。   |
+| 6006 | 某一个 tag 超长                  | 一个 tag 最多 40个字节	中文 UTF-8 是 3 个字节。 |
+| 6007 | tags 数量超出限制(最多 100 个)       | 这是一台设备的限制。一个应用全局的标签数量无限制。         |
+| 6008 | tag/alias 超出总长度限制           | 总长度最多 1K 字节。                      |
+| 6011 | 10s内设置tag或alias大于3次         | 短时间内操作过于频繁。                       |
+
+## 获取 APNS 推送内容
+
+### 点击推送通知
+
+#### event - jpush.openNotification
+
+点击通知启动或唤醒应用程序时会出发该事件
+
+#### 代码示例
+
+- 在你需要接收通知的的 js 文件中加入:
+
+  ```js
+  document.addEventListener("jpush.openNotification", onOpenNotification, false)
+  ```
+
+- onOpenNotification 需要这样写:
+
+  ```js
+  var onOpenNotification = function(event) {
+  	var alertContent
+  	alertContent = event.aps.alert
+  	alert("open Notificaiton:" + alertContent)
+  }
+  ```
+
+- event 举例:
+
+  ```json
+  {
+  	"aps":{
+  		  "badge":1,
+  		  "sound":"default",
+  		  "alert":"今天去哪儿"
+  	},
+  	"key1":"value1",
+  	"key2":"value2",
+  	"_j_msgid":154604475
+  }
+  ```
+
+### 前台收到推送
+
+#### event - jpush.receiveNotification
+
+应用程序处于前台时收到推送会触发该事件
+
+#### 代码示例
+
+- 在你需要接收通知的的 js 文件中加入:
+
+  ```js
+  document.addEventListener("jpush.receiveNotification", onReceiveNotification, false)
+  ```
+
+- onReceiveNotification 需要这样写:
+
+  ```js
+  var onReceiveNotification = function(event) {
+  	var alertContent
+  	alertContent = event.aps.alert
+  	alert("open Notificaiton:" + alertContent)
+  }
+  ```
+
+- event 举例
+
+  ```json
+  {
+  	"aps":{
+  		  "badge":1,
+  		  "sound":"default",
+  		  "alert":"今天去哪儿"
+  	},
+  	"key1":"value1",
+  	"key2":"value2",
+  	"_j_msgid":154604475
+  }
+  ```
+
+### 后台收到推送
+
+#### event - jpush.backgroundNotification
+
+应用程序处于后台时收到推送会触发该事件,可以在后台执行一段代码。具体配置参考 [iOS 7 Background Remote Notification](https://docs.jiguang.cn/jpush/client/iOS/ios_new_fetures/#ios-7-background-remote-notification)
+
+#### 代码示例
+
+- 在你需要接收通知的的 js 文件中加入:
+
+  ```js
+  document.addEventListener("jpush.backgroundNotification", onBackgroundNotification, false)
+  ```
+
+- onBackgroundNotification 需要这样写:
+
+  ```js
+  var onBackgroundNotification = function(event) {
+  	var alertContent
+  	alertContent = event.aps.alert
+  	alert("open Notificaiton:" + alertContent)
+  }
+  ```
+
+
+- event 举例
+
+  ```json
+  {
+  	"aps":{
+  		  "badge":1,
+  		  "sound":"default",
+  		  "alert":"今天去哪儿"
+  	},
+  	"key1":"value1",
+  	"key2":"value2",
+  	"_j_msgid":154604475
+  }
+  ```
+
+
+
+
+
+## 获取自定义消息内容
+
+### event - jpush.receiveMessage
+
+收到应用内消息时触发这个事件, 推荐使用事件的方式传递,但同时保留了 receiveMessageIniOSCallback 的回调函数,兼容以前的代码。
+
+#### 代码示例
+
+- 在你需要接收通知的的 js 文件中加入:
+
+  ```js
+  document.addEventListener("jpush.receiveMessage", onReceiveMessage, false)
+  ```
+
+- onReceiveMessage 需要这样写:
+
+  ```js
+  var onReceiveMessage = function(event) {
+  	try {
+  		var message = event.content
+  		$("#messageResult").html(message)
+  	} catch(exception) {
+  		console.log("JPushPlugin:onReceiveMessage-->" + exception);
+  	}
+  }
+  ```
+
+- event 举例:
+
+  ```json
+  {
+  	"content":"今天去哪儿",
+  	"extras":
+  	{
+  		"key":"不填写没有"
+  	}
+  }
+  ```
+
+## 设置Badge
+
+### API - setBadge, resetBadge
+
+JPush 封装 badge 功能,允许应用上传 badge 值至 JPush 服务器,由 JPush 后台帮助管理每个用户所对应的推送 badge 值,简化了设置推送 badge 的操作。
+(本接口不会直接改变应用本地的角标值. 要修改本地 badege 值,使用 setApplicationIconBadgeNumber)
+
+实际应用中,开发者可以直接对 badge 值做增减操作,无需自己维护用户与 badge 值之间的对应关系。
+
+#### 接口定义
+
+```js
+window.plugins.jPushPlugin.prototype.setBadge(value)
+window.plugins.jPushPlugin.prototype.resetBadge()
+```
+
+resetBadge 相当于 setBadge(0)。
+
+#### 参数说明
+
+value 取值范围:[0,99999]。
+
+#### 返回值
+
+无,控制台会有 log 打印设置结果。
+
+#### 代码示例
+
+```js
+window.plugins.jPushPlugin.setBadge(5)
+window.plugins.jPushPlugin.resetBadge()
+```
+
+### API - setApplicationIconBadgeNumber
+
+本接口直接改变应用本地的角标值,设置 iOS 的角标,当设置 badge = 0 时为清除角标。
+
+#### 接口定义
+
+```js
+window.plugins.jPushPlugin.prototype.setApplicationIconBadgeNumber(badge)
+```
+
+#### 参数说明
+
+- badge: 整型,例如 0,1,2(当 badge 为 0 时,角标被清除)。
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0)
+```
+
+### API - getApplicationIconBadgeNumber
+
+获取 iOS 的角标值。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.getApplicationIconBadgeNumber(callback)
+```
+
+#### 参数说明
+
+- callback: 回调函数。
+
+#### 代码示例
+
+```js
+window.plugins.jPushPlugin.getApplicationIconBadgeNumber(function(data) {
+  console.log(data)
+})
+```
+
+## 本地通知
+
+### API - addLocalNotificationForIOS
+
+用于注册本地通知,最多支持64个。
+
+#### 接口定义
+
+```js
+window.plugins.jPushPlugin.prototype.addLocalNotificationForIOS(delayTime, content, badge, notificationID, extras)
+```
+
+#### 参数说明
+
+- delayTime: 本地推送延迟多长时间后显示,数值类型或纯数字的字符型均可。
+- content: 本地推送需要显示的内容。
+- badge: 角标的数字。如果不需要改变角标传-1。数值类型或纯数字的字符型均可。
+- notificationID: 本地推送标识符,字符串。
+- extras: 自定义参数,可以用来标识推送和增加附加信息。字典类型。
+
+#### 代码示例
+
+```js
+window.plugins.jPushPlugin.addLocalNotificationForIOS(24*60*60, "本地推送内容", 1, "notiId", {"key":"value"});
+```
+
+### API - deleteLocalNotificationWithIdentifierKeyInIOS
+
+删除本地推送定义。
+
+#### 接口定义
+
+```js
+window.plugins.jPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey)
+```
+
+#### 参数说明
+
+- identifierKey: 本地推送标识符。
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.deleteLocalNotificationWithIdentifierKeyInIOS("identifier")
+```
+
+### API - clearAllLocalNotifications
+
+清除所有本地推送对象。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.clearAllLocalNotifications()
+```
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.clearAllLocalNotifications()
+```
+
+
+
+## 获取本地通知内容
+
+### iOS 10 before 收到本地通知
+
+监听 `jpush.receiveLocalNotification` 事件获取,「App 在后台时点击通知横幅」或「App 在前台时收到」均会触发该事件。
+
+
+
+### iOS 10 收到本地通知
+
+监听 [jpush.receiveNotification](#前台收到推送)、[jpush.openNotification](点击推送通知),获取推送内容后,通过获取到的 `__JPUSHNotificationKey` 字段([本地通知](#本地通知) 设置的 `notificationID`)来判断是本地通知,并处理。
+
+
+
+### 点击本地通知横幅启动 App
+
+监听 `jpush.startLocalNotification` 事件。
+
+
+
+## 页面的统计
+
+### API - startLogPageView, stopLogPageView, beginLogPageView
+
+用于“用户指定页面使用时长”的统计,并上报到服务器,在 Portal 上展示给开发者。
+页面统计集成正确,才能够获取正确的页面访问路径、访问深度(PV)的数据。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.startLogPageView(pageName)
+window.plugins.jPushPlugin.prototype.stopLogPageView(pageName)
+window.plugins.jPushPlugin.prototype.beginLogPageView(pageName, duration)
+```
+
+#### 参数说明
+
+- pageName: 需要统计页面自定义名称
+- duration: 自定义的页面时间
+
+#### 调用说明
+
+应在所有的需要统计得页面得 viewWillAppear 和 viewWillDisappear 加入 startLogPageView 和 stopLogPageView 来统计当前页面的停留时间。
+
+或者直接使用 beginLogPageView 来自定义加入页面和时间信息。
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.beginLogPageView("newPage", 5);
+window.plugins.jPushPlugin.startLogPageView("onePage");
+window.plugins.jPushPlugin.stopLogPageView("onePage");
+```
+
+## 日志等级设置
+
+### API - setDebugModeFromIos
+
+用于开启 Debug 模式,显示更多的日志信息。
+
+建议调试时开启这个选项,不调试的时候注释这句代码,这个函数 setLogOFF 是相反的一对。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.setDebugModeFromIos()
+```
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.setDebugModeFromIos();
+```
+
+### API - setLogOFF
+
+用来关闭日志信息(除了必要的错误信息)。
+
+不需要任何调试信息的时候,调用此 API(发布时建议调用此 API,用来屏蔽日志信息,节省性能消耗)。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.setLogOFF()
+```
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.setLogOFF();
+```
+
+### API - setCrashLogON
+
+用于统计用户应用崩溃日志。
+
+如果需要统计 Log 信息,调用该接口。当你需要自己收集错误信息时,切记不要调用该接口。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.setCrashLogON()
+```
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.setCrashLogON();
+```
+
+## 地理位置上报
+
+### API - setLocation
+
+用于统计用户地理信息。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.setLocation(latitude, longitude)
+```
+
+#### 参数说明
+
+- latitude: 地理位置纬度,数值类型或纯数字的字符型均可。
+- longitude: 地理位置精度,数值类型或纯数字的字符型均可。
+
+#### 代码示例
+
+```
+window.plugins.jPushPlugin.setLocation(39.26,115.25);
+```
+
+## 设备平台判断
+
+### API - isPlatformIOS
+
+用于区分 iOS, Android 平台,以便不同设置。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.isPlatformIOS()
+```
+
+#### 代码示例
+
+```js
+if(window.plugins.jPushPlugin.isPlatformIOS()) {
+	// iOS
+} else {
+	// Android
+}
+```
+
+
+
+## iOS 10 进阶推送特性
+
+### API - addDismissActions
+
+添加通知操作,是展示在锁屏推送侧滑界面、通知中心推送侧滑界面、推送横幅下拉界面(iPhone 6s before)的按钮操作。
+
+一条推送最多只能展示 2 个操作(在锁屏推送侧滑界面、通知中心推送侧滑界面会额外自动展示一个「清除」操作),超出的操作不会被展示。
+
+建议在 App 初次启动时立刻调用本 API。
+
+效果如下图所示:
+
+ ![DismissActions_00](res/DismissActions_00.PNG)
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.addDismissActions(actions, categoryId);
+```
+
+#### 参数说明
+
+- actions:包含最多 2 个字典的数组,多余的字典无效,所有字段均为字符串,字段如下:
+  - title:必填,标题。
+  - identifier:必填,标识,获取 APNS 推送内容的时候可以通过该字段判断点击的是推送条目还是某项操作。
+  - option:必填,取值如下:
+    - UNNotificationActionOptionNone = 0
+    - UNNotificationActionOptionAuthenticationRequired = (1 << 0), Whether this action should require unlocking before being performed.
+    - UNNotificationActionOptionDestructive = (1 << 1), Whether this action should be indicated as destructive.
+    - UNNotificationActionOptionForeground = (1 << 2), Whether this action should cause the application to launch in the foreground.
+  - type:可选,值为 "textInput" 时,会创建一个可快速回复的操作。
+  - textInputButtonTitle:可选,快捷回复的回复按键标题。
+  - textInputPlaceholder:可选,快捷回复输入框占位符。
+- categoryId:category id,用于标记这一组操作,推送时的 `payload` 添加 `category` 字段(在极光控制台 - 发送通知 - 可选设置 - category ),即可展示相应的这一组操作。例:id1 对应 [操作A,操作B],id2 对应 [操作A, 操作C]。
+
+#### 代码示例
+
+```js
+window.plugins.jPushPlugin.addDismissActions([{"title":"t1", "identifier":"id1", "option":"0"}, {"title":"t2", "identifier":"id2", "option":"3", "type":"textInput", "textInputButtonTitle":"回复", "textInputPlaceholder":"点此输入回复内容"}], "categoryId_t1_t2");
+```
+
+### API - addNotificationActions
+
+轻触推送横幅,展示的更多操作。
+
+iPhone 6s 及以后设备且 iOS 9 以后系统支持 3d-touch。
+
+建议在 App 初次启动时立刻调用本 API。
+
+效果如下图所示:
+
+ ![NotificationActions_00](res/NotificationActions_00.png)
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId)
+```
+
+#### 参数说明
+
+参数同 API - addDismissActions
+
+#### 代码示例
+
+代码示例同 API - addDismissActions
+
+### Media Attachments
+
+(iOS 10)在手机锁屏界面和通知中心界面的推送条目、应用菜单界面的推送横幅上,展示图片、gif、audio、video 等富媒体。效果如下图所示:
+
+ ![MediaAttachments_00](res/MediaAttachments_00.gif)
+
+#### 配置方法
+
+1. 首先配置好 iOS 项目的证书。如下图所示没有任何异常警告:
+
+   ![](res/MediaAttachments_01.png)
+
+2. 打开 iOS Xcode Project - File - New - Target - iOS - Notification Service Extension - Next - Product Name 填写 `jpushNotificationService` - Finish,如下图所示: ![](res/MediaAttachments_02.png)
+
+   ![MediaAttachments_03](res/MediaAttachments_03.png)
+
+   ![MediaAttachments_04](res/MediaAttachments_04.png)
+
+3. 在 Xcode 工程目录左侧系统自动创建了 jpushNotificationService 文件夹及三个文件,下载本插件目录 `jpush-phonegap-plugin/src/ios/notificationService/` 下的 `NotificationService.h`、`NotificationService.m` 文件,全部复制替换对应文件内代码。
+
+4. 在 Xcode 中拖拽图片、gif、audio、video 等资源文件至 `jpushNotificationService` 文件夹目录下,弹出菜单选择如下: ![MediaAttachments_06](res/MediaAttachments_06.png)
+
+5. 在极光控制台 - 发送通知 - 可选设置 - mutable-content 打勾。
+
+6. 添加附加字段, key 为 `JPushPluginAttachment` ,value 为资源名称如 `aPic.png`,该资源必须在第 4 步中已经添加至工程,且文件名和拓展名完全对应。5、6 如下图所示:
+
+    ![MediaAttachments_05](res/MediaAttachments_05.png)
+
+   另,5、6 亦可通过服务端自定义的 payload 实现,如下所示:
+
+   ```json
+   {
+   	aps:{
+   		alert:{...},
+   		mutable-content:1 //必须
+   	}
+   	JPushPluginAttachment:aPic.png //必须
+   }
+   ```
+
+7. 立即发送。
+
+## 获取用户推送设置
+
+### API - getUserNotificationSettings
+
+获取用户对本 App 的推送设置情况。
+
+#### 接口定义
+
+```
+window.plugins.jPushPlugin.prototype.getUserNotificationSettings(callback)
+```
+
+#### 返回值
+
+- iOS 10 before
+  - UIRemoteNotificationTypeNone    = 0
+  - UIRemoteNotificationTypeBadge   = 1 << 0
+  - UIRemoteNotificationTypeSound   = 1 << 1
+  - UIRemoteNotificationTypeAlert   = 1 << 2
+  - UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3
+- iOS 10 after
+  - 字段 authorizationStatus,取值如下:
+    - UNAuthorizationStatusNotDetermined = 0, The user has not yet made a choice regarding whether the application may post user notifications.
+    - UNAuthorizationStatusDenied = 1, The application is not authorized to post user notifications.
+    - UNAuthorizationStatusAuthorized = 2, The application is authorized to post user notifications.
+  - 字段 soundSetting、badgeSetting、alertSetting、notificationCenterSetting、lockScreenSetting、carPlaySetting,取值如下:
+    - UNNotificationSettingNotSupported = 0, The application does not support this notification type.
+    - UNNotificationSettingDisabled = 1, The notification setting is turned off.
+    - UNNotificationSettingEnabled = 2, The notification setting is turned on.
+  - 字段 alertStyle,取值如下:
+    - UNAlertStyleNone = 0
+    - UNAlertStyleBanner = 1
+    - UNAlertStyleAlert = 2
+      ​
+
+
+
+## 监听事件统一说明
+
+可在 js 监听全部事件如下:
+
+##### jpush.receiveNotification
+
+> [前台收到远程通知](#前台收到推送)
+>
+> [iOS 10 前台收到本地通知](#ios-10-收到本地通知)
+
+
+
+##### jpush.openNotification
+
+> [点击远程通知横幅使 App「进入前台」或「启动」](#点击推送通知)
+>
+> [iOS 10 点击本地通知横幅使 App「进入前台」或「启动」](#ios-10-收到本地通知)
+
+
+
+##### jpush.backgroundNotification
+
+> [iOS 7 以后后台收到远程通知](#后台收到推送)
+
+
+
+##### jpush.setTagsWithAlias
+
+> [设置标签别名回调](#返回值说明)
+
+
+
+##### jpush.receiveMessage
+
+> [获取自定义消息内容](#获取自定义消息内容)
+
+
+
+##### jpush.startLocalNotification
+
+> [点击本地通知横幅启动 App](#点击本地通知横幅启动-app)
+
+
+
+##### jpush.receiveLocalNotification
+
+> [iOS 10 before 收到本地通知](#ios-10-before-收到本地通知)

+ 41 - 0
miaomiao/plugins/jpush-phonegap-plugin/doc/iOS_install.md

xqd
@@ -0,0 +1,41 @@
+## iOS 手动安装
+
+> **不建议使用手动安装,请参照 README.md 进行自动安装。**
+
+
+
+1. 下载 JPush PhoneGap Plugin 插件,并解压
+2. 将 [/src/ios](/src/ios) 文件夹及内容在 xcode 中拖到你的工程里,并配置 [/src/ios/PushConfig.plist](/src/ios/PushConfig.plist) 中相应参数:
+
+   Appkey:      应用标识 
+   Channel:     渠道标识
+   IsProduction:是否生产环境
+   IsIDFA:      是否使用 IDFA 启动 sdk
+3. 打开 xcode,点击工程目录中顶部的 工程,选择(Target -> Build Phases -> Link Binary With Libraries),添加以下框架:
+
+   CFNetwork.framework
+   CoreFoundation.framework
+   CoreTelephony.framework
+   SystemConfiguration.framework
+   CoreGraphics.framework
+   Foundation.framework
+   UIKit.framework
+   AdSupport.framework
+   libz.tbd(若存在 libz.dylib 则替换为 libz.tbd)
+   UserNotifications.framework
+   libresolv.tbd
+4. 修改 phonegap config.xml 文件以添加 JPushPlugin 插件
+
+```xml
+<feature name="JPushPlugin">
+    <param name="ios-package" value="JPushPlugin" />
+    <param name="onload" value="true" />
+</feature>
+```
+5. 将 [/www/JPushPlugin.js](/www/JPushPlugin.js) 在 xcode 中拖到工程的 www 目录下面  
+6. 在需要使用插件处加入以下代码,并根据 [iOS API](/doc/iOS_API.md) 文档说明调用相应接口
+
+```xml
+<script type="text/javascript" src="JPushPlugin.js"></script>
+```
+

BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/DismissActions_00.PNG


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_00.gif


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_01.png


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_02.png


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_03.png


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_04.png


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_05.png


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/MediaAttachments_06.png


BIN
miaomiao/plugins/jpush-phonegap-plugin/doc/res/NotificationActions_00.png


+ 115 - 0
miaomiao/plugins/jpush-phonegap-plugin/example/css/index.css

xqd
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+* {
+    -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */
+}
+
+body {
+    -webkit-touch-callout: none;                /* prevent callout to copy image, etc when tap to hold */
+    -webkit-text-size-adjust: none;             /* prevent webkit from resizing text to fit */
+    -webkit-user-select: none;                  /* prevent copy paste, to allow, change 'none' to 'text' */
+    background-color:#E4E4E4;
+    background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
+    background-image:-webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
+    background-image:-ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
+    background-image:-webkit-gradient(
+        linear,
+        left top,
+        left bottom,
+        color-stop(0, #A7A7A7),
+        color-stop(0.51, #E4E4E4)
+    );
+    background-attachment:fixed;
+    font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif;
+    font-size:12px;
+    height:100%;
+    margin:0px;
+    padding:0px;
+    text-transform:uppercase;
+    width:100%;
+}
+
+/* Portrait layout (default) */
+.app {
+    background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */
+    position:absolute;             /* position in the center of the screen */
+    left:50%;
+    top:50%;
+    height:50px;                   /* text area height */
+    width:225px;                   /* text area width */
+    text-align:center;
+    padding:180px 0px 0px 0px;     /* image height is 200px (bottom 20px are overlapped with text) */
+    margin:-115px 0px 0px -112px;  /* offset vertical: half of image height and text area height */
+                                   /* offset horizontal: half of text area width */
+}
+
+/* Landscape layout (with min-width) */
+@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) {
+    .app {
+        background-position:left center;
+        padding:75px 0px 75px 170px;  /* padding-top + padding-bottom + text area = image height */
+        margin:-90px 0px 0px -198px;  /* offset vertical: half of image height */
+                                      /* offset horizontal: half of image width and text area width */
+    }
+}
+
+h1 {
+    font-size:24px;
+    font-weight:normal;
+    margin:0px;
+    overflow:visible;
+    padding:0px;
+    text-align:center;
+}
+
+.event {
+    border-radius:4px;
+    -webkit-border-radius:4px;
+    color:#FFFFFF;
+    font-size:12px;
+    margin:0px 30px;
+    padding:2px 0px;
+}
+
+.event.listening {
+    background-color:#333333;
+    display:block;
+}
+
+.event.received {
+    background-color:#4B946A;
+    display:none;
+}
+
+@keyframes fade {
+    from { opacity: 1.0; }
+    50% { opacity: 0.4; }
+    to { opacity: 1.0; }
+}
+ 
+@-webkit-keyframes fade {
+    from { opacity: 1.0; }
+    50% { opacity: 0.4; }
+    to { opacity: 1.0; }
+}
+ 
+.blink {
+    animation:fade 3000ms infinite;
+    -webkit-animation:fade 3000ms infinite;
+}

+ 2140 - 0
miaomiao/plugins/jpush-phonegap-plugin/example/css/jquery.mobile-1.1.1.css

xqd
@@ -0,0 +1,2140 @@
+/*
+* jQuery Mobile Framework 1.1.1 1981b3f5ec22675ae47df8f0bdf9622e7780e90e
+* http://jquerymobile.com
+*
+* Copyright 2012 jQuery Foundation and other contributors
+* Dual licensed under the MIT or GPL Version 2 licenses.
+* http://jquery.org/license
+*
+*/
+/* Swatches */
+/* A
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-a {
+	border: 1px solid 		#333 /*{a-bar-border}*/;
+	background: 			#111111 /*{a-bar-background-color}*/;
+	color: 					#ffffff /*{a-bar-color}*/;
+	font-weight: bold;
+	text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/);
+}
+.ui-bar-a, 
+.ui-bar-a input, 
+.ui-bar-a select, 
+.ui-bar-a textarea, 
+.ui-bar-a button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-a .ui-link-inherit {
+	color: #fff /*{a-bar-color}*/;
+}
+.ui-bar-a a.ui-link {
+	color: #7cc4e7 /*{a-bar-link-color}*/;
+	font-weight: bold;
+}
+.ui-bar-a a.ui-link:visited {
+    color: #2489CE /*{a-bar-link-visited}*/;
+}
+.ui-bar-a a.ui-link:hover {
+	color: #2489CE /*{a-bar-link-hover}*/;
+}
+.ui-bar-a a.ui-link:active {
+	color: #2489CE /*{a-bar-link-active}*/;
+}
+.ui-body-a,
+.ui-overlay-a {
+	border: 1px solid 		#444 /*{a-body-border}*/;
+	background: 			#222 /*{a-body-background-color}*/;
+	color: 					#fff /*{a-body-color}*/;
+	text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/;
+	font-weight: normal;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/);	
+}
+.ui-overlay-a {
+	background-image: none;
+	border-width: 0;
+}
+.ui-body-a,
+.ui-body-a input,
+.ui-body-a select,
+.ui-body-a textarea,
+.ui-body-a button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-a .ui-link-inherit {
+	color: 	#fff /*{a-body-color}*/;
+}
+.ui-body-a .ui-link {
+	color: #2489CE /*{a-body-link-color}*/;
+	font-weight: bold;
+}
+.ui-body-a .ui-link:visited {
+    color: #2489CE /*{a-body-link-visited}*/;
+}
+.ui-body-a .ui-link:hover {
+	color: #2489CE /*{a-body-link-hover}*/;
+}
+.ui-body-a .ui-link:active {
+	color: #2489CE /*{a-body-link-active}*/;
+}
+.ui-btn-up-a {
+	border: 1px solid 		#111 /*{a-bup-border}*/;
+	background: 			#333 /*{a-bup-background-color}*/;
+	font-weight: bold;
+	color: 					#fff /*{a-bup-color}*/;
+	text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/);
+}
+.ui-btn-up-a:visited,
+.ui-btn-up-a a.ui-link-inherit {
+	color: 					#fff /*{a-bup-color}*/;
+}
+.ui-btn-hover-a {
+	border: 1px solid 		#000 /*{a-bhover-border}*/;
+	background: 			#444444 /*{a-bhover-background-color}*/;
+	font-weight: bold;
+	color: 					#fff /*{a-bhover-color}*/;
+	text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/);
+}
+.ui-btn-hover-a:visited,
+.ui-btn-hover-a:hover,
+.ui-btn-hover-a a.ui-link-inherit {
+	color: 					#fff /*{a-bhover-color}*/;
+}
+.ui-btn-down-a {
+	border: 1px solid 		#000 /*{a-bdown-border}*/;
+	background: 			#222 /*{a-bdown-background-color}*/;
+	font-weight: bold;
+	color: 					#fff /*{a-bdown-color}*/;
+	text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/);
+}
+.ui-btn-down-a:visited,
+.ui-btn-down-a:hover,
+.ui-btn-down-a a.ui-link-inherit {
+	color: 					#fff /*{a-bdown-color}*/;
+}
+.ui-btn-up-a,
+.ui-btn-hover-a,
+.ui-btn-down-a {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+	text-decoration: none;
+}
+/* B
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-b {
+	border: 1px solid 		#456f9a /*{b-bar-border}*/;
+	background: 			#5e87b0 /*{b-bar-background-color}*/;
+	color: 					#fff /*{b-bar-color}*/;
+	font-weight: bold;
+	text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/);
+}
+.ui-bar-b,
+.ui-bar-b input,
+.ui-bar-b select,
+.ui-bar-b textarea,
+.ui-bar-b button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-b .ui-link-inherit {
+	color: 	#fff /*{b-bar-color}*/;
+}
+.ui-bar-b a.ui-link {
+	color: #ddf0f8 /*{b-bar-link-color}*/;
+	font-weight: bold;
+}
+.ui-bar-b a.ui-link:visited {
+    color: #ddf0f8 /*{b-bar-link-visited}*/;
+}
+.ui-bar-b a.ui-link:hover {
+	color: #ddf0f8 /*{b-bar-link-hover}*/;
+}
+.ui-bar-b a.ui-link:active {
+	color: #ddf0f8 /*{b-bar-link-active}*/;
+}
+.ui-body-b,
+.ui-overlay-b {
+	border: 1px solid 		#999 /*{b-body-border}*/;
+	background: 			#f3f3f3 /*{b-body-background-color}*/;
+	color: 					#222222 /*{b-body-color}*/;
+	text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/;
+	font-weight: normal;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/);
+}
+.ui-overlay-b {
+	background-image: none;
+	border-width: 0;
+}
+.ui-body-b,
+.ui-body-b input,
+.ui-body-b select,
+.ui-body-b textarea,
+.ui-body-b button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-b .ui-link-inherit {
+	color: 	#333333 /*{b-body-color}*/;
+}
+.ui-body-b .ui-link {
+	color: #2489CE /*{b-body-link-color}*/;
+	font-weight: bold;
+}
+.ui-body-b .ui-link:visited {
+    color: #2489CE /*{b-body-link-visited}*/;
+}
+.ui-body-b .ui-link:hover {
+	color: #2489CE /*{b-body-link-hover}*/;
+}
+.ui-body-b .ui-link:active {
+	color: #2489CE /*{b-body-link-active}*/;
+}
+.ui-btn-up-b {
+	border: 1px solid 		#044062 /*{b-bup-border}*/;
+	background: 			#396b9e /*{b-bup-background-color}*/;
+	font-weight: bold;
+	color: 					#fff /*{b-bup-color}*/;
+	text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/);
+}
+.ui-btn-up-b:visited,
+.ui-btn-up-b a.ui-link-inherit {
+	color: 					#fff /*{b-bup-color}*/;
+}
+.ui-btn-hover-b {
+	border: 1px solid 		#00415e /*{b-bhover-border}*/;
+	background: 			#4b88b6 /*{b-bhover-background-color}*/;
+	font-weight: bold;
+	color: 					#fff /*{b-bhover-color}*/;
+	text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/);
+}
+.ui-btn-hover-b:visited,
+.ui-btn-hover-a:hover,
+.ui-btn-hover-b a.ui-link-inherit {
+	color: 					#fff /*{b-bhover-color}*/;
+}
+.ui-btn-down-b {
+	border: 1px solid 		#225377 /*{b-bdown-border}*/;
+	background: 			#4e89c5 /*{b-bdown-background-color}*/;
+	font-weight: bold;
+	color: 					#fff /*{b-bdown-color}*/;
+	text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/);
+}
+.ui-btn-down-b:visited,
+.ui-btn-down-b:hover,
+.ui-btn-down-b a.ui-link-inherit {
+	color: 					#fff /*{b-bdown-color}*/;
+}
+.ui-btn-up-b,
+.ui-btn-hover-b,
+.ui-btn-down-b {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+	text-decoration: none;
+}
+/* C
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-c {
+	border: 1px solid 		#B3B3B3 /*{c-bar-border}*/;
+	background: 			#eeeeee /*{c-bar-background-color}*/;
+	color: 					#3E3E3E /*{c-bar-color}*/;
+	font-weight: bold;
+	text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ 	#fff /*{c-bar-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/);
+}
+.ui-bar-c .ui-link-inherit {
+	color: 	#3E3E3E /*{c-bar-color}*/;
+}
+.ui-bar-c a.ui-link {
+	color: #7cc4e7 /*{c-bar-link-color}*/;
+	font-weight: bold;
+}
+.ui-bar-c a.ui-link:visited {
+    color: #2489CE /*{c-bar-link-visited}*/;
+}
+.ui-bar-c a.ui-link:hover {
+	color: #2489CE /*{c-bar-link-hover}*/;
+}
+.ui-bar-c a.ui-link:active {
+	color: #2489CE /*{c-bar-link-active}*/;
+}
+.ui-bar-c,
+.ui-bar-c input,
+.ui-bar-c select,
+.ui-bar-c textarea,
+.ui-bar-c button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c,
+.ui-overlay-c {
+	border: 1px solid 		#aaa /*{c-body-border}*/;
+	color: 					#333333 /*{c-body-color}*/;
+	text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/;
+	background: 			#f9f9f9 /*{c-body-background-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/);
+}
+.ui-overlay-c {
+	background-image: none;
+	border-width: 0;
+}
+.ui-body-c,
+.ui-body-c input,
+.ui-body-c select,
+.ui-body-c textarea,
+.ui-body-c button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c .ui-link-inherit {
+	color: 	#333333 /*{c-body-color}*/;
+}
+.ui-body-c .ui-link {
+	color: #2489CE /*{c-body-link-color}*/;
+	font-weight: bold;
+}
+.ui-body-c .ui-link:visited {
+    color: #2489CE /*{c-body-link-visited}*/;
+}
+.ui-body-c .ui-link:hover {
+	color: #2489CE /*{c-body-link-hover}*/;
+}
+.ui-body-c .ui-link:active {
+	color: #2489CE /*{c-body-link-active}*/;
+}
+.ui-btn-up-c {
+	border: 1px solid 		#ccc /*{c-bup-border}*/;
+	background: 			#eee /*{c-bup-background-color}*/;
+	font-weight: bold;
+	color: 					#222 /*{c-bup-color}*/;
+	text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/);
+}
+.ui-btn-up-c:visited,
+.ui-btn-up-c a.ui-link-inherit {
+	color: 					#2F3E46 /*{c-bup-color}*/;
+}
+.ui-btn-hover-c {
+	border: 1px solid 		#bbb /*{c-bhover-border}*/;
+	background: 			#dfdfdf /*{c-bhover-background-color}*/;
+	font-weight: bold;
+	color: 					#222 /*{c-bhover-color}*/;
+	text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/);
+}
+.ui-btn-hover-c:visited,
+.ui-btn-hover-c:hover,
+.ui-btn-hover-c a.ui-link-inherit {
+	color: 					#2F3E46 /*{c-bhover-color}*/;
+}
+.ui-btn-down-c {
+	border: 1px solid 		#bbb /*{c-bdown-border}*/;
+	background: 			#d6d6d6 /*{c-bdown-background-color}*/;
+	font-weight: bold;
+	color: 					#222 /*{c-bdown-color}*/;
+	text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/);
+}
+.ui-btn-down-c:visited,
+.ui-btn-down-c:hover,
+.ui-btn-down-c a.ui-link-inherit {
+	color: 					#2F3E46 /*{c-bdown-color}*/;
+}
+.ui-btn-up-c,
+.ui-btn-hover-c,
+.ui-btn-down-c {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+	text-decoration: none;
+}
+/* D
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-d {
+	border: 1px solid 		#bbb /*{d-bar-border}*/;
+	background: 			#bbb /*{d-bar-background-color}*/;
+	color: 					#333 /*{d-bar-color}*/;
+	text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/);
+}
+.ui-bar-d,
+.ui-bar-d input,
+.ui-bar-d select,
+.ui-bar-d textarea,
+.ui-bar-d button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-d .ui-link-inherit {
+	color: 	#333333 /*{d-bar-color}*/;
+}
+.ui-bar-d a.ui-link {
+	color: #2489CE /*{d-bar-link-color}*/;
+	font-weight: bold;
+}
+.ui-bar-d a.ui-link:visited {
+    color: #2489CE /*{d-bar-link-visited}*/;
+}
+.ui-bar-d a.ui-link:hover {
+	color: #2489CE /*{d-bar-link-hover}*/;
+}
+.ui-bar-d a.ui-link:active {
+	color: #2489CE /*{d-bar-link-active}*/;
+}
+.ui-body-d,
+.ui-overlay-d {
+	border: 1px solid 		#bbb /*{d-body-border}*/;
+	color: 					#333333 /*{d-body-color}*/;
+	text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ 	#fff /*{d-body-shadow-color}*/;
+	background: 			#ffffff /*{d-body-background-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/);
+}
+.ui-overlay-d {
+	background-image: none;
+	border-width: 0;
+}
+.ui-body-d,
+.ui-body-d input,
+.ui-body-d select,
+.ui-body-d textarea,
+.ui-body-d button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-d .ui-link-inherit {
+	color: 	#333333 /*{d-body-color}*/;
+}
+.ui-body-d .ui-link {
+	color: #2489CE /*{d-body-link-color}*/;
+	font-weight: bold;
+}
+.ui-body-d .ui-link:visited {
+    color: #2489CE /*{d-body-link-visited}*/;
+}
+.ui-body-d .ui-link:hover {
+	color: #2489CE /*{d-body-link-hover}*/;
+}
+.ui-body-d .ui-link:active {
+	color: #2489CE /*{d-body-link-active}*/;
+}
+.ui-btn-up-d {
+	border: 1px solid 		#bbb /*{d-bup-border}*/;
+	background: 			#fff /*{d-bup-background-color}*/;
+	font-weight: bold;
+	color: 					#333 /*{d-bup-color}*/;
+	text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/);
+}
+.ui-btn-up-d:visited,
+.ui-btn-up-d a.ui-link-inherit {
+	color: 					#333 /*{d-bup-color}*/;
+}
+.ui-btn-hover-d {
+	border: 1px solid 		#aaa /*{d-bhover-border}*/;
+	background: 			#eeeeee /*{d-bhover-background-color}*/;
+	font-weight: bold;
+	color: 					#333 /*{d-bhover-color}*/;
+	cursor: pointer;
+	text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ 	#fff /*{d-bhover-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/);
+}
+.ui-btn-hover-d:visited,
+.ui-btn-hover-d:hover,
+.ui-btn-hover-d a.ui-link-inherit {
+	color: 					#333 /*{d-bhover-color}*/;
+}
+.ui-btn-down-d {
+	border: 1px solid 		#aaa /*{d-bdown-border}*/;
+	background: 			#eee /*{d-bdown-background-color}*/;
+	font-weight: bold;
+	color: 					#333 /*{d-bdown-color}*/;
+	text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ 	#ffffff /*{d-bdown-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/);
+}
+.ui-btn-down-d:visited,
+.ui-btn-down-d:hover,
+.ui-btn-down-d a.ui-link-inherit {
+	color: 					#333 /*{d-bdown-color}*/;
+}
+.ui-btn-up-d,
+.ui-btn-hover-d,
+.ui-btn-down-d {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+	text-decoration: none;
+}
+/* E
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-e {
+	border: 1px solid 		#F7C942 /*{e-bar-border}*/;
+	background: 			#fadb4e /*{e-bar-background-color}*/;
+	color: 					#333 /*{e-bar-color}*/;
+	text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ 	#fff /*{e-bar-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-e,
+.ui-bar-e input,
+.ui-bar-e select,
+.ui-bar-e textarea,
+.ui-bar-e button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-e .ui-link-inherit {
+	color: 	#333333 /*{e-bar-color}*/;
+}
+.ui-bar-e a.ui-link {
+	color: #2489CE /*{e-bar-link-color}*/;
+	font-weight: bold;
+}
+.ui-bar-e a.ui-link:visited {
+    color: #2489CE /*{e-bar-link-visited}*/;
+}
+.ui-bar-e a.ui-link:hover {
+	color: #2489CE /*{e-bar-link-hover}*/;
+}
+.ui-bar-e a.ui-link:active {
+	color: #2489CE /*{e-bar-link-active}*/;
+}
+.ui-body-e,
+.ui-overlay-e {
+	border: 1px solid 		#F7C942 /*{e-body-border}*/;
+	color: 					#222222 /*{e-body-color}*/;
+	text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ 	#fff /*{e-body-shadow-color}*/;
+	background: 			#fff9df /*{e-body-background-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-e {
+	background-image: none;
+	border-width: 0;
+}
+.ui-body-e,
+.ui-body-e input,
+.ui-body-e select,
+.ui-body-e textarea,
+.ui-body-e button {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-e .ui-link-inherit {
+	color: 	#333333 /*{e-body-color}*/;
+}
+.ui-body-e .ui-link {
+	color: #2489CE /*{e-body-link-color}*/;
+	font-weight: bold;
+}
+.ui-body-e .ui-link:visited {
+    color: #2489CE /*{e-body-link-visited}*/;
+}
+.ui-body-e .ui-link:hover {
+	color: #2489CE /*{e-body-link-hover}*/;
+}
+.ui-body-e .ui-link:active {
+	color: #2489CE /*{e-body-link-active}*/;
+}
+.ui-btn-up-e {
+	border: 1px solid 		#F4C63f /*{e-bup-border}*/;
+	background: 			#fadb4e /*{e-bup-background-color}*/;
+	font-weight: bold;
+	color: 					#222 /*{e-bup-color}*/;
+	text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ 	#fff /*{e-bup-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/);
+}
+.ui-btn-up-e:visited,
+.ui-btn-up-e a.ui-link-inherit {
+	color: 					#222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-e {
+	border: 1px solid 		#F2C43d /*{e-bhover-border}*/;
+	background: 			#fbe26f /*{e-bhover-background-color}*/;
+	font-weight: bold;
+	color: 					#111 /*{e-bhover-color}*/;
+	text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ 	#fff /*{e-bhover-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-e:visited,
+.ui-btn-hover-e:hover,
+.ui-btn-hover-e a.ui-link-inherit {
+	color: 					#333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-e {
+	border: 1px solid 		#F2C43d /*{e-bdown-border}*/;
+	background: 			#fceda7 /*{e-bdown-background-color}*/;
+	font-weight: bold;
+	color: 					#111 /*{e-bdown-color}*/;
+	text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ 	#ffffff /*{e-bdown-shadow-color}*/;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-e:visited,
+.ui-btn-down-e:hover,
+.ui-btn-down-e a.ui-link-inherit {
+	color: 					#333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-e,
+.ui-btn-hover-e,
+.ui-btn-down-e {
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+	text-decoration: none;
+}
+/* Structure */
+/* links within "buttons" 
+-----------------------------------------------------------------------------------------------------------*/
+a.ui-link-inherit {
+	text-decoration: none !important;
+}
+/* Active class used as the "on" state across all themes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-active {
+	border: 1px solid 		#2373a5 /*{global-active-border}*/;
+	background: 			#5393c5 /*{global-active-background-color}*/;
+	font-weight: bold;
+	color: 					#fff /*{global-active-color}*/;
+	cursor: pointer;
+	text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
+	text-decoration: none;
+	background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
+	background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
+	background-image:    -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
+	background-image:     -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
+	background-image:      -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
+	background-image:         linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
+	font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-btn-active:visited,
+.ui-btn-active:hover,
+.ui-btn-active a.ui-link-inherit {
+	color: 					#fff /*{global-active-color}*/;
+}
+/* button inner top highlight
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-inner {
+	border-top: 1px solid 	#fff;
+	border-color: 			rgba(255,255,255,.3);
+}
+/* corner rounding classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-corner-tl {
+	-moz-border-radius-topleft: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-top-left-radius: 	.6em /*{global-radii-blocks}*/;
+	border-top-left-radius: 			.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-tr {
+	-moz-border-radius-topright: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-top-right-radius: 	.6em /*{global-radii-blocks}*/;
+	border-top-right-radius: 			.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bl {
+	-moz-border-radius-bottomleft: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-bottom-left-radius: 	.6em /*{global-radii-blocks}*/;
+	border-bottom-left-radius: 			.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-br {
+	-moz-border-radius-bottomright: 	.6em /*{global-radii-blocks}*/;
+	-webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+	border-bottom-right-radius: 		.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-top {
+	-moz-border-radius-topleft: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-top-left-radius: 	.6em /*{global-radii-blocks}*/;
+	border-top-left-radius: 			.6em /*{global-radii-blocks}*/;
+	-moz-border-radius-topright: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-top-right-radius: 	.6em /*{global-radii-blocks}*/;
+	border-top-right-radius: 			.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bottom {
+	-moz-border-radius-bottomleft: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-bottom-left-radius: 	.6em /*{global-radii-blocks}*/;
+	border-bottom-left-radius: 			.6em /*{global-radii-blocks}*/;
+	-moz-border-radius-bottomright: 	.6em /*{global-radii-blocks}*/;
+	-webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+	border-bottom-right-radius: 		.6em /*{global-radii-blocks}*/;
+	}
+.ui-corner-right {
+	-moz-border-radius-topright: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-top-right-radius: 	.6em /*{global-radii-blocks}*/;
+	border-top-right-radius: 			.6em /*{global-radii-blocks}*/;
+	-moz-border-radius-bottomright: 	.6em /*{global-radii-blocks}*/;
+	-webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+	border-bottom-right-radius: 		.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-left {
+	-moz-border-radius-topleft: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-top-left-radius: 	.6em /*{global-radii-blocks}*/;
+	border-top-left-radius: 			.6em /*{global-radii-blocks}*/;
+	-moz-border-radius-bottomleft: 		.6em /*{global-radii-blocks}*/;
+	-webkit-border-bottom-left-radius: 	.6em /*{global-radii-blocks}*/;
+	border-bottom-left-radius: 			.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-all {
+	-moz-border-radius: 				.6em /*{global-radii-blocks}*/;
+	-webkit-border-radius: 				.6em /*{global-radii-blocks}*/;
+	border-radius: 						.6em /*{global-radii-blocks}*/;
+}
+.ui-corner-none {
+	-moz-border-radius: 				   0;
+	-webkit-border-radius: 				   0;
+	border-radius: 						   0;
+}
+/* Form field separator
+-----------------------------------------------------------------------------------------------------------*/
+.ui-br {
+	border-bottom: rgb(130,130,130);
+	border-bottom: rgba(130,130,130,.3);
+	border-bottom-width: 1px;
+	border-bottom-style: solid;
+}
+/* Interaction cues
+-----------------------------------------------------------------------------------------------------------*/
+.ui-disabled {
+	opacity: 							.3;
+}
+.ui-disabled,
+.ui-disabled a {
+	cursor: default !important;
+	pointer-events: none;
+}
+.ui-disabled .ui-btn-text {
+	-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)";
+	filter: alpha(opacity=30);
+	zoom: 1;
+}
+/* Icons
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon,
+.ui-icon-searchfield:after {
+	background: 						#666 /*{global-icon-color}*/;
+	background: 						rgba(0,0,0,.4) /*{global-icon-disc}*/;
+	background-image: url(../images/icons-18-white.png) /*{global-icon-set}*/;
+	background-repeat: no-repeat;
+	-moz-border-radius: 				9px;
+	-webkit-border-radius: 				9px;
+	border-radius: 						9px;
+}
+/* Alt icon color
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon-alt {
+	background: 						#fff;
+	background: 						rgba(255,255,255,.3);
+	background-image: url(images/icons-18-black.png);
+	background-repeat: no-repeat;
+}
+/* HD/"retina" sprite
+-----------------------------------------------------------------------------------------------------------*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+       only screen and (min--moz-device-pixel-ratio: 1.5),
+       only screen and (min-resolution: 240dpi) {
+	
+	.ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
+	.ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
+	.ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
+	.ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, 
+	.ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
+		background-image: url(images/icons-36-white.png);
+		-moz-background-size: 776px 18px;
+		-o-background-size: 776px 18px;
+		-webkit-background-size: 776px 18px;
+		background-size: 776px 18px;
+	}
+	.ui-icon-alt {
+		background-image: url(images/icons-36-black.png);
+	}
+}
+/* plus minus */
+.ui-icon-plus {
+	background-position: 	-0 50%;
+}
+.ui-icon-minus {
+	background-position: 	-36px 50%;
+}
+/* delete/close */
+.ui-icon-delete {
+	background-position: 	-72px 50%;
+}
+/* arrows */
+.ui-icon-arrow-r {
+	background-position: 	-108px 50%;
+}
+.ui-icon-arrow-l {
+	background-position: 	-144px 50%;
+}
+.ui-icon-arrow-u {
+	background-position: 	-180px 50%;
+}
+.ui-icon-arrow-d {
+	background-position: 	-216px 50%;
+}
+/* misc */
+.ui-icon-check {
+	background-position: 	-252px 50%;
+}
+.ui-icon-gear {
+	background-position: 	-288px 50%;
+}
+.ui-icon-refresh {
+	background-position: 	-324px 50%;
+}
+.ui-icon-forward {
+	background-position: 	-360px 50%;
+}
+.ui-icon-back {
+	background-position: 	-396px 50%;
+}
+.ui-icon-grid {
+	background-position: 	-432px 50%;
+}
+.ui-icon-star {
+	background-position: 	-468px 50%;
+}
+.ui-icon-alert {
+	background-position: 	-504px 50%;
+}
+.ui-icon-info {
+	background-position: 	-540px 50%;
+}
+.ui-icon-home {
+	background-position: 	-576px 50%;
+}
+.ui-icon-search,
+.ui-icon-searchfield:after {
+	background-position: 	-612px 50%;
+}
+.ui-icon-checkbox-off {
+	background-position: 	-684px 50%;
+}
+.ui-icon-checkbox-on {
+	background-position: 	-648px 50%;
+}
+.ui-icon-radio-off {
+	background-position: 	-756px 50%;
+}
+.ui-icon-radio-on {
+	background-position: 	-720px 50%;
+}
+/* checks,radios */
+.ui-checkbox .ui-icon {
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+}
+.ui-icon-checkbox-off,
+.ui-icon-radio-off {
+	background-color: transparent;	
+}
+.ui-checkbox-on .ui-icon,
+.ui-radio-on .ui-icon {
+	background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
+}
+/* loading icon */
+.ui-icon-loading {
+	background: url(images/ajax-loader.gif);
+	background-size: 46px 46px;
+}
+/* Button corner classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-corner-tl {
+	-moz-border-radius-topleft: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-top-left-radius: 	1em /*{global-radii-buttons}*/;
+	border-top-left-radius: 			1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-tr {
+	-moz-border-radius-topright: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-top-right-radius: 	1em /*{global-radii-buttons}*/;
+	border-top-right-radius: 			1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bl {
+	-moz-border-radius-bottomleft: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-bottom-left-radius: 	1em /*{global-radii-buttons}*/;
+	border-bottom-left-radius: 			1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-br {
+	-moz-border-radius-bottomright: 	1em /*{global-radii-buttons}*/;
+	-webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+	border-bottom-right-radius: 		1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-top {
+	-moz-border-radius-topleft: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-top-left-radius: 	1em /*{global-radii-buttons}*/;
+	border-top-left-radius: 			1em /*{global-radii-buttons}*/;
+	-moz-border-radius-topright: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-top-right-radius: 	1em /*{global-radii-buttons}*/;
+	border-top-right-radius: 			1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bottom {
+	-moz-border-radius-bottomleft: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-bottom-left-radius: 	1em /*{global-radii-buttons}*/;
+	border-bottom-left-radius: 			1em /*{global-radii-buttons}*/;
+	-moz-border-radius-bottomright: 	1em /*{global-radii-buttons}*/;
+	-webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+	border-bottom-right-radius: 		1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-right {
+	 -moz-border-radius-topright: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-top-right-radius: 	1em /*{global-radii-buttons}*/;
+	border-top-right-radius: 			1em /*{global-radii-buttons}*/;
+	-moz-border-radius-bottomright: 	1em /*{global-radii-buttons}*/;
+	-webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+	border-bottom-right-radius: 		1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-left {
+	-moz-border-radius-topleft: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-top-left-radius: 	1em /*{global-radii-buttons}*/;
+	border-top-left-radius: 			1em /*{global-radii-buttons}*/;
+	-moz-border-radius-bottomleft: 		1em /*{global-radii-buttons}*/;
+	-webkit-border-bottom-left-radius: 	1em /*{global-radii-buttons}*/;
+	border-bottom-left-radius: 			1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-all {
+	-moz-border-radius: 				1em /*{global-radii-buttons}*/;
+	-webkit-border-radius: 				1em /*{global-radii-buttons}*/;
+	border-radius: 						1em /*{global-radii-buttons}*/;
+}
+/* radius clip workaround for cleaning up corner trapping */
+.ui-corner-tl,
+.ui-corner-tr,
+.ui-corner-bl, 
+.ui-corner-br,
+.ui-corner-top,
+.ui-corner-bottom, 
+.ui-corner-right,
+.ui-corner-left,
+.ui-corner-all,
+.ui-btn-corner-tl,
+.ui-btn-corner-tr,
+.ui-btn-corner-bl, 
+.ui-btn-corner-br,
+.ui-btn-corner-top,
+.ui-btn-corner-bottom, 
+.ui-btn-corner-right,
+.ui-btn-corner-left,
+.ui-btn-corner-all {
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+/* Overlay / modal
+-----------------------------------------------------------------------------------------------------------*/
+.ui-overlay {
+	background: #666;
+	opacity: .5;
+	filter: Alpha(Opacity=50);
+	position: absolute;
+	width: 100%;
+	height: 100%;
+}
+.ui-overlay-shadow {
+	-moz-box-shadow: 0px 0px 12px 			rgba(0,0,0,.6);
+	-webkit-box-shadow: 0px 0px 12px 		rgba(0,0,0,.6);
+	box-shadow: 0px 0px 12px 				rgba(0,0,0,.6);
+}
+.ui-shadow {
+	-moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ 			rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+	-webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ 		rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+	box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ 				rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+}
+.ui-bar-a .ui-shadow,
+.ui-bar-b .ui-shadow ,
+.ui-bar-c .ui-shadow  {
+	-moz-box-shadow: 0px 1px 0 				rgba(255,255,255,.3);
+	-webkit-box-shadow: 0px 1px 0 			rgba(255,255,255,.3);
+	box-shadow: 0px 1px 0 					rgba(255,255,255,.3);
+}
+.ui-shadow-inset {
+	-moz-box-shadow: inset 0px 1px 4px 		rgba(0,0,0,.2);
+	-webkit-box-shadow: inset 0px 1px 4px 	rgba(0,0,0,.2);
+	box-shadow: inset 0px 1px 4px 			rgba(0,0,0,.2);
+}
+.ui-icon-shadow {
+	-moz-box-shadow: 0px 1px 0 				rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+	-webkit-box-shadow: 0px 1px 0 			rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+	box-shadow: 0px 1px 0 					rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+}
+/* Focus state - set here for specificity (note: these classes are added by JavaScript)
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn:focus, .ui-link-inherit:focus {
+	outline: 0;
+}
+.ui-btn.ui-focus {
+	z-index: 1;
+}
+.ui-focus,
+.ui-btn:focus {
+	-moz-box-shadow: inset 0px 0px 3px 		#387bbe /*{global-active-background-color}*/, 0px 0px 9px 		#387bbe /*{global-active-background-color}*/;
+	-webkit-box-shadow: inset 0px 0px 3px 	#387bbe /*{global-active-background-color}*/, 0px 0px 9px 		#387bbe /*{global-active-background-color}*/;
+	box-shadow: inset 0px 0px 3px 			#387bbe /*{global-active-background-color}*/, 0px 0px 9px 		#387bbe /*{global-active-background-color}*/;
+}
+.ui-input-text.ui-focus,
+.ui-input-search.ui-focus {
+	-moz-box-shadow: 0px 0px 12px 			#387bbe /*{global-active-background-color}*/;
+	-webkit-box-shadow: 0px 0px 12px 		#387bbe /*{global-active-background-color}*/;
+	box-shadow: 0px 0px 12px 					#387bbe /*{global-active-background-color}*/;	
+}
+/* unset box shadow in browsers that don't do it right
+-----------------------------------------------------------------------------------------------------------*/
+.ui-mobile-nosupport-boxshadow * {
+	-moz-box-shadow: none !important;
+	-webkit-box-shadow: none !important;
+	box-shadow: none !important;
+}
+/* ...and bring back focus */
+.ui-mobile-nosupport-boxshadow .ui-focus,
+.ui-mobile-nosupport-boxshadow .ui-btn:focus,
+.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus {
+	outline-width: 1px;
+	outline-style: auto;
+}
+/* some unsets - more probably needed */
+.ui-mobile, .ui-mobile body { height: 99.9%; }
+.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
+.ui-mobile a img, .ui-mobile fieldset { border-width: 0; }
+/* responsive page widths */
+.ui-mobile-viewport {  margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+/* Issue #2066 */
+body.ui-mobile-viewport,
+div.ui-mobile-viewport { overflow-x: hidden; }
+/* "page" containers - full-screen views, one should always be in view post-pageload */
+.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
+.ui-mobile .ui-page-active { display: block; overflow: visible; }
+/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */
+.ui-page { outline: none; }
+/*orientations from js are available */
+@media screen and (orientation: portrait){
+.ui-mobile, .ui-mobile .ui-page { min-height: 420px; }
+}
+@media screen and (orientation: landscape){
+.ui-mobile, .ui-mobile .ui-page { min-height: 300px; }
+}
+/* loading screen */
+.ui-loading .ui-loader { display: block; }
+.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; }
+.ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; }
+.ui-loader-verbose { width: 200px; opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; }
+.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; }
+.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; }
+.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; }
+.ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; }
+.ui-loader-textonly { padding: 15px; margin-left: -115px; }
+.ui-loader-textonly .ui-icon { display: none; }
+.ui-loader-fakefix { position: absolute; }
+/*fouc*/
+.ui-mobile-rendering > * { visibility: hidden; }
+/*headers, content panels*/
+.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
+.ui-bar { font-size: 16px; margin: 0; }
+.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
+.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; zoom: 1; }
+.ui-header .ui-btn-left,
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-left,
+.ui-footer .ui-btn-right { position: absolute; top: 3px; }
+.ui-header .ui-btn-left,
+.ui-footer .ui-btn-left { left: 5px; }
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-right { right: 5px; }
+.ui-footer .ui-btn-icon-notext,
+.ui-header .ui-btn-icon-notext { top: 6px; }
+.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
+.ui-footer .ui-title { margin: .6em 15px .8em; }
+/*content area*/
+.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
+/* icons sizing */
+.ui-icon { width: 18px; height: 18px; }
+/* non-js content hiding */
+.ui-nojs { position: absolute; left: -9999px; }
+/* accessible content hiding */
+.ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label,
+.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+/* Transitions originally inspired by those from jQtouch, nice work, folks */
+.ui-mobile-viewport-transitioning,
+.ui-mobile-viewport-transitioning .ui-page {
+	width: 100%;
+	height: 100%;
+	overflow: hidden;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+.in {
+	-webkit-animation-timing-function: ease-out;
+	-webkit-animation-duration: 350ms;
+	-moz-animation-timing-function: ease-out;
+	-moz-animation-duration: 350ms;
+}
+.out {
+	-webkit-animation-timing-function: ease-in;
+	-webkit-animation-duration: 225ms;
+	-moz-animation-timing-function: ease-in;
+	-moz-animation-duration: 225;
+}
+@-webkit-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-moz-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-webkit-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+@-moz-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+.fade.out {
+	opacity: 0;
+	-webkit-animation-duration: 125ms;
+	-webkit-animation-name: fadeout;
+	-moz-animation-duration: 125ms;
+	-moz-animation-name: fadeout;
+}
+.fade.in {
+	opacity: 1;
+	-webkit-animation-duration: 225ms;
+	-webkit-animation-name: fadein;
+	-moz-animation-duration: 225ms;
+	-moz-animation-name: fadein;
+}
+.pop {
+	-webkit-transform-origin: 50% 50%;
+	-moz-transform-origin: 50% 50%;
+}
+.pop.in {
+	-webkit-transform: scale(1);
+	-moz-transform: scale(1);
+    opacity: 1;
+	-webkit-animation-name: popin;
+	-moz-animation-name: popin;
+	-webkit-animation-duration: 350ms;
+	-moz-animation-duration: 350ms;
+}
+.pop.out {
+	-webkit-animation-name: fadeout;
+	-moz-animation-name: fadeout;
+	opacity: 0;
+	-webkit-animation-duration: 100ms;
+	-moz-animation-duration: 100ms;
+}
+.pop.in.reverse {
+	-webkit-animation-name: fadein;
+	-moz-animation-name: fadein;
+}
+.pop.out.reverse {
+	-webkit-transform: scale(.8);
+	-moz-transform: scale(.8);
+	-webkit-animation-name: popout;
+	-moz-animation-name: popout;
+}
+@-webkit-keyframes popin {
+    from {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-moz-keyframes popin {
+    from {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-webkit-keyframes popout {
+    from {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+}
+@-moz-keyframes popout {
+    from {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+}
+/* keyframes for slidein from sides */
+@-webkit-keyframes slideinfromright {
+    from { -webkit-transform: translateX(100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromright {
+    from { -moz-transform: translateX(100%); }
+    to { -moz-transform: translateX(0); }
+}
+@-webkit-keyframes slideinfromleft {
+    from { -webkit-transform: translateX(-100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromleft {
+    from { -moz-transform: translateX(-100%); }
+    to { -moz-transform: translateX(0); }
+}
+/* keyframes for slideout to sides */
+@-webkit-keyframes slideouttoleft {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(-100%); }
+}
+@-moz-keyframes slideouttoleft {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideouttoright {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(100%); }
+}
+@-moz-keyframes slideouttoright {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(100%); }
+}
+.slide.out, .slide.in {
+	-webkit-animation-timing-function: ease-out;
+	-webkit-animation-duration: 350ms;
+	-moz-animation-timing-function: ease-out;
+	-moz-animation-duration: 350ms;
+}
+.slide.out {
+	-webkit-transform: translateX(-100%);
+	-webkit-animation-name: slideouttoleft;
+	-moz-transform: translateX(-100%);
+	-moz-animation-name: slideouttoleft;
+}
+.slide.in {
+	-webkit-transform: translateX(0);
+	-webkit-animation-name: slideinfromright;
+	-moz-transform: translateX(0);
+	-moz-animation-name: slideinfromright;
+}
+.slide.out.reverse {
+	-webkit-transform: translateX(100%);
+	-webkit-animation-name: slideouttoright;
+	-moz-transform: translateX(100%);
+	-moz-animation-name: slideouttoright;
+}
+.slide.in.reverse {
+	-webkit-transform: translateX(0);
+	-webkit-animation-name: slideinfromleft;
+	-moz-transform: translateX(0);
+	-moz-animation-name: slideinfromleft;
+}
+.slidefade.out {
+	-webkit-transform: translateX(-100%);
+	-webkit-animation-name: slideouttoleft;
+	-moz-transform: translateX(-100%);
+	-moz-animation-name: slideouttoleft;
+	-webkit-animation-duration: 225ms;
+	-moz-animation-duration: 225ms;
+}
+.slidefade.in {
+	-webkit-transform: translateX(0);
+	-webkit-animation-name: fadein;
+	-moz-transform: translateX(0);
+	-moz-animation-name: fadein;
+	-webkit-animation-duration: 200ms;
+	-moz-animation-duration: 200ms;
+}
+.slidefade.out.reverse {
+	-webkit-transform: translateX(100%);
+	-webkit-animation-name: slideouttoright;
+	-moz-transform: translateX(100%);
+	-moz-animation-name: slideouttoright;
+	-webkit-animation-duration: 200ms;
+	-moz-animation-duration: 200ms;
+}
+.slidefade.in.reverse {
+	-webkit-transform: translateX(0);
+	-webkit-animation-name: fadein;
+	-moz-transform: translateX(0);
+	-moz-animation-name: fadein;
+	-webkit-animation-duration: 200ms;
+	-moz-animation-duration: 200ms;
+}
+/* slide down */
+.slidedown.out {
+	-webkit-animation-name: fadeout;
+	-moz-animation-name: fadeout;
+	-webkit-animation-duration: 100ms;
+	-moz-animation-duration: 100ms;
+}
+.slidedown.in {
+	-webkit-transform: translateY(0);
+	-webkit-animation-name: slideinfromtop;
+	-moz-transform: translateY(0);
+	-moz-animation-name: slideinfromtop;
+	-webkit-animation-duration: 250ms;
+	-moz-animation-duration: 250ms;
+}
+.slidedown.in.reverse {
+	-webkit-animation-name: fadein;
+	-moz-animation-name: fadein;
+	-webkit-animation-duration: 150ms;
+	-moz-animation-duration: 150ms;
+}
+.slidedown.out.reverse {
+	-webkit-transform: translateY(-100%);
+	-moz-transform: translateY(-100%);
+	-webkit-animation-name: slideouttotop;
+	-moz-animation-name: slideouttotop;
+	-webkit-animation-duration: 200ms;
+	-moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfromtop {
+    from { -webkit-transform: translateY(-100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfromtop {
+    from { -moz-transform: translateY(-100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttotop {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(-100%); }
+}
+@-moz-keyframes slideouttotop {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(-100%); }
+}
+/* slide up */
+.slideup.out {
+	-webkit-animation-name: fadeout;
+	-moz-animation-name: fadeout;
+	-webkit-animation-duration: 100ms;
+	-moz-animation-duration: 100ms;
+}
+.slideup.in {
+	-webkit-transform: translateY(0);
+	-webkit-animation-name: slideinfrombottom;
+	-moz-transform: translateY(0);
+	-moz-animation-name: slideinfrombottom;
+	-webkit-animation-duration: 250ms;
+	-moz-animation-duration: 250ms;
+}
+.slideup.in.reverse {
+	-webkit-animation-name: fadein;
+	-moz-animation-name: fadein;
+	-webkit-animation-duration: 150ms;
+	-moz-animation-duration: 150ms;
+}
+.slideup.out.reverse {
+	-webkit-transform: translateY(100%);
+	-moz-transform: translateY(100%);
+	-webkit-animation-name: slideouttobottom;
+	-moz-animation-name: slideouttobottom;
+	-webkit-animation-duration: 200ms;
+	-moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfrombottom {
+    from { -webkit-transform: translateY(100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfrombottom {
+    from { -moz-transform: translateY(100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttobottom {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(100%); }
+}
+@-moz-keyframes slideouttobottom {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(100%); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-flip {
+	-webkit-perspective: 1000;
+	-moz-perspective: 1000;
+	position: absolute;
+}
+.flip {
+	-webkit-backface-visibility:hidden;
+	-webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+	-moz-backface-visibility:hidden;
+	-moz-transform:translateX(0);
+}
+.flip.out {
+	-webkit-transform: rotateY(-90deg) scale(.9);
+	-webkit-animation-name: flipouttoleft;
+	-webkit-animation-duration: 175ms;
+	-moz-transform: rotateY(-90deg) scale(.9);
+	-moz-animation-name: flipouttoleft;
+	-moz-animation-duration: 175ms;
+}
+.flip.in {
+	-webkit-animation-name: flipintoright;
+	-webkit-animation-duration: 225ms;
+	-moz-animation-name: flipintoright;
+	-moz-animation-duration: 225ms;
+}
+.flip.out.reverse {
+	-webkit-transform: rotateY(90deg) scale(.9);
+	-webkit-animation-name: flipouttoright;
+	-moz-transform: rotateY(90deg) scale(.9);
+	-moz-animation-name: flipouttoright;
+}
+.flip.in.reverse {
+	-webkit-animation-name: flipintoleft;
+	-moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-turn {
+	-webkit-perspective: 1000;
+	-moz-perspective: 1000;
+	position: absolute;
+}
+.turn {
+	-webkit-backface-visibility:hidden;
+	-webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+	-webkit-transform-origin: 0;
+	
+	-moz-backface-visibility:hidden;
+	-moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+	-moz-transform-origin: 0;
+}
+.turn.out {
+	-webkit-transform: rotateY(-90deg) scale(.9);
+	-webkit-animation-name: flipouttoleft;
+	-moz-transform: rotateY(-90deg) scale(.9);
+	-moz-animation-name: flipouttoleft;
+	-webkit-animation-duration: 125ms;
+	-moz-animation-duration: 125ms;
+}
+.turn.in {
+	-webkit-animation-name: flipintoright;
+	-moz-animation-name: flipintoright;
+	-webkit-animation-duration: 250ms;
+	-moz-animation-duration: 250ms;
+	
+}
+.turn.out.reverse {
+	-webkit-transform: rotateY(90deg) scale(.9);
+	-webkit-animation-name: flipouttoright;
+	-moz-transform: rotateY(90deg) scale(.9);
+	-moz-animation-name: flipouttoright;
+}
+.turn.in.reverse {
+	-webkit-animation-name: flipintoleft;
+	-moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* flow transition */
+.flow {
+	-webkit-transform-origin: 50% 30%;
+	-moz-transform-origin: 50% 30%;	
+	-webkit-box-shadow: 0 0 20px rgba(0,0,0,.4);
+	-moz-box-shadow: 0 0 20px rgba(0,0,0,.4);
+}
+.ui-dialog.flow {
+	-webkit-transform-origin: none;
+	-moz-transform-origin: none;	
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+}
+.flow.out {
+	-webkit-transform: translateX(-100%) scale(.7);
+	-webkit-animation-name: flowouttoleft;
+	-webkit-animation-timing-function: ease;
+	-webkit-animation-duration: 350ms;
+	-moz-transform: translateX(-100%) scale(.7);
+	-moz-animation-name: flowouttoleft;
+	-moz-animation-timing-function: ease;
+	-moz-animation-duration: 350ms;
+}
+.flow.in {
+	-webkit-transform: translateX(0) scale(1);
+	-webkit-animation-name: flowinfromright;
+	-webkit-animation-timing-function: ease;
+	-webkit-animation-duration: 350ms;
+	-moz-transform: translateX(0) scale(1);
+	-moz-animation-name: flowinfromright;
+	-moz-animation-timing-function: ease;
+	-moz-animation-duration: 350ms;
+}
+.flow.out.reverse {
+	-webkit-transform: translateX(100%);
+	-webkit-animation-name: flowouttoright;
+	-moz-transform: translateX(100%);
+	-moz-animation-name: flowouttoright;
+}
+.flow.in.reverse {
+	-webkit-animation-name: flowinfromleft;
+	-moz-animation-name: flowinfromleft;
+}
+@-webkit-keyframes flowouttoleft {
+    0% { -webkit-transform: translateX(0) scale(1); }
+	60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(-100%) scale(.7); }
+}
+@-moz-keyframes flowouttoleft {
+    0% { -moz-transform: translateX(0) scale(1); }
+	60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(-100%) scale(.7); }
+}
+@-webkit-keyframes flowouttoright {
+    0% { -webkit-transform: translateX(0) scale(1); }
+	60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform:  translateX(100%) scale(.7); }
+}
+@-moz-keyframes flowouttoright {
+    0% { -moz-transform: translateX(0) scale(1); }
+	60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(100%) scale(.7); }
+}
+@-webkit-keyframes flowinfromleft {
+    0% { -webkit-transform: translateX(-100%) scale(.7); }
+	30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromleft {
+    0% { -moz-transform: translateX(-100%) scale(.7); }
+	30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+@-webkit-keyframes flowinfromright {
+    0% { -webkit-transform: translateX(100%) scale(.7); }
+	30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromright {
+    0% { -moz-transform: translateX(100%) scale(.7); }
+	30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+/* content configurations. */
+.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
+.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+/* grid solo: 100 - single item fallback */
+.ui-grid-solo .ui-block-a { display: block; float: none; }
+/* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */
+/* grid a: 50/50 */
+.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; }
+.ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; }
+.ui-grid-a .ui-block-a { clear: left; padding-right:3px;}
+/* grid b: 33/33/33 */
+.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; }
+.ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; }
+.ui-grid-b .ui-block-a { clear: left; }
+/* grid c: 25/25/25/25 */
+.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; }
+.ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; }
+.ui-grid-c .ui-block-a { clear: left; }
+/* grid d: 20/20/20/20/20 */
+.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; }
+.ui-grid-d > :nth-child(n) { width: 20%; }
+.ui-grid-d .ui-block-a { clear: left; }
+/* fixed page header & footer configuration */
+.ui-header-fixed,
+.ui-footer-fixed {
+	left: 0;
+	right: 0;
+	width: 100%;
+	position: fixed;
+	z-index: 1000;
+}
+.ui-page-pre-in {
+	opacity: 0;
+}
+.ui-header-fixed {
+	top: 0;
+}
+.ui-footer-fixed {
+	bottom: 0;
+}
+.ui-header-fullscreen,
+.ui-footer-fullscreen {
+	opacity: .9;
+}
+.ui-page-header-fixed {
+	padding-top: 2.6875em;
+}
+.ui-page-footer-fixed {
+	padding-bottom: 2.6875em;
+}
+.ui-page-header-fullscreen .ui-content,
+.ui-page-footer-fullscreen .ui-content {
+	padding: 0;
+}
+.ui-fixed-hidden {
+	position: absolute;
+}
+.ui-page-header-fullscreen .ui-fixed-hidden,
+.ui-page-footer-fullscreen .ui-fixed-hidden {
+	left: -99999em;
+}
+.ui-header-fixed .ui-btn,
+.ui-footer-fixed .ui-btn { 
+	z-index: 10;
+}
+.ui-navbar { max-width: 100%; }
+.ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow:hidden; }
+.ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; }
+.ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; }
+/* add border if not in header/footer (full width) */
+.ui-navbar li:last-child .ui-btn,
+.ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; }
+.ui-header .ui-navbar li:last-child .ui-btn,
+.ui-footer .ui-navbar li:last-child .ui-btn,
+.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,
+.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; }
+.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; }
+.ui-header .ui-navbar li .ui-btn,
+.ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; }
+/* fixing gaps caused by subpixel problem */
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; }
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; }
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; }
+.ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em }
+.ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; }
+.ui-btn.ui-mini { margin-top: .25em; margin-bottom: .25em; }
+.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline,
+.ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; }
+.ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; }
+.ui-btn input, .ui-btn button { z-index: 2; }
+.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; width:99%}
+.ui-btn-block { display: block; }
+.ui-header .ui-btn,
+.ui-footer .ui-btn { display: inline-block; margin: 0; }
+.ui-header .ui-btn-block,
+.ui-footer .ui-btn-block { display: block; }
+.ui-header .ui-btn-inner,
+.ui-footer .ui-btn-inner,
+.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; }
+.ui-header .ui-fullsize .ui-btn-inner,
+.ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; }
+.ui-btn-icon-notext { width: 24px; height: 24px; }
+.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; }
+.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; }
+.ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; }
+.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; }
+.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
+.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; }
+.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; }
+.ui-header .ui-btn-icon-left .ui-btn-inner,
+.ui-footer .ui-btn-icon-left .ui-btn-inner,
+.ui-mini.ui-btn-icon-left .ui-btn-inner,
+.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; }
+.ui-header .ui-btn-icon-right .ui-btn-inner,
+.ui-footer .ui-btn-icon-right .ui-btn-inner,
+.ui-mini.ui-btn-icon-right .ui-btn-inner,
+.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; }
+.ui-header .ui-btn-icon-top .ui-btn-inner,
+.ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; }
+.ui-mini.ui-btn-icon-top .ui-btn-inner,
+.ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-header .ui-btn-icon-bottom .ui-btn-inner,
+.ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; }
+.ui-mini.ui-btn-icon-bottom .ui-btn-inner,
+.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+/*btn icon positioning*/
+.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;}
+.ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
+.ui-btn-icon-left .ui-icon { left: 10px; }
+.ui-btn-icon-right .ui-icon { right: 10px; }
+.ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-header .ui-btn-icon-left .ui-icon,
+.ui-footer .ui-btn-icon-left .ui-icon,
+.ui-mini.ui-btn-icon-left .ui-icon,
+.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; }
+.ui-header .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-btn-icon-right .ui-icon,
+.ui-mini.ui-btn-icon-right .ui-icon,
+.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; }
+.ui-header .ui-btn-icon-top .ui-icon,
+.ui-footer .ui-btn-icon-top .ui-icon,
+.ui-mini.ui-btn-icon-top .ui-icon,
+.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; }
+.ui-header .ui-btn-icon-bottom .ui-icon,
+.ui-footer .ui-btn-icon-bottom .ui-icon,
+.ui-mini.ui-btn-icon-bottom .ui-icon,
+.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; }
+/*hiding native button,inputs */
+.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); font-size: 1px; border: none; text-indent: -9999px; }
+.ui-field-contain .ui-btn.ui-submit { margin: 0; }
+label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+@media all and (min-width: 450px){
+	.ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+	.ui-field-contain .ui-btn.ui-submit { width: 60%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+	.ui-hide-label .ui-btn.ui-submit { width: auto; }
+}
+.ui-collapsible { margin: .5em 0; }
+.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; }
+.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; }
+.ui-collapsible-heading .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; }
+.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; }
+.ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
+.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; }
+.ui-collapsible-content {
+	display: block;
+	margin:  0 -8px;
+	padding: 10px 16px;
+	border-top:  none;      /* Overrides ui-btn-up-* */
+	background-image: none; /* Overrides ui-btn-up-* */
+	font-weight: normal;    /* Overrides ui-btn-up-* */
+}
+.ui-collapsible-content-collapsed { display: none; }
+.ui-collapsible-set { margin: .5em 0; }
+.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; }
+.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; }
+.ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; }
+.ui-bar .ui-controlgroup { margin: 0 5px; }
+.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; }
+.ui-controlgroup-controls { display: block; width: 100%;}
+.ui-controlgroup li { list-style: none; }
+.ui-controlgroup-vertical .ui-btn,
+.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
+.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
+.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; }
+.ui-controlgroup .ui-btn-icon-notext { width: 24px; height: 24px; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:before,
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls { zoom: 1; }
+.ui-controlgroup-horizontal .ui-btn-inner { text-align: center; }
+.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select,
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; }
+.ui-controlgroup-horizontal .ui-select .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; }
+.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
+@media all and (min-width: 450px){
+	.ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+	.ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; }
+	.ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } 
+	.ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; }
+	.ui-hide-label .ui-controlgroup-controls { width: 100%; }
+}	
+.ui-dialog {
+	 background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */
+}
+.ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; }
+.ui-dialog .ui-header {
+	margin-top: 15%;
+	border: none;
+	overflow: hidden;
+}
+.ui-dialog .ui-header, 
+.ui-dialog .ui-content, 
+.ui-dialog .ui-footer { 
+	display: block;
+	position: relative; 
+	width: auto;
+}
+.ui-dialog .ui-header, 
+.ui-dialog .ui-footer  { 
+	z-index: 10; 
+	padding: 0;
+}
+.ui-dialog .ui-footer {
+	padding: 0 15px; 
+}
+.ui-dialog .ui-content { 
+	padding: 15px; 
+}
+.ui-dialog { 
+	margin-top: -15px;
+}
+.ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; }
+.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: .5em 0; text-align: left; z-index: 2; }
+.ui-checkbox .ui-btn.ui-mini, .ui-radio .ui-btn.ui-mini { margin: .25em 0; }
+.ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; }
+.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
+.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; }
+.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; }
+.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
+.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+/* input, label positioning */
+.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }
+.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; }
+.ui-field-contain:last-child { border-bottom-width: 0; }
+.ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */
+@media all and (min-width: 450px){
+	.ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
+}
+.ui-select { display: block; position: relative; }
+.ui-select select { position: absolute; left: -9999px; top: -9999px; }
+.ui-select .ui-btn { overflow: hidden; opacity: 1; }
+.ui-field-contain .ui-select .ui-btn { margin: 0; }
+/* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */
+.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; }
+.ui-select .ui-disabled { opacity: .3; }
+@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }}
+.ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; }
+.ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; }
+.ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; }
+.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; }
+/* labels */
+label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+/*listbox*/
+.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important;
+/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ }
+.ui-select .ui-btn-text { text-overflow: ellipsis; }
+.ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; }
+.ui-selectmenu .ui-listview { margin: 0; }
+.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
+.ui-selectmenu-hidden { top: -99999px; left: -9999px; }
+.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; }
+.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
+.ui-selectmenu-list .ui-li .ui-icon { display: block; }
+.ui-li.ui-selectmenu-placeholder { display: none; }
+.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
+@media all and (min-width: 450px){
+	.ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+	.ui-field-contain .ui-select { width: 60%; display: inline-block; }
+	.ui-hide-label .ui-select { width: 100%; } 
+}
+/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button.  this shim's content in there */
+.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }
+label.ui-input-text { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; padding-right: 1em;}
+input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px;  width: 100%; outline: 0; }
+input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini { margin: .25em 0; }
+.ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text { margin: 0; }
+input.ui-input-text, textarea.ui-input-text, .ui-input-search { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+input.ui-input-text { -webkit-appearance: none; }
+textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
+.ui-input-search { padding: 0 30px; margin: .5em 0; background-image: none; position: relative; }
+.ui-input-search.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-input-search { margin: 0; }
+.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; }
+.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
+.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; }
+.ui-mini .ui-input-clear { right: -3px; }
+.ui-input-search .ui-input-clear-hidden { display: none; }
+input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; }
+textarea.ui-mini { height: 45px; }
+@media all and (min-width: 450px){
+	.ui-field-contain label.ui-input-text  { vertical-align: top; width: 100%; margin: 0 2% 0 0 }
+	.ui-field-contain input.ui-input-text, 
+	.ui-field-contain textarea.ui-input-text, 
+	.ui-field-contain .ui-input-search { width: 100%; display: inline-block; } 
+	.ui-hide-label input.ui-input-text, 
+	.ui-hide-label textarea.ui-input-text, 
+	.ui-hide-label .ui-input-search { width: 100%; }
+	.ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
+}
+.ui-listview { margin: 0; counter-reset: listnumbering; }
+.ui-content .ui-listview { margin: -15px; }
+.ui-content .ui-listview-inset { margin: 1em 0; }
+.ui-listview, .ui-li { list-style:none; padding:0; }
+.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
+.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; }
+/* Fixes #4254 to prevent inherit font-size from .ui-li-divider, .ui-li-static */
+.ui-li-divider .ui-btn-text, .ui-li-static .ui-btn-text { font-size: 16px; }
+.ui-li-divider .ui-mini .ui-btn-text, .ui-li-static .ui-mini .ui-btn-text { font-size: inherit; }
+.ui-li-divider { counter-reset: listnumbering; }
+ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; }
+ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
+.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
+.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; }
+.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
+.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; }
+.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb  { min-height: 60px; padding-left: 100px; }
+.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon {  min-height: 20px; padding-left: 40px; }
+.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; }
+.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; }
+.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; }
+.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-desc {  font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
+.ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; }
+.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
+.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
+@media all and (min-width: 480px){
+	 .ui-li-aside { width: 45%; }
+}	 
+.ui-li-divider { cursor: default; }
+.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; }
+.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; }
+.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; }
+.ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; }
+.ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; }
+.ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; }
+.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; }
+.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;}
+.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;}
+.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
+.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; }
+.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px }
+.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
+.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; }
+.ui-li.ui-screen-hidden{display:none;}
+/* Odd iPad positioning issue. */
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
+    .ui-li .ui-btn-text { overflow:  visible; }
+}
+label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+input.ui-slider-input,
+.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; outline: 0; }
+input.ui-slider-input.ui-mini,
+.ui-field-contain input.ui-slider-input.ui-mini { width: 45px; margin: .25em 0; font-size: 14px; }
+.ui-field-contain input.ui-slider-input { margin: 0; }
+/* To do: Exclude ui-slider-input from textinput widget initSelector. The class ui-input-text is added to the slider input and label. When this is fixed, the rule below can be deleted. */
+input.ui-slider-input, .ui-field-contain input.ui-slider-input { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; box-sizing: content-box; }
+select.ui-slider-switch { display: none; }
+div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; }
+div.ui-slider-mini { height: 12px; margin-left: 10px; top: 2px; }
+div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; }
+.ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; }
+a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; }
+div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; }
+div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; border-top: none; }
+@media all and (min-width: 450px){
+	.ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+	.ui-field-contain div.ui-slider { width: 43%; }
+	.ui-field-contain div.ui-slider-switch { width: 5.5em; }
+}	
+div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.0em; }
+a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; }
+div.ui-slider-switch .ui-slider-handle {  margin-top: 1px; }
+.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; }
+div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; }
+div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; }
+span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; }
+.ui-slider-mini span.ui-slider-label { font-size: 14px; }
+span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; }
+span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;}
+.ui-slider-inline { width: 120px; display: inline-block; }

+ 276 - 0
miaomiao/plugins/jpush-phonegap-plugin/example/css/mobiscroll.core-2.0.1.css

xqd
@@ -0,0 +1,276 @@
+/* Datewheel overlay */
+.dw {
+    min-width:170px;
+    padding: 0 10px;
+    position: absolute;
+    top: 5%;
+    left: 0;
+    z-index: 1001;
+    color: #000;
+    font-family: arial, verdana, sans-serif;
+    font-size: 12px;
+    text-shadow: none;
+}
+.dwi {
+    position: static;
+    margin: 5px;
+    display: inline-block;
+}
+.dwwr {
+    zoom: 1;
+}
+/* Datewheel overlay background */
+.dwo {
+    width: 100%;
+    background: #000;
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 1000;
+    opacity: .7;
+    filter:Alpha(Opacity=70);
+}
+/* Datewheel wheel container wrapper */
+.dwc {
+    float: left;
+    margin: 0 2px 5px 2px;
+    padding-top: 30px;
+}
+.dwcc {
+    clear: both;
+}
+/* Datewheel label */
+.dwl {
+    /*margin: 0 2px;*/
+    text-align: center;
+    line-height: 30px;
+    height: 30px;
+    white-space: nowrap;
+    position: absolute;
+    top: -30px;
+    width: 100%;
+}
+/* Datewheel value */
+.dwv {
+    padding: 10px 0;
+    border-bottom: 1px solid #000;
+}
+/* Datewheel wheel container */
+.dwrc {
+    -webkit-border-radius: 3px;
+    -moz-border-radius: 3px;
+    border-radius: 3px;
+}
+.dwwc {
+    margin: 0;
+    padding: 0 2px;
+    position: relative;
+    background: #000;
+    zoom:1;
+}
+/* Datewheel wheels */
+.dwwl {
+    margin: 4px 2px;
+    position: relative;
+    background: #888;
+    background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #000),color-stop(0.35, #333),color-stop(0.50, #888),color-stop(0.65, #333),color-stop(1, #000));
+    background: -moz-linear-gradient(#000 0%,#333 35%, #888 50%,#333 65%,#000 100%);
+    background: -ms-linear-gradient(#000 0%,#333 35%, #888 50%,#333 65%,#000 100%);
+    background: -o-linear-gradient(#000 0%,#333 35%, #888 50%,#333 65%,#000 100%);
+}
+.dww {
+    margin: 0 2px;
+    overflow: hidden;
+    position: relative;
+    /*top: -30px;*/
+}
+.dwsc .dww {
+    color: #fff;
+    background: #444;
+    background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #000),color-stop(0.45, #444),color-stop(0.55, #444),color-stop(1, #000));
+    background: -moz-linear-gradient(#000 0%,#444 45%, #444 55%, #000 100%);
+    background: -ms-linear-gradient(#000 0%,#444 45%, #444 55%, #000 100%);
+    background: -o-linear-gradient(#000 0%,#444 45%, #444 55%, #000 100%);
+}
+.dww ul {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    /*display: block;
+    width: 100%;*/
+    position: relative;
+    z-index: 2;
+}
+.dww li {
+    list-style: none;
+    margin: 0;
+    padding: 0 5px;
+    display: block;
+    text-align: center;
+    line-height: 40px;
+    font-size: 26px;
+    white-space: nowrap;
+    text-shadow: 0 1px 1px #000;
+    opacity: .3;
+    filter: Alpha(Opacity=30);
+}
+/* Valid entry */
+.dww li.dw-v {
+    opacity: 1;
+    filter: Alpha(Opacity=100);
+}
+/* Hidden entry */
+.dww li.dw-h {
+    visibility: hidden;
+}
+/* Wheel +/- buttons */
+.dwwb {
+    position: absolute;
+    z-index: 4;
+    left: 0;
+    cursor: pointer;
+    width: 100%;
+    height: 40px;
+    text-align: center;
+}
+.dwwbp {
+    top: 0;
+    -webkit-border-radius: 3px 3px 0 0;
+    -moz-border-radius: 3px 3px 0 0;
+    border-radius: 3px 3px 0 0;
+    font-size: 40px;
+}
+.dwwbm {
+    bottom: 0;
+    -webkit-border-radius: 0 0 3px 3px;
+    -moz-border-radius: 0 0 3px 3px;
+    border-radius: 0 0 3px 3px;
+    font-size: 32px;
+    font-weight: bold;
+}
+.dwpm .dwwc {
+    background: transparent;
+}
+.dwpm .dww {
+    margin: -1px;
+}
+.dwpm .dww li {
+    text-shadow: none;
+}
+.dwpm .dwwol {
+    display: none;
+}
+/* Datewheel wheel overlay */
+.dwwo {
+    position: absolute;
+    z-index: 3;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #000),color-stop(0.52, rgba(44,44,44,0)),color-stop(0.48, rgba(44,44,44,0)),color-stop(1, #000));
+    background: -moz-linear-gradient(#000 0%,rgba(44,44,44,0) 52%, rgba(44,44,44,0) 48%, #000 100%);
+    background: -ms-linear-gradient(#000 0%,rgba(44,44,44,0) 52%, rgba(44,44,44,0) 48%, #000 100%);
+    background: -o-linear-gradient(#000 0%,rgba(44,44,44,0) 52%, rgba(44,44,44,0) 48%, #000 100%);
+}
+/* Background line */
+.dwwol {
+    position: absolute;
+    z-index: 1;
+    top: 50%;
+    left: 0;
+    width: 100%;
+    height: 0;
+    margin-top: -1px;
+    border-top: 1px solid #333;
+    border-bottom: 1px solid #555;
+}
+/* Datewheel button */
+.dwbg .dwb {
+    display: block;
+    height: 40px;
+    line-height: 40px;
+    padding: 0 15px;
+    margin: 0 2px;
+    font-size: 14px;
+    font-weight: bold;
+    text-decoration: none;
+    text-shadow:0 -1px 1px #000;
+    border-radius: 5px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius:5px;
+    box-shadow:0 1px 3px rgba(0,0,0,0.5);
+    -moz-box-shadow:0 1px 3px rgba(0,0,0,0.5);
+    -webkit-box-shadow:0 1px 3px rgba(0,0,0,0.5);
+    color: #fff;
+    background:#000;
+    background:-webkit-gradient(linear,left bottom,left top,color-stop(0.5, #000),color-stop(0.5, #6e6e6e));
+    background:-moz-linear-gradient(#6e6e6e 50%,#000 50%);
+    background:-ms-linear-gradient(#6e6e6e 50%,#000 50%);
+    background:-o-linear-gradient(#6e6e6e 50%,#000 50%);
+}
+/* Datewheel button container */
+.dwbc {
+    /*margin-top: 5px;*/
+    padding: 5px 0;
+    text-align: center;
+    clear: both;
+}
+/* Datewheel button wrapper */
+.dwbw {
+    display: inline-block;
+    width: 50%;
+}
+/* Hidden label */
+.dwhl {
+    padding-top: 10px;
+}
+.dwhl .dwl {
+    display: none;
+}
+/* Backgrounds */
+.dwbg {
+    background: #fff;
+    border-radius: 3px;
+    -webkit-border-radius: 3px;
+    -moz-border-radius: 3px;
+}
+.dwbg .dwpm .dww {
+    color: #000;
+    background: #fff;
+    border: 1px solid #AAA;
+}
+.dwbg .dwwb {
+    background: #ccc;
+    color: #888;
+    text-shadow: 0 -1px 1px #333;
+    box-shadow: 0 0 5px #333;
+    -webkit-box-shadow: 0 0 5px #333;
+    -moz-box-shadow: 0 0 5px #333;
+}
+.dwbg .dwwbp {
+    background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #bdbdbd),color-stop(1, #f7f7f7));
+    background: -moz-linear-gradient(#f7f7f7,#bdbdbd);
+    background: -ms-linear-gradient(#f7f7f7,#bdbdbd);
+    background: -o-linear-gradient(#f7f7f7,#bdbdbd);
+}
+.dwbg .dwwbm {
+    background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #f7f7f7),color-stop(1, #bdbdbd));
+    background: -moz-linear-gradient(#bdbdbd,#f7f7f7);
+    background: -ms-linear-gradient(#bdbdbd,#f7f7f7);
+    background: -o-linear-gradient(#bdbdbd,#f7f7f7);
+}
+.dwbg .dwb-a {
+    background:#3c7500;
+    background:-webkit-gradient(linear,left bottom,left top,color-stop(0.5, #3c7500),color-stop(0.5, #94c840));
+    background:-moz-linear-gradient(#94c840 50%,#3c7500 50%);
+    background:-ms-linear-gradient(#94c840 50%,#3c7500 50%);
+    background:-o-linear-gradient(#94c840 50%,#3c7500 50%);
+}
+.dwbg .dwwl .dwb-a {
+    background:#3c7500;
+    background:-webkit-gradient(linear,left bottom,left top,color-stop(0, #3c7500),color-stop(1, #94c840));
+    background:-moz-linear-gradient(#94c840,#3c7500);
+    background:-ms-linear-gradient(#94c840,#3c7500);
+    background:-o-linear-gradient(#94c840,#3c7500);
+}

+ 47 - 0
miaomiao/plugins/jpush-phonegap-plugin/example/css/mobiscroll.jqm-2.0.1.css

xqd
@@ -0,0 +1,47 @@
+/* jQuery Mobile Theme */
+.jqm .dwo {
+    background: none;
+}
+.jqm .dw {
+    padding: 6px;
+    z-index: 1003;
+}
+.jqm .dwv {
+    position: static;
+    width: auto;
+    padding: .7em 15px .7em 15px;
+    border: 0;
+}
+.jqm .dwwr {
+    border: 0;
+}
+.jqm .dwpm .dwwo {
+    background: none;
+}
+.jqm .dwc {
+    margin: 0;
+    padding: 30px 5px 5px 5px;
+ }
+.jqm .dwhl {
+    padding: 5px;
+}
+.jqm .dwwb {
+    margin: 0;
+    border: 0;
+}
+.jqm .dwwb span {
+    padding: 0;
+}
+.jqm .dwwbp .ui-btn-inner {
+    -webkit-border-radius: 3px 3px 0 0;
+    -moz-border-radius: 3px 3px 0 0;
+    border-radius: 3px 3px 0 0;
+}
+.jqm .dwwbm .ui-btn-inner {
+    -webkit-border-radius: 0 0 3px 3px;
+    -moz-border-radius: 0 0 3px 3px;
+    border-radius: 0 0 3px 3px;
+}
+.jqm .dwwbp span {
+    font-weight: normal;
+}

+ 201 - 0
miaomiao/plugins/jpush-phonegap-plugin/example/index.html

xqd
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>JPush Phonegap Simple Demo</title>
+    <link href="css/jquery.mobile-1.1.1.css" rel="stylesheet" type="text/css" />
+    <script type="text/javascript" src="js/jquery.js"></script>
+    <script type="text/javascript" src="js/jquery.mobile-1.1.1.js"></script>
+    <script type="text/javascript" src="cordova.js"></script>
+    <script type="text/javascript">
+        var onDeviceReady = function() {
+            console.log("JPushPlugin:Device ready!");
+            initiateUI();
+        };
+
+        var getRegistrationID = function() {
+            window.plugins.jPushPlugin.getRegistrationID(onGetRegistrationID);
+        };
+
+        var onGetRegistrationID = function(data) {
+            try {
+                console.log("JPushPlugin:registrationID is " + data);
+
+                if (data.length == 0) {
+                    var t1 = window.setTimeout(getRegistrationID, 1000);
+                }
+                $("#registrationId").html(data);
+            } catch (exception) {
+                console.log(exception);
+            }
+        };
+
+        var onTagsWithAlias = function(event) {
+            try {
+                console.log("onTagsWithAlias");
+                var result = "result code:" + event.resultCode + " ";
+                result += "tags:" + event.tags + " ";
+                result += "alias:" + event.alias + " ";
+                $("#tagAliasResult").html(result);
+            } catch (exception) {
+                console.log(exception)
+            }
+        };
+
+        var onOpenNotification = function(event) {
+            try {
+                var alertContent;
+                if (device.platform == "Android") {
+                    alertContent = event.alert;
+                } else {
+                    alertContent = event.aps.alert;
+                }
+                alert("open Notification:" + alertContent);
+            } catch (exception) {
+                console.log("JPushPlugin:onOpenNotification" + exception);
+            }
+        };
+
+        var onReceiveNotification = function(event) {
+            try {
+                var alertContent;
+                if (device.platform == "Android") {
+                    alertContent = event.alert;
+                } else {
+                    alertContent = event.aps.alert;
+                }
+                $("#notificationResult").html(alertContent);
+            } catch (exception) {
+                console.log(exception)
+            }
+        };
+
+        var onReceiveMessage = function(event) {
+            try {
+                var message;
+                if (device.platform == "Android") {
+                    message = event.message;
+                } else {
+                    message = event.content;
+                }
+                $("#messageResult").html(message);
+            } catch (exception) {
+                console.log("JPushPlugin:onReceiveMessage-->" + exception);
+            }
+        };
+
+        var initiateUI = function() {
+            try {
+                window.plugins.jPushPlugin.init();
+                window.setTimeout(getRegistrationID, 1000);
+                if (device.platform != "Android") {
+                    window.plugins.jPushPlugin.setDebugModeFromIos();
+                    window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0);
+                } else {
+                    window.plugins.jPushPlugin.setDebugMode(true);
+                    window.plugins.jPushPlugin.setStatisticsOpen(true);
+                }
+            } catch (exception) {
+                console.log(exception);
+            }
+            $("#setTagWithAliasButton").click(function(ev) {
+                try {
+                    var tag1 = $("#tagText1").attr("value");
+                    var tag2 = $("#tagText2").attr("value");
+                    var tag3 = $("#tagText3").attr("value");
+                    var alias = $("#aliasText").attr("value");
+                    var tags = [];
+
+                    if (tag1 != "") {
+                        tags.push(tag1);
+                    }
+                    if (tag2 != "") {
+                        tags.push(tag2);
+                    }
+                    if (tag3 != "") {
+                        tags.push(tag3);
+                    }
+                    window.plugins.jPushPlugin.setTagsWithAlias(tags, alias, function () {
+                      // Success callback
+                      console.log(tags + ' - ' + alias)
+                    });
+                } catch (exception) {
+                    console.log(exception);
+                }
+            })
+        };
+
+        document.addEventListener("jpush.setTagsWithAlias", onTagsWithAlias, false);
+        document.addEventListener("deviceready", onDeviceReady, false);
+        document.addEventListener("jpush.openNotification", onOpenNotification, false);
+        document.addEventListener("jpush.receiveNotification", onReceiveNotification, false);
+        document.addEventListener("jpush.receiveMessage", onReceiveMessage, false);
+    </script>
+</head>
+
+<body>
+    <div data-role="page" id="page">
+        <div data-role="content">
+            <form>
+                <div class="ui-body ui-body-b">
+                    <div data-role="fieldcontain">
+                        <center>
+                            <h3>JPushPlugin Example</h3>
+                        </center>
+                        <span name="alias" id="alias"></span>
+                        <hr/>
+                        <label>RegistrationID: </label>
+                        <label id="registrationId">null</label>
+                    </div>
+                    <div data-role="fieldcontain">
+                        <label>Tags: </label>
+                        <table>
+                            <tr>
+                                <td>
+                                    <input type="text" id="tagText1" />
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <input type="text" id="tagText2" />
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <input type="text" id="tagText3" />
+                                </td>
+                            </tr>
+                        </table>
+                        <label>Alias: </label>
+                        <table>
+                            <tr>
+                                <td>
+                                    <input type="text" id="aliasText" />
+                                </td>
+                            </tr>
+                        </table>
+                    </div>
+                    <div data-role="fieldcontain">
+                        <input type="button" id="setTagWithAliasButton"
+                            value="Add tag and alias" />
+                    </div>
+                    <div data-role="fieldcontain">
+                        <label id="tagAliasPrompt">设置tag/alias结果:</label>
+                        <label id="tagAliasResult">null</label>
+                    </div>
+                    <div data-role="fieldcontain">
+                        <label id="notificationPrompt">接受的通知内容:</label>
+                        <label id="notificationResult">null</label>
+                    </div>
+                    <div data-role="fieldcontain">
+                        <label id="messagePrompt">接受的自定义消息:</label>
+                        <label id="messageResult">null</label>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+</body>
+
+</html>

+ 9404 - 0
miaomiao/plugins/jpush-phonegap-plugin/example/js/jquery.js

xqd
@@ -0,0 +1,9404 @@
+/*!
+ * jQuery JavaScript Library v1.7.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Wed Mar 21 12:46:34 2012 -0700
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+	navigator = window.navigator,
+	location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// A simple way to check for HTML strings or ID strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+
+	// Used for trimming whitespace
+	trimLeft = /^\s+/,
+	trimRight = /\s+$/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+	// Useragent RegExp
+	rwebkit = /(webkit)[ \/]([\w.]+)/,
+	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+	rmsie = /(msie) ([\w.]+)/,
+	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+	// Matches dashed string for camelizing
+	rdashAlpha = /-([a-z]|[0-9])/ig,
+	rmsPrefix = /^-ms-/,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return ( letter + "" ).toUpperCase();
+	},
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	trim = String.prototype.trim,
+	indexOf = Array.prototype.indexOf,
+
+	// [[Class]] -> type pairs
+	class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), or $(undefined)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// The body element only exists once, optimize finding it
+		if ( selector === "body" && !context && document.body ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = quickExpr.exec( selector );
+			}
+
+			// Verify a match, and that no context was specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+					doc = ( context ? context.ownerDocument || context : document );
+
+					// If a single string is passed in and it's a single tag
+					// just do a createElement and skip the rest
+					ret = rsingleTag.exec( selector );
+
+					if ( ret ) {
+						if ( jQuery.isPlainObject( context ) ) {
+							selector = [ document.createElement( ret[1] ) ];
+							jQuery.fn.attr.call( selector, context, true );
+
+						} else {
+							selector = [ doc.createElement( ret[1] ) ];
+						}
+
+					} else {
+						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+						selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+					}
+
+					return jQuery.merge( this, selector );
+
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.7.2",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return slice.call( this, 0 );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+		// Build a new jQuery matched element set
+		var ret = this.constructor();
+
+		if ( jQuery.isArray( elems ) ) {
+			push.apply( ret, elems );
+
+		} else {
+			jQuery.merge( ret, elems );
+		}
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Attach the listeners
+		jQuery.bindReady();
+
+		// Add the callback
+		readyList.add( fn );
+
+		return this;
+	},
+
+	eq: function( i ) {
+		i = +i;
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ),
+			"slice", slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+		// Either a released hold or an DOMready/load event and not yet ready
+		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 1 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If a normal DOM Ready event fired, decrement, and wait if need be
+			if ( wait !== true && --jQuery.readyWait > 0 ) {
+				return;
+			}
+
+			// If there are functions bound, to execute
+			readyList.fireWith( document, [ jQuery ] );
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.trigger ) {
+				jQuery( document ).trigger( "ready" ).off( "ready" );
+			}
+		}
+	},
+
+	bindReady: function() {
+		if ( readyList ) {
+			return;
+		}
+
+		readyList = jQuery.Callbacks( "once memory" );
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			return setTimeout( jQuery.ready, 1 );
+		}
+
+		// Mozilla, Opera and webkit nightlies currently support this event
+		if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else if ( document.attachEvent ) {
+			// ensure firing before onload,
+			// maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var toplevel = false;
+
+			try {
+				toplevel = window.frameElement == null;
+			} catch(e) {}
+
+			if ( document.documentElement.doScroll && toplevel ) {
+				doScrollCheck();
+			}
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		return obj == null ?
+			String( obj ) :
+			class2type[ toString.call(obj) ] || "object";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!hasOwn.call(obj, "constructor") &&
+				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		for ( var name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	parseJSON: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+			.replace( rvalidtokens, "]" )
+			.replace( rvalidbraces, "")) ) {
+
+			return ( new Function( "return " + data ) )();
+
+		}
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+		var xml, tmp;
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+	},
+
+	// args is for internal usage only
+	each: function( object, callback, args ) {
+		var name, i = 0,
+			length = object.length,
+			isObj = length === undefined || jQuery.isFunction( object );
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.apply( object[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( object[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return object;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: trim ?
+		function( text ) {
+			return text == null ?
+				"" :
+				trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( array, results ) {
+		var ret = results || [];
+
+		if ( array != null ) {
+			// The window, strings (and functions) also have 'length'
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+			var type = jQuery.type( array );
+
+			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array, i ) {
+		var len;
+
+		if ( array ) {
+			if ( indexOf ) {
+				return indexOf.call( array, elem, i );
+			}
+
+			len = array.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in array && array[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var i = first.length,
+			j = 0;
+
+		if ( typeof second.length === "number" ) {
+			for ( var l = second.length; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var ret = [], retVal;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value, key, ret = [],
+			i = 0,
+			length = elems.length,
+			// jquery objects are treated as arrays
+			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( key in elems ) {
+				value = callback( elems[ key ], key, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		if ( typeof context === "string" ) {
+			var tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		var args = slice.call( arguments, 2 ),
+			proxy = function() {
+				return fn.apply( context, args.concat( slice.call( arguments ) ) );
+			};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Mutifunctional method to get and set values to a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+		var exec,
+			bulk = key == null,
+			i = 0,
+			length = elems.length;
+
+		// Sets many values
+		if ( key && typeof key === "object" ) {
+			for ( i in key ) {
+				jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+			}
+			chainable = 1;
+
+		// Sets one value
+		} else if ( value !== undefined ) {
+			// Optionally, function values get executed if exec is true
+			exec = pass === undefined && jQuery.isFunction( value );
+
+			if ( bulk ) {
+				// Bulk operations only iterate when executing function values
+				if ( exec ) {
+					exec = fn;
+					fn = function( elem, key, value ) {
+						return exec.call( jQuery( elem ), value );
+					};
+
+				// Otherwise they run against the entire set
+				} else {
+					fn.call( elems, value );
+					fn = null;
+				}
+			}
+
+			if ( fn ) {
+				for (; i < length; i++ ) {
+					fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+				}
+			}
+
+			chainable = 1;
+		}
+
+		return chainable ?
+			elems :
+
+			// Gets
+			bulk ?
+				fn.call( elems ) :
+				length ? fn( elems[0], key ) : emptyGet;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = rwebkit.exec( ua ) ||
+			ropera.exec( ua ) ||
+			rmsie.exec( ua ) ||
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+			[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	sub: function() {
+		function jQuerySub( selector, context ) {
+			return new jQuerySub.fn.init( selector, context );
+		}
+		jQuery.extend( true, jQuerySub, this );
+		jQuerySub.superclass = this;
+		jQuerySub.fn = jQuerySub.prototype = this();
+		jQuerySub.fn.constructor = jQuerySub;
+		jQuerySub.sub = this.sub;
+		jQuerySub.fn.init = function init( selector, context ) {
+			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+				context = jQuerySub( context );
+			}
+
+			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+		};
+		jQuerySub.fn.init.prototype = jQuerySub.fn;
+		var rootjQuerySub = jQuerySub(document);
+		return jQuerySub;
+	},
+
+	browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+	jQuery.browser[ browserMatch.browser ] = true;
+	jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+	jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+	trimLeft = /^[\s\xA0]+/;
+	trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch(e) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+return jQuery;
+
+})();
+
+
+// String to Object flags format cache
+var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+function createFlags( flags ) {
+	var object = flagsCache[ flags ] = {},
+		i, length;
+	flags = flags.split( /\s+/ );
+	for ( i = 0, length = flags.length; i < length; i++ ) {
+		object[ flags[i] ] = true;
+	}
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	flags:	an optional list of space-separated flags that will change how
+ *			the callback list behaves
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible flags:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( flags ) {
+
+	// Convert flags from String-formatted to Object-formatted
+	// (we check in cache first)
+	flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+	var // Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = [],
+		// Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Add one or several callbacks to the list
+		add = function( args ) {
+			var i,
+				length,
+				elem,
+				type,
+				actual;
+			for ( i = 0, length = args.length; i < length; i++ ) {
+				elem = args[ i ];
+				type = jQuery.type( elem );
+				if ( type === "array" ) {
+					// Inspect recursively
+					add( elem );
+				} else if ( type === "function" ) {
+					// Add if not in unique mode and callback is not in
+					if ( !flags.unique || !self.has( elem ) ) {
+						list.push( elem );
+					}
+				}
+			}
+		},
+		// Fire callbacks
+		fire = function( context, args ) {
+			args = args || [];
+			memory = !flags.memory || [ context, args ];
+			fired = true;
+			firing = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+					memory = true; // Mark as halted
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( !flags.once ) {
+					if ( stack && stack.length ) {
+						memory = stack.shift();
+						self.fireWith( memory[ 0 ], memory[ 1 ] );
+					}
+				} else if ( memory === true ) {
+					self.disable();
+				} else {
+					list = [];
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					var length = list.length;
+					add( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away, unless previous
+					// firing was halted (stopOnFalse)
+					} else if ( memory && memory !== true ) {
+						firingStart = length;
+						fire( memory[ 0 ], memory[ 1 ] );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					var args = arguments,
+						argIndex = 0,
+						argLength = args.length;
+					for ( ; argIndex < argLength ; argIndex++ ) {
+						for ( var i = 0; i < list.length; i++ ) {
+							if ( args[ argIndex ] === list[ i ] ) {
+								// Handle firingIndex and firingLength
+								if ( firing ) {
+									if ( i <= firingLength ) {
+										firingLength--;
+										if ( i <= firingIndex ) {
+											firingIndex--;
+										}
+									}
+								}
+								// Remove the element
+								list.splice( i--, 1 );
+								// If we have some unicity property then
+								// we only need to do this once
+								if ( flags.unique ) {
+									break;
+								}
+							}
+						}
+					}
+				}
+				return this;
+			},
+			// Control if a given callback is in the list
+			has: function( fn ) {
+				if ( list ) {
+					var i = 0,
+						length = list.length;
+					for ( ; i < length; i++ ) {
+						if ( fn === list[ i ] ) {
+							return true;
+						}
+					}
+				}
+				return false;
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory || memory === true ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( stack ) {
+					if ( firing ) {
+						if ( !flags.once ) {
+							stack.push( [ context, args ] );
+						}
+					} else if ( !( flags.once && memory ) ) {
+						fire( context, args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+
+
+var // Static reference to slice
+	sliceDeferred = [].slice;
+
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var doneList = jQuery.Callbacks( "once memory" ),
+			failList = jQuery.Callbacks( "once memory" ),
+			progressList = jQuery.Callbacks( "memory" ),
+			state = "pending",
+			lists = {
+				resolve: doneList,
+				reject: failList,
+				notify: progressList
+			},
+			promise = {
+				done: doneList.add,
+				fail: failList.add,
+				progress: progressList.add,
+
+				state: function() {
+					return state;
+				},
+
+				// Deprecated
+				isResolved: doneList.fired,
+				isRejected: failList.fired,
+
+				then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+					deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+					return this;
+				},
+				always: function() {
+					deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+					return this;
+				},
+				pipe: function( fnDone, fnFail, fnProgress ) {
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( {
+							done: [ fnDone, "resolve" ],
+							fail: [ fnFail, "reject" ],
+							progress: [ fnProgress, "notify" ]
+						}, function( handler, data ) {
+							var fn = data[ 0 ],
+								action = data[ 1 ],
+								returned;
+							if ( jQuery.isFunction( fn ) ) {
+								deferred[ handler ](function() {
+									returned = fn.apply( this, arguments );
+									if ( returned && jQuery.isFunction( returned.promise ) ) {
+										returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+									} else {
+										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+									}
+								});
+							} else {
+								deferred[ handler ]( newDefer[ action ] );
+							}
+						});
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					if ( obj == null ) {
+						obj = promise;
+					} else {
+						for ( var key in promise ) {
+							obj[ key ] = promise[ key ];
+						}
+					}
+					return obj;
+				}
+			},
+			deferred = promise.promise({}),
+			key;
+
+		for ( key in lists ) {
+			deferred[ key ] = lists[ key ].fire;
+			deferred[ key + "With" ] = lists[ key ].fireWith;
+		}
+
+		// Handle state
+		deferred.done( function() {
+			state = "resolved";
+		}, failList.disable, progressList.lock ).fail( function() {
+			state = "rejected";
+		}, doneList.disable, progressList.lock );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( firstParam ) {
+		var args = sliceDeferred.call( arguments, 0 ),
+			i = 0,
+			length = args.length,
+			pValues = new Array( length ),
+			count = length,
+			pCount = length,
+			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+				firstParam :
+				jQuery.Deferred(),
+			promise = deferred.promise();
+		function resolveFunc( i ) {
+			return function( value ) {
+				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+				if ( !( --count ) ) {
+					deferred.resolveWith( deferred, args );
+				}
+			};
+		}
+		function progressFunc( i ) {
+			return function( value ) {
+				pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+				deferred.notifyWith( promise, pValues );
+			};
+		}
+		if ( length > 1 ) {
+			for ( ; i < length; i++ ) {
+				if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+					args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+				} else {
+					--count;
+				}
+			}
+			if ( !count ) {
+				deferred.resolveWith( deferred, args );
+			}
+		} else if ( deferred !== firstParam ) {
+			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+		}
+		return promise;
+	}
+});
+
+
+
+
+jQuery.support = (function() {
+
+	var support,
+		all,
+		a,
+		select,
+		opt,
+		input,
+		fragment,
+		tds,
+		events,
+		eventName,
+		i,
+		isSupported,
+		div = document.createElement( "div" ),
+		documentElement = document.documentElement;
+
+	// Preliminary tests
+	div.setAttribute("className", "t");
+	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	all = div.getElementsByTagName( "*" );
+	a = div.getElementsByTagName( "a" )[ 0 ];
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return {};
+	}
+
+	// First batch of supports tests
+	select = document.createElement( "select" );
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName( "input" )[ 0 ];
+
+	support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.55/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: ( input.value === "on" ),
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// Tests for enctype support on a form(#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// Will be defined later
+		submitBubbles: true,
+		changeBubbles: true,
+		focusinBubbles: false,
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true,
+		pixelMargin: true
+	};
+
+	// jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
+	jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+		div.attachEvent( "onclick", function() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			support.noCloneEvent = false;
+		});
+		div.cloneNode( true ).fireEvent( "onclick" );
+	}
+
+	// Check if a radio maintains its value
+	// after being appended to the DOM
+	input = document.createElement("input");
+	input.value = "t";
+	input.setAttribute("type", "radio");
+	support.radioValue = input.value === "t";
+
+	input.setAttribute("checked", "checked");
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( div.lastChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	fragment.removeChild( input );
+	fragment.appendChild( div );
+
+	// Technique from Juriy Zaytsev
+	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+	// We only care about the case where non-standard event systems
+	// are used, namely in IE. Short-circuiting here helps us to
+	// avoid an eval call (in setAttribute) which can cause CSP
+	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+	if ( div.attachEvent ) {
+		for ( i in {
+			submit: 1,
+			change: 1,
+			focusin: 1
+		}) {
+			eventName = "on" + i;
+			isSupported = ( eventName in div );
+			if ( !isSupported ) {
+				div.setAttribute( eventName, "return;" );
+				isSupported = ( typeof div[ eventName ] === "function" );
+			}
+			support[ i + "Bubbles" ] = isSupported;
+		}
+	}
+
+	fragment.removeChild( div );
+
+	// Null elements to avoid leaks in IE
+	fragment = select = opt = div = input = null;
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, outer, inner, table, td, offsetSupport,
+			marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
+			paddingMarginBorderVisibility, paddingMarginBorder,
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		conMarginTop = 1;
+		paddingMarginBorder = "padding:0;margin:0;border:";
+		positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
+		paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
+		style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
+		html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
+			"<table " + style + "' cellpadding='0' cellspacing='0'>" +
+			"<tr><td></td></tr></table>";
+
+		container = document.createElement("div");
+		container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+		body.insertBefore( container, body.firstChild );
+
+		// Construct the test element
+		div = document.createElement("div");
+		container.appendChild( div );
+
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		// (only IE 8 fails this test)
+		div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName( "td" );
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Check if empty table cells still have offsetWidth/Height
+		// (IE <= 8 fail this test)
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Check if div with explicit width and no margin-right incorrectly
+		// gets computed margin-right based on width of container. For more
+		// info see bug #3333
+		// Fails in WebKit before Feb 2011 nightlies
+		// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+		if ( window.getComputedStyle ) {
+			div.innerHTML = "";
+			marginDiv = document.createElement( "div" );
+			marginDiv.style.width = "0";
+			marginDiv.style.marginRight = "0";
+			div.style.width = "2px";
+			div.appendChild( marginDiv );
+			support.reliableMarginRight =
+				( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+		}
+
+		if ( typeof div.style.zoom !== "undefined" ) {
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			// (IE < 8 does this)
+			div.innerHTML = "";
+			div.style.width = div.style.padding = "1px";
+			div.style.border = 0;
+			div.style.overflow = "hidden";
+			div.style.display = "inline";
+			div.style.zoom = 1;
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+			// Check if elements with layout shrink-wrap their children
+			// (IE 6 does this)
+			div.style.display = "block";
+			div.style.overflow = "visible";
+			div.innerHTML = "<div style='width:5px;'></div>";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+		}
+
+		div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
+		div.innerHTML = html;
+
+		outer = div.firstChild;
+		inner = outer.firstChild;
+		td = outer.nextSibling.firstChild.firstChild;
+
+		offsetSupport = {
+			doesNotAddBorder: ( inner.offsetTop !== 5 ),
+			doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
+		};
+
+		inner.style.position = "fixed";
+		inner.style.top = "20px";
+
+		// safari subtracts parent border width here which is 5px
+		offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
+		inner.style.position = inner.style.top = "";
+
+		outer.style.overflow = "hidden";
+		outer.style.position = "relative";
+
+		offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
+		offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
+
+		if ( window.getComputedStyle ) {
+			div.style.marginTop = "1%";
+			support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
+		}
+
+		if ( typeof container.style.zoom !== "undefined" ) {
+			container.style.zoom = 1;
+		}
+
+		body.removeChild( container );
+		marginDiv = div = container = null;
+
+		jQuery.extend( support, offsetSupport );
+	});
+
+	return support;
+})();
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+	cache: {},
+
+	// Please use with caution
+	uuid: 0,
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var privateCache, thisCache, ret,
+			internalKey = jQuery.expando,
+			getByName = typeof name === "string",
+
+			// We have to handle DOM nodes and JS objects differently because IE6-7
+			// can't GC object references properly across the DOM-JS boundary
+			isNode = elem.nodeType,
+
+			// Only DOM nodes need the global jQuery cache; JS object data is
+			// attached directly to the object so GC can occur automatically
+			cache = isNode ? jQuery.cache : elem,
+
+			// Only defining an ID for JS objects if its cache already exists allows
+			// the code to shortcut on the same path as a DOM node with no cache
+			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
+			isEvents = name === "events";
+
+		// Avoid doing any more work than we need to when trying to get data on an
+		// object that has no data at all
+		if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+			return;
+		}
+
+		if ( !id ) {
+			// Only DOM nodes need a new unique ID for each element since their data
+			// ends up in the global cache
+			if ( isNode ) {
+				elem[ internalKey ] = id = ++jQuery.uuid;
+			} else {
+				id = internalKey;
+			}
+		}
+
+		if ( !cache[ id ] ) {
+			cache[ id ] = {};
+
+			// Avoids exposing jQuery metadata on plain JS objects when the object
+			// is serialized using JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+		}
+
+		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+		// shallow copied over onto the existing cache
+		if ( typeof name === "object" || typeof name === "function" ) {
+			if ( pvt ) {
+				cache[ id ] = jQuery.extend( cache[ id ], name );
+			} else {
+				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+			}
+		}
+
+		privateCache = thisCache = cache[ id ];
+
+		// jQuery data() is stored in a separate object inside the object's internal data
+		// cache in order to avoid key collisions between internal data and user-defined
+		// data.
+		if ( !pvt ) {
+			if ( !thisCache.data ) {
+				thisCache.data = {};
+			}
+
+			thisCache = thisCache.data;
+		}
+
+		if ( data !== undefined ) {
+			thisCache[ jQuery.camelCase( name ) ] = data;
+		}
+
+		// Users should not attempt to inspect the internal events object using jQuery.data,
+		// it is undocumented and subject to change. But does anyone listen? No.
+		if ( isEvents && !thisCache[ name ] ) {
+			return privateCache.events;
+		}
+
+		// Check for both converted-to-camel and non-converted data property names
+		// If a data property was specified
+		if ( getByName ) {
+
+			// First Try to find as-is property data
+			ret = thisCache[ name ];
+
+			// Test for null|undefined property data
+			if ( ret == null ) {
+
+				// Try to find the camelCased property
+				ret = thisCache[ jQuery.camelCase( name ) ];
+			}
+		} else {
+			ret = thisCache;
+		}
+
+		return ret;
+	},
+
+	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var thisCache, i, l,
+
+			// Reference to internal data cache key
+			internalKey = jQuery.expando,
+
+			isNode = elem.nodeType,
+
+			// See jQuery.data for more information
+			cache = isNode ? jQuery.cache : elem,
+
+			// See jQuery.data for more information
+			id = isNode ? elem[ internalKey ] : internalKey;
+
+		// If there is already no cache entry for this object, there is no
+		// purpose in continuing
+		if ( !cache[ id ] ) {
+			return;
+		}
+
+		if ( name ) {
+
+			thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+			if ( thisCache ) {
+
+				// Support array or space separated string names for data keys
+				if ( !jQuery.isArray( name ) ) {
+
+					// try the string as a key before any manipulation
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+
+						// split the camel cased version by spaces unless a key with the spaces exists
+						name = jQuery.camelCase( name );
+						if ( name in thisCache ) {
+							name = [ name ];
+						} else {
+							name = name.split( " " );
+						}
+					}
+				}
+
+				for ( i = 0, l = name.length; i < l; i++ ) {
+					delete thisCache[ name[i] ];
+				}
+
+				// If there is no data left in the cache, we want to continue
+				// and let the cache object itself get destroyed
+				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+					return;
+				}
+			}
+		}
+
+		// See jQuery.data for more information
+		if ( !pvt ) {
+			delete cache[ id ].data;
+
+			// Don't destroy the parent cache unless the internal data object
+			// had been the only thing left in it
+			if ( !isEmptyDataObject(cache[ id ]) ) {
+				return;
+			}
+		}
+
+		// Browsers that fail expando deletion also refuse to delete expandos on
+		// the window, but it will allow it on all other JS objects; other browsers
+		// don't care
+		// Ensure that `cache` is not a window object #10080
+		if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+			delete cache[ id ];
+		} else {
+			cache[ id ] = null;
+		}
+
+		// We destroyed the cache and need to eliminate the expando on the node to avoid
+		// false lookups in the cache for entries that no longer exist
+		if ( isNode ) {
+			// IE does not allow us to delete expando properties from nodes,
+			// nor does it have a removeAttribute function on Document nodes;
+			// we must handle all of these cases
+			if ( jQuery.support.deleteExpando ) {
+				delete elem[ internalKey ];
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( internalKey );
+			} else {
+				elem[ internalKey ] = null;
+			}
+		}
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return jQuery.data( elem, name, data, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		if ( elem.nodeName ) {
+			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+			if ( match ) {
+				return !(match === true || elem.getAttribute("classid") !== match);
+			}
+		}
+
+		return true;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var parts, part, attr, name, l,
+			elem = this[0],
+			i = 0,
+			data = null;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					attr = elem.attributes;
+					for ( l = attr.length; i < l; i++ ) {
+						name = attr[i].name;
+
+						if ( name.indexOf( "data-" ) === 0 ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( elem, name, data[ name ] );
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		parts = key.split( ".", 2 );
+		parts[1] = parts[1] ? "." + parts[1] : "";
+		part = parts[1] + "!";
+
+		return jQuery.access( this, function( value ) {
+
+			if ( value === undefined ) {
+				data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+
+				// Try to fetch any internally stored data first
+				if ( data === undefined && elem ) {
+					data = jQuery.data( elem, key );
+					data = dataAttr( elem, key, data );
+				}
+
+				return data === undefined && parts[1] ?
+					this.data( parts[0] ) :
+					data;
+			}
+
+			parts[1] = value;
+			this.each(function() {
+				var self = jQuery( this );
+
+				self.triggerHandler( "setData" + part, parts );
+				jQuery.data( this, key, value );
+				self.triggerHandler( "changeData" + part, parts );
+			});
+		}, null, value, arguments.length > 1, null, false );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				jQuery.isNumeric( data ) ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	for ( var name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+	var deferDataKey = type + "defer",
+		queueDataKey = type + "queue",
+		markDataKey = type + "mark",
+		defer = jQuery._data( elem, deferDataKey );
+	if ( defer &&
+		( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+		( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+		// Give room for hard-coded callbacks to fire first
+		// and eventually mark/queue something else on the element
+		setTimeout( function() {
+			if ( !jQuery._data( elem, queueDataKey ) &&
+				!jQuery._data( elem, markDataKey ) ) {
+				jQuery.removeData( elem, deferDataKey, true );
+				defer.fire();
+			}
+		}, 0 );
+	}
+}
+
+jQuery.extend({
+
+	_mark: function( elem, type ) {
+		if ( elem ) {
+			type = ( type || "fx" ) + "mark";
+			jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+		}
+	},
+
+	_unmark: function( force, elem, type ) {
+		if ( force !== true ) {
+			type = elem;
+			elem = force;
+			force = false;
+		}
+		if ( elem ) {
+			type = type || "fx";
+			var key = type + "mark",
+				count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+			if ( count ) {
+				jQuery._data( elem, key, count );
+			} else {
+				jQuery.removeData( elem, key, true );
+				handleQueueMarkDefer( elem, type, "mark" );
+			}
+		}
+	},
+
+	queue: function( elem, type, data ) {
+		var q;
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			q = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !q || jQuery.isArray(data) ) {
+					q = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					q.push( data );
+				}
+			}
+			return q || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			fn = queue.shift(),
+			hooks = {};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+		}
+
+		if ( fn ) {
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			jQuery._data( elem, type + ".run", hooks );
+			fn.call( elem, function() {
+				jQuery.dequeue( elem, type );
+			}, hooks );
+		}
+
+		if ( !queue.length ) {
+			jQuery.removeData( elem, type + "queue " + type + ".run", true );
+			handleQueueMarkDefer( elem, type, "queue" );
+		}
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, object ) {
+		if ( typeof type !== "string" ) {
+			object = type;
+			type = undefined;
+		}
+		type = type || "fx";
+		var defer = jQuery.Deferred(),
+			elements = this,
+			i = elements.length,
+			count = 1,
+			deferDataKey = type + "defer",
+			queueDataKey = type + "queue",
+			markDataKey = type + "mark",
+			tmp;
+		function resolve() {
+			if ( !( --count ) ) {
+				defer.resolveWith( elements, [ elements ] );
+			}
+		}
+		while( i-- ) {
+			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+					jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+				count++;
+				tmp.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( object );
+	}
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+	rspace = /\s+/,
+	rreturn = /\r/g,
+	rtype = /^(?:button|input)$/i,
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+	rclickable = /^a(?:rea)?$/i,
+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute,
+	nodeHook, boolHook, fixSpecified;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classNames, i, l, elem,
+			setClass, c, cl;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call(this, j, this.className) );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			classNames = value.split( rspace );
+
+			for ( i = 0, l = this.length; i < l; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className && classNames.length === 1 ) {
+						elem.className = value;
+
+					} else {
+						setClass = " " + elem.className + " ";
+
+						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+								setClass += classNames[ c ] + " ";
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classNames, i, l, elem, className, c, cl;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call(this, j, this.className) );
+			});
+		}
+
+		if ( (value && typeof value === "string") || value === undefined ) {
+			classNames = ( value || "" ).split( rspace );
+
+			for ( i = 0, l = this.length; i < l; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.nodeType === 1 && elem.className ) {
+					if ( value ) {
+						className = (" " + elem.className + " ").replace( rclass, " " );
+						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+							className = className.replace(" " + classNames[ c ] + " ", " ");
+						}
+						elem.className = jQuery.trim( className );
+
+					} else {
+						elem.className = "";
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.split( rspace );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space seperated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var self = jQuery(this), val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, i, max, option,
+					index = elem.selectedIndex,
+					values = [],
+					options = elem.options,
+					one = elem.type === "select-one";
+
+				// Nothing was selected
+				if ( index < 0 ) {
+					return null;
+				}
+
+				// Loop through all the selected options
+				i = one ? index : 0;
+				max = one ? index + 1 : options.length;
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Don't return options that are disabled or in a disabled optgroup
+					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+				if ( one && !values.length && options.length ) {
+					return jQuery( options[ index ] ).val();
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+
+	attr: function( elem, name, value, pass ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery( elem )[ name ]( value );
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+
+			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, "" + value );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			ret = elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret === null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var propName, attrNames, name, l, isBool,
+			i = 0;
+
+		if ( value && elem.nodeType === 1 ) {
+			attrNames = value.toLowerCase().split( rspace );
+			l = attrNames.length;
+
+			for ( ; i < l; i++ ) {
+				name = attrNames[ i ];
+
+				if ( name ) {
+					propName = jQuery.propFix[ name ] || name;
+					isBool = rboolean.test( name );
+
+					// See #9699 for explanation of this approach (setting first, then removal)
+					// Do not do this for boolean attributes (see #10870)
+					if ( !isBool ) {
+						jQuery.attr( elem, name, "" );
+					}
+					elem.removeAttribute( getSetAttribute ? name : propName );
+
+					// Set corresponding property to false for boolean attributes
+					if ( isBool && propName in elem ) {
+						elem[ propName ] = false;
+					}
+				}
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				// We can't allow the type property to be changed (since it causes problems in IE)
+				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+					jQuery.error( "type property can't be changed" );
+				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to it's default in case type is set after value
+					// This is for element creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		},
+		// Use the value property for back compat
+		// Use the nodeHook for button elements in IE6/7 (#1954)
+		value: {
+			get: function( elem, name ) {
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+					return nodeHook.get( elem, name );
+				}
+				return name in elem ?
+					elem.value :
+					null;
+			},
+			set: function( elem, value, name ) {
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+					return nodeHook.set( elem, value, name );
+				}
+				// Does not return so that setAttribute is also used
+				elem.value = value;
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		// Align boolean attributes with corresponding properties
+		// Fall back to attribute presence where some booleans are not supported
+		var attrNode,
+			property = jQuery.prop( elem, name );
+		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		var propName;
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			// value is true since we know at this point it's type boolean and not false
+			// Set boolean attributes to the same name and set the DOM property
+			propName = jQuery.propFix[ name ] || name;
+			if ( propName in elem ) {
+				// Only set the IDL specifically if it already exists on the element
+				elem[ propName ] = true;
+			}
+
+			elem.setAttribute( name, name.toLowerCase() );
+		}
+		return name;
+	}
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	fixSpecified = {
+		name: true,
+		id: true,
+		coords: true
+	};
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret;
+			ret = elem.getAttributeNode( name );
+			return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
+				ret.nodeValue :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				ret = document.createAttribute( name );
+				elem.setAttributeNode( ret );
+			}
+			return ( ret.nodeValue = value + "" );
+		}
+	};
+
+	// Apply the nodeHook to tabindex
+	jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			if ( value === "" ) {
+				value = "false";
+			}
+			nodeHook.set( elem, value, name );
+		}
+	};
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret === null ? undefined : ret;
+			}
+		});
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Normalize to lowercase since IE uppercases css property names
+			return elem.style.cssText.toLowerCase() || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = "" + value );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+
+
+
+
+var rformElems = /^(?:textarea|input|select)$/i,
+	rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+	rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+	quickParse = function( selector ) {
+		var quick = rquickIs.exec( selector );
+		if ( quick ) {
+			//   0  1    2   3
+			// [ _, tag, id, class ]
+			quick[1] = ( quick[1] || "" ).toLowerCase();
+			quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
+		}
+		return quick;
+	},
+	quickIs = function( elem, m ) {
+		var attrs = elem.attributes || {};
+		return (
+			(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+			(!m[2] || (attrs.id || {}).value === m[2]) &&
+			(!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
+		);
+	},
+	hoverHack = function( events ) {
+		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+	};
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var elemData, eventHandle, events,
+			t, tns, type, namespaces, handleObj,
+			handleObjIn, quick, handlers, special;
+
+		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
+		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		events = elemData.events;
+		if ( !events ) {
+			elemData.events = events = {};
+		}
+		eventHandle = elemData.handle;
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = jQuery.trim( hoverHack(types) ).split( " " );
+		for ( t = 0; t < types.length; t++ ) {
+
+			tns = rtypenamespace.exec( types[t] ) || [];
+			type = tns[1];
+			namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: tns[1],
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				quick: selector && quickParse( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			handlers = events[ type ];
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+			t, tns, type, origType, namespaces, origCount,
+			j, events, special, handle, eventType, handleObj;
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+		for ( t = 0; t < types.length; t++ ) {
+			tns = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tns[1];
+			namespaces = tns[2];
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector? special.delegateType : special.bindType ) || type;
+			eventType = events[ type ] || [];
+			origCount = eventType.length;
+			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+			// Remove matching events
+			for ( j = 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					 ( !handler || handler.guid === handleObj.guid ) &&
+					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					eventType.splice( j--, 1 );
+
+					if ( handleObj.selector ) {
+						eventType.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( eventType.length === 0 && origCount !== eventType.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			handle = elemData.handle;
+			if ( handle ) {
+				handle.elem = null;
+			}
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery.removeData( elem, [ "events", "handle" ], true );
+		}
+	},
+
+	// Events that are safe to short-circuit if no handlers are attached.
+	// Native DOM events should not be added, they may have inline handlers.
+	customEvent: {
+		"getData": true,
+		"setData": true,
+		"changeData": true
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		// Don't do events on text and comment nodes
+		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+			return;
+		}
+
+		// Event object or event type
+		var type = event.type || event,
+			namespaces = [],
+			cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "!" ) >= 0 ) {
+			// Exclusive events trigger only for the exact event (no namespaces)
+			type = type.slice(0, -1);
+			exclusive = true;
+		}
+
+		if ( type.indexOf( "." ) >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+
+		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+			// No jQuery handlers for this event type, and it can't have inline handlers
+			return;
+		}
+
+		// Caller can pass in an Event, Object, or just an event type string
+		event = typeof event === "object" ?
+			// jQuery.Event object
+			event[ jQuery.expando ] ? event :
+			// Object literal
+			new jQuery.Event( type, event ) :
+			// Just the event type (string)
+			new jQuery.Event( type );
+
+		event.type = type;
+		event.isTrigger = true;
+		event.exclusive = exclusive;
+		event.namespace = namespaces.join( "." );
+		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+		// Handle a global trigger
+		if ( !elem ) {
+
+			// TODO: Stop taunting the data cache; remove global events and always attach to document
+			cache = jQuery.cache;
+			for ( i in cache ) {
+				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+				}
+			}
+			return;
+		}
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data != null ? jQuery.makeArray( data ) : [];
+		data.unshift( event );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		eventPath = [[ elem, special.bindType || type ]];
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+			old = null;
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push([ cur, bubbleType ]);
+				old = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( old && old === elem.ownerDocument ) {
+				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+			}
+		}
+
+		// Fire handlers on the event path
+		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+			cur = eventPath[i][0];
+			event.type = eventPath[i][1];
+
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+			// Note that this is a bare JS function and not a jQuery handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				// IE<9 dies on focus/blur to hidden element (#1486)
+				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					old = elem[ ontype ];
+
+					if ( old ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( old ) {
+						elem[ ontype ] = old;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event || window.event );
+
+		var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+			delegateCount = handlers.delegateCount,
+			args = [].slice.call( arguments, 0 ),
+			run_all = !event.exclusive && !event.namespace,
+			special = jQuery.event.special[ event.type ] || {},
+			handlerQueue = [],
+			i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers that should run if there are delegated events
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && !(event.button && event.type === "click") ) {
+
+			// Pregenerate a single jQuery object for reuse with .is()
+			jqcur = jQuery(this);
+			jqcur.context = this.ownerDocument || this;
+
+			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+				// Don't process events on disabled elements (#6911, #8165)
+				if ( cur.disabled !== true ) {
+					selMatch = {};
+					matches = [];
+					jqcur[0] = cur;
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+						sel = handleObj.selector;
+
+						if ( selMatch[ sel ] === undefined ) {
+							selMatch[ sel ] = (
+								handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
+							);
+						}
+						if ( selMatch[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, matches: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( handlers.length > delegateCount ) {
+			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+		}
+
+		// Run delegates first; they may want to stop propagation beneath us
+		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+			matched = handlerQueue[ i ];
+			event.currentTarget = matched.elem;
+
+			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+				handleObj = matched.matches[ j ];
+
+				// Triggered event must either 1) be non-exclusive and have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.data = handleObj.data;
+					event.handleObj = handleObj;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						event.result = ret;
+						if ( ret === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop,
+			originalEvent = event,
+			fixHook = jQuery.event.fixHooks[ event.type ] || {},
+			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = jQuery.Event( originalEvent );
+
+		for ( i = copy.length; i; ) {
+			prop = copy[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Target should not be a text node (#504, Safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+		if ( event.metaKey === undefined ) {
+			event.metaKey = event.ctrlKey;
+		}
+
+		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	special: {
+		ready: {
+			// Make sure the ready event is setup
+			setup: jQuery.bindReady
+		},
+
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+
+		focus: {
+			delegateType: "focusin"
+		},
+		blur: {
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( jQuery.isWindow( this ) ) {
+					this.onbeforeunload = eventHandle;
+				}
+			},
+
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		if ( elem.detachEvent ) {
+			elem.detachEvent( "on" + type, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// otherwise set the returnValue property of the original event to false (IE)
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj,
+				selector = handleObj.selector,
+				ret;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !form._submit_attached ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					form._submit_attached = true;
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+							jQuery.event.simulate( "change", this, event, true );
+						}
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					elem._change_attached = true;
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var origFn, type;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) { // && selector != null
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			var handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( var type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	live: function( types, data, fn ) {
+		jQuery( this.context ).on( types, this.selector, data, fn );
+		return this;
+	},
+	die: function( types, fn ) {
+		jQuery( this.context ).off( types, this.selector || "**", fn );
+		return this;
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			return jQuery.event.trigger( type, data, this[0], true );
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments,
+			guid = fn.guid || jQuery.guid++,
+			i = 0,
+			toggler = function( event ) {
+				// Figure out which function to execute
+				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+				// Make sure that clicks stop
+				event.preventDefault();
+
+				// and execute the function
+				return args[ lastToggle ].apply( this, arguments ) || false;
+			};
+
+		// link all the functions, so any of them can unbind this click handler
+		toggler.guid = guid;
+		while ( i < args.length ) {
+			args[ i++ ].guid = guid;
+		}
+
+		return this.click( toggler );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		if ( fn == null ) {
+			fn = data;
+			data = null;
+		}
+
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+
+	if ( rkeyEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+	}
+
+	if ( rmouseEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+	}
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	expando = "sizcache" + (Math.random() + '').replace('.', ''),
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true,
+	rBackslash = /\\/g,
+	rReturn = /\r\n/g,
+	rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+	results = results || [];
+	context = context || document;
+
+	var origContext = context;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var m, set, checkSet, extra, ret, cur, pop, i,
+		prune = true,
+		contextXML = Sizzle.isXML( context ),
+		parts = [],
+		soFar = selector;
+
+	// Reset the position of the chunker regexp (start from head)
+	do {
+		chunker.exec( "" );
+		m = chunker.exec( soFar );
+
+		if ( m ) {
+			soFar = m[3];
+
+			parts.push( m[1] );
+
+			if ( m[2] ) {
+				extra = m[3];
+				break;
+			}
+		}
+	} while ( m );
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context, seed );
+
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+
+				set = posProcess( selector, set, seed );
+			}
+		}
+
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+			ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set )[0] :
+				ret.set[0];
+		}
+
+		if ( context ) {
+			ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+			set = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set ) :
+				ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray( set );
+
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				cur = parts.pop();
+				pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+
+		} else if ( context && context.nodeType === 1 ) {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+
+		} else {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort( sortOrder );
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[ i - 1 ] ) {
+					results.splice( i--, 1 );
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+	return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+	return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+	var set, i, len, match, type, left;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+		type = Expr.order[i];
+
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			left = match[1];
+			match.splice( 1, 1 );
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace( rBackslash, "" );
+				set = Expr.find[ type ]( match, context, isXML );
+
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( "*" ) :
+			[];
+	}
+
+	return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+	var match, anyFound,
+		type, found, item, filter, left,
+		i, pass,
+		old = expr,
+		result = [],
+		curLoop = set,
+		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+	while ( expr && set.length ) {
+		for ( type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				filter = Expr.filter[ type ];
+				left = match[1];
+
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							pass = not ^ found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+
+								} else {
+									curLoop[i] = false;
+								}
+
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Utility function for retreiving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+var getText = Sizzle.getText = function( elem ) {
+    var i, node,
+		nodeType = elem.nodeType,
+		ret = "";
+
+	if ( nodeType ) {
+		if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+			// Use textContent || innerText for elements
+			if ( typeof elem.textContent === 'string' ) {
+				return elem.textContent;
+			} else if ( typeof elem.innerText === 'string' ) {
+				// Replace IE's carriage returns
+				return elem.innerText.replace( rReturn, '' );
+			} else {
+				// Traverse it's children
+				for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+					ret += getText( elem );
+				}
+			}
+		} else if ( nodeType === 3 || nodeType === 4 ) {
+			return elem.nodeValue;
+		}
+	} else {
+
+		// If no nodeType, this is expected to be an array
+		for ( i = 0; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			if ( node.nodeType !== 8 ) {
+				ret += getText( node );
+			}
+		}
+	}
+	return ret;
+};
+
+var Expr = Sizzle.selectors = {
+	order: [ "ID", "NAME", "TAG" ],
+
+	match: {
+		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+
+	leftMatch: {},
+
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+
+	attrHandle: {
+		href: function( elem ) {
+			return elem.getAttribute( "href" );
+		},
+		type: function( elem ) {
+			return elem.getAttribute( "type" );
+		}
+	},
+
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !rNonWord.test( part ),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+
+		">": function( checkSet, part ) {
+			var elem,
+				isPartStr = typeof part === "string",
+				i = 0,
+				l = checkSet.length;
+
+			if ( isPartStr && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+
+			} else {
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+
+		"": function(checkSet, part, isXML){
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+		},
+
+		"~": function( checkSet, part, isXML ) {
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+		}
+	},
+
+	find: {
+		ID: function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		},
+
+		NAME: function( match, context ) {
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [],
+					results = context.getElementsByName( match[1] );
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+
+		TAG: function( match, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( match[1] );
+			}
+		}
+	},
+	preFilter: {
+		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+			match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+
+		ID: function( match ) {
+			return match[1].replace( rBackslash, "" );
+		},
+
+		TAG: function( match, curLoop ) {
+			return match[1].replace( rBackslash, "" ).toLowerCase();
+		},
+
+		CHILD: function( match ) {
+			if ( match[1] === "nth" ) {
+				if ( !match[2] ) {
+					Sizzle.error( match[0] );
+				}
+
+				match[2] = match[2].replace(/^\+|\s*/g, '');
+
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+			else if ( match[2] ) {
+				Sizzle.error( match[0] );
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+
+		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+			var name = match[1] = match[1].replace( rBackslash, "" );
+
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			// Handle if an un-quoted value was used
+			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+
+		PSEUDO: function( match, curLoop, inplace, result, not ) {
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+
+					return false;
+				}
+
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+
+			return match;
+		},
+
+		POS: function( match ) {
+			match.unshift( true );
+
+			return match;
+		}
+	},
+
+	filters: {
+		enabled: function( elem ) {
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+
+		disabled: function( elem ) {
+			return elem.disabled === true;
+		},
+
+		checked: function( elem ) {
+			return elem.checked === true;
+		},
+
+		selected: function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		parent: function( elem ) {
+			return !!elem.firstChild;
+		},
+
+		empty: function( elem ) {
+			return !elem.firstChild;
+		},
+
+		has: function( elem, i, match ) {
+			return !!Sizzle( match[3], elem ).length;
+		},
+
+		header: function( elem ) {
+			return (/h\d/i).test( elem.nodeName );
+		},
+
+		text: function( elem ) {
+			var attr = elem.getAttribute( "type" ), type = elem.type;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+		},
+
+		radio: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+		},
+
+		checkbox: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+		},
+
+		file: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+		},
+
+		password: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+		},
+
+		submit: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "submit" === elem.type;
+		},
+
+		image: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+		},
+
+		reset: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "reset" === elem.type;
+		},
+
+		button: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && "button" === elem.type || name === "button";
+		},
+
+		input: function( elem ) {
+			return (/input|select|textarea|button/i).test( elem.nodeName );
+		},
+
+		focus: function( elem ) {
+			return elem === elem.ownerDocument.activeElement;
+		}
+	},
+	setFilters: {
+		first: function( elem, i ) {
+			return i === 0;
+		},
+
+		last: function( elem, i, match, array ) {
+			return i === array.length - 1;
+		},
+
+		even: function( elem, i ) {
+			return i % 2 === 0;
+		},
+
+		odd: function( elem, i ) {
+			return i % 2 === 1;
+		},
+
+		lt: function( elem, i, match ) {
+			return i < match[3] - 0;
+		},
+
+		gt: function( elem, i, match ) {
+			return i > match[3] - 0;
+		},
+
+		nth: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		},
+
+		eq: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function( elem, match, i, array ) {
+			var name = match[1],
+				filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var j = 0, l = not.length; j < l; j++ ) {
+					if ( not[j] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+
+			} else {
+				Sizzle.error( name );
+			}
+		},
+
+		CHILD: function( elem, match ) {
+			var first, last,
+				doneName, parent, cache,
+				count, diff,
+				type = match[1],
+				node = elem;
+
+			switch ( type ) {
+				case "only":
+				case "first":
+					while ( (node = node.previousSibling) ) {
+						if ( node.nodeType === 1 ) {
+							return false;
+						}
+					}
+
+					if ( type === "first" ) {
+						return true;
+					}
+
+					node = elem;
+
+					/* falls through */
+				case "last":
+					while ( (node = node.nextSibling) ) {
+						if ( node.nodeType === 1 ) {
+							return false;
+						}
+					}
+
+					return true;
+
+				case "nth":
+					first = match[2];
+					last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+
+					doneName = match[0];
+					parent = elem.parentNode;
+
+					if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+						count = 0;
+
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						}
+
+						parent[ expando ] = doneName;
+					}
+
+					diff = elem.nodeIndex - last;
+
+					if ( first === 0 ) {
+						return diff === 0;
+
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+
+		ID: function( elem, match ) {
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+
+		TAG: function( elem, match ) {
+			return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+		},
+
+		CLASS: function( elem, match ) {
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+
+		ATTR: function( elem, match ) {
+			var name = match[1],
+				result = Sizzle.attr ?
+					Sizzle.attr( elem, name ) :
+					Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				!type && Sizzle.attr ?
+				result != null :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+
+		POS: function( elem, match, i, array ) {
+			var name = match[2],
+				filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS,
+	fescape = function(all, num){
+		return "\\" + (num - 0 + 1);
+	};
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+// Expose origPOS
+// "global" as in regardless of relation to brackets/parens
+Expr.match.globalPOS = origPOS;
+
+var makeArray = function( array, results ) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+	makeArray = function( array, results ) {
+		var i = 0,
+			ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+
+			} else {
+				for ( ; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+	};
+
+} else {
+	sortOrder = function( a, b ) {
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+		} else if ( a.sourceIndex && b.sourceIndex ) {
+			return a.sourceIndex - b.sourceIndex;
+		}
+
+		var al, bl,
+			ap = [],
+			bp = [],
+			aup = a.parentNode,
+			bup = b.parentNode,
+			cur = aup;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+	siblingCheck = function( a, b, ret ) {
+		if ( a === b ) {
+			return ret;
+		}
+
+		var cur = a.nextSibling;
+
+		while ( cur ) {
+			if ( cur === b ) {
+				return -1;
+			}
+
+			cur = cur.nextSibling;
+		}
+
+		return 1;
+	};
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date()).getTime(),
+		root = document.documentElement;
+
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+
+				return m ?
+					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+
+		Expr.filter.ID = function( elem, match ) {
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+
+	// release memory in IE
+	root = form = null;
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function( match, context ) {
+			var results = context.getElementsByTagName( match[1] );
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+
+		Expr.attrHandle.href = function( elem ) {
+			return elem.getAttribute( "href", 2 );
+		};
+	}
+
+	// release memory in IE
+	div = null;
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle,
+			div = document.createElement("div"),
+			id = "__sizzle__";
+
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+
+		Sizzle = function( query, context, extra, seed ) {
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && !Sizzle.isXML(context) ) {
+				// See if we find a selector to speed up
+				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+					// Speed-up: Sizzle("TAG")
+					if ( match[1] ) {
+						return makeArray( context.getElementsByTagName( query ), extra );
+
+					// Speed-up: Sizzle(".CLASS")
+					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+						return makeArray( context.getElementsByClassName( match[2] ), extra );
+					}
+				}
+
+				if ( context.nodeType === 9 ) {
+					// Speed-up: Sizzle("body")
+					// The body element only exists once, optimize finding it
+					if ( query === "body" && context.body ) {
+						return makeArray( [ context.body ], extra );
+
+					// Speed-up: Sizzle("#ID")
+					} else if ( match && match[3] ) {
+						var elem = context.getElementById( match[3] );
+
+						// Check parentNode to catch when Blackberry 4.6 returns
+						// nodes that are no longer in the document #6963
+						if ( elem && elem.parentNode ) {
+							// Handle the case where IE and Opera return items
+							// by name instead of ID
+							if ( elem.id === match[3] ) {
+								return makeArray( [ elem ], extra );
+							}
+
+						} else {
+							return makeArray( [], extra );
+						}
+					}
+
+					try {
+						return makeArray( context.querySelectorAll(query), extra );
+					} catch(qsaError) {}
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					var oldContext = context,
+						old = context.getAttribute( "id" ),
+						nid = old || id,
+						hasParent = context.parentNode,
+						relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+					if ( !old ) {
+						context.setAttribute( "id", nid );
+					} else {
+						nid = nid.replace( /'/g, "\\$&" );
+					}
+					if ( relativeHierarchySelector && hasParent ) {
+						context = context.parentNode;
+					}
+
+					try {
+						if ( !relativeHierarchySelector || hasParent ) {
+							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+						}
+
+					} catch(pseudoError) {
+					} finally {
+						if ( !old ) {
+							oldContext.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		// release memory in IE
+		div = null;
+	})();
+}
+
+(function(){
+	var html = document.documentElement,
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+	if ( matches ) {
+		// Check to see if it's possible to do matchesSelector
+		// on a disconnected node (IE 9 fails this)
+		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+			pseudoWorks = false;
+
+		try {
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( document.documentElement, "[test!='']:sizzle" );
+
+		} catch( pseudoError ) {
+			pseudoWorks = true;
+		}
+
+		Sizzle.matchesSelector = function( node, expr ) {
+			// Make sure that attribute selectors are quoted
+			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+			if ( !Sizzle.isXML( node ) ) {
+				try {
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+						var ret = matches.call( node, expr );
+
+						// IE 9's matchesSelector returns false on disconnected nodes
+						if ( ret || !disconnectedMatch ||
+								// As well, disconnected nodes are said to be in a document
+								// fragment in IE 9, so check for that
+								node.document && node.document.nodeType !== 11 ) {
+							return ret;
+						}
+					}
+				} catch(e) {}
+			}
+
+			return Sizzle(expr, null, null, [node]).length > 0;
+		};
+	}
+})();
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function( match, context, isXML ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	// release memory in IE
+	div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem[ expando ] === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem[ expando ] = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem[ expando ] === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem[ expando ] = doneName;
+						elem.sizset = i;
+					}
+
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+if ( document.documentElement.contains ) {
+	Sizzle.contains = function( a, b ) {
+		return a !== b && (a.contains ? a.contains(b) : true);
+	};
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+	Sizzle.contains = function( a, b ) {
+		return !!(a.compareDocumentPosition(b) & 16);
+	};
+
+} else {
+	Sizzle.contains = function() {
+		return false;
+	};
+}
+
+Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context, seed ) {
+	var match,
+		tmpSet = [],
+		later = "",
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet, seed );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+Sizzle.selectors.attrMap = {};
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	slice = Array.prototype.slice,
+	POS = jQuery.expr.match.globalPOS,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var self = this,
+			i, l;
+
+		if ( typeof selector !== "string" ) {
+			return jQuery( selector ).filter(function() {
+				for ( i = 0, l = self.length; i < l; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			});
+		}
+
+		var ret = this.pushStack( "", "find", selector ),
+			length, n, r;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( n = length; n < ret.length; n++ ) {
+					for ( r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var targets = jQuery( target );
+		return this.filter(function() {
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+
+	is: function( selector ) {
+		return !!selector && (
+			typeof selector === "string" ?
+				// If this is a positional selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				POS.test( selector ) ?
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var ret = [], i, l, cur = this[0];
+
+		// Array (deprecated as of jQuery 1.7)
+		if ( jQuery.isArray( selectors ) ) {
+			var level = 1;
+
+			while ( cur && cur.ownerDocument && cur !== context ) {
+				for ( i = 0; i < selectors.length; i++ ) {
+
+					if ( jQuery( cur ).is( selectors[ i ] ) ) {
+						ret.push({ selector: selectors[ i ], elem: cur, level: level });
+					}
+				}
+
+				cur = cur.parentNode;
+				level++;
+			}
+
+			return ret;
+		}
+
+		// String
+		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+
+				} else {
+					cur = cur.parentNode;
+					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+						break;
+					}
+				}
+			}
+		}
+
+		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+		return this.pushStack( ret, "closest", selectors );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	andSelf: function() {
+		return this.add( this.prevObject );
+	}
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return jQuery.nth( elem, 2, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return jQuery.nth( elem, 2, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.makeArray( elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, slice.call( arguments ).join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	nth: function( cur, result, dir, elem ) {
+		result = result || 1;
+		var num = 0;
+
+		for ( ; cur; cur = cur[dir] ) {
+			if ( cur.nodeType === 1 && ++num === result ) {
+				break;
+			}
+		}
+
+		return cur;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+
+
+
+
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+	safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style)/i,
+	rnocache = /<(?:script|object|embed|option|style)/i,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /\/(java|ecma)script/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		area: [ 1, "<map>", "</map>" ],
+		_default: [ 0, "", "" ]
+	},
+	safeFragment = createSafeFragment( document );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return jQuery.access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		} else if ( arguments.length ) {
+			var set = jQuery.clean( arguments );
+			set.push.apply( set, this.toArray() );
+			return this.pushStack( set, "before", arguments );
+		}
+	},
+
+	after: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		} else if ( arguments.length ) {
+			var set = this.pushStack( this, "after", arguments );
+			set.push.apply( set, jQuery.clean(arguments) );
+			return set;
+		}
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return jQuery.access( this, function( value ) {
+			var elem = this[0] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					null;
+			}
+
+
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( elem.getElementsByTagName( "*" ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function( value ) {
+		if ( this[0] && this[0].parentNode ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery( value ).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling,
+					parent = this.parentNode;
+
+				jQuery( this ).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		} else {
+			return this.length ?
+				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+				this;
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, fragment, parent,
+			value = args[0],
+			scripts = [];
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback, true );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call(this, i, table ? self.html() : undefined);
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			parent = value && value.parentNode;
+
+			// If we're in a fragment, just use that instead of building a new one
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+				results = { fragment: parent };
+
+			} else {
+				results = jQuery.buildFragment( args, this, scripts );
+			}
+
+			fragment = results.fragment;
+
+			if ( fragment.childNodes.length === 1 ) {
+				first = fragment = fragment.firstChild;
+			} else {
+				first = fragment.firstChild;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						// Make sure that we do not leak memory by inadvertently discarding
+						// the original fragment (which might have attached data) instead of
+						// using it; in addition, use the original fragment object for the last
+						// item instead of first because it can end up being emptied incorrectly
+						// in certain situations (Bug #8070).
+						// Fragments from the fragment cache must always be cloned and never used
+						// in place.
+						results.cacheable || ( l > 1 && i < lastIndex ) ?
+							jQuery.clone( fragment, true, true ) :
+							fragment
+					);
+				}
+			}
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, function( i, elem ) {
+					if ( elem.src ) {
+						jQuery.ajax({
+							type: "GET",
+							global: false,
+							url: elem.src,
+							async: false,
+							dataType: "script"
+						});
+					} else {
+						jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+					}
+
+					if ( elem.parentNode ) {
+						elem.parentNode.removeChild( elem );
+					}
+				});
+			}
+		}
+
+		return this;
+	}
+});
+
+function root( elem, cur ) {
+	return jQuery.nodeName(elem, "table") ?
+		(elem.getElementsByTagName("tbody")[0] ||
+		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+		elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function cloneFixAttributes( src, dest ) {
+	var nodeName;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// clearAttributes removes the attributes, which we don't want,
+	// but also removes the attachEvent events, which we *do* want
+	if ( dest.clearAttributes ) {
+		dest.clearAttributes();
+	}
+
+	// mergeAttributes, in contrast, only merges back on the
+	// original attributes, not the events
+	if ( dest.mergeAttributes ) {
+		dest.mergeAttributes( src );
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 fail to clone children inside object elements that use
+	// the proprietary classid attribute value (rather than the type
+	// attribute) to identify the type of content to display
+	if ( nodeName === "object" ) {
+		dest.outerHTML = src.outerHTML;
+
+	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+		if ( src.checked ) {
+			dest.defaultChecked = dest.checked = src.checked;
+		}
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+
+	// IE blanks contents when cloning scripts
+	} else if ( nodeName === "script" && dest.text !== src.text ) {
+		dest.text = src.text;
+	}
+
+	// Event data gets referenced instead of copied if the expando
+	// gets copied too
+	dest.removeAttribute( jQuery.expando );
+
+	// Clear flags for bubbling special change/submit events, they must
+	// be reattached when the newly cloned events are first activated
+	dest.removeAttribute( "_submit_attached" );
+	dest.removeAttribute( "_change_attached" );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults, doc,
+	first = args[ 0 ];
+
+	// nodes may contain either an explicit document object,
+	// a jQuery collection or context object.
+	// If nodes[0] contains a valid object to assign to doc
+	if ( nodes && nodes[0] ) {
+		doc = nodes[0].ownerDocument || nodes[0];
+	}
+
+	// Ensure that an attr object doesn't incorrectly stand in as a document object
+	// Chrome and Firefox seem to allow this to occur and will throw exception
+	// Fixes #8950
+	if ( !doc.createDocumentFragment ) {
+		doc = document;
+	}
+
+	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+	if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
+		first.charAt(0) === "<" && !rnocache.test( first ) &&
+		(jQuery.support.checkClone || !rchecked.test( first )) &&
+		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+		cacheable = true;
+
+		cacheresults = jQuery.fragments[ first ];
+		if ( cacheresults && cacheresults !== 1 ) {
+			fragment = cacheresults;
+		}
+	}
+
+	if ( !fragment ) {
+		fragment = doc.createDocumentFragment();
+		jQuery.clean( args, doc, fragment, scripts );
+	}
+
+	if ( cacheable ) {
+		jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var ret = [],
+			insert = jQuery( selector ),
+			parent = this.length === 1 && this[0].parentNode;
+
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+
+		} else {
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
+				var elems = ( i > 0 ? this.clone(true) : this ).get();
+				jQuery( insert[i] )[ original ]( elems );
+				ret = ret.concat( elems );
+			}
+
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+function getAll( elem ) {
+	if ( typeof elem.getElementsByTagName !== "undefined" ) {
+		return elem.getElementsByTagName( "*" );
+
+	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
+		return elem.querySelectorAll( "*" );
+
+	} else {
+		return [];
+	}
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( elem.type === "checkbox" || elem.type === "radio" ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+	var nodeName = ( elem.nodeName || "" ).toLowerCase();
+	if ( nodeName === "input" ) {
+		fixDefaultChecked( elem );
+	// Skip scripts, get other children
+	} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
+		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+	}
+}
+
+// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
+function shimCloneNode( elem ) {
+	var div = document.createElement( "div" );
+	safeFragment.appendChild( div );
+
+	div.innerHTML = elem.outerHTML;
+	return div.firstChild;
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var srcElements,
+			destElements,
+			i,
+			// IE<=8 does not properly clone detached, unknown element nodes
+			clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
+				elem.cloneNode( true ) :
+				shimCloneNode( elem );
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+			// IE copies events bound via attachEvent when using cloneNode.
+			// Calling detachEvent on the clone will also remove the events
+			// from the original. In order to get around this, we use some
+			// proprietary methods to clear the events. Thanks to MooTools
+			// guys for this hotness.
+
+			cloneFixAttributes( elem, clone );
+
+			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+			srcElements = getAll( elem );
+			destElements = getAll( clone );
+
+			// Weird iteration because IE will replace the length property
+			// with an element if you are cloning the body and one of the
+			// elements on the page has a name or id of "length"
+			for ( i = 0; srcElements[i]; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					cloneFixAttributes( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			cloneCopyEvent( elem, clone );
+
+			if ( deepDataAndEvents ) {
+				srcElements = getAll( elem );
+				destElements = getAll( clone );
+
+				for ( i = 0; srcElements[i]; ++i ) {
+					cloneCopyEvent( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		srcElements = destElements = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	clean: function( elems, context, fragment, scripts ) {
+		var checkScriptType, script, j,
+				ret = [];
+
+		context = context || document;
+
+		// !context.createElement fails in IE with an error but returns typeof 'object'
+		if ( typeof context.createElement === "undefined" ) {
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+		}
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" ) {
+				if ( !rhtml.test( elem ) ) {
+					elem = context.createTextNode( elem );
+				} else {
+					// Fix "XHTML"-style tags in all browsers
+					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+					// Trim whitespace, otherwise indexOf won't work as expected
+					var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
+						wrap = wrapMap[ tag ] || wrapMap._default,
+						depth = wrap[0],
+						div = context.createElement("div"),
+						safeChildNodes = safeFragment.childNodes,
+						remove;
+
+					// Append wrapper element to unknown element safe doc fragment
+					if ( context === document ) {
+						// Use the fragment we've already created for this document
+						safeFragment.appendChild( div );
+					} else {
+						// Use a fragment created with the owner document
+						createSafeFragment( context ).appendChild( div );
+					}
+
+					// Go to html and back, then peel off extra wrappers
+					div.innerHTML = wrap[1] + elem + wrap[2];
+
+					// Move to the right depth
+					while ( depth-- ) {
+						div = div.lastChild;
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						var hasBody = rtbody.test(elem),
+							tbody = tag === "table" && !hasBody ?
+								div.firstChild && div.firstChild.childNodes :
+
+								// String was a bare <thead> or <tfoot>
+								wrap[1] === "<table>" && !hasBody ?
+									div.childNodes :
+									[];
+
+						for ( j = tbody.length - 1; j >= 0 ; --j ) {
+							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+								tbody[ j ].parentNode.removeChild( tbody[ j ] );
+							}
+						}
+					}
+
+					// IE completely kills leading whitespace when innerHTML is used
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+					}
+
+					elem = div.childNodes;
+
+					// Clear elements from DocumentFragment (safeFragment or otherwise)
+					// to avoid hoarding elements. Fixes #11356
+					if ( div ) {
+						div.parentNode.removeChild( div );
+
+						// Guard against -1 index exceptions in FF3.6
+						if ( safeChildNodes.length > 0 ) {
+							remove = safeChildNodes[ safeChildNodes.length - 1 ];
+
+							if ( remove && remove.parentNode ) {
+								remove.parentNode.removeChild( remove );
+							}
+						}
+					}
+				}
+			}
+
+			// Resets defaultChecked for any radios and checkboxes
+			// about to be appended to the DOM in IE 6/7 (#8060)
+			var len;
+			if ( !jQuery.support.appendChecked ) {
+				if ( elem[0] && typeof (len = elem.length) === "number" ) {
+					for ( j = 0; j < len; j++ ) {
+						findInputs( elem[j] );
+					}
+				} else {
+					findInputs( elem );
+				}
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			checkScriptType = function( elem ) {
+				return !elem.type || rscriptType.test( elem.type );
+			};
+			for ( i = 0; ret[i]; i++ ) {
+				script = ret[i];
+				if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
+					scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
+
+				} else {
+					if ( script.nodeType === 1 ) {
+						var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
+
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+					}
+					fragment.appendChild( script );
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	cleanData: function( elems ) {
+		var data, id,
+			cache = jQuery.cache,
+			special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+				continue;
+			}
+
+			id = elem[ jQuery.expando ];
+
+			if ( id ) {
+				data = cache[ id ];
+
+				if ( data && data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						// This is a shortcut to avoid jQuery.event.remove's overhead
+						} else {
+							jQuery.removeEvent( elem, type, data.handle );
+						}
+					}
+
+					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
+					if ( data.handle ) {
+						data.handle.elem = null;
+					}
+				}
+
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+
+				delete cache[ id ];
+			}
+		}
+	}
+});
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity=([^)]*)/,
+	// fixed for IE9, see #8346
+	rupper = /([A-Z]|^ms)/g,
+	rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
+	rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
+	rrelNum = /^([\-+])=([\-+.\de]+)/,
+	rmargin = /^margin/,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+
+	// order is important!
+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+
+	curCSS,
+
+	getComputedStyle,
+	currentStyle;
+
+jQuery.fn.css = function( name, value ) {
+	return jQuery.access( this, function( elem, name, value ) {
+		return value !== undefined ?
+			jQuery.style( elem, name, value ) :
+			jQuery.css( elem, name );
+	}, name, value, arguments.length > 1 );
+};
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+
+				} else {
+					return elem.style.opacity;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, origName = jQuery.camelCase( name ),
+			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+		name = jQuery.cssProps[ origName ] || origName;
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra ) {
+		var ret, hooks;
+
+		// Make sure that we're working with the right name
+		name = jQuery.camelCase( name );
+		hooks = jQuery.cssHooks[ name ];
+		name = jQuery.cssProps[ name ] || name;
+
+		// cssFloat needs a special treatment
+		if ( name === "cssFloat" ) {
+			name = "float";
+		}
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+			return ret;
+
+		// Otherwise, if a way to get the computed value exists, use that
+		} else if ( curCSS ) {
+			return curCSS( elem, name );
+		}
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var old = {},
+			ret, name;
+
+		// Remember the old values, and insert the new ones
+		for ( name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		ret = callback.call( elem );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+
+		return ret;
+	}
+});
+
+// DEPRECATED in 1.3, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+	getComputedStyle = function( elem, name ) {
+		var ret, defaultView, computedStyle, width,
+			style = elem.style;
+
+		name = name.replace( rupper, "-$1" ).toLowerCase();
+
+		if ( (defaultView = elem.ownerDocument.defaultView) &&
+				(computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+
+			ret = computedStyle.getPropertyValue( name );
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
+		// which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+		if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
+			width = style.width;
+			style.width = ret;
+			ret = computedStyle.width;
+			style.width = width;
+		}
+
+		return ret;
+	};
+}
+
+if ( document.documentElement.currentStyle ) {
+	currentStyle = function( elem, name ) {
+		var left, rsLeft, uncomputed,
+			ret = elem.currentStyle && elem.currentStyle[ name ],
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && (uncomputed = style[ name ]) ) {
+			ret = uncomputed;
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		if ( rnumnonpx.test( ret ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property
+	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		i = name === "width" ? 1 : 0,
+		len = 4;
+
+	if ( val > 0 ) {
+		if ( extra !== "border" ) {
+			for ( ; i < len; i += 2 ) {
+				if ( !extra ) {
+					val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
+				}
+				if ( extra === "margin" ) {
+					val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
+				} else {
+					val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+				}
+			}
+		}
+
+		return val + "px";
+	}
+
+	// Fall back to computed then uncomputed css if necessary
+	val = curCSS( elem, name );
+	if ( val < 0 || val == null ) {
+		val = elem.style[ name ];
+	}
+
+	// Computed unit is not pixels. Stop here and return.
+	if ( rnumnonpx.test(val) ) {
+		return val;
+	}
+
+	// Normalize "", auto, and prepare for extra
+	val = parseFloat( val ) || 0;
+
+	// Add padding, border, margin
+	if ( extra ) {
+		for ( ; i < len; i += 2 ) {
+			val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
+			if ( extra !== "padding" ) {
+				val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+			}
+			if ( extra === "margin" ) {
+				val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
+			}
+		}
+	}
+
+	return val + "px";
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				if ( elem.offsetWidth !== 0 ) {
+					return getWidthOrHeight( elem, name, extra );
+				} else {
+					return jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					});
+				}
+			}
+		},
+
+		set: function( elem, value ) {
+			return rnum.test( value ) ?
+				value + "px" :
+				value;
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( parseFloat( RegExp.$1 ) / 100 ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there there is no filter style applied in a css rule, we are done
+				if ( currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+jQuery(function() {
+	// This hook cannot be added until DOM ready because the support test
+	// for it is not run until after DOM ready
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// Work around by temporarily setting element display to inline-block
+				return jQuery.swap( elem, { "display": "inline-block" }, function() {
+					if ( computed ) {
+						return curCSS( elem, "margin-right" );
+					} else {
+						return elem.style.marginRight;
+					}
+				});
+			}
+		};
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth,
+			height = elem.offsetHeight;
+
+		return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i,
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ],
+				expanded = {};
+
+			for ( i = 0; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+});
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rhash = /#.*$/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rquery = /\?/,
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+	rselectTextarea = /^(?:select|textarea)/i,
+	rspacesAjax = /\s+/,
+	rts = /([?&])_=[^&]*/,
+	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Document location
+	ajaxLocation,
+
+	// Document location segments
+	ajaxLocParts,
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		if ( jQuery.isFunction( func ) ) {
+			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+				i = 0,
+				length = dataTypes.length,
+				dataType,
+				list,
+				placeBefore;
+
+			// For each dataType in the dataTypeExpression
+			for ( ; i < length; i++ ) {
+				dataType = dataTypes[ i ];
+				// We control if we're asked to add before
+				// any existing element
+				placeBefore = /^\+/.test( dataType );
+				if ( placeBefore ) {
+					dataType = dataType.substr( 1 ) || "*";
+				}
+				list = structure[ dataType ] = structure[ dataType ] || [];
+				// then we add to the structure accordingly
+				list[ placeBefore ? "unshift" : "push" ]( func );
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+		dataType /* internal */, inspected /* internal */ ) {
+
+	dataType = dataType || options.dataTypes[ 0 ];
+	inspected = inspected || {};
+
+	inspected[ dataType ] = true;
+
+	var list = structure[ dataType ],
+		i = 0,
+		length = list ? list.length : 0,
+		executeOnly = ( structure === prefilters ),
+		selection;
+
+	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+		selection = list[ i ]( options, originalOptions, jqXHR );
+		// If we got redirected to another dataType
+		// we try there if executing only and not done already
+		if ( typeof selection === "string" ) {
+			if ( !executeOnly || inspected[ selection ] ) {
+				selection = undefined;
+			} else {
+				options.dataTypes.unshift( selection );
+				selection = inspectPrefiltersOrTransports(
+						structure, options, originalOptions, jqXHR, selection, inspected );
+			}
+		}
+	}
+	// If we're only executing or nothing was selected
+	// we try the catchall dataType if not done already
+	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+		selection = inspectPrefiltersOrTransports(
+				structure, options, originalOptions, jqXHR, "*", inspected );
+	}
+	// unnecessary when only executing (prefilters)
+	// but it'll be ignored by the caller in that case
+	return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+}
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" && _load ) {
+			return _load.apply( this, arguments );
+
+		// Don't do a request if no elements are being requested
+		} else if ( !this.length ) {
+			return this;
+		}
+
+		var off = url.indexOf( " " );
+		if ( off >= 0 ) {
+			var selector = url.slice( off, url.length );
+			url = url.slice( 0, off );
+		}
+
+		// Default to a GET request
+		var type = "GET";
+
+		// If the second parameter was provided
+		if ( params ) {
+			// If it's a function
+			if ( jQuery.isFunction( params ) ) {
+				// We assume that it's the callback
+				callback = params;
+				params = undefined;
+
+			// Otherwise, build a param string
+			} else if ( typeof params === "object" ) {
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+				type = "POST";
+			}
+		}
+
+		var self = this;
+
+		// Request the remote document
+		jQuery.ajax({
+			url: url,
+			type: type,
+			dataType: "html",
+			data: params,
+			// Complete callback (responseText is used internally)
+			complete: function( jqXHR, status, responseText ) {
+				// Store the response as specified by the jqXHR object
+				responseText = jqXHR.responseText;
+				// If successful, inject the HTML into all the matched elements
+				if ( jqXHR.isResolved() ) {
+					// #4825: Get the actual response in case
+					// a dataFilter is present in ajaxSettings
+					jqXHR.done(function( r ) {
+						responseText = r;
+					});
+					// See if a selector was specified
+					self.html( selector ?
+						// Create a dummy div to hold the results
+						jQuery("<div>")
+							// inject the contents of the document in, removing the scripts
+							// to avoid any 'Permission Denied' errors in IE
+							.append(responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [ responseText, status, jqXHR ] );
+				}
+			}
+		});
+
+		return this;
+	},
+
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+
+	serializeArray: function() {
+		return this.map(function(){
+			return this.elements ? jQuery.makeArray( this.elements ) : this;
+		})
+		.filter(function(){
+			return this.name && !this.disabled &&
+				( this.checked || rselectTextarea.test( this.nodeName ) ||
+					rinput.test( this.type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val, i ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+	jQuery.fn[ o ] = function( f ){
+		return this.on( o, f );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			type: method,
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	};
+});
+
+jQuery.extend({
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		if ( settings ) {
+			// Building a settings object
+			ajaxExtend( target, jQuery.ajaxSettings );
+		} else {
+			// Extending ajaxSettings
+			settings = target;
+			target = jQuery.ajaxSettings;
+		}
+		ajaxExtend( target, settings );
+		return target;
+	},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			text: "text/plain",
+			json: "application/json, text/javascript",
+			"*": allTypes
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// List of data converters
+		// 1) key format is "source_type destination_type" (a single space in-between)
+		// 2) the catchall symbol "*" can be used for source_type
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			context: true,
+			url: true
+		}
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events
+			// It's the callbackContext if one was provided in the options
+			// and if it's a DOM node or a jQuery collection
+			globalEventContext = callbackContext !== s &&
+				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+						jQuery( callbackContext ) : jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// ifModified key
+			ifModifiedKey,
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// transport
+			transport,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// The jqXHR state
+			state = 0,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Fake xhr
+			jqXHR = {
+
+				readyState: 0,
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( !state ) {
+						var lname = name.toLowerCase();
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match === undefined ? null : match;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					statusText = statusText || "abort";
+					if ( transport ) {
+						transport.abort( statusText );
+					}
+					done( 0, statusText );
+					return this;
+				}
+			};
+
+		// Callback for when everything is done
+		// It is defined here because jslint complains if it is declared
+		// at the end of the function (which would be more logical and readable)
+		function done( status, nativeStatusText, responses, headers ) {
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			var isSuccess,
+				success,
+				error,
+				statusText = nativeStatusText,
+				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+				lastModified,
+				etag;
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+
+					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+						jQuery.lastModified[ ifModifiedKey ] = lastModified;
+					}
+					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+						jQuery.etag[ ifModifiedKey ] = etag;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+
+					statusText = "notmodified";
+					isSuccess = true;
+
+				// If we have data
+				} else {
+
+					try {
+						success = ajaxConvert( s, response );
+						statusText = "success";
+						isSuccess = true;
+					} catch(e) {
+						// We have a parsererror
+						statusText = "parsererror";
+						error = e;
+					}
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( !statusText || status ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = "" + ( nativeStatusText || statusText );
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+						[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+		jqXHR.complete = completeDeferred.add;
+
+		// Status-dependent callbacks
+		jqXHR.statusCode = function( map ) {
+			if ( map ) {
+				var tmp;
+				if ( state < 2 ) {
+					for ( tmp in map ) {
+						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+					}
+				} else {
+					tmp = map[ jqXHR.status ];
+					jqXHR.then( tmp, tmp );
+				}
+			}
+			return this;
+		};
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+		// Determine if a cross-domain request is in order
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return false;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Get ifModifiedKey before adding the anti-cache parameter
+			ifModifiedKey = s.url;
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+
+				var ts = jQuery.now(),
+					// try replacing _= if it is there
+					ret = s.url.replace( rts, "$1_=" + ts );
+
+				// if nothing was replaced, add timestamp to the end
+				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			ifModifiedKey = ifModifiedKey || s.url;
+			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+			}
+			if ( jQuery.etag[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+			}
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+				// Abort if not done already
+				jqXHR.abort();
+				return false;
+
+		}
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout( function(){
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch (e) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [],
+			add = function( key, value ) {
+				// If value is a function, invoke it and return its value
+				value = jQuery.isFunction( value ) ? value() : value;
+				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+			};
+
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
+		if ( traditional === undefined ) {
+			traditional = jQuery.ajaxSettings.traditional;
+		}
+
+		// If an array was passed in, assume that it is an array of form elements.
+		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+			// Serialize the form elements
+			jQuery.each( a, function() {
+				add( this.name, this.value );
+			});
+
+		} else {
+			// If traditional, encode the "old" way (the way 1.3.2 or older
+			// did it), otherwise encode params recursively.
+			for ( var prefix in a ) {
+				buildParams( prefix, a[ prefix ], traditional, add );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join( "&" ).replace( r20, "+" );
+	}
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// If array item is non-scalar (array or object), encode its
+				// numeric index to resolve deserialization ambiguity issues.
+				// Note that rack (as of 1.0.0) can't currently deserialize
+				// nested arrays properly, and attempting to do so may cause
+				// a server error. Possible fixes are to modify rack's
+				// deserialization algorithm or to provide an option or flag
+				// to force array serialization to be shallow.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( var name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields,
+		ct,
+		type,
+		finalDataType,
+		firstDataType;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	var dataTypes = s.dataTypes,
+		converters = {},
+		i,
+		key,
+		length = dataTypes.length,
+		tmp,
+		// Current and previous dataTypes
+		current = dataTypes[ 0 ],
+		prev,
+		// Conversion expression
+		conversion,
+		// Conversion function
+		conv,
+		// Conversion functions (transitive conversion)
+		conv1,
+		conv2;
+
+	// For each dataType in the chain
+	for ( i = 1; i < length; i++ ) {
+
+		// Create converters map
+		// with lowercased keys
+		if ( i === 1 ) {
+			for ( key in s.converters ) {
+				if ( typeof key === "string" ) {
+					converters[ key.toLowerCase() ] = s.converters[ key ];
+				}
+			}
+		}
+
+		// Get the dataTypes
+		prev = current;
+		current = dataTypes[ i ];
+
+		// If current is auto dataType, update it to prev
+		if ( current === "*" ) {
+			current = prev;
+		// If no auto and dataTypes are actually different
+		} else if ( prev !== "*" && prev !== current ) {
+
+			// Get the converter
+			conversion = prev + " " + current;
+			conv = converters[ conversion ] || converters[ "* " + current ];
+
+			// If there is no direct converter, search transitively
+			if ( !conv ) {
+				conv2 = undefined;
+				for ( conv1 in converters ) {
+					tmp = conv1.split( " " );
+					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+						conv2 = converters[ tmp[1] + " " + current ];
+						if ( conv2 ) {
+							conv1 = converters[ conv1 ];
+							if ( conv1 === true ) {
+								conv = conv2;
+							} else if ( conv2 === true ) {
+								conv = conv1;
+							}
+							break;
+						}
+					}
+				}
+			}
+			// If we found no converter, dispatch an error
+			if ( !( conv || conv2 ) ) {
+				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+			}
+			// If found converter is not an equivalence
+			if ( conv !== true ) {
+				// Convert with 1 or 2 converters accordingly
+				response = conv ? conv( response ) : conv2( conv1(response) );
+			}
+		}
+	}
+	return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+	jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		return jQuery.expando + "_" + ( jsc++ );
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
+
+	if ( s.dataTypes[ 0 ] === "jsonp" ||
+		s.jsonp !== false && ( jsre.test( s.url ) ||
+				inspectData && jsre.test( s.data ) ) ) {
+
+		var responseContainer,
+			jsonpCallback = s.jsonpCallback =
+				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+			previous = window[ jsonpCallback ],
+			url = s.url,
+			data = s.data,
+			replace = "$1" + jsonpCallback + "$2";
+
+		if ( s.jsonp !== false ) {
+			url = url.replace( jsre, replace );
+			if ( s.url === url ) {
+				if ( inspectData ) {
+					data = data.replace( jsre, replace );
+				}
+				if ( s.data === data ) {
+					// Add callback manually
+					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+				}
+			}
+		}
+
+		s.url = url;
+		s.data = data;
+
+		// Install callback
+		window[ jsonpCallback ] = function( response ) {
+			responseContainer = [ response ];
+		};
+
+		// Clean-up function
+		jqXHR.always(function() {
+			// Set callback back to previous value
+			window[ jsonpCallback ] = previous;
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( previous ) ) {
+				window[ jsonpCallback ]( responseContainer[ 0 ] );
+			}
+		});
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( jsonpCallback + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /javascript|ecmascript/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement( "script" );
+
+				script.async = "async";
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+
+						// Dereference the script
+						script = undefined;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+				// This arises when a base node is used (#2709 and #4378).
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( 0, 1 );
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+		// Abort all pending requests
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( 0, 1 );
+		}
+	} : false,
+	xhrId = 0,
+	xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+	jQuery.extend( jQuery.support, {
+		ajax: !!xhr,
+		cors: !!xhr && ( "withCredentials" in xhr )
+	});
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var xhr = s.xhr(),
+						handle,
+						i;
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( _ ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occured
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+									responses = {};
+									xml = xhr.responseXML;
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+
+									// When requesting binary data, IE6-9 will throw an exception
+									// on any attempt to access responseText (#11426)
+									try {
+										responses.text = xhr.responseText;
+									} catch( _ ) {
+									}
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					// if we're in sync mode or it's in cache
+					// and has been retrieved directly (IE6 & IE7)
+					// we need to manually fire the callback
+					if ( !s.async || xhr.readyState === 4 ) {
+						callback();
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback(0,1);
+					}
+				}
+			};
+		}
+	});
+}
+
+
+
+
+var elemdisplay = {},
+	iframe, iframeDoc,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	],
+	fxNow;
+
+jQuery.fn.extend({
+	show: function( speed, easing, callback ) {
+		var elem, display;
+
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("show", 3), speed, easing, callback );
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					// Reset the inline display of this element to learn if it is
+					// being hidden by cascaded rules or not
+					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+						display = elem.style.display = "";
+					}
+
+					// Set elements which have been overridden with display: none
+					// in a stylesheet to whatever the default browser style is
+					// for such an element
+					if ( (display === "" && jQuery.css(elem, "display") === "none") ||
+						!jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+						jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+					}
+				}
+			}
+
+			// Set the display of most of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					if ( display === "" || display === "none" ) {
+						elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
+					}
+				}
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, easing, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, easing, callback);
+
+		} else {
+			var elem, display,
+				i = 0,
+				j = this.length;
+
+			for ( ; i < j; i++ ) {
+				elem = this[i];
+				if ( elem.style ) {
+					display = jQuery.css( elem, "display" );
+
+					if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
+						jQuery._data( elem, "olddisplay", display );
+					}
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				if ( this[i].style ) {
+					this[i].style.display = "none";
+				}
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2, callback ) {
+		var bool = typeof fn === "boolean";
+
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+			this._toggle.apply( this, arguments );
+
+		} else if ( fn == null || bool ) {
+			this.each(function() {
+				var state = bool ? fn : jQuery(this).is(":hidden");
+				jQuery(this)[ state ? "show" : "hide" ]();
+			});
+
+		} else {
+			this.animate(genFx("toggle", 3), fn, fn2, callback);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, easing, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, easing, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed( speed, easing, callback );
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete, [ false ] );
+		}
+
+		// Do not change referenced properties as per-property easing will be lost
+		prop = jQuery.extend( {}, prop );
+
+		function doAnimation() {
+			// XXX 'this' does not always have a nodeName when running the
+			// test suite
+
+			if ( optall.queue === false ) {
+				jQuery._mark( this );
+			}
+
+			var opt = jQuery.extend( {}, optall ),
+				isElement = this.nodeType === 1,
+				hidden = isElement && jQuery(this).is(":hidden"),
+				name, val, p, e, hooks, replace,
+				parts, start, end, unit,
+				method;
+
+			// will store per property easing and be used to determine when an animation is complete
+			opt.animatedProperties = {};
+
+			// first pass over propertys to expand / normalize
+			for ( p in prop ) {
+				name = jQuery.camelCase( p );
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+				}
+
+				if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
+					replace = hooks.expand( prop[ name ] );
+					delete prop[ name ];
+
+					// not quite $.extend, this wont overwrite keys already present.
+					// also - reusing 'p' from above because we have the correct "name"
+					for ( p in replace ) {
+						if ( ! ( p in prop ) ) {
+							prop[ p ] = replace[ p ];
+						}
+					}
+				}
+			}
+
+			for ( name in prop ) {
+				val = prop[ name ];
+				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+				if ( jQuery.isArray( val ) ) {
+					opt.animatedProperties[ name ] = val[ 1 ];
+					val = prop[ name ] = val[ 0 ];
+				} else {
+					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+				}
+
+				if ( val === "hide" && hidden || val === "show" && !hidden ) {
+					return opt.complete.call( this );
+				}
+
+				if ( isElement && ( name === "height" || name === "width" ) ) {
+					// Make sure that nothing sneaks out
+					// Record all 3 overflow attributes because IE does not
+					// change the overflow attribute when overflowX and
+					// overflowY are set to the same value
+					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+					// Set display property to inline-block for height/width
+					// animations on inline elements that are having width/height animated
+					if ( jQuery.css( this, "display" ) === "inline" &&
+							jQuery.css( this, "float" ) === "none" ) {
+
+						// inline-level elements accept inline-block;
+						// block-level elements need to be inline with layout
+						if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
+							this.style.display = "inline-block";
+
+						} else {
+							this.style.zoom = 1;
+						}
+					}
+				}
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			for ( p in prop ) {
+				e = new jQuery.fx( this, opt, p );
+				val = prop[ p ];
+
+				if ( rfxtypes.test( val ) ) {
+
+					// Tracks whether to show or hide based on private
+					// data attached to the element
+					method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
+					if ( method ) {
+						jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
+						e[ method ]();
+					} else {
+						e[ val ]();
+					}
+
+				} else {
+					parts = rfxnum.exec( val );
+					start = e.cur();
+
+					if ( parts ) {
+						end = parseFloat( parts[2] );
+						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							jQuery.style( this, p, (end || 1) + unit);
+							start = ( (end || 1) / e.cur() ) * start;
+							jQuery.style( this, p, start + unit);
+						}
+
+						// If a +=/-= token was provided, we're doing a relative animation
+						if ( parts[1] ) {
+							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+						}
+
+						e.custom( start, end, unit );
+
+					} else {
+						e.custom( start, val, "" );
+					}
+				}
+			}
+
+			// For JS strict compliance
+			return true;
+		}
+
+		return optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+
+	stop: function( type, clearQueue, gotoEnd ) {
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var index,
+				hadTimers = false,
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			// clear marker counters if we know they won't be
+			if ( !gotoEnd ) {
+				jQuery._unmark( true, this );
+			}
+
+			function stopQueue( elem, data, index ) {
+				var hooks = data[ index ];
+				jQuery.removeData( elem, index, true );
+				hooks.stop( gotoEnd );
+			}
+
+			if ( type == null ) {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
+						stopQueue( this, data, index );
+					}
+				}
+			} else if ( data[ index = type + ".run" ] && data[ index ].stop ){
+				stopQueue( this, data, index );
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					if ( gotoEnd ) {
+
+						// force the next step to be the last
+						timers[ index ]( true );
+					} else {
+						timers[ index ].saveState();
+					}
+					hadTimers = true;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( !( gotoEnd && hadTimers ) ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	}
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout( clearFxNow, 0 );
+	return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+	fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx( "show", 1 ),
+	slideUp: genFx( "hide", 1 ),
+	slideToggle: genFx( "toggle", 1 ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+			complete: fn || !fn && easing ||
+				jQuery.isFunction( speed ) && speed,
+			duration: speed,
+			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+		};
+
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+		// normalize opt.queue - true/undefined/null -> "fx"
+		if ( opt.queue == null || opt.queue === true ) {
+			opt.queue = "fx";
+		}
+
+		// Queueing
+		opt.old = opt.complete;
+
+		opt.complete = function( noUnmark ) {
+			if ( jQuery.isFunction( opt.old ) ) {
+				opt.old.call( this );
+			}
+
+			if ( opt.queue ) {
+				jQuery.dequeue( this, opt.queue );
+			} else if ( noUnmark !== false ) {
+				jQuery._unmark( this );
+			}
+		};
+
+		return opt;
+	},
+
+	easing: {
+		linear: function( p ) {
+			return p;
+		},
+		swing: function( p ) {
+			return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
+		}
+	},
+
+	timers: [],
+
+	fx: function( elem, options, prop ) {
+		this.options = options;
+		this.elem = elem;
+		this.prop = prop;
+
+		options.orig = options.orig || {};
+	}
+
+});
+
+jQuery.fx.prototype = {
+	// Simple function for setting a style value
+	update: function() {
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
+	},
+
+	// Get the current size
+	cur: function() {
+		if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var parsed,
+			r = jQuery.css( this.elem, this.prop );
+		// Empty strings, null, undefined and "auto" are converted to 0,
+		// complex values such as "rotate(1rad)" are returned as is,
+		// simple values such as "10px" are parsed to Float.
+		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		var self = this,
+			fx = jQuery.fx;
+
+		this.startTime = fxNow || createFxNow();
+		this.end = to;
+		this.now = this.start = from;
+		this.pos = this.state = 0;
+		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+
+		function t( gotoEnd ) {
+			return self.step( gotoEnd );
+		}
+
+		t.queue = this.options.queue;
+		t.elem = this.elem;
+		t.saveState = function() {
+			if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
+				if ( self.options.hide ) {
+					jQuery._data( self.elem, "fxshow" + self.prop, self.start );
+				} else if ( self.options.show ) {
+					jQuery._data( self.elem, "fxshow" + self.prop, self.end );
+				}
+			}
+		};
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			timerId = setInterval( fx.tick, fx.interval );
+		}
+	},
+
+	// Simple 'show' function
+	show: function() {
+		var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
+		this.options.show = true;
+
+		// Begin the animation
+		// Make sure that we start at a small width/height to avoid any flash of content
+		if ( dataShow !== undefined ) {
+			// This show is picking up where a previous hide or show left off
+			this.custom( this.cur(), dataShow );
+		} else {
+			this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+		}
+
+		// Start by showing the element
+		jQuery( this.elem ).show();
+	},
+
+	// Simple 'hide' function
+	hide: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
+		this.options.hide = true;
+
+		// Begin the animation
+		this.custom( this.cur(), 0 );
+	},
+
+	// Each step of an animation
+	step: function( gotoEnd ) {
+		var p, n, complete,
+			t = fxNow || createFxNow(),
+			done = true,
+			elem = this.elem,
+			options = this.options;
+
+		if ( gotoEnd || t >= options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			options.animatedProperties[ this.prop ] = true;
+
+			for ( p in options.animatedProperties ) {
+				if ( options.animatedProperties[ p ] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				// Reset the overflow
+				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+					jQuery.each( [ "", "X", "Y" ], function( index, value ) {
+						elem.style[ "overflow" + value ] = options.overflow[ index ];
+					});
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( options.hide ) {
+					jQuery( elem ).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( options.hide || options.show ) {
+					for ( p in options.animatedProperties ) {
+						jQuery.style( elem, p, options.orig[ p ] );
+						jQuery.removeData( elem, "fxshow" + p, true );
+						// Toggle data is no longer needed
+						jQuery.removeData( elem, "toggle" + p, true );
+					}
+				}
+
+				// Execute the complete function
+				// in the event that the complete function throws an exception
+				// we must ensure it won't be called twice. #5684
+
+				complete = options.complete;
+				if ( complete ) {
+
+					options.complete = false;
+					complete.call( elem );
+				}
+			}
+
+			return false;
+
+		} else {
+			// classical easing cannot be used with an Infinity duration
+			if ( options.duration == Infinity ) {
+				this.now = t;
+			} else {
+				n = t - this.startTime;
+				this.state = n / options.duration;
+
+				// Perform the easing function, defaults to swing
+				this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
+				this.now = this.start + ( (this.end - this.start) * this.pos );
+			}
+			// Perform the next step of the animation
+			this.update();
+		}
+
+		return true;
+	}
+};
+
+jQuery.extend( jQuery.fx, {
+	tick: function() {
+		var timer,
+			timers = jQuery.timers,
+			i = 0;
+
+		for ( ; i < timers.length; i++ ) {
+			timer = timers[ i ];
+			// Checks the timer has not already been removed
+			if ( !timer() && timers[ i ] === timer ) {
+				timers.splice( i--, 1 );
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+
+	interval: 13,
+
+	stop: function() {
+		clearInterval( timerId );
+		timerId = null;
+	},
+
+	speeds: {
+		slow: 600,
+		fast: 200,
+		// Default speed
+		_default: 400
+	},
+
+	step: {
+		opacity: function( fx ) {
+			jQuery.style( fx.elem, "opacity", fx.now );
+		},
+
+		_default: function( fx ) {
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+			} else {
+				fx.elem[ fx.prop ] = fx.now;
+			}
+		}
+	}
+});
+
+// Ensure props that can't be negative don't go there on undershoot easing
+jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
+	// exclude marginTop, marginLeft, marginBottom and marginRight from this list
+	if ( prop.indexOf( "margin" ) ) {
+		jQuery.fx.step[ prop ] = function( fx ) {
+			jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
+		};
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+	if ( !elemdisplay[ nodeName ] ) {
+
+		var body = document.body,
+			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+			display = elem.css( "display" );
+		elem.remove();
+
+		// If the simple way fails,
+		// get element's real default display by attaching it to a temp iframe
+		if ( display === "none" || display === "" ) {
+			// No iframe to use yet, so create it
+			if ( !iframe ) {
+				iframe = document.createElement( "iframe" );
+				iframe.frameBorder = iframe.width = iframe.height = 0;
+			}
+
+			body.appendChild( iframe );
+
+			// Create a cacheable copy of the iframe document on first call.
+			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+			// document to it; WebKit & Firefox won't allow reusing the iframe document.
+			if ( !iframeDoc || !iframe.createElement ) {
+				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+				iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
+				iframeDoc.close();
+			}
+
+			elem = iframeDoc.createElement( nodeName );
+
+			iframeDoc.body.appendChild( elem );
+
+			display = jQuery.css( elem, "display" );
+			body.removeChild( iframe );
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return elemdisplay[ nodeName ];
+}
+
+
+
+
+var getOffset,
+	rtable = /^t(?:able|d|h)$/i,
+	rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+	getOffset = function( elem, doc, docElem, box ) {
+		try {
+			box = elem.getBoundingClientRect();
+		} catch(e) {}
+
+		// Make sure we're not dealing with a disconnected DOM node
+		if ( !box || !jQuery.contains( docElem, elem ) ) {
+			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+		}
+
+		var body = doc.body,
+			win = getWindow( doc ),
+			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+			top  = box.top  + scrollTop  - clientTop,
+			left = box.left + scrollLeft - clientLeft;
+
+		return { top: top, left: left };
+	};
+
+} else {
+	getOffset = function( elem, doc, docElem ) {
+		var computedStyle,
+			offsetParent = elem.offsetParent,
+			prevOffsetParent = elem,
+			body = doc.body,
+			defaultView = doc.defaultView,
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+			top = elem.offsetTop,
+			left = elem.offsetLeft;
+
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+			if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+				break;
+			}
+
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+			top  -= elem.scrollTop;
+			left -= elem.scrollLeft;
+
+			if ( elem === offsetParent ) {
+				top  += elem.offsetTop;
+				left += elem.offsetLeft;
+
+				if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+				}
+
+				prevOffsetParent = offsetParent;
+				offsetParent = elem.offsetParent;
+			}
+
+			if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+			}
+
+			prevComputedStyle = computedStyle;
+		}
+
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+			top  += body.offsetTop;
+			left += body.offsetLeft;
+		}
+
+		if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+		}
+
+		return { top: top, left: left };
+	};
+}
+
+jQuery.fn.offset = function( options ) {
+	if ( arguments.length ) {
+		return options === undefined ?
+			this :
+			this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+	}
+
+	var elem = this[0],
+		doc = elem && elem.ownerDocument;
+
+	if ( !doc ) {
+		return null;
+	}
+
+	if ( elem === doc.body ) {
+		return jQuery.offset.bodyOffset( elem );
+	}
+
+	return getOffset( elem, doc, doc.documentElement );
+};
+
+jQuery.offset = {
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop,
+			left = body.offsetLeft;
+
+		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[0] ) {
+			return null;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return jQuery.access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					jQuery.support.boxModel && win.document.documentElement[ method ] ||
+						win.document.body[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					 top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+
+
+
+
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	var clientProp = "client" + name,
+		scrollProp = "scroll" + name,
+		offsetProp = "offset" + name;
+
+	// innerHeight and innerWidth
+	jQuery.fn[ "inner" + name ] = function() {
+		var elem = this[0];
+		return elem ?
+			elem.style ?
+			parseFloat( jQuery.css( elem, type, "padding" ) ) :
+			this[ type ]() :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn[ "outer" + name ] = function( margin ) {
+		var elem = this[0];
+		return elem ?
+			elem.style ?
+			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+			this[ type ]() :
+			null;
+	};
+
+	jQuery.fn[ type ] = function( value ) {
+		return jQuery.access( this, function( elem, type, value ) {
+			var doc, docElemProp, orig, ret;
+
+			if ( jQuery.isWindow( elem ) ) {
+				// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+				doc = elem.document;
+				docElemProp = doc.documentElement[ clientProp ];
+				return jQuery.support.boxModel && docElemProp ||
+					doc.body && doc.body[ clientProp ] || docElemProp;
+			}
+
+			// Get document width or height
+			if ( elem.nodeType === 9 ) {
+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+				doc = elem.documentElement;
+
+				// when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
+				// so we can't use max, as it'll choose the incorrect offset[Width/Height]
+				// instead we use the correct client[Width/Height]
+				// support:IE6
+				if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
+					return doc[ clientProp ];
+				}
+
+				return Math.max(
+					elem.body[ scrollProp ], doc[ scrollProp ],
+					elem.body[ offsetProp ], doc[ offsetProp ]
+				);
+			}
+
+			// Get width or height on the element
+			if ( value === undefined ) {
+				orig = jQuery.css( elem, type );
+				ret = parseFloat( orig );
+				return jQuery.isNumeric( ret ) ? ret : orig;
+			}
+
+			// Set the width or height on the element
+			jQuery( elem ).css( type, value );
+		}, type, value, arguments.length, null );
+	};
+});
+
+
+
+
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+
+
+})( window );

+ 7690 - 0
miaomiao/plugins/jpush-phonegap-plugin/example/js/jquery.mobile-1.1.1.js

xqd
@@ -0,0 +1,7690 @@
+/*
+* jQuery Mobile Framework 1.1.1 1981b3f5ec22675ae47df8f0bdf9622e7780e90e
+* http://jquerymobile.com
+*
+* Copyright 2012 jQuery Foundation and other contributors
+* Dual licensed under the MIT or GPL Version 2 licenses.
+* http://jquery.org/license
+*
+*/
+(function ( root, doc, factory ) {
+	if ( typeof define === "function" && define.amd ) {
+		// AMD. Register as an anonymous module.
+		define( [ "jquery" ], function ( $ ) {
+			factory( $, root, doc );
+			return $.mobile;
+		});
+	} else {
+		// Browser globals
+		factory( root.jQuery, root, doc );
+	}
+}( this, document, function ( jQuery, window, document, undefined ) {
+
+
+// This plugin is an experiment for abstracting away the touch and mouse
+// events so that developers don't have to worry about which method of input
+// the device their document is loaded on supports.
+//
+// The idea here is to allow the developer to register listeners for the
+// basic mouse events, such as mousedown, mousemove, mouseup, and click,
+// and the plugin will take care of registering the correct listeners
+// behind the scenes to invoke the listener at the fastest possible time
+// for that device, while still retaining the order of event firing in
+// the traditional mouse environment, should multiple handlers be registered
+// on the same element for different events.
+//
+// The current version exposes the following virtual events to jQuery bind methods:
+// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel"
+
+(function( $, window, document, undefined ) {
+
+var dataPropertyName = "virtualMouseBindings",
+	touchTargetPropertyName = "virtualTouchID",
+	virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ),
+	touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ),
+	mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [],
+	mouseEventProps = $.event.props.concat( mouseHookProps ),
+	activeDocHandlers = {},
+	resetTimerID = 0,
+	startX = 0,
+	startY = 0,
+	didScroll = false,
+	clickBlockList = [],
+	blockMouseTriggers = false,
+	blockTouchTriggers = false,
+	eventCaptureSupported = "addEventListener" in document,
+	$document = $( document ),
+	nextTouchID = 1,
+	lastTouchID = 0;
+
+$.vmouse = {
+	moveDistanceThreshold: 10,
+	clickDistanceThreshold: 10,
+	resetTimerDuration: 1500
+};
+
+function getNativeEvent( event ) {
+
+	while ( event && typeof event.originalEvent !== "undefined" ) {
+		event = event.originalEvent;
+	}
+	return event;
+}
+
+function createVirtualEvent( event, eventType ) {
+
+	var t = event.type,
+		oe, props, ne, prop, ct, touch, i, j;
+
+	event = $.Event(event);
+	event.type = eventType;
+
+	oe = event.originalEvent;
+	props = $.event.props;
+
+	// addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280
+	// https://github.com/jquery/jquery-mobile/issues/3280
+	if ( t.search( /^(mouse|click)/ ) > -1 ) {
+		props = mouseEventProps;
+	}
+
+	// copy original event properties over to the new event
+	// this would happen if we could call $.event.fix instead of $.Event
+	// but we don't have a way to force an event to be fixed multiple times
+	if ( oe ) {
+		for ( i = props.length, prop; i; ) {
+			prop = props[ --i ];
+			event[ prop ] = oe[ prop ];
+		}
+	}
+
+	// make sure that if the mouse and click virtual events are generated
+	// without a .which one is defined
+	if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){
+		event.which = 1;
+	}
+
+	if ( t.search(/^touch/) !== -1 ) {
+		ne = getNativeEvent( oe );
+		t = ne.touches;
+		ct = ne.changedTouches;
+		touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined );
+
+		if ( touch ) {
+			for ( j = 0, len = touchEventProps.length; j < len; j++){
+				prop = touchEventProps[ j ];
+				event[ prop ] = touch[ prop ];
+			}
+		}
+	}
+
+	return event;
+}
+
+function getVirtualBindingFlags( element ) {
+
+	var flags = {},
+		b, k;
+
+	while ( element ) {
+
+		b = $.data( element, dataPropertyName );
+
+		for (  k in b ) {
+			if ( b[ k ] ) {
+				flags[ k ] = flags.hasVirtualBinding = true;
+			}
+		}
+		element = element.parentNode;
+	}
+	return flags;
+}
+
+function getClosestElementWithVirtualBinding( element, eventType ) {
+	var b;
+	while ( element ) {
+
+		b = $.data( element, dataPropertyName );
+
+		if ( b && ( !eventType || b[ eventType ] ) ) {
+			return element;
+		}
+		element = element.parentNode;
+	}
+	return null;
+}
+
+function enableTouchBindings() {
+	blockTouchTriggers = false;
+}
+
+function disableTouchBindings() {
+	blockTouchTriggers = true;
+}
+
+function enableMouseBindings() {
+	lastTouchID = 0;
+	clickBlockList.length = 0;
+	blockMouseTriggers = false;
+
+	// When mouse bindings are enabled, our
+	// touch bindings are disabled.
+	disableTouchBindings();
+}
+
+function disableMouseBindings() {
+	// When mouse bindings are disabled, our
+	// touch bindings are enabled.
+	enableTouchBindings();
+}
+
+function startResetTimer() {
+	clearResetTimer();
+	resetTimerID = setTimeout(function(){
+		resetTimerID = 0;
+		enableMouseBindings();
+	}, $.vmouse.resetTimerDuration );
+}
+
+function clearResetTimer() {
+	if ( resetTimerID ){
+		clearTimeout( resetTimerID );
+		resetTimerID = 0;
+	}
+}
+
+function triggerVirtualEvent( eventType, event, flags ) {
+	var ve;
+
+	if ( ( flags && flags[ eventType ] ) ||
+				( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) {
+
+		ve = createVirtualEvent( event, eventType );
+
+		$( event.target).trigger( ve );
+	}
+
+	return ve;
+}
+
+function mouseEventCallback( event ) {
+	var touchID = $.data(event.target, touchTargetPropertyName);
+
+	if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){
+		var ve = triggerVirtualEvent( "v" + event.type, event );
+		if ( ve ) {
+			if ( ve.isDefaultPrevented() ) {
+				event.preventDefault();
+			}
+			if ( ve.isPropagationStopped() ) {
+				event.stopPropagation();
+			}
+			if ( ve.isImmediatePropagationStopped() ) {
+				event.stopImmediatePropagation();
+			}
+		}
+	}
+}
+
+function handleTouchStart( event ) {
+
+	var touches = getNativeEvent( event ).touches,
+		target, flags;
+
+	if ( touches && touches.length === 1 ) {
+
+		target = event.target;
+		flags = getVirtualBindingFlags( target );
+
+		if ( flags.hasVirtualBinding ) {
+
+			lastTouchID = nextTouchID++;
+			$.data( target, touchTargetPropertyName, lastTouchID );
+
+			clearResetTimer();
+
+			disableMouseBindings();
+			didScroll = false;
+
+			var t = getNativeEvent( event ).touches[ 0 ];
+			startX = t.pageX;
+			startY = t.pageY;
+
+			triggerVirtualEvent( "vmouseover", event, flags );
+			triggerVirtualEvent( "vmousedown", event, flags );
+		}
+	}
+}
+
+function handleScroll( event ) {
+	if ( blockTouchTriggers ) {
+		return;
+	}
+
+	if ( !didScroll ) {
+		triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) );
+	}
+
+	didScroll = true;
+	startResetTimer();
+}
+
+function handleTouchMove( event ) {
+	if ( blockTouchTriggers ) {
+		return;
+	}
+
+	var t = getNativeEvent( event ).touches[ 0 ],
+		didCancel = didScroll,
+		moveThreshold = $.vmouse.moveDistanceThreshold;
+		didScroll = didScroll ||
+			( Math.abs(t.pageX - startX) > moveThreshold ||
+				Math.abs(t.pageY - startY) > moveThreshold ),
+		flags = getVirtualBindingFlags( event.target );
+
+	if ( didScroll && !didCancel ) {
+		triggerVirtualEvent( "vmousecancel", event, flags );
+	}
+
+	triggerVirtualEvent( "vmousemove", event, flags );
+	startResetTimer();
+}
+
+function handleTouchEnd( event ) {
+	if ( blockTouchTriggers ) {
+		return;
+	}
+
+	disableTouchBindings();
+
+	var flags = getVirtualBindingFlags( event.target ),
+		t;
+	triggerVirtualEvent( "vmouseup", event, flags );
+
+	if ( !didScroll ) {
+		var ve = triggerVirtualEvent( "vclick", event, flags );
+		if ( ve && ve.isDefaultPrevented() ) {
+			// The target of the mouse events that follow the touchend
+			// event don't necessarily match the target used during the
+			// touch. This means we need to rely on coordinates for blocking
+			// any click that is generated.
+			t = getNativeEvent( event ).changedTouches[ 0 ];
+			clickBlockList.push({
+				touchID: lastTouchID,
+				x: t.clientX,
+				y: t.clientY
+			});
+
+			// Prevent any mouse events that follow from triggering
+			// virtual event notifications.
+			blockMouseTriggers = true;
+		}
+	}
+	triggerVirtualEvent( "vmouseout", event, flags);
+	didScroll = false;
+
+	startResetTimer();
+}
+
+function hasVirtualBindings( ele ) {
+	var bindings = $.data( ele, dataPropertyName ),
+		k;
+
+	if ( bindings ) {
+		for ( k in bindings ) {
+			if ( bindings[ k ] ) {
+				return true;
+			}
+		}
+	}
+	return false;
+}
+
+function dummyMouseHandler(){}
+
+function getSpecialEventObject( eventType ) {
+	var realType = eventType.substr( 1 );
+
+	return {
+		setup: function( data, namespace ) {
+			// If this is the first virtual mouse binding for this element,
+			// add a bindings object to its data.
+
+			if ( !hasVirtualBindings( this ) ) {
+				$.data( this, dataPropertyName, {});
+			}
+
+			// If setup is called, we know it is the first binding for this
+			// eventType, so initialize the count for the eventType to zero.
+			var bindings = $.data( this, dataPropertyName );
+			bindings[ eventType ] = true;
+
+			// If this is the first virtual mouse event for this type,
+			// register a global handler on the document.
+
+			activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1;
+
+			if ( activeDocHandlers[ eventType ] === 1 ) {
+				$document.bind( realType, mouseEventCallback );
+			}
+
+			// Some browsers, like Opera Mini, won't dispatch mouse/click events
+			// for elements unless they actually have handlers registered on them.
+			// To get around this, we register dummy handlers on the elements.
+
+			$( this ).bind( realType, dummyMouseHandler );
+
+			// For now, if event capture is not supported, we rely on mouse handlers.
+			if ( eventCaptureSupported ) {
+				// If this is the first virtual mouse binding for the document,
+				// register our touchstart handler on the document.
+
+				activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1;
+
+				if (activeDocHandlers[ "touchstart" ] === 1) {
+					$document.bind( "touchstart", handleTouchStart )
+						.bind( "touchend", handleTouchEnd )
+
+						// On touch platforms, touching the screen and then dragging your finger
+						// causes the window content to scroll after some distance threshold is
+						// exceeded. On these platforms, a scroll prevents a click event from being
+						// dispatched, and on some platforms, even the touchend is suppressed. To
+						// mimic the suppression of the click event, we need to watch for a scroll
+						// event. Unfortunately, some platforms like iOS don't dispatch scroll
+						// events until *AFTER* the user lifts their finger (touchend). This means
+						// we need to watch both scroll and touchmove events to figure out whether
+						// or not a scroll happenens before the touchend event is fired.
+
+						.bind( "touchmove", handleTouchMove )
+						.bind( "scroll", handleScroll );
+				}
+			}
+		},
+
+		teardown: function( data, namespace ) {
+			// If this is the last virtual binding for this eventType,
+			// remove its global handler from the document.
+
+			--activeDocHandlers[ eventType ];
+
+			if ( !activeDocHandlers[ eventType ] ) {
+				$document.unbind( realType, mouseEventCallback );
+			}
+
+			if ( eventCaptureSupported ) {
+				// If this is the last virtual mouse binding in existence,
+				// remove our document touchstart listener.
+
+				--activeDocHandlers[ "touchstart" ];
+
+				if ( !activeDocHandlers[ "touchstart" ] ) {
+					$document.unbind( "touchstart", handleTouchStart )
+						.unbind( "touchmove", handleTouchMove )
+						.unbind( "touchend", handleTouchEnd )
+						.unbind( "scroll", handleScroll );
+				}
+			}
+
+			var $this = $( this ),
+				bindings = $.data( this, dataPropertyName );
+
+			// teardown may be called when an element was
+			// removed from the DOM. If this is the case,
+			// jQuery core may have already stripped the element
+			// of any data bindings so we need to check it before
+			// using it.
+			if ( bindings ) {
+				bindings[ eventType ] = false;
+			}
+
+			// Unregister the dummy event handler.
+
+			$this.unbind( realType, dummyMouseHandler );
+
+			// If this is the last virtual mouse binding on the
+			// element, remove the binding data from the element.
+
+			if ( !hasVirtualBindings( this ) ) {
+				$this.removeData( dataPropertyName );
+			}
+		}
+	};
+}
+
+// Expose our custom events to the jQuery bind/unbind mechanism.
+
+for ( var i = 0; i < virtualEventNames.length; i++ ){
+	$.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] );
+}
+
+// Add a capture click handler to block clicks.
+// Note that we require event capture support for this so if the device
+// doesn't support it, we punt for now and rely solely on mouse events.
+if ( eventCaptureSupported ) {
+	document.addEventListener( "click", function( e ){
+		var cnt = clickBlockList.length,
+			target = e.target,
+			x, y, ele, i, o, touchID;
+
+		if ( cnt ) {
+			x = e.clientX;
+			y = e.clientY;
+			threshold = $.vmouse.clickDistanceThreshold;
+
+			// The idea here is to run through the clickBlockList to see if
+			// the current click event is in the proximity of one of our
+			// vclick events that had preventDefault() called on it. If we find
+			// one, then we block the click.
+			//
+			// Why do we have to rely on proximity?
+			//
+			// Because the target of the touch event that triggered the vclick
+			// can be different from the target of the click event synthesized
+			// by the browser. The target of a mouse/click event that is syntehsized
+			// from a touch event seems to be implementation specific. For example,
+			// some browsers will fire mouse/click events for a link that is near
+			// a touch event, even though the target of the touchstart/touchend event
+			// says the user touched outside the link. Also, it seems that with most
+			// browsers, the target of the mouse/click event is not calculated until the
+			// time it is dispatched, so if you replace an element that you touched
+			// with another element, the target of the mouse/click will be the new
+			// element underneath that point.
+			//
+			// Aside from proximity, we also check to see if the target and any
+			// of its ancestors were the ones that blocked a click. This is necessary
+			// because of the strange mouse/click target calculation done in the
+			// Android 2.1 browser, where if you click on an element, and there is a
+			// mouse/click handler on one of its ancestors, the target will be the
+			// innermost child of the touched element, even if that child is no where
+			// near the point of touch.
+
+			ele = target;
+
+			while ( ele ) {
+				for ( i = 0; i < cnt; i++ ) {
+					o = clickBlockList[ i ];
+					touchID = 0;
+
+					if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) ||
+								$.data( ele, touchTargetPropertyName ) === o.touchID ) {
+						// XXX: We may want to consider removing matches from the block list
+						//      instead of waiting for the reset timer to fire.
+						e.preventDefault();
+						e.stopPropagation();
+						return;
+					}
+				}
+				ele = ele.parentNode;
+			}
+		}
+	}, true);
+}
+})( jQuery, window, document );
+
+
+
+// Script: jQuery hashchange event
+// 
+// *Version: 1.3, Last updated: 7/21/2010*
+// 
+// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
+// GitHub       - http://github.com/cowboy/jquery-hashchange/
+// Source       - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
+// (Minified)   - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
+// 
+// About: License
+// 
+// Copyright (c) 2010 "Cowboy" Ben Alman,
+// Dual licensed under the MIT and GPL licenses.
+// http://benalman.com/about/license/
+// 
+// About: Examples
+// 
+// These working examples, complete with fully commented code, illustrate a few
+// ways in which this plugin can be used.
+// 
+// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
+// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
+// 
+// About: Support and Testing
+// 
+// Information about what version or versions of jQuery this plugin has been
+// tested with, what browsers it has been tested in, and where the unit tests
+// reside (so you can test it yourself).
+// 
+// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
+//                   Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
+// Unit Tests      - http://benalman.com/code/projects/jquery-hashchange/unit/
+// 
+// About: Known issues
+// 
+// While this jQuery hashchange event implementation is quite stable and
+// robust, there are a few unfortunate browser bugs surrounding expected
+// hashchange event-based behaviors, independent of any JavaScript
+// window.onhashchange abstraction. See the following examples for more
+// information:
+// 
+// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
+// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
+// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
+// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
+// 
+// Also note that should a browser natively support the window.onhashchange 
+// event, but not report that it does, the fallback polling loop will be used.
+// 
+// About: Release History
+// 
+// 1.3   - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
+//         "removable" for mobile-only development. Added IE6/7 document.title
+//         support. Attempted to make Iframe as hidden as possible by using
+//         techniques from http://www.paciellogroup.com/blog/?p=604. Added 
+//         support for the "shortcut" format $(window).hashchange( fn ) and
+//         $(window).hashchange() like jQuery provides for built-in events.
+//         Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
+//         lowered its default value to 50. Added <jQuery.fn.hashchange.domain>
+//         and <jQuery.fn.hashchange.src> properties plus document-domain.html
+//         file to address access denied issues when setting document.domain in
+//         IE6/7.
+// 1.2   - (2/11/2010) Fixed a bug where coming back to a page using this plugin
+//         from a page on another domain would cause an error in Safari 4. Also,
+//         IE6/7 Iframe is now inserted after the body (this actually works),
+//         which prevents the page from scrolling when the event is first bound.
+//         Event can also now be bound before DOM ready, but it won't be usable
+//         before then in IE6/7.
+// 1.1   - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
+//         where browser version is incorrectly reported as 8.0, despite
+//         inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
+// 1.0   - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
+//         window.onhashchange functionality into a separate plugin for users
+//         who want just the basic event & back button support, without all the
+//         extra awesomeness that BBQ provides. This plugin will be included as
+//         part of jQuery BBQ, but also be available separately.
+
+(function($,window,undefined){
+  // Reused string.
+  var str_hashchange = 'hashchange',
+    
+    // Method / object references.
+    doc = document,
+    fake_onhashchange,
+    special = $.event.special,
+    
+    // Does the browser support window.onhashchange? Note that IE8 running in
+    // IE7 compatibility mode reports true for 'onhashchange' in window, even
+    // though the event isn't supported, so also test document.documentMode.
+    doc_mode = doc.documentMode,
+    supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
+  
+  // Get location.hash (or what you'd expect location.hash to be) sans any
+  // leading #. Thanks for making this necessary, Firefox!
+  function get_fragment( url ) {
+    url = url || location.href;
+    return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
+  };
+  
+  // Method: jQuery.fn.hashchange
+  // 
+  // Bind a handler to the window.onhashchange event or trigger all bound
+  // window.onhashchange event handlers. This behavior is consistent with
+  // jQuery's built-in event handlers.
+  // 
+  // Usage:
+  // 
+  // > jQuery(window).hashchange( [ handler ] );
+  // 
+  // Arguments:
+  // 
+  //  handler - (Function) Optional handler to be bound to the hashchange
+  //    event. This is a "shortcut" for the more verbose form:
+  //    jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
+  //    all bound window.onhashchange event handlers will be triggered. This
+  //    is a shortcut for the more verbose
+  //    jQuery(window).trigger( 'hashchange' ). These forms are described in
+  //    the <hashchange event> section.
+  // 
+  // Returns:
+  // 
+  //  (jQuery) The initial jQuery collection of elements.
+  
+  // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
+  // $(elem).hashchange() for triggering, like jQuery does for built-in events.
+  $.fn[ str_hashchange ] = function( fn ) {
+    return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
+  };
+  
+  // Property: jQuery.fn.hashchange.delay
+  // 
+  // The numeric interval (in milliseconds) at which the <hashchange event>
+  // polling loop executes. Defaults to 50.
+  
+  // Property: jQuery.fn.hashchange.domain
+  // 
+  // If you're setting document.domain in your JavaScript, and you want hash
+  // history to work in IE6/7, not only must this property be set, but you must
+  // also set document.domain BEFORE jQuery is loaded into the page. This
+  // property is only applicable if you are supporting IE6/7 (or IE8 operating
+  // in "IE7 compatibility" mode).
+  // 
+  // In addition, the <jQuery.fn.hashchange.src> property must be set to the
+  // path of the included "document-domain.html" file, which can be renamed or
+  // modified if necessary (note that the document.domain specified must be the
+  // same in both your main JavaScript as well as in this file).
+  // 
+  // Usage:
+  // 
+  // jQuery.fn.hashchange.domain = document.domain;
+  
+  // Property: jQuery.fn.hashchange.src
+  // 
+  // If, for some reason, you need to specify an Iframe src file (for example,
+  // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
+  // do so using this property. Note that when using this property, history
+  // won't be recorded in IE6/7 until the Iframe src file loads. This property
+  // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
+  // compatibility" mode).
+  // 
+  // Usage:
+  // 
+  // jQuery.fn.hashchange.src = 'path/to/file.html';
+  
+  $.fn[ str_hashchange ].delay = 50;
+  /*
+  $.fn[ str_hashchange ].domain = null;
+  $.fn[ str_hashchange ].src = null;
+  */
+  
+  // Event: hashchange event
+  // 
+  // Fired when location.hash changes. In browsers that support it, the native
+  // HTML5 window.onhashchange event is used, otherwise a polling loop is
+  // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
+  // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
+  // compatibility" mode), a hidden Iframe is created to allow the back button
+  // and hash-based history to work.
+  // 
+  // Usage as described in <jQuery.fn.hashchange>:
+  // 
+  // > // Bind an event handler.
+  // > jQuery(window).hashchange( function(e) {
+  // >   var hash = location.hash;
+  // >   ...
+  // > });
+  // > 
+  // > // Manually trigger the event handler.
+  // > jQuery(window).hashchange();
+  // 
+  // A more verbose usage that allows for event namespacing:
+  // 
+  // > // Bind an event handler.
+  // > jQuery(window).bind( 'hashchange', function(e) {
+  // >   var hash = location.hash;
+  // >   ...
+  // > });
+  // > 
+  // > // Manually trigger the event handler.
+  // > jQuery(window).trigger( 'hashchange' );
+  // 
+  // Additional Notes:
+  // 
+  // * The polling loop and Iframe are not created until at least one handler
+  //   is actually bound to the 'hashchange' event.
+  // * If you need the bound handler(s) to execute immediately, in cases where
+  //   a location.hash exists on page load, via bookmark or page refresh for
+  //   example, use jQuery(window).hashchange() or the more verbose 
+  //   jQuery(window).trigger( 'hashchange' ).
+  // * The event can be bound before DOM ready, but since it won't be usable
+  //   before then in IE6/7 (due to the necessary Iframe), recommended usage is
+  //   to bind it inside a DOM ready handler.
+  
+  // Override existing $.event.special.hashchange methods (allowing this plugin
+  // to be defined after jQuery BBQ in BBQ's source code).
+  special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
+    
+    // Called only when the first 'hashchange' event is bound to window.
+    setup: function() {
+      // If window.onhashchange is supported natively, there's nothing to do..
+      if ( supports_onhashchange ) { return false; }
+      
+      // Otherwise, we need to create our own. And we don't want to call this
+      // until the user binds to the event, just in case they never do, since it
+      // will create a polling loop and possibly even a hidden Iframe.
+      $( fake_onhashchange.start );
+    },
+    
+    // Called only when the last 'hashchange' event is unbound from window.
+    teardown: function() {
+      // If window.onhashchange is supported natively, there's nothing to do..
+      if ( supports_onhashchange ) { return false; }
+      
+      // Otherwise, we need to stop ours (if possible).
+      $( fake_onhashchange.stop );
+    }
+    
+  });
+  
+  // fake_onhashchange does all the work of triggering the window.onhashchange
+  // event for browsers that don't natively support it, including creating a
+  // polling loop to watch for hash changes and in IE 6/7 creating a hidden
+  // Iframe to enable back and forward.
+  fake_onhashchange = (function(){
+    var self = {},
+      timeout_id,
+      
+      // Remember the initial hash so it doesn't get triggered immediately.
+      last_hash = get_fragment(),
+      
+      fn_retval = function(val){ return val; },
+      history_set = fn_retval,
+      history_get = fn_retval;
+    
+    // Start the polling loop.
+    self.start = function() {
+      timeout_id || poll();
+    };
+    
+    // Stop the polling loop.
+    self.stop = function() {
+      timeout_id && clearTimeout( timeout_id );
+      timeout_id = undefined;
+    };
+    
+    // This polling loop checks every $.fn.hashchange.delay milliseconds to see
+    // if location.hash has changed, and triggers the 'hashchange' event on
+    // window when necessary.
+    function poll() {
+      var hash = get_fragment(),
+        history_hash = history_get( last_hash );
+      
+      if ( hash !== last_hash ) {
+        history_set( last_hash = hash, history_hash );
+        
+        $(window).trigger( str_hashchange );
+        
+      } else if ( history_hash !== last_hash ) {
+        location.href = location.href.replace( /#.*/, '' ) + history_hash;
+      }
+      
+      timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
+    };
+    
+    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+    // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
+    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+    $.browser.msie && !supports_onhashchange && (function(){
+      // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
+      // when running in "IE7 compatibility" mode.
+      
+      var iframe,
+        iframe_src;
+      
+      // When the event is bound and polling starts in IE 6/7, create a hidden
+      // Iframe for history handling.
+      self.start = function(){
+        if ( !iframe ) {
+          iframe_src = $.fn[ str_hashchange ].src;
+          iframe_src = iframe_src && iframe_src + get_fragment();
+          
+          // Create hidden Iframe. Attempt to make Iframe as hidden as possible
+          // by using techniques from http://www.paciellogroup.com/blog/?p=604.
+          iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
+            
+            // When Iframe has completely loaded, initialize the history and
+            // start polling.
+            .one( 'load', function(){
+              iframe_src || history_set( get_fragment() );
+              poll();
+            })
+            
+            // Load Iframe src if specified, otherwise nothing.
+            .attr( 'src', iframe_src || 'javascript:0' )
+            
+            // Append Iframe after the end of the body to prevent unnecessary
+            // initial page scrolling (yes, this works).
+            .insertAfter( 'body' )[0].contentWindow;
+          
+          // Whenever `document.title` changes, update the Iframe's title to
+          // prettify the back/next history menu entries. Since IE sometimes
+          // errors with "Unspecified error" the very first time this is set
+          // (yes, very useful) wrap this with a try/catch block.
+          doc.onpropertychange = function(){
+            try {
+              if ( event.propertyName === 'title' ) {
+                iframe.document.title = doc.title;
+              }
+            } catch(e) {}
+          };
+          
+        }
+      };
+      
+      // Override the "stop" method since an IE6/7 Iframe was created. Even
+      // if there are no longer any bound event handlers, the polling loop
+      // is still necessary for back/next to work at all!
+      self.stop = fn_retval;
+      
+      // Get history by looking at the hidden Iframe's location.hash.
+      history_get = function() {
+        return get_fragment( iframe.location.href );
+      };
+      
+      // Set a new history item by opening and then closing the Iframe
+      // document, *then* setting its location.hash. If document.domain has
+      // been set, update that as well.
+      history_set = function( hash, history_hash ) {
+        var iframe_doc = iframe.document,
+          domain = $.fn[ str_hashchange ].domain;
+        
+        if ( hash !== history_hash ) {
+          // Update Iframe with any initial `document.title` that might be set.
+          iframe_doc.title = doc.title;
+          
+          // Opening the Iframe's document after it has been closed is what
+          // actually adds a history entry.
+          iframe_doc.open();
+          
+          // Set document.domain for the Iframe document as well, if necessary.
+          domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' );
+          
+          iframe_doc.close();
+          
+          // Update the Iframe's hash, for great justice.
+          iframe.location.hash = hash;
+        }
+      };
+      
+    })();
+    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
+    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    
+    return self;
+  })();
+  
+})(jQuery,this);
+
+/*!
+ * jQuery UI Widget @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+
+(function( $, undefined ) {
+
+// jQuery 1.4+
+if ( $.cleanData ) {
+	var _cleanData = $.cleanData;
+	$.cleanData = function( elems ) {
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			$( elem ).triggerHandler( "remove" );
+		}
+		_cleanData( elems );
+	};
+} else {
+	var _remove = $.fn.remove;
+	$.fn.remove = function( selector, keepData ) {
+		return this.each(function() {
+			if ( !keepData ) {
+				if ( !selector || $.filter( selector, [ this ] ).length ) {
+					$( "*", this ).add( [ this ] ).each(function() {
+						$( this ).triggerHandler( "remove" );
+					});
+				}
+			}
+			return _remove.call( $(this), selector, keepData );
+		});
+	};
+}
+
+$.widget = function( name, base, prototype ) {
+	var namespace = name.split( "." )[ 0 ],
+		fullName;
+	name = name.split( "." )[ 1 ];
+	fullName = namespace + "-" + name;
+
+	if ( !prototype ) {
+		prototype = base;
+		base = $.Widget;
+	}
+
+	// create selector for plugin
+	$.expr[ ":" ][ fullName ] = function( elem ) {
+		return !!$.data( elem, name );
+	};
+
+	$[ namespace ] = $[ namespace ] || {};
+	$[ namespace ][ name ] = function( options, element ) {
+		// allow instantiation without initializing for simple inheritance
+		if ( arguments.length ) {
+			this._createWidget( options, element );
+		}
+	};
+
+	var basePrototype = new base();
+	// we need to make the options hash a property directly on the new instance
+	// otherwise we'll modify the options hash on the prototype that we're
+	// inheriting from
+//	$.each( basePrototype, function( key, val ) {
+//		if ( $.isPlainObject(val) ) {
+//			basePrototype[ key ] = $.extend( {}, val );
+//		}
+//	});
+	basePrototype.options = $.extend( true, {}, basePrototype.options );
+	$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+		namespace: namespace,
+		widgetName: name,
+		widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+		widgetBaseClass: fullName
+	}, prototype );
+
+	$.widget.bridge( name, $[ namespace ][ name ] );
+};
+
+$.widget.bridge = function( name, object ) {
+	$.fn[ name ] = function( options ) {
+		var isMethodCall = typeof options === "string",
+			args = Array.prototype.slice.call( arguments, 1 ),
+			returnValue = this;
+
+		// allow multiple hashes to be passed on init
+		options = !isMethodCall && args.length ?
+			$.extend.apply( null, [ true, options ].concat(args) ) :
+			options;
+
+		// prevent calls to internal methods
+		if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+			return returnValue;
+		}
+
+		if ( isMethodCall ) {
+			this.each(function() {
+				var instance = $.data( this, name );
+				if ( !instance ) {
+					throw "cannot call methods on " + name + " prior to initialization; " +
+						"attempted to call method '" + options + "'";
+				}
+				if ( !$.isFunction( instance[options] ) ) {
+					throw "no such method '" + options + "' for " + name + " widget instance";
+				}
+				var methodValue = instance[ options ].apply( instance, args );
+				if ( methodValue !== instance && methodValue !== undefined ) {
+					returnValue = methodValue;
+					return false;
+				}
+			});
+		} else {
+			this.each(function() {
+				var instance = $.data( this, name );
+				if ( instance ) {
+					instance.option( options || {} )._init();
+				} else {
+					$.data( this, name, new object( options, this ) );
+				}
+			});
+		}
+
+		return returnValue;
+	};
+};
+
+$.Widget = function( options, element ) {
+	// allow instantiation without initializing for simple inheritance
+	if ( arguments.length ) {
+		this._createWidget( options, element );
+	}
+};
+
+$.Widget.prototype = {
+	widgetName: "widget",
+	widgetEventPrefix: "",
+	options: {
+		disabled: false
+	},
+	_createWidget: function( options, element ) {
+		// $.widget.bridge stores the plugin instance, but we do it anyway
+		// so that it's stored even before the _create function runs
+		$.data( element, this.widgetName, this );
+		this.element = $( element );
+		this.options = $.extend( true, {},
+			this.options,
+			this._getCreateOptions(),
+			options );
+
+		var self = this;
+		this.element.bind( "remove." + this.widgetName, function() {
+			self.destroy();
+		});
+
+		this._create();
+		this._trigger( "create" );
+		this._init();
+	},
+	_getCreateOptions: function() {
+		var options = {};
+		if ( $.metadata ) {
+			options = $.metadata.get( element )[ this.widgetName ];
+		}
+		return options;
+	},
+	_create: function() {},
+	_init: function() {},
+
+	destroy: function() {
+		this.element
+			.unbind( "." + this.widgetName )
+			.removeData( this.widgetName );
+		this.widget()
+			.unbind( "." + this.widgetName )
+			.removeAttr( "aria-disabled" )
+			.removeClass(
+				this.widgetBaseClass + "-disabled " +
+				"ui-state-disabled" );
+	},
+
+	widget: function() {
+		return this.element;
+	},
+
+	option: function( key, value ) {
+		var options = key;
+
+		if ( arguments.length === 0 ) {
+			// don't return a reference to the internal hash
+			return $.extend( {}, this.options );
+		}
+
+		if  (typeof key === "string" ) {
+			if ( value === undefined ) {
+				return this.options[ key ];
+			}
+			options = {};
+			options[ key ] = value;
+		}
+
+		this._setOptions( options );
+
+		return this;
+	},
+	_setOptions: function( options ) {
+		var self = this;
+		$.each( options, function( key, value ) {
+			self._setOption( key, value );
+		});
+
+		return this;
+	},
+	_setOption: function( key, value ) {
+		this.options[ key ] = value;
+
+		if ( key === "disabled" ) {
+			this.widget()
+				[ value ? "addClass" : "removeClass"](
+					this.widgetBaseClass + "-disabled" + " " +
+					"ui-state-disabled" )
+				.attr( "aria-disabled", value );
+		}
+
+		return this;
+	},
+
+	enable: function() {
+		return this._setOption( "disabled", false );
+	},
+	disable: function() {
+		return this._setOption( "disabled", true );
+	},
+
+	_trigger: function( type, event, data ) {
+		var callback = this.options[ type ];
+
+		event = $.Event( event );
+		event.type = ( type === this.widgetEventPrefix ?
+			type :
+			this.widgetEventPrefix + type ).toLowerCase();
+		data = data || {};
+
+		// copy original event properties over to the new event
+		// this would happen if we could call $.event.fix instead of $.Event
+		// but we don't have a way to force an event to be fixed multiple times
+		if ( event.originalEvent ) {
+			for ( var i = $.event.props.length, prop; i; ) {
+				prop = $.event.props[ --i ];
+				event[ prop ] = event.originalEvent[ prop ];
+			}
+		}
+
+		this.element.trigger( event, data );
+
+		return !( $.isFunction(callback) &&
+			callback.call( this.element[0], event, data ) === false ||
+			event.isDefaultPrevented() );
+	}
+};
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.widget", {
+	// decorate the parent _createWidget to trigger `widgetinit` for users
+	// who wish to do post post `widgetcreate` alterations/additions
+	//
+	// TODO create a pull request for jquery ui to trigger this event
+	// in the original _createWidget
+	_createWidget: function() {
+		$.Widget.prototype._createWidget.apply( this, arguments );
+		this._trigger( 'init' );
+	},
+
+	_getCreateOptions: function() {
+
+		var elem = this.element,
+			options = {};
+
+		$.each( this.options, function( option ) {
+
+			var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) {
+							return "-" + c.toLowerCase();
+						})
+					);
+
+			if ( value !== undefined ) {
+				options[ option ] = value;
+			}
+		});
+
+		return options;
+	},
+
+	enhanceWithin: function( target, useKeepNative ) {
+		this.enhance( $( this.options.initSelector, $( target )), useKeepNative );
+	},
+
+	enhance: function( targets, useKeepNative ) {
+		var page, keepNative, $widgetElements = $( targets ), self = this;
+
+		// if ignoreContentEnabled is set to true the framework should
+		// only enhance the selected elements when they do NOT have a
+		// parent with the data-namespace-ignore attribute
+		$widgetElements = $.mobile.enhanceable( $widgetElements );
+
+		if ( useKeepNative && $widgetElements.length ) {
+			// TODO remove dependency on the page widget for the keepNative.
+			// Currently the keepNative value is defined on the page prototype so
+			// the method is as well
+			page = $.mobile.closestPageData( $widgetElements );
+			keepNative = (page && page.keepNativeSelector()) || "";
+
+			$widgetElements = $widgetElements.not( keepNative );
+		}
+
+		$widgetElements[ this.widgetName ]();
+	},
+
+	raise: function( msg ) {
+		throw "Widget [" + this.widgetName + "]: " + msg;
+	}
+});
+
+})( jQuery );
+
+(function( $, window, undefined ) {
+
+	var nsNormalizeDict = {};
+
+	// jQuery.mobile configurable options
+	$.mobile = $.extend( {}, {
+
+		// Version of the jQuery Mobile Framework
+		version: "1.1.1",
+
+		// Namespace used framework-wide for data-attrs. Default is no namespace
+		ns: "",
+
+		// Define the url parameter used for referencing widget-generated sub-pages.
+		// Translates to to example.html&ui-page=subpageIdentifier
+		// hash segment before &ui-page= is used to make Ajax request
+		subPageUrlKey: "ui-page",
+
+		// Class assigned to page currently in view, and during transitions
+		activePageClass: "ui-page-active",
+
+		// Class used for "active" button state, from CSS framework
+		activeBtnClass: "ui-btn-active",
+
+		// Class used for "focus" form element state, from CSS framework
+		focusClass: "ui-focus",
+
+		// Automatically handle clicks and form submissions through Ajax, when same-domain
+		ajaxEnabled: true,
+
+		// Automatically load and show pages based on location.hash
+		hashListeningEnabled: true,
+
+		// disable to prevent jquery from bothering with links
+		linkBindingEnabled: true,
+
+		// Set default page transition - 'none' for no transitions
+		defaultPageTransition: "fade",
+
+		// Set maximum window width for transitions to apply - 'false' for no limit
+		maxTransitionWidth: false,
+
+		// Minimum scroll distance that will be remembered when returning to a page
+		minScrollBack: 250,
+
+		// DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts
+		touchOverflowEnabled: false,
+
+		// Set default dialog transition - 'none' for no transitions
+		defaultDialogTransition: "pop",
+
+		// Show loading message during Ajax requests
+		// if false, message will not appear, but loading classes will still be toggled on html el
+		loadingMessage: "loading",
+
+		// Error response message - appears when an Ajax page request fails
+		pageLoadErrorMessage: "Error Loading Page",
+
+		// Should the text be visble in the loading message?
+		loadingMessageTextVisible: false,
+
+		// When the text is visible, what theme does the loading box use?
+		loadingMessageTheme: "a",
+
+		// For error messages, which theme does the box uses?
+		pageLoadErrorMessageTheme: "e",
+
+		//automatically initialize the DOM when it's ready
+		autoInitializePage: true,
+
+		pushStateEnabled: true,
+
+		// allows users to opt in to ignoring content by marking a parent element as
+		// data-ignored
+		ignoreContentEnabled: false,
+
+		// turn of binding to the native orientationchange due to android orientation behavior
+		orientationChangeEnabled: true,
+
+		buttonMarkup: {
+			hoverDelay: 200
+		},
+
+		// TODO might be useful upstream in jquery itself ?
+		keyCode: {
+			ALT: 18,
+			BACKSPACE: 8,
+			CAPS_LOCK: 20,
+			COMMA: 188,
+			COMMAND: 91,
+			COMMAND_LEFT: 91, // COMMAND
+			COMMAND_RIGHT: 93,
+			CONTROL: 17,
+			DELETE: 46,
+			DOWN: 40,
+			END: 35,
+			ENTER: 13,
+			ESCAPE: 27,
+			HOME: 36,
+			INSERT: 45,
+			LEFT: 37,
+			MENU: 93, // COMMAND_RIGHT
+			NUMPAD_ADD: 107,
+			NUMPAD_DECIMAL: 110,
+			NUMPAD_DIVIDE: 111,
+			NUMPAD_ENTER: 108,
+			NUMPAD_MULTIPLY: 106,
+			NUMPAD_SUBTRACT: 109,
+			PAGE_DOWN: 34,
+			PAGE_UP: 33,
+			PERIOD: 190,
+			RIGHT: 39,
+			SHIFT: 16,
+			SPACE: 32,
+			TAB: 9,
+			UP: 38,
+			WINDOWS: 91 // COMMAND
+		},
+
+		// Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value
+		silentScroll: function( ypos ) {
+			if ( $.type( ypos ) !== "number" ) {
+				ypos = $.mobile.defaultHomeScroll;
+			}
+
+			// prevent scrollstart and scrollstop events
+			$.event.special.scrollstart.enabled = false;
+
+			setTimeout(function() {
+				window.scrollTo( 0, ypos );
+				$( document ).trigger( "silentscroll", { x: 0, y: ypos });
+			}, 20 );
+
+			setTimeout(function() {
+				$.event.special.scrollstart.enabled = true;
+			}, 150 );
+		},
+
+		// Expose our cache for testing purposes.
+		nsNormalizeDict: nsNormalizeDict,
+
+		// Take a data attribute property, prepend the namespace
+		// and then camel case the attribute string. Add the result
+		// to our nsNormalizeDict so we don't have to do this again.
+		nsNormalize: function( prop ) {
+			if ( !prop ) {
+				return;
+			}
+
+			return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) );
+		},
+
+		// Find the closest parent with a theme class on it. Note that
+		// we are not using $.fn.closest() on purpose here because this
+		// method gets called quite a bit and we need it to be as fast
+		// as possible.
+		getInheritedTheme: function( el, defaultTheme ) {
+			var e = el[ 0 ],
+				ltr = "",
+				re = /ui-(bar|body|overlay)-([a-z])\b/,
+				c, m;
+
+			while ( e ) {
+				c = e.className || "";
+				if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) {
+					// We found a parent with a theme class
+					// on it so bail from this loop.
+					break;
+				}
+
+				e = e.parentNode;
+			}
+
+			// Return the theme letter we found, if none, return the
+			// specified default.
+
+			return ltr || defaultTheme || "a";
+		},
+
+		// TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers
+		//
+		// Find the closest javascript page element to gather settings data jsperf test
+		// http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit
+		// possibly naive, but it shows that the parsing overhead for *just* the page selector vs
+		// the page and dialog selector is negligable. This could probably be speed up by
+		// doing a similar parent node traversal to the one found in the inherited theme code above
+		closestPageData: function( $target ) {
+			return $target
+				.closest(':jqmData(role="page"), :jqmData(role="dialog")')
+				.data("page");
+		},
+
+		enhanceable: function( $set ) {
+			return this.haveParents( $set, "enhance" );
+		},
+
+		hijackable: function( $set ) {
+			return this.haveParents( $set, "ajax" );
+		},
+
+		haveParents: function( $set, attr ) {
+			if( !$.mobile.ignoreContentEnabled ){
+				return $set;
+			}
+
+			var count = $set.length,
+				$newSet = $(),
+				e, $element, excluded;
+
+			for ( var i = 0; i < count; i++ ) {
+				$element = $set.eq( i );
+				excluded = false;
+				e = $set[ i ];
+
+				while ( e ) {
+					var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : "";
+
+					if ( c === "false" ) {
+						excluded = true;
+						break;
+					}
+
+					e = e.parentNode;
+				}
+
+				if ( !excluded ) {
+					$newSet = $newSet.add( $element );
+				}
+			}
+
+			return $newSet;
+		},
+
+		getScreenHeight: function(){
+			// Native innerHeight returns more accurate value for this across platforms,
+			// jQuery version is here as a normalized fallback for platforms like Symbian
+			return window.innerHeight || $( window ).height();
+		}
+	}, $.mobile );
+
+	// Mobile version of data and removeData and hasData methods
+	// ensures all data is set and retrieved using jQuery Mobile's data namespace
+	$.fn.jqmData = function( prop, value ) {
+		var result;
+		if ( typeof prop != "undefined" ) {
+			if ( prop ) {
+				prop = $.mobile.nsNormalize( prop );
+			}
+			result = this.data.apply( this, arguments.length < 2 ? [ prop ] : [ prop, value ] );
+		}
+		return result;
+	};
+
+	$.jqmData = function( elem, prop, value ) {
+		var result;
+		if ( typeof prop != "undefined" ) {
+			result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value );
+		}
+		return result;
+	};
+
+	$.fn.jqmRemoveData = function( prop ) {
+		return this.removeData( $.mobile.nsNormalize( prop ) );
+	};
+
+	$.jqmRemoveData = function( elem, prop ) {
+		return $.removeData( elem, $.mobile.nsNormalize( prop ) );
+	};
+
+	$.fn.removeWithDependents = function() {
+		$.removeWithDependents( this );
+	};
+
+	$.removeWithDependents = function( elem ) {
+		var $elem = $( elem );
+
+		( $elem.jqmData('dependents') || $() ).remove();
+		$elem.remove();
+	};
+
+	$.fn.addDependents = function( newDependents ) {
+		$.addDependents( $(this), newDependents );
+	};
+
+	$.addDependents = function( elem, newDependents ) {
+		var dependents = $(elem).jqmData( 'dependents' ) || $();
+
+		$(elem).jqmData( 'dependents', $.merge(dependents, newDependents) );
+	};
+
+	// note that this helper doesn't attempt to handle the callback
+	// or setting of an html elements text, its only purpose is
+	// to return the html encoded version of the text in all cases. (thus the name)
+	$.fn.getEncodedText = function() {
+		return $( "<div/>" ).text( $(this).text() ).html();
+	};
+
+	// fluent helper function for the mobile namespaced equivalent
+	$.fn.jqmEnhanceable = function() {
+		return $.mobile.enhanceable( this );
+	};
+
+	$.fn.jqmHijackable = function() {
+		return $.mobile.hijackable( this );
+	};
+
+	// Monkey-patching Sizzle to filter the :jqmData selector
+	var oldFind = $.find,
+		jqmDataRE = /:jqmData\(([^)]*)\)/g;
+
+	$.find = function( selector, context, ret, extra ) {
+		selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" );
+
+		return oldFind.call( this, selector, context, ret, extra );
+	};
+
+	$.extend( $.find, oldFind );
+
+	$.find.matches = function( expr, set ) {
+		return $.find( expr, null, null, set );
+	};
+
+	$.find.matchesSelector = function( node, expr ) {
+		return $.find( expr, null, null, [ node ] ).length > 0;
+	};
+})( jQuery, this );
+
+
+(function( $, undefined ) {
+
+var $window = $( window ),
+	$html = $( "html" );
+
+/* $.mobile.media method: pass a CSS media type or query and get a bool return
+	note: this feature relies on actual media query support for media queries, though types will work most anywhere
+	examples:
+		$.mobile.media('screen') // tests for screen media type
+		$.mobile.media('screen and (min-width: 480px)') // tests for screen media type with window width > 480px
+		$.mobile.media('@media screen and (-webkit-min-device-pixel-ratio: 2)') // tests for webkit 2x pixel ratio (iPhone 4)
+*/
+$.mobile.media = (function() {
+	// TODO: use window.matchMedia once at least one UA implements it
+	var cache = {},
+		testDiv = $( "<div id='jquery-mediatest'></div>" ),
+		fakeBody = $( "<body>" ).append( testDiv );
+
+	return function( query ) {
+		if ( !( query in cache ) ) {
+			var styleBlock = document.createElement( "style" ),
+				cssrule = "@media " + query + " { #jquery-mediatest { position:absolute; } }";
+
+			//must set type for IE!
+			styleBlock.type = "text/css";
+
+			if ( styleBlock.styleSheet  ){
+				styleBlock.styleSheet.cssText = cssrule;
+			} else {
+				styleBlock.appendChild( document.createTextNode(cssrule) );
+			}
+
+			$html.prepend( fakeBody ).prepend( styleBlock );
+			cache[ query ] = testDiv.css( "position" ) === "absolute";
+			fakeBody.add( styleBlock ).remove();
+		}
+		return cache[ query ];
+	};
+})();
+
+})(jQuery);
+
+(function( $, undefined ) {
+
+var fakeBody = $( "<body>" ).prependTo( "html" ),
+	fbCSS = fakeBody[ 0 ].style,
+	vendors = [ "Webkit", "Moz", "O" ],
+	webos = "palmGetResource" in window, //only used to rule out scrollTop
+	opera = window.opera,
+	operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]",
+	bb = window.blackberry; //only used to rule out box shadow, as it's filled opaque on BB
+
+// thx Modernizr
+function propExists( prop ) {
+	var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ),
+		props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " );
+
+	for ( var v in props ){
+		if ( fbCSS[ props[ v ] ] !== undefined ) {
+			return true;
+		}
+	}
+}
+
+function validStyle( prop, value, check_vend ) {
+	var div = document.createElement('div'),
+		uc = function( txt ) {
+			return txt.charAt( 0 ).toUpperCase() + txt.substr( 1 )
+		},
+		vend_pref = function( vend ) {
+			return  "-" + vend.charAt( 0 ).toLowerCase() + vend.substr( 1 ) + "-";
+		},
+		check_style = function( vend ) {
+			var vend_prop = vend_pref( vend ) + prop + ": " + value + ";",
+				uc_vend = uc( vend ),
+				propStyle = uc_vend + uc( prop );
+		
+			div.setAttribute( "style", vend_prop );
+		
+			if( !!div.style[ propStyle ] ) {
+				ret = true;
+			}
+		},
+		check_vends = check_vend ? [ check_vend ] : vendors,
+		ret;
+
+	for( i = 0; i < check_vends.length; i++ ) {
+		check_style( check_vends[i] );
+	}
+	return !!ret;
+}
+
+// Thanks to Modernizr src for this test idea. `perspective` check is limited to Moz to prevent a false positive for 3D transforms on Android.
+function transform3dTest() {
+	var prop = "transform-3d";
+	return validStyle( 'perspective', '10px', 'moz' ) || $.mobile.media( "(-" + vendors.join( "-" + prop + "),(-" ) + "-" + prop + "),(" + prop + ")" );
+}
+
+// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting )
+function baseTagTest() {
+	var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/",
+		base = $( "head base" ),
+		fauxEle = null,
+		href = "",
+		link, rebase;
+
+	if ( !base.length ) {
+		base = fauxEle = $( "<base>", { "href": fauxBase }).appendTo( "head" );
+	} else {
+		href = base.attr( "href" );
+	}
+
+	link = $( "<a href='testurl' />" ).prependTo( fakeBody );
+	rebase = link[ 0 ].href;
+	base[ 0 ].href = href || location.pathname;
+
+	if ( fauxEle ) {
+		fauxEle.remove();
+	}
+	return rebase.indexOf( fauxBase ) === 0;
+}
+
+// Thanks Modernizr
+function cssPointerEventsTest() {
+	var element = document.createElement('x'),
+		documentElement = document.documentElement,
+		getComputedStyle = window.getComputedStyle,
+		supports;
+
+	if( !( 'pointerEvents' in element.style ) ){
+		return false;
+	}
+
+	element.style.pointerEvents = 'auto';
+	element.style.pointerEvents = 'x';
+    documentElement.appendChild(element);
+	supports = getComputedStyle &&
+    getComputedStyle( element, '' ).pointerEvents === 'auto';
+	documentElement.removeChild( element );
+    return !!supports;
+}
+
+
+// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683
+// allows for inclusion of IE 6+, including Windows Mobile 7
+$.extend( $.mobile, { browser: {} } );
+$.mobile.browser.ie = (function() {
+	var v = 3,
+	div = document.createElement( "div" ),
+	a = div.all || [];
+
+	// added {} to silence closure compiler warnings. registering my dislike of all things
+	// overly clever here for future reference
+	while ( div.innerHTML = "<!--[if gt IE " + ( ++v ) + "]><br><![endif]-->", a[ 0 ] ){};
+
+	return v > 4 ? v : !v;
+})();
+
+
+$.extend( $.support, {
+	orientation: "orientation" in window && "onorientationchange" in window,
+	touch: "ontouchend" in document,
+	cssTransitions: "WebKitTransitionEvent" in window || validStyle( 'transition', 'height 100ms linear' ) && !opera,
+	pushState: "pushState" in history && "replaceState" in history,
+	mediaquery: $.mobile.media( "only all" ),
+	cssPseudoElement: !!propExists( "content" ),
+	touchOverflow: !!propExists( "overflowScrolling" ),
+	cssTransform3d: transform3dTest(),
+	boxShadow: !!propExists( "boxShadow" ) && !bb,
+	scrollTop: ( "pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[ 0 ] ) && !webos && !operamini,
+	dynamicBaseTag: baseTagTest(),
+	cssPointerEvents: cssPointerEventsTest()
+});
+
+fakeBody.remove();
+
+
+// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian)
+// or that generally work better browsing in regular http for full page refreshes (Opera Mini)
+// Note: This detection below is used as a last resort.
+// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible
+var nokiaLTE7_3 = (function(){
+
+	var ua = window.navigator.userAgent;
+
+	//The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older
+	return ua.indexOf( "Nokia" ) > -1 &&
+			( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) &&
+			ua.indexOf( "AppleWebKit" ) > -1 &&
+			ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ );
+})();
+
+// Support conditions that must be met in order to proceed
+// default enhanced qualifications are media query support OR IE 7+
+$.mobile.gradeA = function(){
+	return $.support.mediaquery || $.mobile.browser.ie && $.mobile.browser.ie >= 7;
+};
+
+$.mobile.ajaxBlacklist =
+			// BlackBerry browsers, pre-webkit
+			window.blackberry && !window.WebKitPoint ||
+			// Opera Mini
+			operamini ||
+			// Symbian webkits pre 7.3
+			nokiaLTE7_3;
+
+// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices
+// to render the stylesheets when they're referenced before this script, as we'd recommend doing.
+// This simply reappends the CSS in place, which for some reason makes it apply
+if ( nokiaLTE7_3 ) {
+	$(function() {
+		$( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" );
+	});
+}
+
+// For ruling out shadows via css
+if ( !$.support.boxShadow ) {
+	$( "html" ).addClass( "ui-mobile-nosupport-boxshadow" );
+}
+
+})( jQuery );
+
+(function( $, window, undefined ) {
+
+// add new event shortcuts
+$.each( ( "touchstart touchmove touchend orientationchange throttledresize " +
+					"tap taphold swipe swipeleft swiperight scrollstart scrollstop" ).split( " " ), function( i, name ) {
+
+	$.fn[ name ] = function( fn ) {
+		return fn ? this.bind( name, fn ) : this.trigger( name );
+	};
+
+	$.attrFn[ name ] = true;
+});
+
+var supportTouch = $.support.touch,
+	scrollEvent = "touchmove scroll",
+	touchStartEvent = supportTouch ? "touchstart" : "mousedown",
+	touchStopEvent = supportTouch ? "touchend" : "mouseup",
+	touchMoveEvent = supportTouch ? "touchmove" : "mousemove";
+
+function triggerCustomEvent( obj, eventType, event ) {
+	var originalType = event.type;
+	event.type = eventType;
+	$.event.handle.call( obj, event );
+	event.type = originalType;
+}
+
+// also handles scrollstop
+$.event.special.scrollstart = {
+
+	enabled: true,
+
+	setup: function() {
+
+		var thisObject = this,
+			$this = $( thisObject ),
+			scrolling,
+			timer;
+
+		function trigger( event, state ) {
+			scrolling = state;
+			triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event );
+		}
+
+		// iPhone triggers scroll after a small delay; use touchmove instead
+		$this.bind( scrollEvent, function( event ) {
+
+			if ( !$.event.special.scrollstart.enabled ) {
+				return;
+			}
+
+			if ( !scrolling ) {
+				trigger( event, true );
+			}
+
+			clearTimeout( timer );
+			timer = setTimeout(function() {
+				trigger( event, false );
+			}, 50 );
+		});
+	}
+};
+
+// also handles taphold
+$.event.special.tap = {
+	setup: function() {
+		var thisObject = this,
+			$this = $( thisObject );
+
+		$this.bind( "vmousedown", function( event ) {
+
+			if ( event.which && event.which !== 1 ) {
+				return false;
+			}
+
+			var origTarget = event.target,
+				origEvent = event.originalEvent,
+				timer;
+
+			function clearTapTimer() {
+				clearTimeout( timer );
+			}
+
+			function clearTapHandlers() {
+				clearTapTimer();
+
+				$this.unbind( "vclick", clickHandler )
+					.unbind( "vmouseup", clearTapTimer );
+				$( document ).unbind( "vmousecancel", clearTapHandlers );
+			}
+
+			function clickHandler(event) {
+				clearTapHandlers();
+
+				// ONLY trigger a 'tap' event if the start target is
+				// the same as the stop target.
+				if ( origTarget == event.target ) {
+					triggerCustomEvent( thisObject, "tap", event );
+				}
+			}
+
+			$this.bind( "vmouseup", clearTapTimer )
+				.bind( "vclick", clickHandler );
+			$( document ).bind( "vmousecancel", clearTapHandlers );
+
+			timer = setTimeout(function() {
+					triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) );
+			}, 750 );
+		});
+	}
+};
+
+// also handles swipeleft, swiperight
+$.event.special.swipe = {
+	scrollSupressionThreshold: 10, // More than this horizontal displacement, and we will suppress scrolling.
+
+	durationThreshold: 1000, // More time than this, and it isn't a swipe.
+
+	horizontalDistanceThreshold: 30,  // Swipe horizontal displacement must be more than this.
+
+	verticalDistanceThreshold: 75,  // Swipe vertical displacement must be less than this.
+
+	setup: function() {
+		var thisObject = this,
+			$this = $( thisObject );
+
+		$this.bind( touchStartEvent, function( event ) {
+			var data = event.originalEvent.touches ?
+								event.originalEvent.touches[ 0 ] : event,
+				start = {
+					time: ( new Date() ).getTime(),
+					coords: [ data.pageX, data.pageY ],
+					origin: $( event.target )
+				},
+				stop;
+
+			function moveHandler( event ) {
+
+				if ( !start ) {
+					return;
+				}
+
+				var data = event.originalEvent.touches ?
+						event.originalEvent.touches[ 0 ] : event;
+
+				stop = {
+					time: ( new Date() ).getTime(),
+					coords: [ data.pageX, data.pageY ]
+				};
+
+				// prevent scrolling
+				if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) {
+					event.preventDefault();
+				}
+			}
+
+			$this.bind( touchMoveEvent, moveHandler )
+				.one( touchStopEvent, function( event ) {
+					$this.unbind( touchMoveEvent, moveHandler );
+
+					if ( start && stop ) {
+						if ( stop.time - start.time < $.event.special.swipe.durationThreshold &&
+								Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold &&
+								Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) {
+
+							start.origin.trigger( "swipe" )
+								.trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" );
+						}
+					}
+					start = stop = undefined;
+				});
+		});
+	}
+};
+
+(function( $, window ) {
+	// "Cowboy" Ben Alman
+
+	var win = $( window ),
+		special_event,
+		get_orientation,
+		last_orientation,
+		initial_orientation_is_landscape,
+		initial_orientation_is_default,
+		portrait_map = { "0": true, "180": true };
+
+	// It seems that some device/browser vendors use window.orientation values 0 and 180 to
+	// denote the "default" orientation. For iOS devices, and most other smart-phones tested,
+	// the default orientation is always "portrait", but in some Android and RIM based tablets,
+	// the default orientation is "landscape". The following code attempts to use the window
+	// dimensions to figure out what the current orientation is, and then makes adjustments
+	// to the to the portrait_map if necessary, so that we can properly decode the
+	// window.orientation value whenever get_orientation() is called.
+	//
+	// Note that we used to use a media query to figure out what the orientation the browser
+	// thinks it is in:
+	//
+	//     initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)");
+	//
+	// but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1,
+	// where the browser *ALWAYS* applied the landscape media query. This bug does not
+	// happen on iPad.
+
+	if ( $.support.orientation ) {
+
+		// Check the window width and height to figure out what the current orientation
+		// of the device is at this moment. Note that we've initialized the portrait map
+		// values to 0 and 180, *AND* we purposely check for landscape so that if we guess
+		// wrong, , we default to the assumption that portrait is the default orientation.
+		// We use a threshold check below because on some platforms like iOS, the iPhone
+		// form-factor can report a larger width than height if the user turns on the
+		// developer console. The actual threshold value is somewhat arbitrary, we just
+		// need to make sure it is large enough to exclude the developer console case.
+
+		var ww = window.innerWidth || $( window ).width(),
+			wh = window.innerHeight || $( window ).height(),
+			landscape_threshold = 50;
+
+		initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
+
+
+		// Now check to see if the current window.orientation is 0 or 180.
+		initial_orientation_is_default = portrait_map[ window.orientation ];
+
+		// If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR*
+		// if the initial orientation is portrait, but window.orientation reports 90 or -90, we
+		// need to flip our portrait_map values because landscape is the default orientation for
+		// this device/browser.
+		if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) {
+			portrait_map = { "-90": true, "90": true };
+		}
+	}
+
+	$.event.special.orientationchange = special_event = {
+		setup: function() {
+			// If the event is supported natively, return false so that jQuery
+			// will bind to the event using DOM methods.
+			if ( $.support.orientation && $.mobile.orientationChangeEnabled ) {
+				return false;
+			}
+
+			// Get the current orientation to avoid initial double-triggering.
+			last_orientation = get_orientation();
+
+			// Because the orientationchange event doesn't exist, simulate the
+			// event by testing window dimensions on resize.
+			win.bind( "throttledresize", handler );
+		},
+		teardown: function(){
+			// If the event is supported natively, return false so that
+			// jQuery will unbind the event using DOM methods.
+			if ( $.support.orientation && $.mobile.orientationChangeEnabled ) {
+				return false;
+			}
+
+			// Because the orientationchange event doesn't exist, unbind the
+			// resize event handler.
+			win.unbind( "throttledresize", handler );
+		},
+		add: function( handleObj ) {
+			// Save a reference to the bound event handler.
+			var old_handler = handleObj.handler;
+
+
+			handleObj.handler = function( event ) {
+				// Modify event object, adding the .orientation property.
+				event.orientation = get_orientation();
+
+				// Call the originally-bound event handler and return its result.
+				return old_handler.apply( this, arguments );
+			};
+		}
+	};
+
+	// If the event is not supported natively, this handler will be bound to
+	// the window resize event to simulate the orientationchange event.
+	function handler() {
+		// Get the current orientation.
+		var orientation = get_orientation();
+
+		if ( orientation !== last_orientation ) {
+			// The orientation has changed, so trigger the orientationchange event.
+			last_orientation = orientation;
+			win.trigger( "orientationchange" );
+		}
+	}
+
+	// Get the current page orientation. This method is exposed publicly, should it
+	// be needed, as jQuery.event.special.orientationchange.orientation()
+	$.event.special.orientationchange.orientation = get_orientation = function() {
+		var isPortrait = true, elem = document.documentElement;
+
+		// prefer window orientation to the calculation based on screensize as
+		// the actual screen resize takes place before or after the orientation change event
+		// has been fired depending on implementation (eg android 2.3 is before, iphone after).
+		// More testing is required to determine if a more reliable method of determining the new screensize
+		// is possible when orientationchange is fired. (eg, use media queries + element + opacity)
+		if ( $.support.orientation ) {
+			// if the window orientation registers as 0 or 180 degrees report
+			// portrait, otherwise landscape
+			isPortrait = portrait_map[ window.orientation ];
+		} else {
+			isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;
+		}
+
+		return isPortrait ? "portrait" : "landscape";
+	};
+
+})( jQuery, window );
+
+
+// throttled resize event
+(function() {
+
+	$.event.special.throttledresize = {
+		setup: function() {
+			$( this ).bind( "resize", handler );
+		},
+		teardown: function(){
+			$( this ).unbind( "resize", handler );
+		}
+	};
+
+	var throttle = 250,
+		handler = function() {
+			curr = ( new Date() ).getTime();
+			diff = curr - lastCall;
+
+			if ( diff >= throttle ) {
+
+				lastCall = curr;
+				$( this ).trigger( "throttledresize" );
+
+			} else {
+
+				if ( heldCall ) {
+					clearTimeout( heldCall );
+				}
+
+				// Promise a held call will still execute
+				heldCall = setTimeout( handler, throttle - diff );
+			}
+		},
+		lastCall = 0,
+		heldCall,
+		curr,
+		diff;
+})();
+
+
+$.each({
+	scrollstop: "scrollstart",
+	taphold: "tap",
+	swipeleft: "swipe",
+	swiperight: "swipe"
+}, function( event, sourceEvent ) {
+
+	$.event.special[ event ] = {
+		setup: function() {
+			$( this ).bind( sourceEvent, $.noop );
+		}
+	};
+});
+
+})( jQuery, this );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.page", $.mobile.widget, {
+	options: {
+		theme: "c",
+		domCache: false,
+		keepNativeDefault: ":jqmData(role='none'), :jqmData(role='nojs')"
+	},
+
+	_create: function() {
+		
+		var self = this;
+		
+		// if false is returned by the callbacks do not create the page
+		if( self._trigger( "beforecreate" ) === false ){
+			return false;
+		}
+
+		self.element
+			.attr( "tabindex", "0" )
+			.addClass( "ui-page ui-body-" + self.options.theme )
+			.bind( "pagebeforehide", function(){
+				self.removeContainerBackground();
+			} )
+			.bind( "pagebeforeshow", function(){
+				self.setContainerBackground();
+			} );
+
+	},
+	
+	removeContainerBackground: function(){
+		$.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) );
+	},
+	
+	// set the page container background to the page theme
+	setContainerBackground: function( theme ){
+		if( this.options.theme ){
+			$.mobile.pageContainer.addClass( "ui-overlay-" + ( theme || this.options.theme ) );
+		}
+	},
+
+	keepNativeSelector: function() {
+		var options = this.options,
+			keepNativeDefined = options.keepNative && $.trim(options.keepNative);
+
+		if( keepNativeDefined && options.keepNative !== options.keepNativeDefault ){
+			return [options.keepNative, options.keepNativeDefault].join(", ");
+		}
+
+		return options.keepNativeDefault;
+	}
+});
+})( jQuery );
+
+
+(function( $, window, undefined ) {
+
+var createHandler = function( sequential ){
+	
+	// Default to sequential
+	if( sequential === undefined ){
+		sequential = true;
+	}
+	
+	return function( name, reverse, $to, $from ) {
+
+		var deferred = new $.Deferred(),
+			reverseClass = reverse ? " reverse" : "",
+			active	= $.mobile.urlHistory.getActive(),
+			toScroll = active.lastScroll || $.mobile.defaultHomeScroll,
+			screenHeight = $.mobile.getScreenHeight(),
+			maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $( window ).width() > $.mobile.maxTransitionWidth,
+			none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none" || Math.max( $( window ).scrollTop(), toScroll ) > $.mobile.getMaxScrollForTransition(),
+			toPreClass = " ui-page-pre-in",
+			toggleViewportClass = function(){
+				$.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name );
+			},
+			scrollPage = function(){
+				// By using scrollTo instead of silentScroll, we can keep things better in order
+				// Just to be precautios, disable scrollstart listening like silentScroll would
+				$.event.special.scrollstart.enabled = false;
+				
+				window.scrollTo( 0, toScroll );
+				
+				// reenable scrollstart listening like silentScroll would
+				setTimeout(function() {
+					$.event.special.scrollstart.enabled = true;
+				}, 150 );
+			},
+			cleanFrom = function(){
+				$from
+					.removeClass( $.mobile.activePageClass + " out in reverse " + name )
+					.height( "" );
+			},
+			startOut = function(){
+				// if it's not sequential, call the doneOut transition to start the TO page animating in simultaneously
+				if( !sequential ){
+					doneOut();
+				}
+				else {
+					$from.animationComplete( doneOut );	
+				}
+				
+				// Set the from page's height and start it transitioning out
+				// Note: setting an explicit height helps eliminate tiling in the transitions
+				$from
+					.height( screenHeight + $(window ).scrollTop() )
+					.addClass( name + " out" + reverseClass );
+			},
+			
+			doneOut = function() {
+
+				if ( $from && sequential ) {
+					cleanFrom();
+				}
+				
+				startIn();
+			},
+			
+			startIn = function(){	
+			
+				$to.addClass( $.mobile.activePageClass );				
+			
+				// Send focus to page as it is now display: block
+				$.mobile.focusPage( $to );
+
+				// Set to page height
+				$to.height( screenHeight + toScroll );
+				
+				scrollPage();
+				
+				if( !none ){
+					$to.animationComplete( doneIn );
+				}
+				
+				$to.addClass( name + " in" + reverseClass );
+				
+				if( none ){
+					doneIn();
+				}
+				
+			},
+		
+			doneIn = function() {
+			
+				if ( !sequential ) {
+					
+					if( $from ){
+						cleanFrom();
+					}
+				}
+			
+				$to
+					.removeClass( "out in reverse " + name )
+					.height( "" );
+				
+				toggleViewportClass();
+				
+				// In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition
+				// This ensures we jump to that spot after the fact, if we aren't there already.
+				if( $( window ).scrollTop() !== toScroll ){
+					scrollPage();
+				}
+
+				deferred.resolve( name, reverse, $to, $from, true );
+			};
+
+		toggleViewportClass();
+	
+		if ( $from && !none ) {
+			startOut();
+		}
+		else {
+			doneOut();
+		}
+
+		return deferred.promise();
+	};
+}
+
+// generate the handlers from the above
+var sequentialHandler = createHandler(),
+	simultaneousHandler = createHandler( false ),
+	defaultGetMaxScrollForTransition = function() {
+		return $.mobile.getScreenHeight() * 3;
+	};
+
+// Make our transition handler the public default.
+$.mobile.defaultTransitionHandler = sequentialHandler;
+
+//transition handler dictionary for 3rd party transitions
+$.mobile.transitionHandlers = {
+	"default": $.mobile.defaultTransitionHandler,
+	"sequential": sequentialHandler,
+	"simultaneous": simultaneousHandler
+};
+
+$.mobile.transitionFallbacks = {};
+
+// Set the getMaxScrollForTransition to default if no implementation was set by user
+$.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defaultGetMaxScrollForTransition;
+})( jQuery, this );
+
+( function( $, undefined ) {
+
+	//define vars for interal use
+	var $window = $( window ),
+		$html = $( 'html' ),
+		$head = $( 'head' ),
+
+		//url path helpers for use in relative url management
+		path = {
+
+			// This scary looking regular expression parses an absolute URL or its relative
+			// variants (protocol, site, document, query, and hash), into the various
+			// components (protocol, host, path, query, fragment, etc that make up the
+			// URL as well as some other commonly used sub-parts. When used with RegExp.exec()
+			// or String.match, it parses the URL into a results array that looks like this:
+			//
+			//     [0]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread#msg-content
+			//     [1]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread
+			//     [2]: http://jblas:password@mycompany.com:8080/mail/inbox
+			//     [3]: http://jblas:password@mycompany.com:8080
+			//     [4]: http:
+			//     [5]: //
+			//     [6]: jblas:password@mycompany.com:8080
+			//     [7]: jblas:password
+			//     [8]: jblas
+			//     [9]: password
+			//    [10]: mycompany.com:8080
+			//    [11]: mycompany.com
+			//    [12]: 8080
+			//    [13]: /mail/inbox
+			//    [14]: /mail/
+			//    [15]: inbox
+			//    [16]: ?msg=1234&type=unread
+			//    [17]: #msg-content
+			//
+			urlParseRE: /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,
+
+			//Parse a URL into a structure that allows easy access to
+			//all of the URL components by name.
+			parseUrl: function( url ) {
+				// If we're passed an object, we'll assume that it is
+				// a parsed url object and just return it back to the caller.
+				if ( $.type( url ) === "object" ) {
+					return url;
+				}
+
+				var matches = path.urlParseRE.exec( url || "" ) || [];
+
+					// Create an object that allows the caller to access the sub-matches
+					// by name. Note that IE returns an empty string instead of undefined,
+					// like all other browsers do, so we normalize everything so its consistent
+					// no matter what browser we're running on.
+					return {
+						href:         matches[  0 ] || "",
+						hrefNoHash:   matches[  1 ] || "",
+						hrefNoSearch: matches[  2 ] || "",
+						domain:       matches[  3 ] || "",
+						protocol:     matches[  4 ] || "",
+						doubleSlash:  matches[  5 ] || "",
+						authority:    matches[  6 ] || "",
+						username:     matches[  8 ] || "",
+						password:     matches[  9 ] || "",
+						host:         matches[ 10 ] || "",
+						hostname:     matches[ 11 ] || "",
+						port:         matches[ 12 ] || "",
+						pathname:     matches[ 13 ] || "",
+						directory:    matches[ 14 ] || "",
+						filename:     matches[ 15 ] || "",
+						search:       matches[ 16 ] || "",
+						hash:         matches[ 17 ] || ""
+					};
+			},
+
+			//Turn relPath into an asbolute path. absPath is
+			//an optional absolute path which describes what
+			//relPath is relative to.
+			makePathAbsolute: function( relPath, absPath ) {
+				if ( relPath && relPath.charAt( 0 ) === "/" ) {
+					return relPath;
+				}
+
+				relPath = relPath || "";
+				absPath = absPath ? absPath.replace( /^\/|(\/[^\/]*|[^\/]+)$/g, "" ) : "";
+
+				var absStack = absPath ? absPath.split( "/" ) : [],
+					relStack = relPath.split( "/" );
+				for ( var i = 0; i < relStack.length; i++ ) {
+					var d = relStack[ i ];
+					switch ( d ) {
+						case ".":
+							break;
+						case "..":
+							if ( absStack.length ) {
+								absStack.pop();
+							}
+							break;
+						default:
+							absStack.push( d );
+							break;
+					}
+				}
+				return "/" + absStack.join( "/" );
+			},
+
+			//Returns true if both urls have the same domain.
+			isSameDomain: function( absUrl1, absUrl2 ) {
+				return path.parseUrl( absUrl1 ).domain === path.parseUrl( absUrl2 ).domain;
+			},
+
+			//Returns true for any relative variant.
+			isRelativeUrl: function( url ) {
+				// All relative Url variants have one thing in common, no protocol.
+				return path.parseUrl( url ).protocol === "";
+			},
+
+			//Returns true for an absolute url.
+			isAbsoluteUrl: function( url ) {
+				return path.parseUrl( url ).protocol !== "";
+			},
+
+			//Turn the specified realtive URL into an absolute one. This function
+			//can handle all relative variants (protocol, site, document, query, fragment).
+			makeUrlAbsolute: function( relUrl, absUrl ) {
+				if ( !path.isRelativeUrl( relUrl ) ) {
+					return relUrl;
+				}
+
+				var relObj = path.parseUrl( relUrl ),
+					absObj = path.parseUrl( absUrl ),
+					protocol = relObj.protocol || absObj.protocol,
+					doubleSlash = relObj.protocol ? relObj.doubleSlash : ( relObj.doubleSlash || absObj.doubleSlash ),
+					authority = relObj.authority || absObj.authority,
+					hasPath = relObj.pathname !== "",
+					pathname = path.makePathAbsolute( relObj.pathname || absObj.filename, absObj.pathname ),
+					search = relObj.search || ( !hasPath && absObj.search ) || "",
+					hash = relObj.hash;
+
+				return protocol + doubleSlash + authority + pathname + search + hash;
+			},
+
+			//Add search (aka query) params to the specified url.
+			addSearchParams: function( url, params ) {
+				var u = path.parseUrl( url ),
+					p = ( typeof params === "object" ) ? $.param( params ) : params,
+					s = u.search || "?";
+				return u.hrefNoSearch + s + ( s.charAt( s.length - 1 ) !== "?" ? "&" : "" ) + p + ( u.hash || "" );
+			},
+
+			convertUrlToDataUrl: function( absUrl ) {
+				var u = path.parseUrl( absUrl );
+				if ( path.isEmbeddedPage( u ) ) {
+				    // For embedded pages, remove the dialog hash key as in getFilePath(),
+				    // otherwise the Data Url won't match the id of the embedded Page.
+					return u.hash.split( dialogHashKey )[0].replace( /^#/, "" );
+				} else if ( path.isSameDomain( u, documentBase ) ) {
+					return u.hrefNoHash.replace( documentBase.domain, "" ).split( dialogHashKey )[0];
+				}
+				return absUrl;
+			},
+
+			//get path from current hash, or from a file path
+			get: function( newPath ) {
+				if( newPath === undefined ) {
+					newPath = location.hash;
+				}
+				return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, '' );
+			},
+
+			//return the substring of a filepath before the sub-page key, for making a server request
+			getFilePath: function( path ) {
+				var splitkey = '&' + $.mobile.subPageUrlKey;
+				return path && path.split( splitkey )[0].split( dialogHashKey )[0];
+			},
+
+			//set location hash to path
+			set: function( path ) {
+				location.hash = path;
+			},
+
+			//test if a given url (string) is a path
+			//NOTE might be exceptionally naive
+			isPath: function( url ) {
+				return ( /\// ).test( url );
+			},
+
+			//return a url path with the window's location protocol/hostname/pathname removed
+			clean: function( url ) {
+				return url.replace( documentBase.domain, "" );
+			},
+
+			//just return the url without an initial #
+			stripHash: function( url ) {
+				return url.replace( /^#/, "" );
+			},
+
+			//remove the preceding hash, any query params, and dialog notations
+			cleanHash: function( hash ) {
+				return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) );
+			},
+
+			isHashValid: function( hash ) {
+				return /^#[^#]+$/.test(hash);
+			},
+
+			//check whether a url is referencing the same domain, or an external domain or different protocol
+			//could be mailto, etc
+			isExternal: function( url ) {
+				var u = path.parseUrl( url );
+				return u.protocol && u.domain !== documentUrl.domain ? true : false;
+			},
+
+			hasProtocol: function( url ) {
+				return ( /^(:?\w+:)/ ).test( url );
+			},
+
+			//check if the specified url refers to the first page in the main application document.
+			isFirstPageUrl: function( url ) {
+				// We only deal with absolute paths.
+				var u = path.parseUrl( path.makeUrlAbsolute( url, documentBase ) ),
+
+					// Does the url have the same path as the document?
+					samePath = u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ),
+
+					// Get the first page element.
+					fp = $.mobile.firstPage,
+
+					// Get the id of the first page element if it has one.
+					fpId = fp && fp[0] ? fp[0].id : undefined;
+
+					// The url refers to the first page if the path matches the document and
+					// it either has no hash value, or the hash is exactly equal to the id of the
+					// first page element.
+					return samePath && ( !u.hash || u.hash === "#" || ( fpId && u.hash.replace( /^#/, "" ) === fpId ) );
+			},
+
+			isEmbeddedPage: function( url ) {
+				var u = path.parseUrl( url );
+
+				//if the path is absolute, then we need to compare the url against
+				//both the documentUrl and the documentBase. The main reason for this
+				//is that links embedded within external documents will refer to the
+				//application document, whereas links embedded within the application
+				//document will be resolved against the document base.
+				if ( u.protocol !== "" ) {
+					return ( u.hash && ( u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ) ) );
+				}
+				return (/^#/).test( u.href );
+			},
+
+
+			// Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR
+			// requests if the document doing the request was loaded via the file:// protocol.
+			// This is usually to allow the application to "phone home" and fetch app specific
+			// data. We normally let the browser handle external/cross-domain urls, but if the
+			// allowCrossDomainPages option is true, we will allow cross-domain http/https
+			// requests to go through our page loading logic.
+			isPermittedCrossDomainRequest: function( docUrl, reqUrl ) {
+				return $.mobile.allowCrossDomainPages
+					&& docUrl.protocol === "file:"
+					&& reqUrl.search( /^https?:/ ) != -1;
+			}
+		},
+
+		//will be defined when a link is clicked and given an active class
+		$activeClickedLink = null,
+
+		//urlHistory is purely here to make guesses at whether the back or forward button was clicked
+		//and provide an appropriate transition
+		urlHistory = {
+			// Array of pages that are visited during a single page load.
+			// Each has a url and optional transition, title, and pageUrl (which represents the file path, in cases where URL is obscured, such as dialogs)
+			stack: [],
+
+			//maintain an index number for the active page in the stack
+			activeIndex: 0,
+
+			//get active
+			getActive: function() {
+				return urlHistory.stack[ urlHistory.activeIndex ];
+			},
+
+			getPrev: function() {
+				return urlHistory.stack[ urlHistory.activeIndex - 1 ];
+			},
+
+			getNext: function() {
+				return urlHistory.stack[ urlHistory.activeIndex + 1 ];
+			},
+
+			// addNew is used whenever a new page is added
+			addNew: function( url, transition, title, pageUrl, role ) {
+				//if there's forward history, wipe it
+				if( urlHistory.getNext() ) {
+					urlHistory.clearForward();
+				}
+
+				urlHistory.stack.push( {url : url, transition: transition, title: title, pageUrl: pageUrl, role: role } );
+
+				urlHistory.activeIndex = urlHistory.stack.length - 1;
+			},
+
+			//wipe urls ahead of active index
+			clearForward: function() {
+				urlHistory.stack = urlHistory.stack.slice( 0, urlHistory.activeIndex + 1 );
+			},
+
+			directHashChange: function( opts ) {
+				var back , forward, newActiveIndex, prev = this.getActive();
+
+				// check if url is in history and if it's ahead or behind current page
+				$.each( urlHistory.stack, function( i, historyEntry ) {
+
+					//if the url is in the stack, it's a forward or a back
+					if( opts.currentUrl === historyEntry.url ) {
+						//define back and forward by whether url is older or newer than current page
+						back = i < urlHistory.activeIndex;
+						forward = !back;
+						newActiveIndex = i;
+					}
+				});
+
+				// save new page index, null check to prevent falsey 0 result
+				this.activeIndex = newActiveIndex !== undefined ? newActiveIndex : this.activeIndex;
+
+				if( back ) {
+					( opts.either || opts.isBack )( true );
+				} else if( forward ) {
+					( opts.either || opts.isForward )( false );
+				}
+			},
+
+			//disable hashchange event listener internally to ignore one change
+			//toggled internally when location.hash is updated to match the url of a successful page load
+			ignoreNextHashChange: false
+		},
+
+		//define first selector to receive focus when a page is shown
+		focusable = "[tabindex],a,button:visible,select:visible,input",
+
+		//queue to hold simultanious page transitions
+		pageTransitionQueue = [],
+
+		//indicates whether or not page is in process of transitioning
+		isPageTransitioning = false,
+
+		//nonsense hash change key for dialogs, so they create a history entry
+		dialogHashKey = "&ui-state=dialog",
+
+		//existing base tag?
+		$base = $head.children( "base" ),
+
+		//tuck away the original document URL minus any fragment.
+		documentUrl = path.parseUrl( location.href ),
+
+		//if the document has an embedded base tag, documentBase is set to its
+		//initial value. If a base tag does not exist, then we default to the documentUrl.
+		documentBase = $base.length ? path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), documentUrl.href ) ) : documentUrl,
+
+		//cache the comparison once.
+		documentBaseDiffers = ( documentUrl.hrefNoHash !== documentBase.hrefNoHash ),
+
+		getScreenHeight = $.mobile.getScreenHeight;
+
+		//base element management, defined depending on dynamic base tag support
+		var base = $.support.dynamicBaseTag ? {
+
+			//define base element, for use in routing asset urls that are referenced in Ajax-requested markup
+			element: ( $base.length ? $base : $( "<base>", { href: documentBase.hrefNoHash } ).prependTo( $head ) ),
+
+			//set the generated BASE element's href attribute to a new page's base path
+			set: function( href ) {
+				base.element.attr( "href", path.makeUrlAbsolute( href, documentBase ) );
+			},
+
+			//set the generated BASE element's href attribute to a new page's base path
+			reset: function() {
+				base.element.attr( "href", documentBase.hrefNoHash );
+			}
+
+		} : undefined;
+
+/*
+	internal utility functions
+--------------------------------------*/
+
+
+	//direct focus to the page title, or otherwise first focusable element
+	$.mobile.focusPage = function ( page ) {
+		var autofocus = page.find("[autofocus]"),
+			pageTitle = page.find( ".ui-title:eq(0)" );
+
+		if( autofocus.length ) {
+			autofocus.focus();
+			return;
+		}
+
+		if( pageTitle.length ) {
+			pageTitle.focus();
+		}
+		else{
+			page.focus();
+		}
+	}
+
+	//remove active classes after page transition or error
+	function removeActiveLinkClass( forceRemoval ) {
+		if( !!$activeClickedLink && ( !$activeClickedLink.closest( '.ui-page-active' ).length || forceRemoval ) ) {
+			$activeClickedLink.removeClass( $.mobile.activeBtnClass );
+		}
+		$activeClickedLink = null;
+	}
+
+	function releasePageTransitionLock() {
+		isPageTransitioning = false;
+		if( pageTransitionQueue.length > 0 ) {
+			$.mobile.changePage.apply( null, pageTransitionQueue.pop() );
+		}
+	}
+
+	// Save the last scroll distance per page, before it is hidden
+	var setLastScrollEnabled = true,
+		setLastScroll, delayedSetLastScroll;
+
+	setLastScroll = function() {
+		// this barrier prevents setting the scroll value based on the browser
+		// scrolling the window based on a hashchange
+		if( !setLastScrollEnabled ) {
+			return;
+		}
+
+		var active = $.mobile.urlHistory.getActive();
+
+		if( active ) {
+			var lastScroll = $window.scrollTop();
+
+			// Set active page's lastScroll prop.
+			// If the location we're scrolling to is less than minScrollBack, let it go.
+			active.lastScroll = lastScroll < $.mobile.minScrollBack ? $.mobile.defaultHomeScroll : lastScroll;
+		}
+	};
+
+	// bind to scrollstop to gather scroll position. The delay allows for the hashchange
+	// event to fire and disable scroll recording in the case where the browser scrolls
+	// to the hash targets location (sometimes the top of the page). once pagechange fires
+	// getLastScroll is again permitted to operate
+	delayedSetLastScroll = function() {
+		setTimeout( setLastScroll, 100 );
+	};
+
+	// disable an scroll setting when a hashchange has been fired, this only works
+	// because the recording of the scroll position is delayed for 100ms after
+	// the browser might have changed the position because of the hashchange
+	$window.bind( $.support.pushState ? "popstate" : "hashchange", function() {
+	 	setLastScrollEnabled = false;
+	});
+
+	// handle initial hashchange from chrome :(
+	$window.one( $.support.pushState ? "popstate" : "hashchange", function() {
+		setLastScrollEnabled = true;
+	});
+
+	// wait until the mobile page container has been determined to bind to pagechange
+	$window.one( "pagecontainercreate", function(){
+		// once the page has changed, re-enable the scroll recording
+		$.mobile.pageContainer.bind( "pagechange", function() {
+
+	 		setLastScrollEnabled = true;
+
+			// remove any binding that previously existed on the get scroll
+			// which may or may not be different than the scroll element determined for
+			// this page previously
+			$window.unbind( "scrollstop", delayedSetLastScroll );
+
+			// determine and bind to the current scoll element which may be the window
+			// or in the case of touch overflow the element with touch overflow
+			$window.bind( "scrollstop", delayedSetLastScroll );
+		});
+	});
+
+	// bind to scrollstop for the first page as "pagechange" won't be fired in that case
+	$window.bind( "scrollstop", delayedSetLastScroll );
+
+	//function for transitioning between two existing pages
+	function transitionPages( toPage, fromPage, transition, reverse ) {
+
+		if( fromPage ) {
+			//trigger before show/hide events
+			fromPage.data( "page" )._trigger( "beforehide", null, { nextPage: toPage } );
+		}
+
+		toPage.data( "page" )._trigger( "beforeshow", null, { prevPage: fromPage || $( "" ) } );
+
+		//clear page loader
+		$.mobile.hidePageLoadingMsg();
+
+		// If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified
+		if( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ){
+			transition = $.mobile.transitionFallbacks[ transition ];
+		}
+
+		//find the transition handler for the specified transition. If there
+		//isn't one in our transitionHandlers dictionary, use the default one.
+		//call the handler immediately to kick-off the transition.
+		var th = $.mobile.transitionHandlers[ transition || "default" ] || $.mobile.defaultTransitionHandler,
+			promise = th( transition, reverse, toPage, fromPage );
+
+		promise.done(function() {
+
+			//trigger show/hide events
+			if( fromPage ) {
+				fromPage.data( "page" )._trigger( "hide", null, { nextPage: toPage } );
+			}
+
+			//trigger pageshow, define prevPage as either fromPage or empty jQuery obj
+			toPage.data( "page" )._trigger( "show", null, { prevPage: fromPage || $( "" ) } );
+		});
+
+		return promise;
+	}
+
+	//simply set the active page's minimum height to screen height, depending on orientation
+	function resetActivePageHeight(){
+		var aPage = $( "." + $.mobile.activePageClass ),
+			aPagePadT = parseFloat( aPage.css( "padding-top" ) ),
+			aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ),
+			aPageBorderT = parseFloat( aPage.css( "border-top-width" ) ),
+			aPageBorderB = parseFloat( aPage.css( "border-bottom-width" ) );
+
+		aPage.css( "min-height", getScreenHeight() - aPagePadT - aPagePadB - aPageBorderT - aPageBorderB );
+	}
+
+	//shared page enhancements
+	function enhancePage( $page, role ) {
+		// If a role was specified, make sure the data-role attribute
+		// on the page element is in sync.
+		if( role ) {
+			$page.attr( "data-" + $.mobile.ns + "role", role );
+		}
+
+		//run page plugin
+		$page.page();
+	}
+
+/* exposed $.mobile methods	 */
+
+	//animation complete callback
+	$.fn.animationComplete = function( callback ) {
+		if( $.support.cssTransitions ) {
+			return $( this ).one( 'webkitAnimationEnd animationend', callback );
+		}
+		else{
+			// defer execution for consistency between webkit/non webkit
+			setTimeout( callback, 0 );
+			return $( this );
+		}
+	};
+
+	//expose path object on $.mobile
+	$.mobile.path = path;
+
+	//expose base object on $.mobile
+	$.mobile.base = base;
+
+	//history stack
+	$.mobile.urlHistory = urlHistory;
+
+	$.mobile.dialogHashKey = dialogHashKey;
+
+
+
+	//enable cross-domain page support
+	$.mobile.allowCrossDomainPages = false;
+
+	//return the original document url
+	$.mobile.getDocumentUrl = function(asParsedObject) {
+		return asParsedObject ? $.extend( {}, documentUrl ) : documentUrl.href;
+	};
+
+	//return the original document base url
+	$.mobile.getDocumentBase = function(asParsedObject) {
+		return asParsedObject ? $.extend( {}, documentBase ) : documentBase.href;
+	};
+
+	$.mobile._bindPageRemove = function() {
+		var page = $(this);
+
+		// when dom caching is not enabled or the page is embedded bind to remove the page on hide
+		if( !page.data("page").options.domCache
+				&& page.is(":jqmData(external-page='true')") ) {
+
+			page.bind( 'pagehide.remove', function() {
+				var $this = $( this ),
+					prEvent = new $.Event( "pageremove" );
+
+				$this.trigger( prEvent );
+
+				if( !prEvent.isDefaultPrevented() ){
+					$this.removeWithDependents();
+				}
+			});
+		}
+	};
+
+	// Load a page into the DOM.
+	$.mobile.loadPage = function( url, options ) {
+		// This function uses deferred notifications to let callers
+		// know when the page is done loading, or if an error has occurred.
+		var deferred = $.Deferred(),
+
+			// The default loadPage options with overrides specified by
+			// the caller.
+			settings = $.extend( {}, $.mobile.loadPage.defaults, options ),
+
+			// The DOM element for the page after it has been loaded.
+			page = null,
+
+			// If the reloadPage option is true, and the page is already
+			// in the DOM, dupCachedPage will be set to the page element
+			// so that it can be removed after the new version of the
+			// page is loaded off the network.
+			dupCachedPage = null,
+
+			// determine the current base url
+			findBaseWithDefault = function(){
+				var closestBase = ( $.mobile.activePage && getClosestBaseUrl( $.mobile.activePage ) );
+				return closestBase || documentBase.hrefNoHash;
+			},
+
+			// The absolute version of the URL passed into the function. This
+			// version of the URL may contain dialog/subpage params in it.
+			absUrl = path.makeUrlAbsolute( url, findBaseWithDefault() );
+
+
+		// If the caller provided data, and we're using "get" request,
+		// append the data to the URL.
+		if ( settings.data && settings.type === "get" ) {
+			absUrl = path.addSearchParams( absUrl, settings.data );
+			settings.data = undefined;
+		}
+
+		// If the caller is using a "post" request, reloadPage must be true
+		if(  settings.data && settings.type === "post" ){
+			settings.reloadPage = true;
+		}
+
+			// The absolute version of the URL minus any dialog/subpage params.
+			// In otherwords the real URL of the page to be loaded.
+		var fileUrl = path.getFilePath( absUrl ),
+
+			// The version of the Url actually stored in the data-url attribute of
+			// the page. For embedded pages, it is just the id of the page. For pages
+			// within the same domain as the document base, it is the site relative
+			// path. For cross-domain pages (Phone Gap only) the entire absolute Url
+			// used to load the page.
+			dataUrl = path.convertUrlToDataUrl( absUrl );
+
+		// Make sure we have a pageContainer to work with.
+		settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
+
+		// Check to see if the page already exists in the DOM.
+		page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" );
+
+		// If we failed to find the page, check to see if the url is a
+		// reference to an embedded page. If so, it may have been dynamically
+		// injected by a developer, in which case it would be lacking a data-url
+		// attribute and in need of enhancement.
+		if ( page.length === 0 && dataUrl && !path.isPath( dataUrl ) ) {
+			page = settings.pageContainer.children( "#" + dataUrl )
+				.attr( "data-" + $.mobile.ns + "url", dataUrl );
+		}
+
+		// If we failed to find a page in the DOM, check the URL to see if it
+		// refers to the first page in the application. If it isn't a reference
+		// to the first page and refers to non-existent embedded page, error out.
+		if ( page.length === 0 ) {
+			if ( $.mobile.firstPage && path.isFirstPageUrl( fileUrl ) ) {
+				// Check to make sure our cached-first-page is actually
+				// in the DOM. Some user deployed apps are pruning the first
+				// page from the DOM for various reasons, we check for this
+				// case here because we don't want a first-page with an id
+				// falling through to the non-existent embedded page error
+				// case. If the first-page is not in the DOM, then we let
+				// things fall through to the ajax loading code below so
+				// that it gets reloaded.
+				if ( $.mobile.firstPage.parent().length ) {
+					page = $( $.mobile.firstPage );
+				}
+			} else if ( path.isEmbeddedPage( fileUrl )  ) {
+				deferred.reject( absUrl, options );
+				return deferred.promise();
+			}
+		}
+
+		// Reset base to the default document base.
+		if ( base ) {
+			base.reset();
+		}
+
+		// If the page we are interested in is already in the DOM,
+		// and the caller did not indicate that we should force a
+		// reload of the file, we are done. Otherwise, track the
+		// existing page as a duplicated.
+		if ( page.length ) {
+			if ( !settings.reloadPage ) {
+				enhancePage( page, settings.role );
+				deferred.resolve( absUrl, options, page );
+				return deferred.promise();
+			}
+			dupCachedPage = page;
+		}
+
+		var mpc = settings.pageContainer,
+			pblEvent = new $.Event( "pagebeforeload" ),
+			triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings };
+
+		// Let listeners know we're about to load a page.
+		mpc.trigger( pblEvent, triggerData );
+
+		// If the default behavior is prevented, stop here!
+		if( pblEvent.isDefaultPrevented() ){
+			return deferred.promise();
+		}
+
+		if ( settings.showLoadMsg ) {
+
+			// This configurable timeout allows cached pages a brief delay to load without showing a message
+			var loadMsgDelay = setTimeout(function(){
+					$.mobile.showPageLoadingMsg();
+				}, settings.loadMsgDelay ),
+
+				// Shared logic for clearing timeout and removing message.
+				hideMsg = function(){
+
+					// Stop message show timer
+					clearTimeout( loadMsgDelay );
+
+					// Hide loading message
+					$.mobile.hidePageLoadingMsg();
+				};
+		}
+
+		if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) {
+			deferred.reject( absUrl, options );
+		} else {
+			// Load the new page.
+			$.ajax({
+				url: fileUrl,
+				type: settings.type,
+				data: settings.data,
+				dataType: "html",
+				success: function( html, textStatus, xhr ) {
+					//pre-parse html to check for a data-url,
+					//use it as the new fileUrl, base path, etc
+					var all = $( "<div></div>" ),
+
+						//page title regexp
+						newPageTitle = html.match( /<title[^>]*>([^<]*)/ ) && RegExp.$1,
+
+						// TODO handle dialogs again
+						pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + $.mobile.ns + "role=[\"']?page[\"']?[^>]*>)" ),
+						dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" );
+
+
+					// data-url must be provided for the base tag so resource requests can be directed to the
+					// correct url. loading into a temprorary element makes these requests immediately
+					if( pageElemRegex.test( html )
+							&& RegExp.$1
+							&& dataUrlRegex.test( RegExp.$1 )
+							&& RegExp.$1 ) {
+						url = fileUrl = path.getFilePath( RegExp.$1 );
+					}
+
+					if ( base ) {
+						base.set( fileUrl );
+					}
+
+					//workaround to allow scripts to execute when included in page divs
+					all.get( 0 ).innerHTML = html;
+					page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first();
+
+					//if page elem couldn't be found, create one and insert the body element's contents
+					if( !page.length ){
+						page = $( "<div data-" + $.mobile.ns + "role='page'>" + html.split( /<\/?body[^>]*>/gmi )[1] + "</div>" );
+					}
+
+					if ( newPageTitle && !page.jqmData( "title" ) ) {
+						if ( ~newPageTitle.indexOf( "&" ) ) {
+							newPageTitle = $( "<div>" + newPageTitle + "</div>" ).text();
+						}
+						page.jqmData( "title", newPageTitle );
+					}
+
+					//rewrite src and href attrs to use a base url
+					if( !$.support.dynamicBaseTag ) {
+						var newPath = path.get( fileUrl );
+						page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() {
+							var thisAttr = $( this ).is( '[href]' ) ? 'href' :
+									$(this).is('[src]') ? 'src' : 'action',
+								thisUrl = $( this ).attr( thisAttr );
+
+							// XXX_jblas: We need to fix this so that it removes the document
+							//            base URL, and then prepends with the new page URL.
+							//if full path exists and is same, chop it - helps IE out
+							thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );
+
+							if( !/^(\w+:|#|\/)/.test( thisUrl ) ) {
+								$( this ).attr( thisAttr, newPath + thisUrl );
+							}
+						});
+					}
+
+					//append to page and enhance
+					// TODO taging a page with external to make sure that embedded pages aren't removed
+					//      by the various page handling code is bad. Having page handling code in many
+					//      places is bad. Solutions post 1.0
+					page
+						.attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) )
+						.attr( "data-" + $.mobile.ns + "external-page", true )
+						.appendTo( settings.pageContainer );
+
+					// wait for page creation to leverage options defined on widget
+					page.one( 'pagecreate', $.mobile._bindPageRemove );
+
+					enhancePage( page, settings.role );
+
+					// Enhancing the page may result in new dialogs/sub pages being inserted
+					// into the DOM. If the original absUrl refers to a sub-page, that is the
+					// real page we are interested in.
+					if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) {
+						page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" );
+					}
+
+					//bind pageHide to removePage after it's hidden, if the page options specify to do so
+
+					// Remove loading message.
+					if ( settings.showLoadMsg ) {
+						hideMsg();
+					}
+
+					// Add the page reference and xhr to our triggerData.
+					triggerData.xhr = xhr;
+					triggerData.textStatus = textStatus;
+					triggerData.page = page;
+
+					// Let listeners know the page loaded successfully.
+					settings.pageContainer.trigger( "pageload", triggerData );
+
+					deferred.resolve( absUrl, options, page, dupCachedPage );
+				},
+				error: function( xhr, textStatus, errorThrown ) {
+					//set base back to current path
+					if( base ) {
+						base.set( path.get() );
+					}
+
+					// Add error info to our triggerData.
+					triggerData.xhr = xhr;
+					triggerData.textStatus = textStatus;
+					triggerData.errorThrown = errorThrown;
+
+					var plfEvent = new $.Event( "pageloadfailed" );
+
+					// Let listeners know the page load failed.
+					settings.pageContainer.trigger( plfEvent, triggerData );
+
+					// If the default behavior is prevented, stop here!
+					// Note that it is the responsibility of the listener/handler
+					// that called preventDefault(), to resolve/reject the
+					// deferred object within the triggerData.
+					if( plfEvent.isDefaultPrevented() ){
+						return;
+					}
+
+					// Remove loading message.
+					if ( settings.showLoadMsg ) {
+
+						// Remove loading message.
+						hideMsg();
+
+						// show error message
+						$.mobile.showPageLoadingMsg( $.mobile.pageLoadErrorMessageTheme, $.mobile.pageLoadErrorMessage, true );
+
+						// hide after delay
+						setTimeout( $.mobile.hidePageLoadingMsg, 1500 );
+					}
+
+					deferred.reject( absUrl, options );
+				}
+			});
+		}
+
+		return deferred.promise();
+	};
+
+	$.mobile.loadPage.defaults = {
+		type: "get",
+		data: undefined,
+		reloadPage: false,
+		role: undefined, // By default we rely on the role defined by the @data-role attribute.
+		showLoadMsg: false,
+		pageContainer: undefined,
+		loadMsgDelay: 50 // This delay allows loads that pull from browser cache to occur without showing the loading message.
+	};
+
+	// Show a specific page in the page container.
+	$.mobile.changePage = function( toPage, options ) {
+		// If we are in the midst of a transition, queue the current request.
+		// We'll call changePage() once we're done with the current transition to
+		// service the request.
+		if( isPageTransitioning ) {
+			pageTransitionQueue.unshift( arguments );
+			return;
+		}
+
+		var settings = $.extend( {}, $.mobile.changePage.defaults, options );
+
+		// Make sure we have a pageContainer to work with.
+		settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
+
+		// Make sure we have a fromPage.
+		settings.fromPage = settings.fromPage || $.mobile.activePage;
+
+		var mpc = settings.pageContainer,
+			pbcEvent = new $.Event( "pagebeforechange" ),
+			triggerData = { toPage: toPage, options: settings };
+
+		// Let listeners know we're about to change the current page.
+		mpc.trigger( pbcEvent, triggerData );
+
+		// If the default behavior is prevented, stop here!
+		if( pbcEvent.isDefaultPrevented() ){
+			return;
+		}
+
+		// We allow "pagebeforechange" observers to modify the toPage in the trigger
+		// data to allow for redirects. Make sure our toPage is updated.
+
+		toPage = triggerData.toPage;
+
+		// Set the isPageTransitioning flag to prevent any requests from
+		// entering this method while we are in the midst of loading a page
+		// or transitioning.
+
+		isPageTransitioning = true;
+
+		// If the caller passed us a url, call loadPage()
+		// to make sure it is loaded into the DOM. We'll listen
+		// to the promise object it returns so we know when
+		// it is done loading or if an error ocurred.
+		if ( typeof toPage == "string" ) {
+			$.mobile.loadPage( toPage, settings )
+				.done(function( url, options, newPage, dupCachedPage ) {
+					isPageTransitioning = false;
+					options.duplicateCachedPage = dupCachedPage;
+					$.mobile.changePage( newPage, options );
+				})
+				.fail(function( url, options ) {
+					isPageTransitioning = false;
+
+					//clear out the active button state
+					removeActiveLinkClass( true );
+
+					//release transition lock so navigation is free again
+					releasePageTransitionLock();
+					settings.pageContainer.trigger( "pagechangefailed", triggerData );
+				});
+			return;
+		}
+
+		// If we are going to the first-page of the application, we need to make
+		// sure settings.dataUrl is set to the application document url. This allows
+		// us to avoid generating a document url with an id hash in the case where the
+		// first-page of the document has an id attribute specified.
+		if ( toPage[ 0 ] === $.mobile.firstPage[ 0 ] && !settings.dataUrl ) {
+			settings.dataUrl = documentUrl.hrefNoHash;
+		}
+
+		// The caller passed us a real page DOM element. Update our
+		// internal state and then trigger a transition to the page.
+		var fromPage = settings.fromPage,
+			url = ( settings.dataUrl && path.convertUrlToDataUrl( settings.dataUrl ) ) || toPage.jqmData( "url" ),
+			// The pageUrl var is usually the same as url, except when url is obscured as a dialog url. pageUrl always contains the file path
+			pageUrl = url,
+			fileUrl = path.getFilePath( url ),
+			active = urlHistory.getActive(),
+			activeIsInitialPage = urlHistory.activeIndex === 0,
+			historyDir = 0,
+			pageTitle = document.title,
+			isDialog = settings.role === "dialog" || toPage.jqmData( "role" ) === "dialog";
+
+		// By default, we prevent changePage requests when the fromPage and toPage
+		// are the same element, but folks that generate content manually/dynamically
+		// and reuse pages want to be able to transition to the same page. To allow
+		// this, they will need to change the default value of allowSamePageTransition
+		// to true, *OR*, pass it in as an option when they manually call changePage().
+		// It should be noted that our default transition animations assume that the
+		// formPage and toPage are different elements, so they may behave unexpectedly.
+		// It is up to the developer that turns on the allowSamePageTransitiona option
+		// to either turn off transition animations, or make sure that an appropriate
+		// animation transition is used.
+		if( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) {
+			isPageTransitioning = false;
+			mpc.trigger( "pagechange", triggerData );
+
+			// Even if there is no page change to be done, we should keep the urlHistory in sync with the hash changes
+			if( settings.fromHashChange ) {
+				urlHistory.directHashChange({
+					currentUrl:	url,
+					isBack:		function() {},
+					isForward:	function() {}
+				});
+			}
+
+			return;
+		}
+
+		// We need to make sure the page we are given has already been enhanced.
+		enhancePage( toPage, settings.role );
+
+		// If the changePage request was sent from a hashChange event, check to see if the
+		// page is already within the urlHistory stack. If so, we'll assume the user hit
+		// the forward/back button and will try to match the transition accordingly.
+		if( settings.fromHashChange ) {
+			urlHistory.directHashChange({
+				currentUrl:	url,
+				isBack:		function() { historyDir = -1; },
+				isForward:	function() { historyDir = 1; }
+			});
+		}
+
+		// Kill the keyboard.
+		// XXX_jblas: We need to stop crawling the entire document to kill focus. Instead,
+		//            we should be tracking focus with a delegate() handler so we already have
+		//            the element in hand at this point.
+		// Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement
+		// is undefined when we are in an IFrame.
+		try {
+			if(document.activeElement && document.activeElement.nodeName.toLowerCase() != 'body') {
+				$(document.activeElement).blur();
+			} else {
+				$( "input:focus, textarea:focus, select:focus" ).blur();
+			}
+		} catch(e) {}
+
+		// Record whether we are at a place in history where a dialog used to be - if so, do not add a new history entry and do not change the hash either
+		var alreadyThere = false;
+
+		// If we're displaying the page as a dialog, we don't want the url
+		// for the dialog content to be used in the hash. Instead, we want
+		// to append the dialogHashKey to the url of the current page.
+		if ( isDialog && active ) {
+			// on the initial page load active.url is undefined and in that case should
+			// be an empty string. Moving the undefined -> empty string back into
+			// urlHistory.addNew seemed imprudent given undefined better represents
+			// the url state
+
+			// If we are at a place in history that once belonged to a dialog, reuse
+			// this state without adding to urlHistory and without modifying the hash.
+			// However, if a dialog is already displayed at this point, and we're
+			// about to display another dialog, then we must add another hash and
+			// history entry on top so that one may navigate back to the original dialog
+			if ( active.url.indexOf( dialogHashKey ) > -1 && !$.mobile.activePage.is( ".ui-dialog" ) ) {
+				settings.changeHash = false;
+				alreadyThere = true;
+			}
+
+			url = ( active.url || "" ) + dialogHashKey;
+
+			// tack on another dialogHashKey if this is the same as the initial hash
+			// this makes sure that a history entry is created for this dialog
+			if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) {
+				url += dialogHashKey;
+			}
+		}
+
+		// Set the location hash.
+		if( settings.changeHash !== false && url ) {
+			//disable hash listening temporarily
+			urlHistory.ignoreNextHashChange = true;
+			//update hash and history
+			path.set( url );
+		}
+
+		// if title element wasn't found, try the page div data attr too
+		// If this is a deep-link or a reload ( active === undefined ) then just use pageTitle
+		var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children(":jqmData(role='header')").find(".ui-title" ).getEncodedText();
+		if( !!newPageTitle && pageTitle == document.title ) {
+			pageTitle = newPageTitle;
+		}
+		if ( !toPage.jqmData( "title" ) ) {
+			toPage.jqmData( "title", pageTitle );
+		}
+
+		// Make sure we have a transition defined.
+		settings.transition = settings.transition
+			|| ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined )
+			|| ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition );
+
+		//add page to history stack if it's not back or forward
+		if( !historyDir && !alreadyThere ) {
+			urlHistory.addNew( url, settings.transition, pageTitle, pageUrl, settings.role );
+		}
+
+		//set page title
+		document.title = urlHistory.getActive().title;
+
+		//set "toPage" as activePage
+		$.mobile.activePage = toPage;
+
+		// If we're navigating back in the URL history, set reverse accordingly.
+		settings.reverse = settings.reverse || historyDir < 0;
+
+		transitionPages( toPage, fromPage, settings.transition, settings.reverse )
+			.done(function( name, reverse, $to, $from, alreadyFocused ) {
+				removeActiveLinkClass();
+
+				//if there's a duplicateCachedPage, remove it from the DOM now that it's hidden
+				if ( settings.duplicateCachedPage ) {
+					settings.duplicateCachedPage.remove();
+				}
+
+				// Send focus to the newly shown page. Moved from promise .done binding in transitionPages
+				// itself to avoid ie bug that reports offsetWidth as > 0 (core check for visibility)
+				// despite visibility: hidden addresses issue #2965
+				// https://github.com/jquery/jquery-mobile/issues/2965
+				if( !alreadyFocused ){
+					$.mobile.focusPage( toPage );
+				}
+
+				releasePageTransitionLock();
+
+				// Let listeners know we're all done changing the current page.
+				mpc.trigger( "pagechange", triggerData );
+			});
+	};
+
+	$.mobile.changePage.defaults = {
+		transition: undefined,
+		reverse: false,
+		changeHash: true,
+		fromHashChange: false,
+		role: undefined, // By default we rely on the role defined by the @data-role attribute.
+		duplicateCachedPage: undefined,
+		pageContainer: undefined,
+		showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage
+		dataUrl: undefined,
+		fromPage: undefined,
+		allowSamePageTransition: false
+	};
+
+/* Event Bindings - hashchange, submit, and click */
+	function findClosestLink( ele )
+	{
+		while ( ele ) {
+			// Look for the closest element with a nodeName of "a".
+			// Note that we are checking if we have a valid nodeName
+			// before attempting to access it. This is because the
+			// node we get called with could have originated from within
+			// an embedded SVG document where some symbol instance elements
+			// don't have nodeName defined on them, or strings are of type
+			// SVGAnimatedString.
+			if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() == "a" ) {
+				break;
+			}
+			ele = ele.parentNode;
+		}
+		return ele;
+	}
+
+	// The base URL for any given element depends on the page it resides in.
+	function getClosestBaseUrl( ele )
+	{
+		// Find the closest page and extract out its url.
+		var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ),
+			base = documentBase.hrefNoHash;
+
+		if ( !url || !path.isPath( url ) ) {
+			url = base;
+		}
+
+		return path.makeUrlAbsolute( url, base);
+	}
+
+	//The following event bindings should be bound after mobileinit has been triggered
+	//the following deferred is resolved in the init file
+	$.mobile.navreadyDeferred = $.Deferred();
+	$.mobile.navreadyDeferred.done( function(){
+		//bind to form submit events, handle with Ajax
+		$( document ).delegate( "form", "submit", function( event ) {
+			var $this = $( this );
+
+			if( !$.mobile.ajaxEnabled ||
+					// test that the form is, itself, ajax false
+					$this.is(":jqmData(ajax='false')") ||
+					// test that $.mobile.ignoreContentEnabled is set and
+					// the form or one of it's parents is ajax=false
+					!$this.jqmHijackable().length ) {
+				return;
+			}
+
+			var type = $this.attr( "method" ),
+				target = $this.attr( "target" ),
+				url = $this.attr( "action" );
+
+			// If no action is specified, browsers default to using the
+			// URL of the document containing the form. Since we dynamically
+			// pull in pages from external documents, the form should submit
+			// to the URL for the source document of the page containing
+			// the form.
+			if ( !url ) {
+				// Get the @data-url for the page containing the form.
+				url = getClosestBaseUrl( $this );
+				if ( url === documentBase.hrefNoHash ) {
+					// The url we got back matches the document base,
+					// which means the page must be an internal/embedded page,
+					// so default to using the actual document url as a browser
+					// would.
+					url = documentUrl.hrefNoSearch;
+				}
+			}
+
+			url = path.makeUrlAbsolute(  url, getClosestBaseUrl($this) );
+
+			if(( path.isExternal( url ) && !path.isPermittedCrossDomainRequest(documentUrl, url)) || target ) {
+				return;
+			}
+
+			$.mobile.changePage(
+				url,
+				{
+					type:		type && type.length && type.toLowerCase() || "get",
+					data:		$this.serialize(),
+					transition:	$this.jqmData( "transition" ),
+					direction:	$this.jqmData( "direction" ),
+					reloadPage:	true
+				}
+			);
+			event.preventDefault();
+		});
+
+		//add active state on vclick
+		$( document ).bind( "vclick", function( event ) {
+			// if this isn't a left click we don't care. Its important to note
+			// that when the virtual event is generated it will create the which attr
+			if ( event.which > 1 || !$.mobile.linkBindingEnabled ) {
+				return;
+			}
+
+			var link = findClosestLink( event.target );
+
+			// split from the previous return logic to avoid find closest where possible
+			// TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping
+			// can be avoided
+			if ( !$(link).jqmHijackable().length ) {
+				return;
+			}
+
+			if ( link ) {
+				if ( path.parseUrl( link.getAttribute( "href" ) || "#" ).hash !== "#" ) {
+					removeActiveLinkClass( true );
+					$activeClickedLink = $( link ).closest( ".ui-btn" ).not( ".ui-disabled" );
+					$activeClickedLink.addClass( $.mobile.activeBtnClass );
+				}
+			}
+		});
+
+		// click routing - direct to HTTP or Ajax, accordingly
+		$( document ).bind( "click", function( event ) {
+			if( !$.mobile.linkBindingEnabled ){
+				return;
+			}
+
+			var link = findClosestLink( event.target ), $link = $( link ), httpCleanup;
+
+			// If there is no link associated with the click or its not a left
+			// click we want to ignore the click
+			// TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping
+			// can be avoided
+			if ( !link || event.which > 1 || !$link.jqmHijackable().length ) {
+				return;
+			}
+
+			//remove active link class if external (then it won't be there if you come back)
+			httpCleanup = function(){
+				window.setTimeout( function() { removeActiveLinkClass( true ); }, 200 );
+			};
+
+			//if there's a data-rel=back attr, go back in history
+			if( $link.is( ":jqmData(rel='back')" ) ) {
+				window.history.back();
+				return false;
+			}
+
+			var baseUrl = getClosestBaseUrl( $link ),
+
+				//get href, if defined, otherwise default to empty hash
+				href = path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl );
+
+			//if ajax is disabled, exit early
+			if( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ){
+				httpCleanup();
+				//use default click handling
+				return;
+			}
+
+			// XXX_jblas: Ideally links to application pages should be specified as
+			//            an url to the application document with a hash that is either
+			//            the site relative path or id to the page. But some of the
+			//            internal code that dynamically generates sub-pages for nested
+			//            lists and select dialogs, just write a hash in the link they
+			//            create. This means the actual URL path is based on whatever
+			//            the current value of the base tag is at the time this code
+			//            is called. For now we are just assuming that any url with a
+			//            hash in it is an application page reference.
+			if ( href.search( "#" ) != -1 ) {
+				href = href.replace( /[^#]*#/, "" );
+				if ( !href ) {
+					//link was an empty hash meant purely
+					//for interaction, so we ignore it.
+					event.preventDefault();
+					return;
+				} else if ( path.isPath( href ) ) {
+					//we have apath so make it the href we want to load.
+					href = path.makeUrlAbsolute( href, baseUrl );
+				} else {
+					//we have a simple id so use the documentUrl as its base.
+					href = path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash );
+				}
+			}
+
+				// Should we handle this link, or let the browser deal with it?
+			var useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ),
+
+				// Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR
+				// requests if the document doing the request was loaded via the file:// protocol.
+				// This is usually to allow the application to "phone home" and fetch app specific
+				// data. We normally let the browser handle external/cross-domain urls, but if the
+				// allowCrossDomainPages option is true, we will allow cross-domain http/https
+				// requests to go through our page loading logic.
+
+				//check for protocol or rel and its not an embedded page
+				//TODO overlap in logic from isExternal, rel=external check should be
+				//     moved into more comprehensive isExternalLink
+				isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !path.isPermittedCrossDomainRequest(documentUrl, href) );
+
+			if( isExternal ) {
+				httpCleanup();
+				//use default click handling
+				return;
+			}
+
+			//use ajax
+			var transition = $link.jqmData( "transition" ),
+				direction = $link.jqmData( "direction" ),
+				reverse = ( direction && direction === "reverse" ) ||
+							// deprecated - remove by 1.0
+							$link.jqmData( "back" ),
+
+				//this may need to be more specific as we use data-rel more
+				role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined;
+
+			$.mobile.changePage( href, { transition: transition, reverse: reverse, role: role } );
+			event.preventDefault();
+		});
+
+		//prefetch pages when anchors with data-prefetch are encountered
+		$( document ).delegate( ".ui-page", "pageshow.prefetch", function() {
+			var urls = [];
+			$( this ).find( "a:jqmData(prefetch)" ).each(function(){
+				var $link = $(this),
+					url = $link.attr( "href" );
+
+				if ( url && $.inArray( url, urls ) === -1 ) {
+					urls.push( url );
+
+					$.mobile.loadPage( url, {role: $link.attr("data-" + $.mobile.ns + "rel")} );
+				}
+			});
+		});
+
+		$.mobile._handleHashChange = function( hash ) {
+			//find first page via hash
+			var to = path.stripHash( hash ),
+				//transition is false if it's the first page, undefined otherwise (and may be overridden by default)
+				transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined,
+
+				// default options for the changPage calls made after examining the current state
+				// of the page and the hash
+				changePageOptions = {
+					transition: transition,
+					changeHash: false,
+					fromHashChange: true
+				};
+
+			if ( 0 === urlHistory.stack.length ) {
+				urlHistory.initialDst = to;
+			}
+
+			//if listening is disabled (either globally or temporarily), or it's a dialog hash
+			if( !$.mobile.hashListeningEnabled || urlHistory.ignoreNextHashChange ) {
+				urlHistory.ignoreNextHashChange = false;
+				return;
+			}
+
+			// special case for dialogs
+			if( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 && urlHistory.initialDst !== to ) {
+
+				// If current active page is not a dialog skip the dialog and continue
+				// in the same direction
+				if(!$.mobile.activePage.is( ".ui-dialog" )) {
+					//determine if we're heading forward or backward and continue accordingly past
+					//the current dialog
+					urlHistory.directHashChange({
+						currentUrl: to,
+						isBack: function() { window.history.back(); },
+						isForward: function() { window.history.forward(); }
+					});
+
+					// prevent changePage()
+					return;
+				} else {
+					// if the current active page is a dialog and we're navigating
+					// to a dialog use the dialog objected saved in the stack
+					urlHistory.directHashChange({
+						currentUrl: to,
+
+						// regardless of the direction of the history change
+						// do the following
+						either: function( isBack ) {
+							var active = $.mobile.urlHistory.getActive();
+
+							to = active.pageUrl;
+
+							// make sure to set the role, transition and reversal
+							// as most of this is lost by the domCache cleaning
+							$.extend( changePageOptions, {
+								role: active.role,
+								transition:	 active.transition,
+								reverse: isBack
+							});
+						}
+					});
+				}
+			}
+
+			//if to is defined, load it
+			if ( to ) {
+				// At this point, 'to' can be one of 3 things, a cached page element from
+				// a history stack entry, an id, or site-relative/absolute URL. If 'to' is
+				// an id, we need to resolve it against the documentBase, not the location.href,
+				// since the hashchange could've been the result of a forward/backward navigation
+				// that crosses from an external page/dialog to an internal page/dialog.
+				to = ( typeof to === "string" && !path.isPath( to ) ) ? ( path.makeUrlAbsolute( '#' + to, documentBase ) ) : to;
+				$.mobile.changePage( to, changePageOptions );
+			}	else {
+				//there's no hash, go to the first page in the dom
+				$.mobile.changePage( $.mobile.firstPage, changePageOptions );
+			}
+		};
+
+		//hashchange event handler
+		$window.bind( "hashchange", function( e, triggered ) {
+			$.mobile._handleHashChange( location.hash );
+		});
+
+		//set page min-heights to be device specific
+		$( document ).bind( "pageshow", resetActivePageHeight );
+		$( window ).bind( "throttledresize", resetActivePageHeight );
+
+	});//navreadyDeferred done callback
+
+})( jQuery );
+
+( function( $, window ) {
+	// For now, let's Monkeypatch this onto the end of $.mobile._registerInternalEvents
+	// Scope self to pushStateHandler so we can reference it sanely within the
+	// methods handed off as event handlers
+	var	pushStateHandler = {},
+		self = pushStateHandler,
+		$win = $( window ),
+		url = $.mobile.path.parseUrl( location.href ),
+		mobileinitDeferred = $.Deferred(),
+		domreadyDeferred = $.Deferred();
+
+	$( document ).ready( $.proxy( domreadyDeferred, "resolve" ) );
+
+	$( document ).one( "mobileinit", $.proxy( mobileinitDeferred, "resolve" ) );
+
+	$.extend( pushStateHandler, {
+		// TODO move to a path helper, this is rather common functionality
+		initialFilePath: (function() {
+			return url.pathname + url.search;
+		})(),
+
+		hashChangeTimeout: 200,
+
+		hashChangeEnableTimer: undefined,
+
+		initialHref: url.hrefNoHash,
+
+		state: function() {
+			return {
+				hash: location.hash || "#" + self.initialFilePath,
+				title: document.title,
+
+				// persist across refresh
+				initialHref: self.initialHref
+			};
+		},
+
+		resetUIKeys: function( url ) {
+			var dialog = $.mobile.dialogHashKey,
+				subkey = "&" + $.mobile.subPageUrlKey,
+				dialogIndex = url.indexOf( dialog );
+
+			if( dialogIndex > -1 ) {
+				url = url.slice( 0, dialogIndex ) + "#" + url.slice( dialogIndex );
+			} else if( url.indexOf( subkey ) > -1 ) {
+				url = url.split( subkey ).join( "#" + subkey );
+			}
+
+			return url;
+		},
+
+		// TODO sort out a single barrier to hashchange functionality
+		nextHashChangePrevented: function( value ) {
+			$.mobile.urlHistory.ignoreNextHashChange = value;
+			self.onHashChangeDisabled = value;
+		},
+
+		// on hash change we want to clean up the url
+		// NOTE this takes place *after* the vanilla navigation hash change
+		// handling has taken place and set the state of the DOM
+		onHashChange: function( e ) {
+			// disable this hash change
+			if( self.onHashChangeDisabled ){
+				return;
+			}
+
+			var href, state,
+				hash = location.hash,
+				isPath = $.mobile.path.isPath( hash ),
+				resolutionUrl = isPath ? location.href : $.mobile.getDocumentUrl();
+
+			hash = isPath ? hash.replace( "#", "" ) : hash;
+
+
+			// propulate the hash when its not available
+			state = self.state();
+
+			// make the hash abolute with the current href
+			href = $.mobile.path.makeUrlAbsolute( hash, resolutionUrl );
+
+			if ( isPath ) {
+				href = self.resetUIKeys( href );
+			}
+
+			// replace the current url with the new href and store the state
+			// Note that in some cases we might be replacing an url with the
+			// same url. We do this anyways because we need to make sure that
+			// all of our history entries have a state object associated with
+			// them. This allows us to work around the case where window.history.back()
+			// is called to transition from an external page to an embedded page.
+			// In that particular case, a hashchange event is *NOT* generated by the browser.
+			// Ensuring each history entry has a state object means that onPopState()
+			// will always trigger our hashchange callback even when a hashchange event
+			// is not fired.
+			history.replaceState( state, document.title, href );
+		},
+
+		// on popstate (ie back or forward) we need to replace the hash that was there previously
+		// cleaned up by the additional hash handling
+		onPopState: function( e ) {
+			var poppedState = e.originalEvent.state,
+				fromHash, toHash, hashChanged;
+
+			// if there's no state its not a popstate we care about, eg chrome's initial popstate
+			if( poppedState ) {
+				// if we get two pop states in under this.hashChangeTimeout
+				// make sure to clear any timer set for the previous change
+				clearTimeout( self.hashChangeEnableTimer );
+
+				// make sure to enable hash handling for the the _handleHashChange call
+				self.nextHashChangePrevented( false );
+
+				// change the page based on the hash in the popped state
+				$.mobile._handleHashChange( poppedState.hash );
+
+				// prevent any hashchange in the next self.hashChangeTimeout
+				self.nextHashChangePrevented( true );
+
+				// re-enable hash change handling after swallowing a possible hash
+				// change event that comes on all popstates courtesy of browsers like Android
+				self.hashChangeEnableTimer = setTimeout( function() {
+					self.nextHashChangePrevented( false );
+				}, self.hashChangeTimeout);
+			}
+		},
+
+		init: function() {
+			$win.bind( "hashchange", self.onHashChange );
+
+			// Handle popstate events the occur through history changes
+			$win.bind( "popstate", self.onPopState );
+
+			// if there's no hash, we need to replacestate for returning to home
+			if ( location.hash === "" ) {
+				history.replaceState( self.state(), document.title, location.href );
+			}
+		}
+	});
+
+	// We need to init when "mobileinit", "domready", and "navready" have all happened
+	$.when( domreadyDeferred, mobileinitDeferred, $.mobile.navreadyDeferred ).done( function() {
+		if( $.mobile.pushStateEnabled && $.support.pushState ){
+			pushStateHandler.init();
+		}
+	});
+})( jQuery, this );
+
+/*
+* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.pop = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+// Use the simultaneous transition handler for slide transitions
+$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous;
+
+// Set the slide transition's fallback to "fade"
+$.mobile.transitionFallbacks.slide = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.slidedown = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.slideup = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.flip = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.flow = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.turn = "fade";
+
+})( jQuery, this );
+
+(function( $, undefined ) {
+
+$.mobile.page.prototype.options.degradeInputs = {
+	color: false,
+	date: false,
+	datetime: false,
+	"datetime-local": false,
+	email: false,
+	month: false,
+	number: false,
+	range: "number",
+	search: "text",
+	tel: false,
+	time: false,
+	url: false,
+	week: false
+};
+
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+
+	var page = $.mobile.closestPageData($(e.target)), options;
+
+	if( !page ) {
+		return;
+	}
+
+	options = page.options;
+
+	// degrade inputs to avoid poorly implemented native functionality
+	$( e.target ).find( "input" ).not( page.keepNativeSelector() ).each(function() {
+		var $this = $( this ),
+			type = this.getAttribute( "type" ),
+			optType = options.degradeInputs[ type ] || "text";
+
+		if ( options.degradeInputs[ type ] ) {
+			var html = $( "<div>" ).html( $this.clone() ).html(),
+				// In IE browsers, the type sometimes doesn't exist in the cloned markup, so we replace the closing tag instead
+				hasType = html.indexOf( " type=" ) > -1,
+				findstr = hasType ? /\s+type=["']?\w+['"]?/ : /\/?>/,
+				repstr = " type=\"" + optType + "\" data-" + $.mobile.ns + "type=\"" + type + "\"" + ( hasType ? "" : ">" );
+
+			$this.replaceWith( html.replace( findstr, repstr ) );
+		}
+	});
+
+});
+
+})( jQuery );
+
+(function( $, window, undefined ) {
+
+$.widget( "mobile.dialog", $.mobile.widget, {
+	options: {
+		closeBtnText 	: "Close",
+		overlayTheme	: "a",
+		initSelector	: ":jqmData(role='dialog')"
+	},
+	_create: function() {
+		var self = this,
+			$el = this.element,
+			headerCloseButton = $( "<a href='#' data-" + $.mobile.ns + "icon='delete' data-" + $.mobile.ns + "iconpos='notext'>"+ this.options.closeBtnText + "</a>" ),
+			dialogWrap = $("<div/>", {
+					"role" : "dialog",
+					"class" : "ui-dialog-contain ui-corner-all ui-overlay-shadow"
+				});
+
+		$el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme );
+		
+		// Class the markup for dialog styling
+		// Set aria role
+		$el
+			.wrapInner( dialogWrap )
+			.children()
+				.find( ":jqmData(role='header')" )
+					.prepend( headerCloseButton )
+				.end()
+				.children( ':first-child')
+					.addClass( "ui-corner-top" )
+				.end()
+				.children( ":last-child" )
+					.addClass( "ui-corner-bottom" );
+
+		// this must be an anonymous function so that select menu dialogs can replace
+		// the close method. This is a change from previously just defining data-rel=back
+		// on the button and letting nav handle it
+		//
+		// Use click rather than vclick in order to prevent the possibility of unintentionally
+		// reopening the dialog if the dialog opening item was directly under the close button.
+		headerCloseButton.bind( "click", function() {
+			self.close();
+		});
+
+		/* bind events
+			- clicks and submits should use the closing transition that the dialog opened with
+			  unless a data-transition is specified on the link/form
+			- if the click was on the close button, or the link has a data-rel="back" it'll go back in history naturally
+		*/
+		$el.bind( "vclick submit", function( event ) {
+			var $target = $( event.target ).closest( event.type === "vclick" ? "a" : "form" ),
+				active;
+
+			if ( $target.length && !$target.jqmData( "transition" ) ) {
+
+				active = $.mobile.urlHistory.getActive() || {};
+
+				$target.attr( "data-" + $.mobile.ns + "transition", ( active.transition || $.mobile.defaultDialogTransition ) )
+					.attr( "data-" + $.mobile.ns + "direction", "reverse" );
+			}
+		})
+		.bind( "pagehide", function( e, ui ) {
+			self._isClosed = false;
+			$( this ).find( "." + $.mobile.activeBtnClass ).not( ".ui-slider-bg" ).removeClass( $.mobile.activeBtnClass );
+		})
+		// Override the theme set by the page plugin on pageshow
+		.bind( "pagebeforeshow", function(){
+			if( self.options.overlayTheme ){
+				self.element
+					.page( "removeContainerBackground" )
+					.page( "setContainerBackground", self.options.overlayTheme );
+			}
+		});
+	},
+
+	// Close method goes back in history
+	close: function() {
+		if ( !this._isClosed ) {
+			this._isClosed = true;
+			if ( $.mobile.hashListeningEnabled ) {
+				window.history.back();
+			}
+			else {
+				$.mobile.changePage( $.mobile.urlHistory.getPrev().url );
+			}
+		}
+	}
+});
+
+//auto self-init widgets
+$( document ).delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function(){
+	$.mobile.dialog.prototype.enhance( this );
+});
+
+})( jQuery, this );
+
+(function( $, undefined ) {
+
+$.mobile.page.prototype.options.backBtnText  = "Back";
+$.mobile.page.prototype.options.addBackBtn   = false;
+$.mobile.page.prototype.options.backBtnTheme = null;
+$.mobile.page.prototype.options.headerTheme  = "a";
+$.mobile.page.prototype.options.footerTheme  = "a";
+$.mobile.page.prototype.options.contentTheme = null;
+
+// NOTE bind used to force this binding to run before the buttonMarkup binding
+//      which expects .ui-footer top be applied in its gigantic selector 
+// TODO remove the buttonMarkup giant selector and move it to the various modules
+//      on which it depends
+$( document ).bind( "pagecreate", function( e ) {
+	var $page = $( e.target ),
+		o = $page.data( "page" ).options,
+		pageRole = $page.jqmData( "role" ),
+		pageTheme = o.theme;
+
+	$( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", $page )
+		.jqmEnhanceable()
+		.each(function() {
+
+		var $this = $( this ),
+			role = $this.jqmData( "role" ),
+			theme = $this.jqmData( "theme" ),
+			contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ),
+			$headeranchors,
+			leftbtn,
+			rightbtn,
+			backBtn;
+
+		$this.addClass( "ui-" + role );
+
+		//apply theming and markup modifications to page,header,content,footer
+		if ( role === "header" || role === "footer" ) {
+
+			var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme;
+
+			$this
+				//add theme class
+				.addClass( "ui-bar-" + thisTheme )
+				// Add ARIA role
+				.attr( "role", role === "header" ? "banner" : "contentinfo" );
+
+			if( role === "header") {
+				// Right,left buttons
+				$headeranchors	= $this.children( "a" );
+				leftbtn	= $headeranchors.hasClass( "ui-btn-left" );
+				rightbtn = $headeranchors.hasClass( "ui-btn-right" );
+
+				leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length;
+
+				rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length;
+			}
+
+			// Auto-add back btn on pages beyond first view
+			if ( o.addBackBtn &&
+				role === "header" &&
+				$( ".ui-page" ).length > 1 &&
+				$page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) &&
+				!leftbtn ) {
+
+				backBtn = $( "<a href='javascript:void(0);' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>"+ o.backBtnText +"</a>" )
+					// If theme is provided, override default inheritance
+					.attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme )
+					.prependTo( $this );
+			}
+
+			// Page title
+			$this.children( "h1, h2, h3, h4, h5, h6" )
+				.addClass( "ui-title" )
+				// Regardless of h element number in src, it becomes h1 for the enhanced page
+				.attr({
+					"role": "heading",
+					"aria-level": "1"
+				});
+
+		} else if ( role === "content" ) {
+			if ( contentTheme ) {
+			    $this.addClass( "ui-body-" + ( contentTheme ) );
+			}
+
+			// Add ARIA role
+			$this.attr( "role", "main" );
+		}
+	});
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+// filter function removes whitespace between label and form element so we can use inline-block (nodeType 3 = text)
+$.fn.fieldcontain = function( options ) {
+	return this
+		.addClass( "ui-field-contain ui-body ui-br" )
+		.contents().filter( function() {
+			return ( this.nodeType === 3 && !/\S/.test( this.nodeValue ) );
+		}).remove();
+};
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$( ":jqmData(role='fieldcontain')", e.target ).jqmEnhanceable().fieldcontain();
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.fn.grid = function( options ) {
+	return this.each(function() {
+
+		var $this = $( this ),
+			o = $.extend({
+				grid: null
+			},options),
+			$kids = $this.children(),
+			gridCols = {solo:1, a:2, b:3, c:4, d:5},
+			grid = o.grid,
+			iterator;
+
+			if ( !grid ) {
+				if ( $kids.length <= 5 ) {
+					for ( var letter in gridCols ) {
+						if ( gridCols[ letter ] === $kids.length ) {
+							grid = letter;
+						}
+					}
+				} else {
+					grid = "a";
+					$this.addClass( "ui-grid-duo" );
+				}
+			}
+			iterator = gridCols[grid];
+
+		$this.addClass( "ui-grid-" + grid );
+
+		$kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" );
+
+		if ( iterator > 1 ) {
+			$kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" );
+		}
+		if ( iterator > 2 ) {
+			$kids.filter( ":nth-child(3n+3)" ).addClass( "ui-block-c" );
+		}
+		if ( iterator > 3 ) {
+			$kids.filter( ":nth-child(4n+4)" ).addClass( "ui-block-d" );
+		}
+		if ( iterator > 4 ) {
+			$kids.filter( ":nth-child(5n+5)" ).addClass( "ui-block-e" );
+		}
+	});
+};
+})( jQuery );
+
+(function( $, undefined ) {
+
+$( document ).bind( "pagecreate create", function( e ){
+	$( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" );
+	
+});
+
+})( jQuery );
+
+( function( $, undefined ) {
+
+$.fn.buttonMarkup = function( options ) {
+	var $workingSet = this;
+
+	// Enforce options to be of type string
+	options = ( options && ( $.type( options ) == "object" ) )? options : {};
+	for ( var i = 0; i < $workingSet.length; i++ ) {
+		var el = $workingSet.eq( i ),
+			e = el[ 0 ],
+			o = $.extend( {}, $.fn.buttonMarkup.defaults, {
+				icon:       options.icon       !== undefined ? options.icon       : el.jqmData( "icon" ),
+				iconpos:    options.iconpos    !== undefined ? options.iconpos    : el.jqmData( "iconpos" ),
+				theme:      options.theme      !== undefined ? options.theme      : el.jqmData( "theme" ) || $.mobile.getInheritedTheme( el, "c" ),
+				inline:     options.inline     !== undefined ? options.inline     : el.jqmData( "inline" ),
+				shadow:     options.shadow     !== undefined ? options.shadow     : el.jqmData( "shadow" ),
+				corners:    options.corners    !== undefined ? options.corners    : el.jqmData( "corners" ),
+				iconshadow: options.iconshadow !== undefined ? options.iconshadow : el.jqmData( "iconshadow" ),
+				mini:       options.mini       !== undefined ? options.mini       : el.jqmData( "mini" )
+			}, options ),
+
+			// Classes Defined
+			innerClass = "ui-btn-inner",
+			textClass = "ui-btn-text",
+			buttonClass, iconClass,
+			// Button inner markup
+			buttonInner,
+			buttonText,
+			buttonIcon,
+			buttonElements;
+
+		$.each(o, function(key, value) {
+			e.setAttribute( "data-" + $.mobile.ns + key, value );
+			el.jqmData(key, value);
+		});
+
+		// Check if this element is already enhanced
+		buttonElements = $.data(((e.tagName === "INPUT" || e.tagName === "BUTTON") ? e.parentNode : e), "buttonElements");
+
+		if (buttonElements) {
+			e = buttonElements.outer;
+			el = $(e);
+			buttonInner = buttonElements.inner;
+			buttonText = buttonElements.text;
+			// We will recreate this icon below
+			$(buttonElements.icon).remove();
+			buttonElements.icon = null;
+		}
+		else {
+			buttonInner = document.createElement( o.wrapperEls );
+			buttonText = document.createElement( o.wrapperEls );
+		}
+		buttonIcon = o.icon ? document.createElement( "span" ) : null;
+
+		if ( attachEvents && !buttonElements) {
+			attachEvents();
+		}
+		
+		// if not, try to find closest theme container	
+		if ( !o.theme ) {
+			o.theme = $.mobile.getInheritedTheme( el, "c" );	
+		}		
+
+		buttonClass = "ui-btn ui-btn-up-" + o.theme;
+		buttonClass += o.inline ? " ui-btn-inline" : "";
+		buttonClass += o.shadow ? " ui-shadow" : "";
+		buttonClass += o.corners ? " ui-btn-corner-all" : "";
+
+		if ( o.mini !== undefined ) {
+			// Used to control styling in headers/footers, where buttons default to `mini` style.
+			buttonClass += o.mini ? " ui-mini" : " ui-fullsize";
+		}
+		
+		if ( o.inline !== undefined ) {			
+			// Used to control styling in headers/footers, where buttons default to `mini` style.
+			buttonClass += o.inline === false ? " ui-btn-block" : " ui-btn-inline";
+		}
+		
+		
+		if ( o.icon ) {
+			o.icon = "ui-icon-" + o.icon;
+			o.iconpos = o.iconpos || "left";
+
+			iconClass = "ui-icon " + o.icon;
+
+			if ( o.iconshadow ) {
+				iconClass += " ui-icon-shadow";
+			}
+		}
+
+		if ( o.iconpos ) {
+			buttonClass += " ui-btn-icon-" + o.iconpos;
+
+			if ( o.iconpos == "notext" && !el.attr( "title" ) ) {
+				el.attr( "title", el.getEncodedText() );
+			}
+		}
+    
+		innerClass += o.corners ? " ui-btn-corner-all" : "";
+
+		if ( o.iconpos && o.iconpos === "notext" && !el.attr( "title" ) ) {
+			el.attr( "title", el.getEncodedText() );
+		}
+
+		if ( buttonElements ) {
+			el.removeClass( buttonElements.bcls || "" );
+		}
+		el.removeClass( "ui-link" ).addClass( buttonClass );
+
+		buttonInner.className = innerClass;
+
+		buttonText.className = textClass;
+		if ( !buttonElements ) {
+			buttonInner.appendChild( buttonText );
+		}
+		if ( buttonIcon ) {
+			buttonIcon.className = iconClass;
+			if ( !(buttonElements && buttonElements.icon) ) {
+				buttonIcon.appendChild( document.createTextNode("\u00a0") );
+				buttonInner.appendChild( buttonIcon );
+			}
+		}
+
+		while ( e.firstChild && !buttonElements) {
+			buttonText.appendChild( e.firstChild );
+		}
+
+		if ( !buttonElements ) {
+			e.appendChild( buttonInner );
+		}
+
+		// Assign a structure containing the elements of this button to the elements of this button. This
+		// will allow us to recognize this as an already-enhanced button in future calls to buttonMarkup().
+		buttonElements = {
+			bcls  : buttonClass,
+			outer : e,
+			inner : buttonInner,
+			text  : buttonText,
+			icon  : buttonIcon
+		};
+
+		$.data(e,           'buttonElements', buttonElements);
+		$.data(buttonInner, 'buttonElements', buttonElements);
+		$.data(buttonText,  'buttonElements', buttonElements);
+		if (buttonIcon) {
+			$.data(buttonIcon, 'buttonElements', buttonElements);
+		}
+	}
+
+	return this;
+};
+
+$.fn.buttonMarkup.defaults = {
+	corners: true,
+	shadow: true,
+	iconshadow: true,
+	wrapperEls: "span"
+};
+
+function closestEnabledButton( element ) {
+    var cname;
+
+    while ( element ) {
+		// Note that we check for typeof className below because the element we
+		// handed could be in an SVG DOM where className on SVG elements is defined to
+		// be of a different type (SVGAnimatedString). We only operate on HTML DOM
+		// elements, so we look for plain "string".
+        cname = ( typeof element.className === 'string' ) && (element.className + ' ');
+        if ( cname && cname.indexOf("ui-btn ") > -1 && cname.indexOf("ui-disabled ") < 0 ) {
+            break;
+        }
+
+        element = element.parentNode;
+    }
+
+    return element;
+}
+
+var attachEvents = function() {
+	var hoverDelay = $.mobile.buttonMarkup.hoverDelay, hov, foc;
+
+	$( document ).bind( {
+		"vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart": function( event ) {
+			var theme,
+				$btn = $( closestEnabledButton( event.target ) ),
+				evt = event.type;
+		
+			if ( $btn.length ) {
+				theme = $btn.attr( "data-" + $.mobile.ns + "theme" );
+		
+				if ( evt === "vmousedown" ) {
+					if ( $.support.touch ) {
+						hov = setTimeout(function() {
+							$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme );
+						}, hoverDelay );
+					} else {
+						$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme );
+					}
+				} else if ( evt === "vmousecancel" || evt === "vmouseup" ) {
+					$btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme );
+				} else if ( evt === "vmouseover" || evt === "focus" ) {
+					if ( $.support.touch ) {
+						foc = setTimeout(function() {
+							$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme );
+						}, hoverDelay );
+					} else {
+						$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme );
+					}
+				} else if ( evt === "vmouseout" || evt === "blur" || evt === "scrollstart" ) {
+					$btn.removeClass( "ui-btn-hover-" + theme  + " ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme );
+					if ( hov ) {
+						clearTimeout( hov );
+					}
+					if ( foc ) {
+						clearTimeout( foc );
+					}
+				}
+			}
+		},
+		"focusin focus": function( event ){
+			$( closestEnabledButton( event.target ) ).addClass( $.mobile.focusClass );
+		},
+		"focusout blur": function( event ){
+			$( closestEnabledButton( event.target ) ).removeClass( $.mobile.focusClass );
+		}
+	});
+
+	attachEvents = null;
+};
+
+//links in bars, or those with  data-role become buttons
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+
+	$( ":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a", e.target )
+		.not( ".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" )
+		.buttonMarkup();
+});
+
+})( jQuery );
+
+
+(function( $, undefined ) {
+
+$.widget( "mobile.collapsible", $.mobile.widget, {
+	options: {
+		expandCueText: " click to expand contents",
+		collapseCueText: " click to collapse contents",
+		collapsed: true,
+		heading: "h1,h2,h3,h4,h5,h6,legend",
+		theme: null,
+		contentTheme: null,
+		iconTheme: "d",
+		mini: false,
+		initSelector: ":jqmData(role='collapsible')"
+	},
+	_create: function() {
+
+		var $el = this.element,
+			o = this.options,
+			collapsible = $el.addClass( "ui-collapsible" ),
+			collapsibleHeading = $el.children( o.heading ).first(),
+			collapsibleContent = collapsible.wrapInner( "<div class='ui-collapsible-content'></div>" ).find( ".ui-collapsible-content" ),
+			collapsibleSet = $el.closest( ":jqmData(role='collapsible-set')" ).addClass( "ui-collapsible-set" );
+
+		// Replace collapsibleHeading if it's a legend
+		if ( collapsibleHeading.is( "legend" ) ) {
+			collapsibleHeading = $( "<div role='heading'>"+ collapsibleHeading.html() +"</div>" ).insertBefore( collapsibleHeading );
+			collapsibleHeading.next().remove();
+		}
+
+		// If we are in a collapsible set
+		if ( collapsibleSet.length ) {
+			// Inherit the theme from collapsible-set
+			if ( !o.theme ) {
+				o.theme = collapsibleSet.jqmData("theme") || $.mobile.getInheritedTheme( collapsibleSet, "c" );
+			}
+			// Inherit the content-theme from collapsible-set
+			if ( !o.contentTheme ) {
+				o.contentTheme = collapsibleSet.jqmData( "content-theme" );
+			}
+
+			// Gets the preference icon position in the set
+			if ( !o.iconPos ) {
+				o.iconPos = collapsibleSet.jqmData( "iconpos" );
+			}
+
+			if( !o.mini ) {
+				o.mini = collapsibleSet.jqmData( "mini" );
+			}
+		}
+		collapsibleContent.addClass( ( o.contentTheme ) ? ( "ui-body-" + o.contentTheme ) : "");
+
+		collapsibleHeading
+			//drop heading in before content
+			.insertBefore( collapsibleContent )
+			//modify markup & attributes
+			.addClass( "ui-collapsible-heading" )
+			.append( "<span class='ui-collapsible-heading-status'></span>" )
+			.wrapInner( "<a href='#' class='ui-collapsible-heading-toggle'></a>" )
+			.find( "a" )
+				.first()
+				.buttonMarkup({
+					shadow: false,
+					corners: false,
+					iconpos: $el.jqmData( "iconpos" ) || o.iconPos || "left",
+					icon: "plus",
+					mini: o.mini,
+					theme: o.theme
+				})
+			.add( ".ui-btn-inner", $el )
+				.addClass( "ui-corner-top ui-corner-bottom" );
+
+		//events
+		collapsible
+			.bind( "expand collapse", function( event ) {
+				if ( !event.isDefaultPrevented() ) {
+
+					event.preventDefault();
+
+					var $this = $( this ),
+						isCollapse = ( event.type === "collapse" ),
+					    contentTheme = o.contentTheme;
+
+					collapsibleHeading
+						.toggleClass( "ui-collapsible-heading-collapsed", isCollapse)
+						.find( ".ui-collapsible-heading-status" )
+							.text( isCollapse ? o.expandCueText : o.collapseCueText )
+						.end()
+						.find( ".ui-icon" )
+							.toggleClass( "ui-icon-minus", !isCollapse )
+							.toggleClass( "ui-icon-plus", isCollapse )
+						.end()
+						.find( "a" ).first().removeClass( $.mobile.activeBtnClass );
+
+					$this.toggleClass( "ui-collapsible-collapsed", isCollapse );
+					collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse );
+
+					if ( contentTheme && ( !collapsibleSet.length || collapsible.jqmData( "collapsible-last" ) ) ) {
+						collapsibleHeading
+							.find( "a" ).first().add( collapsibleHeading.find( ".ui-btn-inner" ) )
+							.toggleClass( "ui-corner-bottom", isCollapse );
+						collapsibleContent.toggleClass( "ui-corner-bottom", !isCollapse );
+					}
+					collapsibleContent.trigger( "updatelayout" );
+				}
+			})
+			.trigger( o.collapsed ? "collapse" : "expand" );
+
+		collapsibleHeading
+			.bind( "tap", function( event ) {
+				collapsibleHeading.find( "a" ).first().addClass( $.mobile.activeBtnClass );
+			})
+			.bind( "click", function( event ) {
+
+				var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ?
+										"expand" : "collapse";
+
+				collapsible.trigger( type );
+
+				event.preventDefault();
+				event.stopPropagation();
+			});
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.collapsible.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.collapsibleset", $.mobile.widget, {
+	options: {
+		initSelector: ":jqmData(role='collapsible-set')"
+	},
+	_create: function() {
+		var $el = this.element.addClass( "ui-collapsible-set" ),
+			o = this.options;
+
+		// Inherit the theme from collapsible-set
+		if ( !o.theme ) {
+			o.theme = $.mobile.getInheritedTheme( $el, "c" );
+		}
+		// Inherit the content-theme from collapsible-set
+		if ( !o.contentTheme ) {
+			o.contentTheme = $el.jqmData( "content-theme" );
+		}
+
+		if ( !o.corners ) {
+			o.corners = $el.jqmData( "corners" ) === undefined ? true : false;
+		}
+
+		// Initialize the collapsible set if it's not already initialized
+		if ( !$el.jqmData( "collapsiblebound" ) ) {
+			$el
+				.jqmData( "collapsiblebound", true )
+				.bind( "expand collapse", function( event ) {
+					var isCollapse = ( event.type === "collapse" ),
+						collapsible = $( event.target ).closest( ".ui-collapsible" ),
+						widget = collapsible.data( "collapsible" ),
+					    contentTheme = widget.options.contentTheme;
+					if ( contentTheme && collapsible.jqmData( "collapsible-last" ) ) {
+						collapsible.find( widget.options.heading ).first()
+							.find( "a" ).first()
+							.toggleClass( "ui-corner-bottom", isCollapse )
+							.find( ".ui-btn-inner" )
+							.toggleClass( "ui-corner-bottom", isCollapse );
+						collapsible.find( ".ui-collapsible-content" ).toggleClass( "ui-corner-bottom", !isCollapse );
+					}
+				})
+				.bind( "expand", function( event ) {
+					$( event.target )
+						.closest( ".ui-collapsible" )
+						.siblings( ".ui-collapsible" )
+						.trigger( "collapse" );
+				});
+		}
+	},
+
+	_init: function() {
+		this.refresh();
+	},
+
+	refresh: function() {
+		var $el = this.element,
+			o = this.options,
+			collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" );
+
+		$.mobile.collapsible.prototype.enhance( collapsiblesInSet.not( ".ui-collapsible" ) );
+
+		// clean up borders
+		collapsiblesInSet.each( function() {
+			$( this ).find( $.mobile.collapsible.prototype.options.heading )
+				.find( "a" ).first()
+				.removeClass( "ui-corner-top ui-corner-bottom" )
+				.find( ".ui-btn-inner" )
+				.removeClass( "ui-corner-top ui-corner-bottom" );
+		});
+
+		collapsiblesInSet.first()
+			.find( "a" )
+				.first()
+				.addClass( o.corners ? "ui-corner-top" : "" )
+				.find( ".ui-btn-inner" )
+					.addClass( "ui-corner-top" );
+
+		collapsiblesInSet.last()
+			.jqmData( "collapsible-last", true )
+			.find( "a" )
+				.first()
+				.addClass( o.corners ? "ui-corner-bottom" : "" )
+				.find( ".ui-btn-inner" )
+					.addClass( "ui-corner-bottom" );
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.collapsibleset.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.navbar", $.mobile.widget, {
+	options: {
+		iconpos: "top",
+		grid: null,
+		initSelector: ":jqmData(role='navbar')"
+	},
+
+	_create: function(){
+
+		var $navbar = this.element,
+			$navbtns = $navbar.find( "a" ),
+			iconpos = $navbtns.filter( ":jqmData(icon)" ).length ?
+									this.options.iconpos : undefined;
+
+		$navbar.addClass( "ui-navbar ui-mini" )
+			.attr( "role","navigation" )
+			.find( "ul" )
+			.jqmEnhanceable()
+			.grid({ grid: this.options.grid });
+
+		$navbtns.buttonMarkup({
+			corners:	false,
+			shadow:		false,
+			inline:     true,
+			iconpos:	iconpos
+		});
+
+		$navbar.delegate( "a", "vclick", function( event ) {
+			if( !$(event.target).hasClass("ui-disabled") ) {
+				$navbtns.removeClass( $.mobile.activeBtnClass );
+				$( this ).addClass( $.mobile.activeBtnClass );
+			}
+		});
+
+		// Buttons in the navbar with ui-state-persist class should regain their active state before page show
+		$navbar.closest( ".ui-page" ).bind( "pagebeforeshow", function() {
+			$navbtns.filter( ".ui-state-persist" ).addClass( $.mobile.activeBtnClass );
+		});
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.navbar.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+//Keeps track of the number of lists per page UID
+//This allows support for multiple nested list in the same page
+//https://github.com/jquery/jquery-mobile/issues/1617
+var listCountPerPage = {};
+
+$.widget( "mobile.listview", $.mobile.widget, {
+
+	options: {
+		theme: null,
+		countTheme: "c",
+		headerTheme: "b",
+		dividerTheme: "b",
+		splitIcon: "arrow-r",
+		splitTheme: "b",
+		inset: false,
+		initSelector: ":jqmData(role='listview')"
+	},
+
+	_create: function() {
+		var t = this,
+			listviewClasses = "";
+			
+		listviewClasses += t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "";
+
+		// create listview markup
+		t.element.addClass(function( i, orig ) {
+			return orig + " ui-listview " + listviewClasses;
+		});
+
+		t.refresh( true );
+	},
+
+	_removeCorners: function( li, which ) {
+		var top = "ui-corner-top ui-corner-tr ui-corner-tl",
+			bot = "ui-corner-bottom ui-corner-br ui-corner-bl";
+
+		li = li.add( li.find( ".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb" ) );
+
+		if ( which === "top" ) {
+			li.removeClass( top );
+		} else if ( which === "bottom" ) {
+			li.removeClass( bot );
+		} else {
+			li.removeClass( top + " " + bot );
+		}
+	},
+
+	_refreshCorners: function( create ) {
+		var $li,
+			$visibleli,
+			$topli,
+			$bottomli;
+
+		if ( this.options.inset ) {
+			$li = this.element.children( "li" );
+			// at create time the li are not visible yet so we need to rely on .ui-screen-hidden
+			$visibleli = create?$li.not( ".ui-screen-hidden" ):$li.filter( ":visible" );
+
+			this._removeCorners( $li );
+
+			// Select the first visible li element
+			$topli = $visibleli.first()
+				.addClass( "ui-corner-top" );
+
+			$topli.add( $topli.find( ".ui-btn-inner" )
+					.not( ".ui-li-link-alt span:first-child" ) )
+                                .addClass( "ui-corner-top" )
+                                .end()
+				.find( ".ui-li-link-alt, .ui-li-link-alt span:first-child" )
+					.addClass( "ui-corner-tr" )
+				.end()
+				.find( ".ui-li-thumb" )
+					.not(".ui-li-icon")
+					.addClass( "ui-corner-tl" );
+
+			// Select the last visible li element
+			$bottomli = $visibleli.last()
+				.addClass( "ui-corner-bottom" );
+
+			$bottomli.add( $bottomli.find( ".ui-btn-inner" ) )
+				.find( ".ui-li-link-alt" )
+					.addClass( "ui-corner-br" )
+				.end()
+				.find( ".ui-li-thumb" )
+					.not(".ui-li-icon")
+					.addClass( "ui-corner-bl" );
+		}
+		if ( !create ) {
+			this.element.trigger( "updatelayout" );
+		}
+	},
+
+	// This is a generic utility method for finding the first
+	// node with a given nodeName. It uses basic DOM traversal
+	// to be fast and is meant to be a substitute for simple
+	// $.fn.closest() and $.fn.children() calls on a single
+	// element. Note that callers must pass both the lowerCase
+	// and upperCase version of the nodeName they are looking for.
+	// The main reason for this is that this function will be
+	// called many times and we want to avoid having to lowercase
+	// the nodeName from the element every time to ensure we have
+	// a match. Note that this function lives here for now, but may
+	// be moved into $.mobile if other components need a similar method.
+	_findFirstElementByTagName: function( ele, nextProp, lcName, ucName )
+	{
+		var dict = {};
+		dict[ lcName ] = dict[ ucName ] = true;
+		while ( ele ) {
+			if ( dict[ ele.nodeName ] ) {
+				return ele;
+			}
+			ele = ele[ nextProp ];
+		}
+		return null;
+	},
+	_getChildrenByTagName: function( ele, lcName, ucName )
+	{
+		var results = [],
+			dict = {};
+		dict[ lcName ] = dict[ ucName ] = true;
+		ele = ele.firstChild;
+		while ( ele ) {
+			if ( dict[ ele.nodeName ] ) {
+				results.push( ele );
+			}
+			ele = ele.nextSibling;
+		}
+		return $( results );
+	},
+
+	_addThumbClasses: function( containers )
+	{
+		var i, img, len = containers.length;
+		for ( i = 0; i < len; i++ ) {
+			img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) );
+			if ( img.length ) {
+				img.addClass( "ui-li-thumb" );
+				$( this._findFirstElementByTagName( img[ 0 ].parentNode, "parentNode", "li", "LI" ) ).addClass( img.is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" );
+			}
+		}
+	},
+
+	refresh: function( create ) {
+		this.parentPage = this.element.closest( ".ui-page" );
+		this._createSubPages();
+
+		var o = this.options,
+			$list = this.element,
+			self = this,
+			dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme,
+			listsplittheme = $list.jqmData( "splittheme" ),
+			listspliticon = $list.jqmData( "spliticon" ),
+			li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ),
+			counter = $.support.cssPseudoElement || !$.nodeName( $list[ 0 ], "ol" ) ? 0 : 1,
+			itemClassDict = {},
+			item, itemClass, itemTheme,
+			a, last, splittheme, countParent, icon, imgParents, img, linkIcon;
+
+		if ( counter ) {
+			$list.find( ".ui-li-dec" ).remove();
+		}
+
+		if ( !o.theme ) {
+			o.theme = $.mobile.getInheritedTheme( this.element, "c" );
+		}
+
+		for ( var pos = 0, numli = li.length; pos < numli; pos++ ) {
+			item = li.eq( pos );
+			itemClass = "ui-li";
+
+			// If we're creating the element, we update it regardless
+			if ( create || !item.hasClass( "ui-li" ) ) {
+				itemTheme = item.jqmData("theme") || o.theme;
+				a = this._getChildrenByTagName( item[ 0 ], "a", "A" );
+				var isDivider = ( item.jqmData( "role" ) === "list-divider" );
+
+				if ( a.length && !isDivider ) {
+					icon = item.jqmData("icon");
+
+					item.buttonMarkup({
+						wrapperEls: "div",
+						shadow: false,
+						corners: false,
+						iconpos: "right",
+						icon: a.length > 1 || icon === false ? false : icon || "arrow-r",
+						theme: itemTheme
+					});
+
+					if ( ( icon != false ) && ( a.length == 1 ) ) {
+						item.addClass( "ui-li-has-arrow" );
+					}
+
+					a.first().removeClass( "ui-link" ).addClass( "ui-link-inherit" );
+
+					if ( a.length > 1 ) {
+						itemClass += " ui-li-has-alt";
+
+						last = a.last();
+						splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme;
+						linkIcon = last.jqmData("icon");
+
+						last.appendTo(item)
+							.attr( "title", last.getEncodedText() )
+							.addClass( "ui-li-link-alt" )
+							.empty()
+							.buttonMarkup({
+								shadow: false,
+								corners: false,
+								theme: itemTheme,
+								icon: false,
+								iconpos: "notext"
+							})
+							.find( ".ui-btn-inner" )
+								.append(
+									$( document.createElement( "span" ) ).buttonMarkup({
+										shadow: true,
+										corners: true,
+										theme: splittheme,
+										iconpos: "notext",
+										// link icon overrides list item icon overrides ul element overrides options
+										icon: linkIcon || icon || listspliticon || o.splitIcon
+									})
+								);
+					}
+				} else if ( isDivider ) {
+
+					itemClass += " ui-li-divider ui-bar-" + dividertheme;
+					item.attr( "role", "heading" );
+
+					//reset counter when a divider heading is encountered
+					if ( counter ) {
+						counter = 1;
+					}
+
+				} else {
+					itemClass += " ui-li-static ui-body-" + itemTheme;
+				}
+			}
+
+			if ( counter && itemClass.indexOf( "ui-li-divider" ) < 0 ) {
+				countParent = item.is( ".ui-li-static:first" ) ? item : item.find( ".ui-link-inherit" );
+
+				countParent.addClass( "ui-li-jsnumbering" )
+					.prepend( "<span class='ui-li-dec'>" + (counter++) + ". </span>" );
+			}
+
+			// Instead of setting item class directly on the list item and its
+			// btn-inner at this point in time, push the item into a dictionary
+			// that tells us what class to set on it so we can do this after this
+			// processing loop is finished.
+
+			if ( !itemClassDict[ itemClass ] ) {
+				itemClassDict[ itemClass ] = [];
+			}
+
+			itemClassDict[ itemClass ].push( item[ 0 ] );
+		}
+
+		// Set the appropriate listview item classes on each list item
+		// and their btn-inner elements. The main reason we didn't do this
+		// in the for-loop above is because we can eliminate per-item function overhead
+		// by calling addClass() and children() once or twice afterwards. This
+		// can give us a significant boost on platforms like WP7.5.
+
+		for ( itemClass in itemClassDict ) {
+			$( itemClassDict[ itemClass ] ).addClass( itemClass ).children( ".ui-btn-inner" ).addClass( itemClass );
+		}
+
+		$list.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" )
+			.end()
+
+			.find( "p, dl" ).addClass( "ui-li-desc" )
+			.end()
+
+			.find( ".ui-li-aside" ).each(function() {
+					var $this = $(this);
+					$this.prependTo( $this.parent() ); //shift aside to front for css float
+				})
+			.end()
+
+			.find( ".ui-li-count" ).each( function() {
+					$( this ).closest( "li" ).addClass( "ui-li-has-count" );
+				}).addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" );
+
+		// The idea here is to look at the first image in the list item
+		// itself, and any .ui-link-inherit element it may contain, so we
+		// can place the appropriate classes on the image and list item.
+		// Note that we used to use something like:
+		//
+		//    li.find(">img:eq(0), .ui-link-inherit>img:eq(0)").each( ... );
+		//
+		// But executing a find() like that on Windows Phone 7.5 took a
+		// really long time. Walking things manually with the code below
+		// allows the 400 listview item page to load in about 3 seconds as
+		// opposed to 30 seconds.
+
+		this._addThumbClasses( li );
+		this._addThumbClasses( $list.find( ".ui-link-inherit" ) );
+
+		this._refreshCorners( create );
+	},
+
+	//create a string for ID/subpage url creation
+	_idStringEscape: function( str ) {
+		return str.replace(/[^a-zA-Z0-9]/g, '-');
+	},
+
+	_createSubPages: function() {
+		var parentList = this.element,
+			parentPage = parentList.closest( ".ui-page" ),
+			parentUrl = parentPage.jqmData( "url" ),
+			parentId = parentUrl || parentPage[ 0 ][ $.expando ],
+			parentListId = parentList.attr( "id" ),
+			o = this.options,
+			dns = "data-" + $.mobile.ns,
+			self = this,
+			persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ),
+			hasSubPages;
+
+		if ( typeof listCountPerPage[ parentId ] === "undefined" ) {
+			listCountPerPage[ parentId ] = -1;
+		}
+
+		parentListId = parentListId || ++listCountPerPage[ parentId ];
+
+		$( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function( i ) {
+			var self = this,
+				list = $( this ),
+				listId = list.attr( "id" ) || parentListId + "-" + i,
+				parent = list.parent(),
+				nodeEls = $( list.prevAll().toArray().reverse() ),
+				nodeEls = nodeEls.length ? nodeEls : $( "<span>" + $.trim(parent.contents()[ 0 ].nodeValue) + "</span>" ),
+				title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text
+				id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId,
+				theme = list.jqmData( "theme" ) || o.theme,
+				countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme,
+				newPage, anchor;
+
+			//define hasSubPages for use in later removal
+			hasSubPages = true;
+
+			newPage = list.detach()
+						.wrap( "<div " + dns + "role='page' " +	dns + "url='" + id + "' " + dns + "theme='" + theme + "' " + dns + "count-theme='" + countTheme + "'><div " + dns + "role='content'></div></div>" )
+						.parent()
+							.before( "<div " + dns + "role='header' " + dns + "theme='" + o.headerTheme + "'><div class='ui-title'>" + title + "</div></div>" )
+							.after( persistentFooterID ? $( "<div " + dns + "role='footer' " + dns + "id='"+ persistentFooterID +"'>") : "" )
+							.parent()
+								.appendTo( $.mobile.pageContainer );
+
+			newPage.page();
+
+			anchor = parent.find('a:first');
+
+			if ( !anchor.length ) {
+				anchor = $( "<a/>" ).html( nodeEls || title ).prependTo( parent.empty() );
+			}
+
+			anchor.attr( "href", "#" + id );
+
+		}).listview();
+
+		// on pagehide, remove any nested pages along with the parent page, as long as they aren't active
+		// and aren't embedded
+		if( hasSubPages &&
+			parentPage.is( ":jqmData(external-page='true')" ) &&
+			parentPage.data("page").options.domCache === false ) {
+
+			var newRemove = function( e, ui ){
+				var nextPage = ui.nextPage, npURL,
+					prEvent = new $.Event( "pageremove" );
+
+				if( ui.nextPage ){
+					npURL = nextPage.jqmData( "url" );
+					if( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ){
+						self.childPages().remove();
+						parentPage.trigger( prEvent );
+						if( !prEvent.isDefaultPrevented() ){
+							parentPage.removeWithDependents();
+						}
+					}
+				}
+			};
+
+			// unbind the original page remove and replace with our specialized version
+			parentPage
+				.unbind( "pagehide.remove" )
+				.bind( "pagehide.remove", newRemove);
+		}
+	},
+
+	// TODO sort out a better way to track sub pages of the listview this is brittle
+	childPages: function(){
+		var parentUrl = this.parentPage.jqmData( "url" );
+
+		return $( ":jqmData(url^='"+  parentUrl + "&" + $.mobile.subPageUrlKey +"')");
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.listview.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+/*
+* "checkboxradio" plugin
+*/
+
+(function( $, undefined ) {
+
+$.widget( "mobile.checkboxradio", $.mobile.widget, {
+	options: {
+		theme: null,
+		initSelector: "input[type='checkbox'],input[type='radio']"
+	},
+	_create: function() {
+		var self = this,
+			input = this.element,
+			inheritAttr = function( input, dataAttr ) {
+				return input.jqmData( dataAttr ) || input.closest( "form,fieldset" ).jqmData( dataAttr )
+			},
+			// NOTE: Windows Phone could not find the label through a selector
+			// filter works though.
+			parentLabel = $( input ).closest( "label" ),
+			label = parentLabel.length ? parentLabel : $( input ).closest( "form,fieldset,:jqmData(role='page'),:jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ),
+			inputtype = input[0].type,
+			mini = inheritAttr( input, "mini" ),
+			checkedState = inputtype + "-on",
+			uncheckedState = inputtype + "-off",
+			icon = input.parents( ":jqmData(type='horizontal')" ).length ? undefined : uncheckedState,
+			iconpos = inheritAttr( input, "iconpos" ),
+			activeBtn = icon ? "" : " " + $.mobile.activeBtnClass,
+			checkedClass = "ui-" + checkedState + activeBtn,
+			uncheckedClass = "ui-" + uncheckedState,
+			checkedicon = "ui-icon-" + checkedState,
+			uncheckedicon = "ui-icon-" + uncheckedState;
+
+		if ( inputtype !== "checkbox" && inputtype !== "radio" ) {
+			return;
+		}
+
+		// Expose for other methods
+		$.extend( this, {
+			label: label,
+			inputtype: inputtype,
+			checkedClass: checkedClass,
+			uncheckedClass: uncheckedClass,
+			checkedicon: checkedicon,
+			uncheckedicon: uncheckedicon
+		});
+
+		// If there's no selected theme check the data attr
+		if( !this.options.theme ) {
+			this.options.theme = $.mobile.getInheritedTheme( this.element, "c" );
+		}
+
+		label.buttonMarkup({
+			theme: this.options.theme,
+			icon: icon,
+			shadow: false,
+			mini: mini,
+			iconpos: iconpos
+		});
+
+		// Wrap the input + label in a div
+		var wrapper = document.createElement('div');
+		wrapper.className = 'ui-' + inputtype;
+
+		input.add( label ).wrapAll( wrapper );
+
+		label.bind({
+			vmouseover: function( event ) {
+				if ( $( this ).parent().is( ".ui-disabled" ) ) {
+					event.stopPropagation();
+				}
+			},
+
+			vclick: function( event ) {
+				if ( input.is( ":disabled" ) ) {
+					event.preventDefault();
+					return;
+				}
+
+				self._cacheVals();
+
+				input.prop( "checked", inputtype === "radio" && true || !input.prop( "checked" ) );
+
+				// trigger click handler's bound directly to the input as a substitute for
+				// how label clicks behave normally in the browsers
+				// TODO: it would be nice to let the browser's handle the clicks and pass them
+				//       through to the associate input. we can swallow that click at the parent
+				//       wrapper element level
+				input.triggerHandler( 'click' );
+
+				// Input set for common radio buttons will contain all the radio
+				// buttons, but will not for checkboxes. clearing the checked status
+				// of other radios ensures the active button state is applied properly
+				self._getInputSet().not( input ).prop( "checked", false );
+
+				self._updateAll();
+				return false;
+			}
+		});
+
+		input
+			.bind({
+				vmousedown: function() {
+					self._cacheVals();
+				},
+
+				vclick: function() {
+					var $this = $(this);
+
+					// Adds checked attribute to checked input when keyboard is used
+					if ( $this.is( ":checked" ) ) {
+
+						$this.prop( "checked", true);
+						self._getInputSet().not($this).prop( "checked", false );
+					} else {
+
+						$this.prop( "checked", false );
+					}
+
+					self._updateAll();
+				},
+
+				focus: function() {
+					label.addClass( $.mobile.focusClass );
+				},
+
+				blur: function() {
+					label.removeClass( $.mobile.focusClass );
+				}
+			});
+
+		this.refresh();
+	},
+
+	_cacheVals: function() {
+		this._getInputSet().each(function() {
+			$(this).jqmData( "cacheVal", this.checked );
+		});
+	},
+
+	//returns either a set of radios with the same name attribute, or a single checkbox
+	_getInputSet: function(){
+		if(this.inputtype === "checkbox") {
+			return this.element;
+		}
+
+		return this.element.closest( "form,fieldset,:jqmData(role='page')" )
+			.find( "input[name='"+ this.element[0].name +"'][type='"+ this.inputtype +"']" );
+	},
+
+	_updateAll: function() {
+		var self = this;
+
+		this._getInputSet().each(function() {
+			var $this = $(this);
+
+			if ( this.checked || self.inputtype === "checkbox" ) {
+				$this.trigger( "change" );
+			}
+		})
+		.checkboxradio( "refresh" );
+	},
+
+	refresh: function() {
+		var input = this.element[0],
+			label = this.label,
+			icon = label.find( ".ui-icon" );
+
+		if ( input.checked ) {
+			label.addClass( this.checkedClass ).removeClass( this.uncheckedClass );
+			icon.addClass( this.checkedicon ).removeClass( this.uncheckedicon );
+		} else {
+			label.removeClass( this.checkedClass ).addClass( this.uncheckedClass );
+			icon.removeClass( this.checkedicon ).addClass( this.uncheckedicon );
+		}
+
+		if ( input.disabled ) {
+			this.disable();
+		} else {
+			this.enable();
+		}
+	},
+
+	disable: function() {
+		this.element.prop( "disabled", true ).parent().addClass( "ui-disabled" );
+	},
+
+	enable: function() {
+		this.element.prop( "disabled", false ).parent().removeClass( "ui-disabled" );
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.checkboxradio.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.button", $.mobile.widget, {
+	options: {
+		theme: null,
+		icon: null,
+		iconpos: null,
+		inline: false,
+		corners: true,
+		shadow: true,
+		iconshadow: true,
+		initSelector: "button, [type='button'], [type='submit'], [type='reset'], [type='image']",
+		mini: false
+	},
+	_create: function() {
+		var $el = this.element,
+			$button,
+			o = this.options,
+			type,
+			name,
+			classes = "",
+			$buttonPlaceholder;
+
+		// if this is a link, check if it's been enhanced and, if not, use the right function
+		if( $el[ 0 ].tagName === "A" ) {
+	 	 	!$el.hasClass( "ui-btn" ) && $el.buttonMarkup();
+	 	 	return;
+ 	 	}
+
+		// get the inherited theme
+		// TODO centralize for all widgets
+		if ( !this.options.theme ) {
+			this.options.theme = $.mobile.getInheritedTheme( this.element, "c" );
+		}
+
+		// TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577
+		/* if( $el[0].className.length ) {
+			classes = $el[0].className;
+		} */
+		if( !!~$el[0].className.indexOf( "ui-btn-left" ) ) {
+			classes = "ui-btn-left";
+		}
+
+		if(  !!~$el[0].className.indexOf( "ui-btn-right" ) ) {
+			classes = "ui-btn-right";
+		}
+
+		if(  $el.attr( "type" ) === "submit" || $el.attr( "type" ) === "reset" ) {
+			classes ? classes += " ui-submit" :  classes = "ui-submit";
+		}
+		
+		$( "label[for='" + $el.attr( "id" ) + "']" ).addClass( "ui-submit" );
+
+		// Add ARIA role
+		this.button = $( "<div></div>" )
+			.text( $el.text() || $el.val() )
+			.insertBefore( $el )
+			.buttonMarkup({
+				theme: o.theme,
+				icon: o.icon,
+				iconpos: o.iconpos,
+				inline: o.inline,
+				corners: o.corners,
+				shadow: o.shadow,
+				iconshadow: o.iconshadow,
+				mini: o.mini
+			})
+			.addClass( classes )
+			.append( $el.addClass( "ui-btn-hidden" ) );
+
+        $button = this.button;
+		type = $el.attr( "type" );
+		name = $el.attr( "name" );
+
+		// Add hidden input during submit if input type="submit" has a name.
+		if ( type !== "button" && type !== "reset" && name ) {
+				$el.bind( "vclick", function() {
+					// Add hidden input if it doesn't already exist.
+					if( $buttonPlaceholder === undefined ) {
+						$buttonPlaceholder = $( "<input>", {
+							type: "hidden",
+							name: $el.attr( "name" ),
+							value: $el.attr( "value" )
+						}).insertBefore( $el );
+
+						// Bind to doc to remove after submit handling
+						$( document ).one("submit", function(){
+							$buttonPlaceholder.remove();
+
+							// reset the local var so that the hidden input
+							// will be re-added on subsequent clicks
+							$buttonPlaceholder = undefined;
+						});
+					}
+				});
+		}
+
+        $el.bind({
+            focus: function() {
+                $button.addClass( $.mobile.focusClass );
+            },
+
+            blur: function() {
+                $button.removeClass( $.mobile.focusClass );
+            }
+        });
+
+		this.refresh();
+	},
+
+	enable: function() {
+		this.element.attr( "disabled", false );
+		this.button.removeClass( "ui-disabled" ).attr( "aria-disabled", false );
+		return this._setOption( "disabled", false );
+	},
+
+	disable: function() {
+		this.element.attr( "disabled", true );
+		this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true );
+		return this._setOption( "disabled", true );
+	},
+
+	refresh: function() {
+		var $el = this.element;
+
+		if ( $el.prop("disabled") ) {
+			this.disable();
+		} else {
+			this.enable();
+		}
+
+		// Grab the button's text element from its implementation-independent data item
+		$( this.button.data( 'buttonElements' ).text ).text( $el.text() || $el.val() );
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.button.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.fn.controlgroup = function( options ) {
+	function flipClasses( els, flCorners  ) {
+		els.removeClass( "ui-btn-corner-all ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-controlgroup-last ui-shadow" )
+			.eq( 0 ).addClass( flCorners[ 0 ] )
+			.end()
+			.last().addClass( flCorners[ 1 ] ).addClass( "ui-controlgroup-last" );
+	}
+
+	return this.each(function() {
+		var $el = $( this ),
+			o = $.extend({
+						direction: $el.jqmData( "type" ) || "vertical",
+						shadow: false,
+						excludeInvisible: true,
+						mini: $el.jqmData( "mini" )
+					}, options ),
+			groupheading = $el.children( "legend" ),
+			flCorners = o.direction == "horizontal" ? [ "ui-corner-left", "ui-corner-right" ] : [ "ui-corner-top", "ui-corner-bottom" ],
+			type = $el.find( "input" ).first().attr( "type" );
+			
+		$el.wrapInner( "<div class='ui-controlgroup-controls'></div>" );
+
+		// Replace legend with more stylable replacement div
+		if ( groupheading.length ) {
+			$( "<div role='heading' class='ui-controlgroup-label'>" + groupheading.html() + "</div>" ).insertBefore( $el.children(0) );
+			groupheading.remove();
+		}
+
+		$el.addClass( "ui-corner-all ui-controlgroup ui-controlgroup-" + o.direction );
+
+		flipClasses( $el.find( ".ui-btn" + ( o.excludeInvisible ? ":visible" : "" ) ).not('.ui-slider-handle'), flCorners );
+		flipClasses( $el.find( ".ui-btn-inner" ), flCorners );
+
+		if ( o.shadow ) {
+			$el.addClass( "ui-shadow" );
+		}
+
+		if ( o.mini ) {
+			$el.addClass( "ui-mini" );
+		}
+
+	});
+};
+
+// The pagecreate handler for controlgroup is in jquery.mobile.init because of the soft-dependency on the wrapped widgets
+
+})(jQuery);
+
+(function( $, undefined ) {
+
+$( document ).bind( "pagecreate create", function( e ){
+
+	//links within content areas, tests included with page
+	$( e.target )
+		.find( "a" )
+		.jqmEnhanceable()
+		.not( ".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')" )
+		.addClass( "ui-link" );
+
+});
+
+})( jQuery );
+
+
+( function( $ ) {
+	var	meta = $( "meta[name=viewport]" ),
+        initialContent = meta.attr( "content" ),
+        disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no",
+        enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes",
+		disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent );
+	
+	$.mobile.zoom = $.extend( {}, {
+		enabled: !disabledInitially,
+		locked: false,
+		disable: function( lock ) {
+			if( !disabledInitially && !$.mobile.zoom.locked ){
+	        	meta.attr( "content", disabledZoom );
+	        	$.mobile.zoom.enabled = false;
+				$.mobile.zoom.locked = lock || false;
+			}
+		},
+		enable: function( unlock ) {
+			if( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ){
+		        meta.attr( "content", enabledZoom );
+		        $.mobile.zoom.enabled = true;
+				$.mobile.zoom.locked = false;
+			}
+		},
+		restore: function() {
+			if( !disabledInitially ){
+	        	meta.attr( "content", initialContent );
+	        	$.mobile.zoom.enabled = true;
+			}
+		}
+	});
+
+}( jQuery ));
+
+(function( $, undefined ) {
+
+$.widget( "mobile.textinput", $.mobile.widget, {
+	options: {
+		theme: null,
+		// This option defaults to true on iOS devices.
+		preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1,
+		initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])",
+		clearSearchButtonText: "clear text"
+	},
+
+	_create: function() {
+
+		var input = this.element,
+			o = this.options,
+			theme = o.theme || $.mobile.getInheritedTheme( this.element, "c" ),
+			themeclass  = " ui-body-" + theme,
+			mini = input.jqmData("mini") == true,
+			miniclass = mini ? " ui-mini" : "",
+			focusedEl, clearbtn;
+
+		$( "label[for='" + input.attr( "id" ) + "']" ).addClass( "ui-input-text" );
+
+		focusedEl = input.addClass("ui-input-text ui-body-"+ theme );
+
+		// XXX: Temporary workaround for issue 785 (Apple bug 8910589).
+		//      Turn off autocorrect and autocomplete on non-iOS 5 devices
+		//      since the popup they use can't be dismissed by the user. Note
+		//      that we test for the presence of the feature by looking for
+		//      the autocorrect property on the input element. We currently
+		//      have no test for iOS 5 or newer so we're temporarily using
+		//      the touchOverflow support flag for jQM 1.0. Yes, I feel dirty. - jblas
+		if ( typeof input[0].autocorrect !== "undefined" && !$.support.touchOverflow ) {
+			// Set the attribute instead of the property just in case there
+			// is code that attempts to make modifications via HTML.
+			input[0].setAttribute( "autocorrect", "off" );
+			input[0].setAttribute( "autocomplete", "off" );
+		}
+
+
+		//"search" input widget
+		if ( input.is( "[type='search'],:jqmData(type='search')" ) ) {
+
+			focusedEl = input.wrap( "<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield" + themeclass + miniclass + "'></div>" ).parent();
+			clearbtn = $( "<a href='#' class='ui-input-clear' title='" + o.clearSearchButtonText + "'>" + o.clearSearchButtonText + "</a>" )
+				.bind('click', function( event ) {
+					input
+						.val( "" )
+						.focus()
+						.trigger( "change" );
+					clearbtn.addClass( "ui-input-clear-hidden" );
+					event.preventDefault();
+				})
+				.appendTo( focusedEl )
+				.buttonMarkup({
+					icon: "delete",
+					iconpos: "notext",
+					corners: true,
+					shadow: true,
+					mini: mini
+				});
+
+			function toggleClear() {
+				setTimeout(function() {
+					clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() );
+				}, 0);
+			}
+
+			toggleClear();
+
+			input.bind('paste cut keyup focus change blur', toggleClear);
+
+		} else {
+			input.addClass( "ui-corner-all ui-shadow-inset" + themeclass + miniclass );
+		}
+
+		input.focus(function() {
+				focusedEl.addClass( $.mobile.focusClass );
+			})
+			.blur(function(){
+				focusedEl.removeClass( $.mobile.focusClass );
+			})
+			// In many situations, iOS will zoom into the select upon tap, this prevents that from happening
+			.bind( "focus", function() {
+				if( o.preventFocusZoom ){
+					$.mobile.zoom.disable( true );
+				}
+			})
+			.bind( "blur", function() {
+				if( o.preventFocusZoom ){
+					$.mobile.zoom.enable( true );
+				}
+			});
+
+		// Autogrow
+		if ( input.is( "textarea" ) ) {
+			var extraLineHeight = 15,
+				keyupTimeoutBuffer = 100,
+				keyup = function() {
+					var scrollHeight = input[ 0 ].scrollHeight,
+						clientHeight = input[ 0 ].clientHeight;
+
+					if ( clientHeight < scrollHeight ) {
+						input.height(scrollHeight + extraLineHeight);
+					}
+				},
+				keyupTimeout;
+
+			input.keyup(function() {
+				clearTimeout( keyupTimeout );
+				keyupTimeout = setTimeout( keyup, keyupTimeoutBuffer );
+			});
+
+			// binding to pagechange here ensures that for pages loaded via
+			// ajax the height is recalculated without user input
+			$( document ).one( "pagechange", keyup );
+
+			// Issue 509: the browser is not providing scrollHeight properly until the styles load
+			if ( $.trim( input.val() ) ) {
+				// bind to the window load to make sure the height is calculated based on BOTH
+				// the DOM and CSS
+				$( window ).load( keyup );
+			}
+		}
+	},
+
+	disable: function(){
+		( this.element.attr( "disabled", true ).is( "[type='search'],:jqmData(type='search')" ) ?
+			this.element.parent() : this.element ).addClass( "ui-disabled" );
+	},
+
+	enable: function(){
+		( this.element.attr( "disabled", false).is( "[type='search'],:jqmData(type='search')" ) ?
+			this.element.parent() : this.element ).removeClass( "ui-disabled" );
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.textinput.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.mobile.listview.prototype.options.filter = false;
+$.mobile.listview.prototype.options.filterPlaceholder = "Filter items...";
+$.mobile.listview.prototype.options.filterTheme = "c";
+$.mobile.listview.prototype.options.filterCallback = function( text, searchValue ){
+	return text.toLowerCase().indexOf( searchValue ) === -1;
+};
+
+$( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function() {
+
+	var list = $( this ),
+		listview = list.data( "listview" );
+
+	if ( !listview.options.filter ) {
+		return;
+	}
+
+	var wrapper = $( "<form>", {
+			"class": "ui-listview-filter ui-bar-" + listview.options.filterTheme,
+			"role": "search"
+		}),
+		search = $( "<input>", {
+			placeholder: listview.options.filterPlaceholder
+		})
+		.attr( "data-" + $.mobile.ns + "type", "search" )
+		.jqmData( "lastval", "" )
+		.bind( "keyup change", function() {
+
+			var $this = $(this),
+				val = this.value.toLowerCase(),
+				listItems = null,
+				lastval = $this.jqmData( "lastval" ) + "",
+				childItems = false,
+				itemtext = "",
+				item;
+
+			// Change val as lastval for next execution
+			$this.jqmData( "lastval" , val );
+			if ( val.length < lastval.length || val.indexOf(lastval) !== 0 ) {
+
+				// Removed chars or pasted something totally different, check all items
+				listItems = list.children();
+			} else {
+
+				// Only chars added, not removed, only use visible subset
+				listItems = list.children( ":not(.ui-screen-hidden)" );
+			}
+
+			if ( val ) {
+
+				// This handles hiding regular rows without the text we search for
+				// and any list dividers without regular rows shown under it
+
+				for ( var i = listItems.length - 1; i >= 0; i-- ) {
+					item = $( listItems[ i ] );
+					itemtext = item.jqmData( "filtertext" ) || item.text();
+
+					if ( item.is( "li:jqmData(role=list-divider)" ) ) {
+
+						item.toggleClass( "ui-filter-hidequeue" , !childItems );
+
+						// New bucket!
+						childItems = false;
+
+					} else if ( listview.options.filterCallback( itemtext, val ) ) {
+
+						//mark to be hidden
+						item.toggleClass( "ui-filter-hidequeue" , true );
+					} else {
+
+						// There's a shown item in the bucket
+						childItems = true;
+					}
+				}
+
+				// Show items, not marked to be hidden
+				listItems
+					.filter( ":not(.ui-filter-hidequeue)" )
+					.toggleClass( "ui-screen-hidden", false );
+
+				// Hide items, marked to be hidden
+				listItems
+					.filter( ".ui-filter-hidequeue" )
+					.toggleClass( "ui-screen-hidden", true )
+					.toggleClass( "ui-filter-hidequeue", false );
+
+			} else {
+
+				//filtervalue is empty => show all
+				listItems.toggleClass( "ui-screen-hidden", false );
+			}
+			listview._refreshCorners();
+		})
+		.appendTo( wrapper )
+		.textinput();
+
+	if ( listview.options.inset ) {
+		wrapper.addClass( "ui-listview-filter-inset" );
+	}
+
+	wrapper.bind( "submit", function() {
+		return false;
+	})
+	.insertBefore( list );
+});
+
+})( jQuery );
+
+( function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.widget, {
+	options: {
+		theme: null,
+		trackTheme: null,
+		disabled: false,
+		initSelector: "input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",
+		mini: false
+	},
+
+	_create: function() {
+
+		// TODO: Each of these should have comments explain what they're for
+		var self = this,
+
+			control = this.element,
+
+			parentTheme = $.mobile.getInheritedTheme( control, "c" ),
+
+			theme = this.options.theme || parentTheme,
+
+			trackTheme = this.options.trackTheme || parentTheme,
+
+			cType = control[ 0 ].nodeName.toLowerCase(),
+
+			selectClass = ( cType == "select" ) ? "ui-slider-switch" : "",
+
+			controlID = control.attr( "id" ),
+
+			$label = $( "[for='" + controlID + "']" ),
+
+			labelID = $label.attr( "id" ) || controlID + "-label",
+
+			label = $label.attr( "id", labelID ),
+
+			val = function() {
+				return  cType == "input"  ? parseFloat( control.val() ) : control[0].selectedIndex;
+			},
+
+			min =  cType == "input" ? parseFloat( control.attr( "min" ) ) : 0,
+
+			max =  cType == "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1,
+
+			step = window.parseFloat( control.attr( "step" ) || 1 ),
+
+			inlineClass = ( this.options.inline || control.jqmData("inline") == true ) ? " ui-slider-inline" : "",
+
+			miniClass = ( this.options.mini || control.jqmData("mini") ) ? " ui-slider-mini" : "",
+
+
+			domHandle = document.createElement('a'),
+			handle = $( domHandle ),
+			domSlider = document.createElement('div'),
+			slider = $( domSlider ),
+
+			valuebg = control.jqmData("highlight") && cType != "select" ? (function() {
+				var bg = document.createElement('div');
+				bg.className = 'ui-slider-bg ' + $.mobile.activeBtnClass + ' ui-btn-corner-all';
+				return $( bg ).prependTo( slider );
+			})() : false,
+
+			options;
+
+        domHandle.setAttribute( 'href', "#" );
+		domSlider.setAttribute('role','application');
+		domSlider.className = ['ui-slider ',selectClass," ui-btn-down-",trackTheme,' ui-btn-corner-all', inlineClass, miniClass].join("");
+		domHandle.className = 'ui-slider-handle';
+		domSlider.appendChild(domHandle);
+
+		handle.buttonMarkup({ corners: true, theme: theme, shadow: true })
+				.attr({
+					"role": "slider",
+					"aria-valuemin": min,
+					"aria-valuemax": max,
+					"aria-valuenow": val(),
+					"aria-valuetext": val(),
+					"title": val(),
+					"aria-labelledby": labelID
+				});
+
+		$.extend( this, {
+			slider: slider,
+			handle: handle,
+			valuebg: valuebg,
+			dragging: false,
+			beforeStart: null,
+			userModified: false,
+			mouseMoved: false
+		});
+
+		if ( cType == "select" ) {
+			var wrapper = document.createElement('div');
+			wrapper.className = 'ui-slider-inneroffset';
+
+			for(var j = 0,length = domSlider.childNodes.length;j < length;j++){
+				wrapper.appendChild(domSlider.childNodes[j]);
+			}
+
+			domSlider.appendChild(wrapper);
+
+			// slider.wrapInner( "<div class='ui-slider-inneroffset'></div>" );
+
+			// make the handle move with a smooth transition
+			handle.addClass( "ui-slider-handle-snapping" );
+
+			options = control.find( "option" );
+
+			for(var i = 0, optionsCount = options.length; i < optionsCount; i++){
+				var side = !i ? "b":"a",
+					sliderTheme = !i ? " ui-btn-down-" + trackTheme :( " " + $.mobile.activeBtnClass ),
+					sliderLabel = document.createElement('div'),
+					sliderImg = document.createElement('span');
+
+				sliderImg.className = ['ui-slider-label ui-slider-label-',side,sliderTheme," ui-btn-corner-all"].join("");
+				sliderImg.setAttribute('role','img');
+				sliderImg.appendChild(document.createTextNode(options[i].innerHTML));
+				$(sliderImg).prependTo( slider );
+			}
+
+			self._labels = $( ".ui-slider-label", slider );
+
+		}
+
+		label.addClass( "ui-slider" );
+
+		// monitor the input for updated values
+		control.addClass( cType === "input" ? "ui-slider-input" : "ui-slider-switch" )
+			.change( function() {
+				// if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again
+				if (!self.mouseMoved) {
+					self.refresh( val(), true );
+				}
+			})
+			.keyup( function() { // necessary?
+				self.refresh( val(), true, true );
+			})
+			.blur( function() {
+				self.refresh( val(), true );
+			});
+
+		// prevent screen drag when slider activated
+		$( document ).bind( "vmousemove", function( event ) {
+			if ( self.dragging ) {
+				// self.mouseMoved must be updated before refresh() because it will be used in the control "change" event
+				self.mouseMoved = true;
+
+				if ( cType === "select" ) {
+					// make the handle move in sync with the mouse
+					handle.removeClass( "ui-slider-handle-snapping" );
+				}
+
+				self.refresh( event );
+
+				// only after refresh() you can calculate self.userModified
+				self.userModified = self.beforeStart !== control[0].selectedIndex;
+				return false;
+			}
+		});
+
+		slider.bind( "vmousedown", function( event ) {
+			self.dragging = true;
+			self.userModified = false;
+			self.mouseMoved = false;
+
+			if ( cType === "select" ) {
+				self.beforeStart = control[0].selectedIndex;
+			}
+
+			self.refresh( event );
+			return false;
+		})
+		.bind( "vclick", false );
+
+		slider.add( document )
+			.bind( "vmouseup", function() {
+				if ( self.dragging ) {
+
+					self.dragging = false;
+
+					if ( cType === "select") {
+
+						// make the handle move with a smooth transition
+						handle.addClass( "ui-slider-handle-snapping" );
+
+						if ( self.mouseMoved ) {
+
+							// this is a drag, change the value only if user dragged enough
+							if ( self.userModified ) {
+								self.refresh( self.beforeStart == 0 ? 1 : 0 );
+							}
+							else {
+								self.refresh( self.beforeStart );
+							}
+
+						}
+						else {
+							// this is just a click, change the value
+							self.refresh( self.beforeStart == 0 ? 1 : 0 );
+						}
+
+					}
+
+					self.mouseMoved = false;
+
+					return false;
+				}
+			});
+
+		slider.insertAfter( control );
+
+		// Only add focus class to toggle switch, sliders get it automatically from ui-btn
+		if( cType == 'select' ) {
+			this.handle.bind({
+				focus: function() {
+					slider.addClass( $.mobile.focusClass );
+				},
+
+				blur: function() {
+					slider.removeClass( $.mobile.focusClass );
+				}
+			});
+		}
+
+		this.handle.bind({
+			// NOTE force focus on handle
+			vmousedown: function() {
+				$( this ).focus();
+			},
+
+			vclick: false,
+
+			keydown: function( event ) {
+				var index = val();
+
+				if ( self.options.disabled ) {
+					return;
+				}
+
+				// In all cases prevent the default and mark the handle as active
+				switch ( event.keyCode ) {
+					case $.mobile.keyCode.HOME:
+					case $.mobile.keyCode.END:
+					case $.mobile.keyCode.PAGE_UP:
+					case $.mobile.keyCode.PAGE_DOWN:
+					case $.mobile.keyCode.UP:
+					case $.mobile.keyCode.RIGHT:
+					case $.mobile.keyCode.DOWN:
+					case $.mobile.keyCode.LEFT:
+						event.preventDefault();
+
+						if ( !self._keySliding ) {
+							self._keySliding = true;
+							$( this ).addClass( "ui-state-active" );
+						}
+						break;
+				}
+
+				// move the slider according to the keypress
+				switch ( event.keyCode ) {
+					case $.mobile.keyCode.HOME:
+						self.refresh( min );
+						break;
+					case $.mobile.keyCode.END:
+						self.refresh( max );
+						break;
+					case $.mobile.keyCode.PAGE_UP:
+					case $.mobile.keyCode.UP:
+					case $.mobile.keyCode.RIGHT:
+						self.refresh( index + step );
+						break;
+					case $.mobile.keyCode.PAGE_DOWN:
+					case $.mobile.keyCode.DOWN:
+					case $.mobile.keyCode.LEFT:
+						self.refresh( index - step );
+						break;
+				}
+			}, // remove active mark
+
+			keyup: function( event ) {
+				if ( self._keySliding ) {
+					self._keySliding = false;
+					$( this ).removeClass( "ui-state-active" );
+				}
+			}
+			});
+
+		this.refresh(undefined, undefined, true);
+	},
+
+	refresh: function( val, isfromControl, preventInputUpdate ) {
+
+		if ( this.options.disabled || this.element.attr('disabled')) {
+			this.disable();
+		}
+
+		var control = this.element, percent,
+			cType = control[0].nodeName.toLowerCase(),
+			min = cType === "input" ? parseFloat( control.attr( "min" ) ) : 0,
+			max = cType === "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length - 1,
+			step = (cType === "input" && parseFloat( control.attr( "step" ) ) > 0) ? parseFloat(control.attr("step")) : 1;
+
+		if ( typeof val === "object" ) {
+			var data = val,
+				// a slight tolerance helped get to the ends of the slider
+				tol = 8;
+			if ( !this.dragging ||
+					data.pageX < this.slider.offset().left - tol ||
+					data.pageX > this.slider.offset().left + this.slider.width() + tol ) {
+				return;
+			}
+			percent = Math.round( ( ( data.pageX - this.slider.offset().left ) / this.slider.width() ) * 100 );
+		} else {
+			if ( val == null ) {
+				val = cType === "input" ? parseFloat( control.val() || 0 ) : control[0].selectedIndex;
+			}
+			percent = ( parseFloat( val ) - min ) / ( max - min ) * 100;
+		}
+
+		if ( isNaN( percent ) ) {
+			return;
+		}
+
+		if ( percent < 0 ) {
+			percent = 0;
+		}
+
+		if ( percent > 100 ) {
+			percent = 100;
+		}
+
+		var newval = ( percent / 100 ) * ( max - min ) + min;
+
+		//from jQuery UI slider, the following source will round to the nearest step
+		var valModStep = ( newval - min ) % step;
+		var alignValue = newval - valModStep;
+
+		if ( Math.abs( valModStep ) * 2 >= step ) {
+			alignValue += ( valModStep > 0 ) ? step : ( -step );
+		}
+		// Since JavaScript has problems with large floats, round
+		// the final value to 5 digits after the decimal point (see jQueryUI: #4124)
+		newval = parseFloat( alignValue.toFixed(5) );
+
+		if ( newval < min ) {
+			newval = min;
+		}
+
+		if ( newval > max ) {
+			newval = max;
+		}
+
+		this.handle.css( "left", percent + "%" );
+		this.handle.attr( {
+				"aria-valuenow": cType === "input" ? newval : control.find( "option" ).eq( newval ).attr( "value" ),
+				"aria-valuetext": cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText(),
+				title: cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText()
+			});
+		this.valuebg && this.valuebg.css( "width", percent + "%" );
+
+		// drag the label widths
+		if ( this._labels ) {
+			var handlePercent = this.handle.width() / this.slider.width() * 100,
+				aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100,
+				bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 );
+
+			this._labels.each(function(){
+				var ab = $(this).is( ".ui-slider-label-a" );
+				$( this ).width( ( ab ? aPercent : bPercent  ) + "%" );
+			});
+		}
+
+		if ( !preventInputUpdate ) {
+			var valueChanged = false;
+
+			// update control"s value
+			if ( cType === "input" ) {
+				valueChanged = control.val() !== newval;
+				control.val( newval );
+			} else {
+				valueChanged = control[ 0 ].selectedIndex !== newval;
+				control[ 0 ].selectedIndex = newval;
+			}
+			if ( !isfromControl && valueChanged ) {
+				control.trigger( "change" );
+			}
+		}
+	},
+
+	enable: function() {
+		this.element.attr( "disabled", false );
+		this.slider.removeClass( "ui-disabled" ).attr( "aria-disabled", false );
+		return this._setOption( "disabled", false );
+	},
+
+	disable: function() {
+		this.element.attr( "disabled", true );
+		this.slider.addClass( "ui-disabled" ).attr( "aria-disabled", true );
+		return this._setOption( "disabled", true );
+	}
+
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.slider.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.selectmenu", $.mobile.widget, {
+	options: {
+		theme: null,
+		disabled: false,
+		icon: "arrow-d",
+		iconpos: "right",
+		inline: false,
+		corners: true,
+		shadow: true,
+		iconshadow: true,
+		overlayTheme: "a",
+		hidePlaceholderMenuItems: true,
+		closeText: "Close",
+		nativeMenu: true,
+		// This option defaults to true on iOS devices.
+		preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1,
+		initSelector: "select:not(:jqmData(role='slider'))",
+		mini: false
+	},
+
+	_button: function(){
+		return $( "<div/>" );
+	},
+
+	_setDisabled: function( value ) {
+		this.element.attr( "disabled", value );
+		this.button.attr( "aria-disabled", value );
+		return this._setOption( "disabled", value );
+	},
+
+	_focusButton : function() {
+		var self = this;
+
+		setTimeout( function() {
+			self.button.focus();
+		}, 40);
+	},
+
+  _selectOptions: function() {
+    return this.select.find( "option" );
+  },
+
+	// setup items that are generally necessary for select menu extension
+	_preExtension: function(){
+		var classes = "";
+		// TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577
+		/* if( $el[0].className.length ) {
+			classes = $el[0].className;
+		} */
+		if( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) {
+			classes =  " ui-btn-left";
+		}
+		
+		if(  !!~this.element[0].className.indexOf( "ui-btn-right" ) ) {
+			classes = " ui-btn-right";
+		}
+		
+		this.select = this.element.wrap( "<div class='ui-select" + classes + "'>" );
+		this.selectID  = this.select.attr( "id" );
+		this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" );
+		this.isMultiple = this.select[ 0 ].multiple;
+		if ( !this.options.theme ) {
+			this.options.theme = $.mobile.getInheritedTheme( this.select, "c" );
+		}
+	},
+
+	_create: function() {
+		this._preExtension();
+
+ 		// Allows for extension of the native select for custom selects and other plugins
+		// see select.custom for example extension
+		// TODO explore plugin registration
+		this._trigger( "beforeCreate" );
+
+		this.button = this._button();
+
+		var self = this,
+
+			options = this.options,
+
+			inline = options.inline || this.select.jqmData( "inline" ),
+			mini = options.mini || this.select.jqmData( "mini" ),			
+			iconpos = options.icon ? ( options.iconpos || this.select.jqmData( "iconpos" ) ) : false,
+
+			// IE throws an exception at options.item() function when
+			// there is no selected item
+			// select first in this case
+			selectedIndex = this.select[ 0 ].selectedIndex == -1 ? 0 : this.select[ 0 ].selectedIndex,
+
+			// TODO values buttonId and menuId are undefined here
+			button = this.button
+				.text( $( this.select[ 0 ].options.item( selectedIndex ) ).text() )
+				.insertBefore( this.select )
+				.buttonMarkup( {
+					theme: options.theme,
+					icon: options.icon,
+					iconpos: iconpos,
+					inline: inline,
+					corners: options.corners,
+					shadow: options.shadow,
+					iconshadow: options.iconshadow,
+					mini: mini
+				});
+
+		// Opera does not properly support opacity on select elements
+		// In Mini, it hides the element, but not its text
+		// On the desktop,it seems to do the opposite
+		// for these reasons, using the nativeMenu option results in a full native select in Opera
+		if ( options.nativeMenu && window.opera && window.opera.version ) {
+			button.addClass( "ui-select-nativeonly" );
+		}	
+
+		// Add counter for multi selects
+		if ( this.isMultiple ) {
+			this.buttonCount = $( "<span>" )
+				.addClass( "ui-li-count ui-btn-up-c ui-btn-corner-all" )
+				.hide()
+				.appendTo( button.addClass('ui-li-has-count') );
+		}
+
+		// Disable if specified
+		if ( options.disabled || this.element.attr('disabled')) {
+			this.disable();
+		}
+
+		// Events on native select
+		this.select.change( function() {
+			self.refresh();
+		});
+
+		this.build();
+	},
+
+	build: function() {
+		var self = this;
+
+		this.select
+			.appendTo( self.button )
+			.bind( "vmousedown", function() {
+				// Add active class to button
+				self.button.addClass( $.mobile.activeBtnClass );
+			})
+            .bind( "focus", function() {
+                self.button.addClass( $.mobile.focusClass );
+            })
+            .bind( "blur", function() {
+                self.button.removeClass( $.mobile.focusClass );
+            })
+			.bind( "focus vmouseover", function() {
+				self.button.trigger( "vmouseover" );
+			})
+			.bind( "vmousemove", function() {
+				// Remove active class on scroll/touchmove
+				self.button.removeClass( $.mobile.activeBtnClass );
+			})
+			.bind( "change blur vmouseout", function() {
+				self.button.trigger( "vmouseout" )
+					.removeClass( $.mobile.activeBtnClass );
+			})
+			.bind( "change blur", function() {
+				self.button.removeClass( "ui-btn-down-" + self.options.theme );
+			});
+
+		// In many situations, iOS will zoom into the select upon tap, this prevents that from happening
+		self.button.bind( "vmousedown", function() {
+			if( self.options.preventFocusZoom ){
+				$.mobile.zoom.disable( true );
+			}
+		})
+		.bind( "mouseup", function() {
+			if( self.options.preventFocusZoom ){
+				$.mobile.zoom.enable( true );
+			}
+		});
+	},
+
+	selected: function() {
+		return this._selectOptions().filter( ":selected" );
+	},
+
+	selectedIndices: function() {
+		var self = this;
+
+		return this.selected().map( function() {
+			return self._selectOptions().index( this );
+		}).get();
+	},
+
+	setButtonText: function() {
+		var self = this, selected = this.selected();
+
+		this.button.find( ".ui-btn-text" ).text( function() {
+			if ( !self.isMultiple ) {
+				return selected.text();
+			}
+
+			return selected.length ? selected.map( function() {
+				return $( this ).text();
+			}).get().join( ", " ) : self.placeholder;
+		});
+	},
+
+	setButtonCount: function() {
+		var selected = this.selected();
+
+		// multiple count inside button
+		if ( this.isMultiple ) {
+			this.buttonCount[ selected.length > 1 ? "show" : "hide" ]().text( selected.length );
+		}
+	},
+
+	refresh: function() {
+		this.setButtonText();
+		this.setButtonCount();
+	},
+
+	// open and close preserved in native selects
+	// to simplify users code when looping over selects
+	open: $.noop,
+	close: $.noop,
+
+	disable: function() {
+		this._setDisabled( true );
+		this.button.addClass( "ui-disabled" );
+	},
+
+	enable: function() {
+		this._setDisabled( false );
+		this.button.removeClass( "ui-disabled" );
+	}
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+	$.mobile.selectmenu.prototype.enhanceWithin( e.target, true );
+});
+})( jQuery );
+
+/*
+* custom "selectmenu" plugin
+*/
+
+(function( $, undefined ) {
+	var extendSelect = function( widget ){
+
+		var select = widget.select,
+			selectID  = widget.selectID,
+			label = widget.label,
+			thisPage = widget.select.closest( ".ui-page" ),
+			screen = $( "<div>", {"class": "ui-selectmenu-screen ui-screen-hidden"} ).appendTo( thisPage ),
+			selectOptions = widget._selectOptions(),
+			isMultiple = widget.isMultiple = widget.select[ 0 ].multiple,
+			buttonId = selectID + "-button",
+			menuId = selectID + "-menu",
+			menuPage = $( "<div data-" + $.mobile.ns + "role='dialog' data-" +$.mobile.ns + "theme='"+ widget.options.theme +"' data-" +$.mobile.ns + "overlay-theme='"+ widget.options.overlayTheme +"'>" +
+				"<div data-" + $.mobile.ns + "role='header'>" +
+				"<div class='ui-title'>" + label.getEncodedText() + "</div>"+
+				"</div>"+
+				"<div data-" + $.mobile.ns + "role='content'></div>"+
+				"</div>" ),
+
+			listbox =  $("<div>", { "class": "ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all ui-body-" + widget.options.overlayTheme + " " + $.mobile.defaultDialogTransition } ).insertAfter(screen),
+
+			list = $( "<ul>", {
+				"class": "ui-selectmenu-list",
+				"id": menuId,
+				"role": "listbox",
+				"aria-labelledby": buttonId
+			}).attr( "data-" + $.mobile.ns + "theme", widget.options.theme ).appendTo( listbox ),
+
+			header = $( "<div>", {
+				"class": "ui-header ui-bar-" + widget.options.theme
+			}).prependTo( listbox ),
+
+			headerTitle = $( "<h1>", {
+				"class": "ui-title"
+			}).appendTo( header ),
+
+			menuPageContent,
+			menuPageClose,
+			headerClose;
+
+		if( widget.isMultiple ) {
+			headerClose = $( "<a>", {
+				"text": widget.options.closeText,
+				"href": "#",
+				"class": "ui-btn-left"
+			}).attr( "data-" + $.mobile.ns + "iconpos", "notext" ).attr( "data-" + $.mobile.ns + "icon", "delete" ).appendTo( header ).buttonMarkup();
+		}
+
+		$.extend( widget, {
+			select: widget.select,
+			selectID: selectID,
+			buttonId: buttonId,
+			menuId: menuId,
+			thisPage: thisPage,
+			menuPage: menuPage,
+			label: label,
+			screen: screen,
+			selectOptions: selectOptions,
+			isMultiple: isMultiple,
+			theme: widget.options.theme,
+			listbox: listbox,
+			list: list,
+			header: header,
+			headerTitle: headerTitle,
+			headerClose: headerClose,
+			menuPageContent: menuPageContent,
+			menuPageClose: menuPageClose,
+			placeholder: "",
+
+			build: function() {
+				var self = this;
+
+				// Create list from select, update state
+				self.refresh();
+
+				self.select.attr( "tabindex", "-1" ).focus(function() {
+					$( this ).blur();
+					self.button.focus();
+				});
+
+				// Button events
+				self.button.bind( "vclick keydown" , function( event ) {
+					if ( event.type == "vclick" ||
+							 event.keyCode && ( event.keyCode === $.mobile.keyCode.ENTER ||
+																	event.keyCode === $.mobile.keyCode.SPACE ) ) {
+
+						self.open();
+						event.preventDefault();
+					}
+				});
+
+				// Events for list items
+				self.list.attr( "role", "listbox" )
+					.bind( "focusin", function( e ){
+						$( e.target )
+							.attr( "tabindex", "0" )
+							.trigger( "vmouseover" );
+
+					})
+					.bind( "focusout", function( e ){
+						$( e.target )
+							.attr( "tabindex", "-1" )
+							.trigger( "vmouseout" );
+					})
+					.delegate( "li:not(.ui-disabled, .ui-li-divider)", "click", function( event ) {
+
+						// index of option tag to be selected
+						var oldIndex = self.select[ 0 ].selectedIndex,
+							newIndex = self.list.find( "li:not(.ui-li-divider)" ).index( this ),
+							option = self._selectOptions().eq( newIndex )[ 0 ];
+
+						// toggle selected status on the tag for multi selects
+						option.selected = self.isMultiple ? !option.selected : true;
+
+						// toggle checkbox class for multiple selects
+						if ( self.isMultiple ) {
+							$( this ).find( ".ui-icon" )
+								.toggleClass( "ui-icon-checkbox-on", option.selected )
+								.toggleClass( "ui-icon-checkbox-off", !option.selected );
+						}
+
+						// trigger change if value changed
+						if ( self.isMultiple || oldIndex !== newIndex ) {
+							self.select.trigger( "change" );
+						}
+
+						// hide custom select for single selects only - otherwise focus clicked item
+						// We need to grab the clicked item the hard way, because the list may have been rebuilt
+						if ( self.isMultiple ) {
+							self.list.find( "li:not(.ui-li-divider)" ).eq( newIndex )
+								.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
+						}
+						else {
+							self.close();
+						}
+
+						event.preventDefault();
+					})
+					.keydown(function( event ) {  //keyboard events for menu items
+						var target = $( event.target ),
+							li = target.closest( "li" ),
+							prev, next;
+
+						// switch logic based on which key was pressed
+						switch ( event.keyCode ) {
+							// up or left arrow keys
+						 case 38:
+							prev = li.prev().not( ".ui-selectmenu-placeholder" );
+
+							if( prev.is( ".ui-li-divider" ) ) {
+								prev = prev.prev();
+							}
+
+							// if there's a previous option, focus it
+							if ( prev.length ) {
+								target
+									.blur()
+									.attr( "tabindex", "-1" );
+
+								prev.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
+							}
+
+							return false;
+							break;
+
+							// down or right arrow keys
+						 case 40:
+							next = li.next();
+
+							if( next.is( ".ui-li-divider" ) ) {
+								next = next.next();
+							}
+
+							// if there's a next option, focus it
+							if ( next.length ) {
+								target
+									.blur()
+									.attr( "tabindex", "-1" );
+
+								next.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
+							}
+
+							return false;
+							break;
+
+							// If enter or space is pressed, trigger click
+						 case 13:
+						 case 32:
+							target.trigger( "click" );
+
+							return false;
+							break;
+						}
+					});
+
+				// button refocus ensures proper height calculation
+				// by removing the inline style and ensuring page inclusion
+				self.menuPage.bind( "pagehide", function() {
+					self.list.appendTo( self.listbox );
+					self._focusButton();
+
+					// TODO centralize page removal binding / handling in the page plugin.
+					// Suggestion from @jblas to do refcounting
+					//
+					// TODO extremely confusing dependency on the open method where the pagehide.remove
+					// bindings are stripped to prevent the parent page from disappearing. The way
+					// we're keeping pages in the DOM right now sucks
+					//
+					// rebind the page remove that was unbound in the open function
+					// to allow for the parent page removal from actions other than the use
+					// of a dialog sized custom select
+					//
+					// doing this here provides for the back button on the custom select dialog
+					$.mobile._bindPageRemove.call( self.thisPage );
+				});
+
+				// Events on "screen" overlay
+				self.screen.bind( "vclick", function( event ) {
+					self.close();
+				});
+
+				// Close button on small overlays
+				if( self.isMultiple ){
+					self.headerClose.click( function() {
+						if ( self.menuType == "overlay" ) {
+							self.close();
+							return false;
+						}
+					});
+				}
+
+				// track this dependency so that when the parent page
+				// is removed on pagehide it will also remove the menupage
+				self.thisPage.addDependents( this.menuPage );
+			},
+
+			_isRebuildRequired: function() {
+				var list = this.list.find( "li" ),
+					options = this._selectOptions();
+
+				// TODO exceedingly naive method to determine difference
+				// ignores value changes etc in favor of a forcedRebuild
+				// from the user in the refresh method
+				return options.text() !== list.text();
+			},
+
+			selected: function() {
+				return this._selectOptions().filter( ":selected:not(:jqmData(placeholder='true'))" );
+			},
+
+			refresh: function( forceRebuild , foo ){
+				var self = this,
+				select = this.element,
+				isMultiple = this.isMultiple,
+				indicies;
+
+				if (  forceRebuild || this._isRebuildRequired() ) {
+					self._buildList();
+				}
+
+				indicies = this.selectedIndices();
+
+				self.setButtonText();
+				self.setButtonCount();
+
+				self.list.find( "li:not(.ui-li-divider)" )
+					.removeClass( $.mobile.activeBtnClass )
+					.attr( "aria-selected", false )
+					.each(function( i ) {
+
+						if ( $.inArray( i, indicies ) > -1 ) {
+							var item = $( this );
+
+							// Aria selected attr
+							item.attr( "aria-selected", true );
+
+							// Multiple selects: add the "on" checkbox state to the icon
+							if ( self.isMultiple ) {
+								item.find( ".ui-icon" ).removeClass( "ui-icon-checkbox-off" ).addClass( "ui-icon-checkbox-on" );
+							} else {
+								if( item.is( ".ui-selectmenu-placeholder" ) ) {
+									item.next().addClass( $.mobile.activeBtnClass );
+								} else {
+									item.addClass( $.mobile.activeBtnClass );
+								}
+							}
+						}
+					});
+			},
+
+			close: function() {
+				if ( this.options.disabled || !this.isOpen ) {
+					return;
+				}
+
+				var self = this;
+
+				if ( self.menuType == "page" ) {
+					// doesn't solve the possible issue with calling change page
+					// where the objects don't define data urls which prevents dialog key
+					// stripping - changePage has incoming refactor
+					window.history.back();
+				} else {
+					self.screen.addClass( "ui-screen-hidden" );
+					self.listbox.addClass( "ui-selectmenu-hidden" ).removeAttr( "style" ).removeClass( "in" );
+					self.list.appendTo( self.listbox );
+					self._focusButton();
+				}
+
+				// allow the dialog to be closed again
+				self.isOpen = false;
+			},
+
+			open: function() {
+				if ( this.options.disabled ) {
+					return;
+				}
+
+				var self = this,
+          $window = $( window ),
+          selfListParent = self.list.parent(),
+					menuHeight = selfListParent.outerHeight(),
+					menuWidth = selfListParent.outerWidth(),
+					activePage = $( ".ui-page-active" ),
+					tScrollElem = activePage,
+					scrollTop = $window.scrollTop(),
+					btnOffset = self.button.offset().top,
+					screenHeight = $window.height(),
+					screenWidth = $window.width();
+
+				//add active class to button
+				self.button.addClass( $.mobile.activeBtnClass );
+
+				//remove after delay
+				setTimeout( function() {
+					self.button.removeClass( $.mobile.activeBtnClass );
+				}, 300);
+
+				function focusMenuItem() {
+					var selector = self.list.find( "." + $.mobile.activeBtnClass + " a" );
+					if ( selector.length === 0 ) {
+						selector = self.list.find( "li.ui-btn:not(:jqmData(placeholder='true')) a" );
+					}
+					selector.first().focus().closest( "li" ).addClass( "ui-btn-down-" + widget.options.theme );
+				}
+
+				if ( menuHeight > screenHeight - 80 || !$.support.scrollTop ) {
+
+					self.menuPage.appendTo( $.mobile.pageContainer ).page();
+					self.menuPageContent = menuPage.find( ".ui-content" );
+					self.menuPageClose = menuPage.find( ".ui-header a" );
+
+					// prevent the parent page from being removed from the DOM,
+					// otherwise the results of selecting a list item in the dialog
+					// fall into a black hole
+					self.thisPage.unbind( "pagehide.remove" );
+
+					//for WebOS/Opera Mini (set lastscroll using button offset)
+					if ( scrollTop == 0 && btnOffset > screenHeight ) {
+						self.thisPage.one( "pagehide", function() {
+							$( this ).jqmData( "lastScroll", btnOffset );
+						});
+					}
+
+					self.menuPage.one( "pageshow", function() {
+						focusMenuItem();
+						self.isOpen = true;
+					});
+
+					self.menuType = "page";
+					self.menuPageContent.append( self.list );
+					self.menuPage.find("div .ui-title").text(self.label.text());
+					$.mobile.changePage( self.menuPage, {
+						transition: $.mobile.defaultDialogTransition
+					});
+				} else {
+					self.menuType = "overlay";
+
+					self.screen.height( $(document).height() )
+						.removeClass( "ui-screen-hidden" );
+
+					// Try and center the overlay over the button
+					var roomtop = btnOffset - scrollTop,
+						roombot = scrollTop + screenHeight - btnOffset,
+						halfheight = menuHeight / 2,
+						maxwidth = parseFloat( self.list.parent().css( "max-width" ) ),
+						newtop, newleft;
+
+					if ( roomtop > menuHeight / 2 && roombot > menuHeight / 2 ) {
+						newtop = btnOffset + ( self.button.outerHeight() / 2 ) - halfheight;
+					} else {
+						// 30px tolerance off the edges
+						newtop = roomtop > roombot ? scrollTop + screenHeight - menuHeight - 30 : scrollTop + 30;
+					}
+
+					// If the menuwidth is smaller than the screen center is
+					if ( menuWidth < maxwidth ) {
+						newleft = ( screenWidth - menuWidth ) / 2;
+					} else {
+
+						//otherwise insure a >= 30px offset from the left
+						newleft = self.button.offset().left + self.button.outerWidth() / 2 - menuWidth / 2;
+
+						// 30px tolerance off the edges
+						if ( newleft < 30 ) {
+							newleft = 30;
+						} else if ( (newleft + menuWidth) > screenWidth ) {
+							newleft = screenWidth - menuWidth - 30;
+						}
+					}
+
+					self.listbox.append( self.list )
+						.removeClass( "ui-selectmenu-hidden" )
+						.css({
+							top: newtop,
+							left: newleft
+						})
+						.addClass( "in" );
+
+					focusMenuItem();
+
+					// duplicate with value set in page show for dialog sized selects
+					self.isOpen = true;
+				}
+			},
+
+			_buildList: function() {
+				var self = this,
+					o = this.options,
+					placeholder = this.placeholder,
+					needPlaceholder = true,
+					optgroups = [],
+					lis = [],
+					dataIcon = self.isMultiple ? "checkbox-off" : "false";
+
+				self.list.empty().filter( ".ui-listview" ).listview( "destroy" );
+
+				var $options = self.select.find("option"),
+					numOptions = $options.length,
+					select = this.select[ 0 ],
+					dataPrefix = 'data-' + $.mobile.ns,
+					dataIndexAttr = dataPrefix + 'option-index',
+					dataIconAttr = dataPrefix + 'icon',
+					dataRoleAttr = dataPrefix + 'role',
+					dataPlaceholderAttr = dataPrefix + 'placeholder',
+					fragment = document.createDocumentFragment(),
+					isPlaceholderItem = false,
+					optGroup;
+
+				for (var i = 0; i < numOptions;i++, isPlaceholderItem = false){
+					var option = $options[i],
+						$option = $(option),
+						parent = option.parentNode,
+						text = $option.text(),
+						anchor  = document.createElement('a'),
+						classes = [];
+
+					anchor.setAttribute('href','#');
+					anchor.appendChild(document.createTextNode(text));
+
+					// Are we inside an optgroup?
+					if (parent !== select && parent.nodeName.toLowerCase() === "optgroup"){
+						var optLabel = parent.getAttribute('label');
+						if ( optLabel != optGroup) {
+							var divider = document.createElement('li');
+							divider.setAttribute(dataRoleAttr,'list-divider');
+							divider.setAttribute('role','option');
+							divider.setAttribute('tabindex','-1');
+							divider.appendChild(document.createTextNode(optLabel));
+							fragment.appendChild(divider);
+							optGroup = optLabel;
+						}
+					}
+
+					if (needPlaceholder && (!option.getAttribute( "value" ) || text.length == 0 || $option.jqmData( "placeholder" ))) {
+						needPlaceholder = false;
+						isPlaceholderItem = true;
+
+						// If we have identified a placeholder, mark it retroactively in the select as well
+						option.setAttribute( dataPlaceholderAttr, true );
+						if ( o.hidePlaceholderMenuItems ) {
+							classes.push( "ui-selectmenu-placeholder" );
+						}
+						if (!placeholder) {
+							placeholder = self.placeholder = text;
+						}
+					}
+
+					var item = document.createElement('li');
+					if ( option.disabled ) {
+						classes.push( "ui-disabled" );
+						item.setAttribute('aria-disabled',true);
+					}
+					item.setAttribute(dataIndexAttr,i);
+					item.setAttribute(dataIconAttr,dataIcon);
+					if ( isPlaceholderItem ) {
+						item.setAttribute( dataPlaceholderAttr, true );
+					}
+					item.className = classes.join(" ");
+					item.setAttribute('role','option');
+					anchor.setAttribute('tabindex','-1');
+					item.appendChild(anchor);
+					fragment.appendChild(item);
+				}
+
+				self.list[0].appendChild(fragment);
+
+				// Hide header if it's not a multiselect and there's no placeholder
+				if ( !this.isMultiple && !placeholder.length ) {
+					this.header.hide();
+				} else {
+					this.headerTitle.text( this.placeholder );
+				}
+
+				// Now populated, create listview
+				self.list.listview();
+			},
+
+			_button: function(){
+				return $( "<a>", {
+					"href": "#",
+					"role": "button",
+					// TODO value is undefined at creation
+					"id": this.buttonId,
+					"aria-haspopup": "true",
+
+					// TODO value is undefined at creation
+					"aria-owns": this.menuId
+				});
+			}
+		});
+	};
+
+	// issue #3894 - core doesn't triggered events on disabled delegates
+	$( document ).bind( "selectmenubeforecreate", function( event ){
+		var selectmenuWidget = $( event.target ).data( "selectmenu" );
+
+		if( !selectmenuWidget.options.nativeMenu ){
+			extendSelect( selectmenuWidget );
+		}
+	});
+})( jQuery );
+
+(function( $, undefined ) {
+
+
+	$.widget( "mobile.fixedtoolbar", $.mobile.widget, {
+		options: {
+			visibleOnPageShow: true,
+			disablePageZoom: true,
+			transition: "slide", //can be none, fade, slide (slide maps to slideup or slidedown)
+			fullscreen: false,
+			tapToggle: true,
+			tapToggleBlacklist: "a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed",
+			hideDuringFocus: "input, textarea, select",
+			updatePagePadding: true,
+			trackPersistentToolbars: true,
+
+			// Browser detection! Weeee, here we go...
+			// Unfortunately, position:fixed is costly, not to mention probably impossible, to feature-detect accurately.
+			// Some tests exist, but they currently return false results in critical devices and browsers, which could lead to a broken experience.
+			// Testing fixed positioning is also pretty obtrusive to page load, requiring injected elements and scrolling the window
+			// The following function serves to rule out some popular browsers with known fixed-positioning issues
+			// This is a plugin option like any other, so feel free to improve or overwrite it
+			supportBlacklist: function(){
+				var w = window,
+					ua = navigator.userAgent,
+					platform = navigator.platform,
+					// Rendering engine is Webkit, and capture major version
+					wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ),
+					wkversion = !!wkmatch && wkmatch[ 1 ],
+					ffmatch = ua.match( /Fennec\/([0-9]+)/ ),
+					ffversion = !!ffmatch && ffmatch[ 1 ],
+					operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ ),
+					omversion = !!operammobilematch && operammobilematch[ 1 ];
+
+				if(
+					// iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5)
+					( ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1  || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534 )
+					||
+					// Opera Mini
+					( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" )
+					||
+					( operammobilematch && omversion < 7458 )
+					||
+					//Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2)
+					( ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533 )
+					||
+					// Firefox Mobile before 6.0 -
+					( ffversion && ffversion < 6 )
+					||
+					// WebOS less than 3
+					( "palmGetResource" in window && wkversion && wkversion < 534 )
+					||
+					// MeeGo
+					( ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1 )
+				){
+					return true;
+				}
+
+				return false;
+			},
+			initSelector: ":jqmData(position='fixed')"
+		},
+
+		_create: function() {
+
+			var self = this,
+				o = self.options,
+				$el = self.element,
+				tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer",
+				$page = $el.closest(".ui-page");
+
+			// Feature detecting support for
+			if( o.supportBlacklist() ){
+				self.destroy();
+				return;
+			}
+
+			$el.addClass( "ui-"+ tbtype +"-fixed" );
+
+			// "fullscreen" overlay positioning
+			if( o.fullscreen ){
+				$el.addClass( "ui-"+ tbtype +"-fullscreen" );
+				$page.addClass( "ui-page-" + tbtype + "-fullscreen" );
+			}
+			// If not fullscreen, add class to page to set top or bottom padding
+			else{
+				$page.addClass( "ui-page-" + tbtype + "-fixed" );
+			}
+
+			self._addTransitionClass();
+			self._bindPageEvents();
+			self._bindToggleHandlers();
+		},
+
+		_addTransitionClass: function(){
+			var tclass = this.options.transition;
+
+			if( tclass && tclass !== "none" ){
+				// use appropriate slide for header or footer
+				if( tclass === "slide" ){
+					tclass = this.element.is( ".ui-header" ) ? "slidedown" : "slideup";
+				}
+
+				this.element.addClass( tclass );
+			}
+		},
+
+		_bindPageEvents: function(){
+			var self = this,
+				o = self.options,
+				$el = self.element;
+
+			//page event bindings
+			// Fixed toolbars require page zoom to be disabled, otherwise usability issues crop up
+			// This method is meant to disable zoom while a fixed-positioned toolbar page is visible
+			$el.closest( ".ui-page" )
+				.bind( "pagebeforeshow", function(){
+					if( o.disablePageZoom ){
+						$.mobile.zoom.disable( true );
+					}
+					if( !o.visibleOnPageShow ){
+						self.hide( true );
+					}
+				} )
+				.bind( "webkitAnimationStart animationstart updatelayout", function(){
+					var thisPage = this;
+					if( o.updatePagePadding ){
+						self.updatePagePadding( thisPage );
+					}
+				})
+				.bind( "pageshow", function(){
+					var thisPage = this;
+					self.updatePagePadding( thisPage );
+					if( o.updatePagePadding ){
+						$( window ).bind( "throttledresize." + self.widgetName, function(){
+						 	self.updatePagePadding( thisPage );
+						});
+					}
+				})
+				.bind( "pagebeforehide", function( e, ui ){
+					if( o.disablePageZoom ){
+						$.mobile.zoom.enable( true );
+					}
+					if( o.updatePagePadding ){
+						$( window ).unbind( "throttledresize." + self.widgetName );
+					}
+
+					if( o.trackPersistentToolbars ){
+						var thisFooter = $( ".ui-footer-fixed:jqmData(id)", this ),
+							thisHeader = $( ".ui-header-fixed:jqmData(id)", this ),
+							nextFooter = thisFooter.length && ui.nextPage && $( ".ui-footer-fixed:jqmData(id='" + thisFooter.jqmData( "id" ) + "')", ui.nextPage ),
+							nextHeader = thisHeader.length && ui.nextPage && $( ".ui-header-fixed:jqmData(id='" + thisHeader.jqmData( "id" ) + "')", ui.nextPage );
+
+						nextFooter = nextFooter || $();
+
+							if( nextFooter.length || nextHeader.length ){
+
+								nextFooter.add( nextHeader ).appendTo( $.mobile.pageContainer );
+
+								ui.nextPage.one( "pageshow", function(){
+									nextFooter.add( nextHeader ).appendTo( this );
+								});
+							}
+					}
+				});
+		},
+
+		_visible: true,
+
+		// This will set the content element's top or bottom padding equal to the toolbar's height
+		updatePagePadding: function( tbPage ) {
+			var $el = this.element,
+				header = $el.is( ".ui-header" );
+
+			// This behavior only applies to "fixed", not "fullscreen"
+			if( this.options.fullscreen ){ return; }
+
+			tbPage = tbPage || $el.closest( ".ui-page" );
+			$( tbPage ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() );
+		},
+		
+		_useTransition: function( notransition ){
+			var $win = $( window ),
+				$el = this.element,
+				scroll = $win.scrollTop(),
+				elHeight = $el.height(),
+				pHeight = $el.closest( ".ui-page" ).height(),
+				viewportHeight = $.mobile.getScreenHeight(),
+				tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer";
+				
+			return !notransition &&
+				( this.options.transition && this.options.transition !== "none" &&
+				(
+					( tbtype === "header" && !this.options.fullscreen && scroll > elHeight ) ||
+					( tbtype === "footer" && !this.options.fullscreen && scroll + viewportHeight < pHeight - elHeight )
+				) || this.options.fullscreen
+				);
+		},
+
+		show: function( notransition ){
+			var hideClass = "ui-fixed-hidden",
+				$el = this.element;
+
+				if( this._useTransition( notransition ) ){
+				$el
+					.removeClass( "out " + hideClass )
+					.addClass( "in" );
+			}
+			else {
+				$el.removeClass( hideClass );
+			}
+			this._visible = true;
+		},
+
+		hide: function( notransition ){
+			var hideClass = "ui-fixed-hidden",
+				$el = this.element,
+				// if it's a slide transition, our new transitions need the reverse class as well to slide outward
+				outclass = "out" + ( this.options.transition === "slide" ? " reverse" : "" );
+
+			if( this._useTransition( notransition ) ){
+				$el
+					.addClass( outclass )
+					.removeClass( "in" )
+					.animationComplete( function(){
+						$el.addClass( hideClass ).removeClass( outclass );
+					});
+			}
+			else {
+				$el.addClass( hideClass ).removeClass( outclass );
+			}
+			this._visible = false;
+		},
+
+		toggle: function(){
+			this[ this._visible ? "hide" : "show" ]();
+		},
+
+		_bindToggleHandlers: function(){
+			var self = this,
+				o = self.options,
+				$el = self.element;
+
+			// tap toggle
+			$el.closest( ".ui-page" )
+				.bind( "vclick", function( e ){
+					if( o.tapToggle && !$( e.target ).closest( o.tapToggleBlacklist ).length ){
+						self.toggle();
+					}
+				})
+				.bind( "focusin focusout", function( e ){
+					if( screen.width < 500 && $( e.target ).is( o.hideDuringFocus ) && !$( e.target ).closest( ".ui-header-fixed, .ui-footer-fixed" ).length ){
+						self[ ( e.type === "focusin" && self._visible ) ? "hide" : "show" ]();
+					}
+				});
+		},
+
+		destroy: function(){
+			this.element.removeClass( "ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden" );
+			this.element.closest( ".ui-page" ).removeClass( "ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen" );
+		}
+
+	});
+
+	//auto self-init widgets
+	$( document )
+		.bind( "pagecreate create", function( e ){
+			
+			// DEPRECATED in 1.1: support for data-fullscreen=true|false on the page element.
+			// This line ensures it still works, but we recommend moving the attribute to the toolbars themselves.
+			if( $( e.target ).jqmData( "fullscreen" ) ){
+				$( $.mobile.fixedtoolbar.prototype.options.initSelector, e.target ).not( ":jqmData(fullscreen)" ).jqmData( "fullscreen", true );
+			}
+			
+			$.mobile.fixedtoolbar.prototype.enhanceWithin( e.target );
+		});
+
+})( jQuery );
+
+( function( $, window ) {
+	
+	// This fix addresses an iOS bug, so return early if the UA claims it's something else.
+	if( !(/iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1 ) ){
+		return;
+	}
+	
+    var zoom = $.mobile.zoom,
+		evt, x, y, z, aig;
+	
+    function checkTilt( e ){
+		evt = e.originalEvent;
+		aig = evt.accelerationIncludingGravity;
+		
+		x = Math.abs( aig.x );
+		y = Math.abs( aig.y );
+		z = Math.abs( aig.z );
+				
+		// If portrait orientation and in one of the danger zones
+        if( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){
+			if( zoom.enabled ){
+				zoom.disable();
+			}        	
+        }
+		else if( !zoom.enabled ){
+			zoom.enable();
+        }
+    }
+
+    $( window )
+		.bind( "orientationchange.iosorientationfix", zoom.enable )
+		.bind( "devicemotion.iosorientationfix", checkTilt );
+
+}( jQuery, this ));
+
+( function( $, window, undefined ) {
+	var	$html = $( "html" ),
+			$head = $( "head" ),
+			$window = $( window );
+
+	// trigger mobileinit event - useful hook for configuring $.mobile settings before they're used
+	$( window.document ).trigger( "mobileinit" );
+
+	// support conditions
+	// if device support condition(s) aren't met, leave things as they are -> a basic, usable experience,
+	// otherwise, proceed with the enhancements
+	if ( !$.mobile.gradeA() ) {
+		return;
+	}
+
+	// override ajaxEnabled on platforms that have known conflicts with hash history updates
+	// or generally work better browsing in regular http for full page refreshes (BB5, Opera Mini)
+	if ( $.mobile.ajaxBlacklist ) {
+		$.mobile.ajaxEnabled = false;
+	}
+
+	// Add mobile, initial load "rendering" classes to docEl
+	$html.addClass( "ui-mobile ui-mobile-rendering" );
+
+	// This is a fallback. If anything goes wrong (JS errors, etc), or events don't fire,
+	// this ensures the rendering class is removed after 5 seconds, so content is visible and accessible
+	setTimeout( hideRenderingClass, 5000 );
+
+	// loading div which appears during Ajax requests
+	// will not appear if $.mobile.loadingMessage is false
+	var loaderClass = "ui-loader",
+		$loader = $( "<div class='" + loaderClass + "'><span class='ui-icon ui-icon-loading'></span><h1></h1></div>" );
+
+	// For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top
+	function fakeFixLoader(){
+		var activeBtn = $( "." + $.mobile.activeBtnClass ).first();
+
+		$loader
+			.css({
+				top: $.support.scrollTop && $window.scrollTop() + $window.height() / 2 ||
+				activeBtn.length && activeBtn.offset().top || 100
+			});
+	}
+
+	// check position of loader to see if it appears to be "fixed" to center
+	// if not, use abs positioning
+	function checkLoaderPosition(){
+		var offset = $loader.offset(),
+			scrollTop = $window.scrollTop(),
+			screenHeight = $.mobile.getScreenHeight();
+
+		if( offset.top < scrollTop || (offset.top - scrollTop) > screenHeight ) {
+			$loader.addClass( "ui-loader-fakefix" );
+			fakeFixLoader();
+			$window
+				.unbind( "scroll", checkLoaderPosition )
+				.bind( "scroll", fakeFixLoader );
+		}
+	}
+
+	//remove initial build class (only present on first pageshow)
+	function hideRenderingClass(){
+		$html.removeClass( "ui-mobile-rendering" );
+	}
+
+	$.extend($.mobile, {
+		// turn on/off page loading message.
+		showPageLoadingMsg: function( theme, msgText, textonly ) {
+			$html.addClass( "ui-loading" );
+
+			if ( $.mobile.loadingMessage ) {
+				// text visibility from argument takes priority
+				var textVisible = textonly || $.mobile.loadingMessageTextVisible;
+
+				theme = theme || $.mobile.loadingMessageTheme,
+
+				$loader
+					.attr( "class", loaderClass + " ui-corner-all ui-body-" + ( theme || "a" ) + " ui-loader-" + ( textVisible ? "verbose" : "default" ) + ( textonly ? " ui-loader-textonly" : "" ) )
+					.find( "h1" )
+						.text( msgText || $.mobile.loadingMessage )
+						.end()
+					.appendTo( $.mobile.pageContainer );
+
+				checkLoaderPosition();
+				$window.bind( "scroll", checkLoaderPosition );
+			}
+		},
+
+		hidePageLoadingMsg: function() {
+			$html.removeClass( "ui-loading" );
+
+			if( $.mobile.loadingMessage ){
+				$loader.removeClass( "ui-loader-fakefix" );
+			}
+
+			$( window ).unbind( "scroll", fakeFixLoader );
+			$( window ).unbind( "scroll", checkLoaderPosition );
+		},
+
+		// find and enhance the pages in the dom and transition to the first page.
+		initializePage: function() {
+			// find present pages
+			var $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" );
+
+			// if no pages are found, create one with body's inner html
+			if ( !$pages.length ) {
+				$pages = $( "body" ).wrapInner( "<div data-" + $.mobile.ns + "role='page'></div>" ).children( 0 );
+			}
+
+			// add dialogs, set data-url attrs
+			$pages.each(function() {
+				var $this = $(this);
+
+				// unless the data url is already set set it to the pathname
+				if ( !$this.jqmData("url") ) {
+					$this.attr( "data-" + $.mobile.ns + "url", $this.attr( "id" ) || location.pathname + location.search );
+				}
+			});
+
+			// define first page in dom case one backs out to the directory root (not always the first page visited, but defined as fallback)
+			$.mobile.firstPage = $pages.first();
+
+			// define page container
+			$.mobile.pageContainer = $pages.first().parent().addClass( "ui-mobile-viewport" );
+
+			// alert listeners that the pagecontainer has been determined for binding
+			// to events triggered on it
+			$window.trigger( "pagecontainercreate" );
+
+			// cue page loading message
+			$.mobile.showPageLoadingMsg();
+
+			//remove initial build class (only present on first pageshow)
+			hideRenderingClass();
+
+			// if hashchange listening is disabled, there's no hash deeplink,
+			// the hash is not valid (contains more than one # or does not start with #)
+			// or there is no page with that hash, change to the first page in the DOM
+			// Remember, however, that the hash can also be a path!
+			if ( ! ( $.mobile.hashListeningEnabled &&
+			         $.mobile.path.isHashValid( location.hash ) &&
+			         ( $( location.hash + ':jqmData(role="page")' ).length ||
+			           $.mobile.path.isPath( location.hash ) ) ) ) {
+				$.mobile.changePage( $.mobile.firstPage, { transition: "none", reverse: true, changeHash: false, fromHashChange: true } );
+			}
+			// otherwise, trigger a hashchange to load a deeplink
+			else {
+				$window.trigger( "hashchange", [ true ] );
+			}
+		}
+	});
+
+	// initialize events now, after mobileinit has occurred
+	$.mobile.navreadyDeferred.resolve();
+
+	// check which scrollTop value should be used by scrolling to 1 immediately at domready
+	// then check what the scroll top is. Android will report 0... others 1
+	// note that this initial scroll won't hide the address bar. It's just for the check.
+	$(function() {
+		window.scrollTo( 0, 1 );
+
+		// if defaultHomeScroll hasn't been set yet, see if scrollTop is 1
+		// it should be 1 in most browsers, but android treats 1 as 0 (for hiding addr bar)
+		// so if it's 1, use 0 from now on
+		$.mobile.defaultHomeScroll = ( !$.support.scrollTop || $(window).scrollTop() === 1 ) ? 0 : 1;
+
+
+		// TODO: Implement a proper registration mechanism with dependency handling in order to not have exceptions like the one below
+		//auto self-init widgets for those widgets that have a soft dependency on others
+		if ( $.fn.controlgroup ) {
+			$( document ).bind( "pagecreate create", function( e ){
+				$( ":jqmData(role='controlgroup')", e.target )
+					.jqmEnhanceable()
+					.controlgroup({ excludeInvisible: false });
+			});
+		}
+
+		//dom-ready inits
+		if( $.mobile.autoInitializePage ){
+			$.mobile.initializePage();
+		}
+
+		// window load event
+		// hide iOS browser chrome on load
+		$window.load( $.mobile.silentScroll );
+
+		if ( !$.support.cssPointerEvents ) {
+			// IE and Opera don't support CSS pointer-events: none that we use to disable link-based buttons
+			// by adding the 'ui-disabled' class to them. Using a JavaScript workaround for those browser.
+			// https://github.com/jquery/jquery-mobile/issues/3558
+
+			$( document ).delegate( ".ui-disabled", "vclick",
+				function( e ) {
+					e.preventDefault();
+					e.stopImmediatePropagation();
+				}
+			);
+		}
+	});
+}( jQuery, this ));
+
+
+}));

+ 8 - 0
miaomiao/plugins/jpush-phonegap-plugin/hooks/apns.entitlements

xqd
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>aps-environment</key>
+		<string>development</string>
+	</dict>
+</plist>

+ 93 - 0
miaomiao/plugins/jpush-phonegap-plugin/hooks/common.js

xqd
@@ -0,0 +1,93 @@
+/*
+ * Author: Derek Chia <snipking@gmail.com>
+ * common functions for cordova plugin after hook
+ */
+const fs = require('fs');
+const path = require('path');
+
+module.exports.addAPNSinEntitlements = (entitlementPath, isProduction) => {
+    if( fs.existsSync(entitlementPath) ) {
+        fs.readFile(entitlementPath, "utf8", function(err, data) {
+            if (err) {
+                throw err;
+            }
+
+            console.log("Reading entitlements file asynchronously");
+
+            let toInsert = '<key>aps-environment</key>\n' +
+                           '\t\t<string>development</string>';
+            if(isProduction) {
+                toInsert = '<key>aps-environment</key>\n' +
+                           '\t\t<string>production</string>';
+            }
+
+            let re1 = new RegExp('<key>aps-environment<\/key>(.|[\r\n])*<string>.*<\/string>');
+            let matched = data.match(re1);
+            let result;
+            if (matched === null) {
+                if(data.match(/<\/dict>/g)) {
+                    result = data.replace(/<\/dict>/, '\t' + toInsert + '\n\t</dict>');
+                } else if(data.match(/<dict\/>/g)) {
+                    result = data.replace(/<dict\/>/, '\t<dict>\n\t\t' + toInsert + '\n\t</dict>');
+                }
+            } else {
+                result = data.replace(re1, toInsert);
+            }
+
+            // write result to entitlements file
+            fs.writeFile(entitlementPath, result, {"encoding": 'utf8'}, function(err) {
+                if (err) {
+                    throw err;
+                }
+                console.log(entitlementPath + " written successfully");
+            });
+        });
+    } else {
+        console.log("Entitlement File '" + entitlementPath + "' not found. Make sure your ios platform upper than 4.3.0");
+    }
+}
+
+module.exports.removeAPNSinEntitlements = (entitlementPath) => {
+    if( fs.existsSync(entitlementPath) ) {
+        fs.readFile(entitlementPath, "utf8", function(err, data) {
+            if (err) {
+                throw err;
+            }
+
+            console.log("Reading entitlements file asynchronously");
+
+            let re1 = new RegExp('<key>aps-environment<\/key>(.|[\r\n])*<string>.*<\/string>');
+            let matched = data.match(re1);
+            let result;
+            if (matched != null) {
+                result = data.replace(re1, "");
+            }
+
+            // write result to entitlements file
+            fs.writeFile(entitlementPath, result, {"encoding": 'utf8'}, function(err) {
+                if (err) {
+                    throw err;
+                }
+                console.log(entitlementPath + " written successfully");
+            });
+        });
+    } else {
+        console.log("Entitlement File '" + entitlementPath + "' not found. Make sure your ios platform upper than 4.3.0");
+    }
+}
+
+module.exports.getXcodeProjName = (searchPath) => {
+    if(searchPath == null || searchPath == undefined) {
+        searchPath = './';
+    }
+    let resultFolderName = null;
+    let folderNames = fs.readdirSync(searchPath).filter(file => fs.lstatSync(path.join(searchPath, file)).isDirectory());
+    let folderNamesReg = new RegExp('.*\.xcodeproj', 'g')  // get filder name like `*.xcodeproj`
+    for(let folderName of folderNames) {
+        if(folderName.match(folderNamesReg)) {
+            resultFolderName = folderName;
+            break;
+        }
+    }
+    return resultFolderName.substr(0, resultFolderName.length - 10);
+}

+ 66 - 0
miaomiao/plugins/jpush-phonegap-plugin/hooks/iosDisablePush.js

xqd
@@ -0,0 +1,66 @@
+/*
+ * Author: Derek Chia <snipking@gmail.com>
+ * Cordova plugin after hook to disable `Push Notification` capability for XCode 8
+ */
+
+const fs = require('fs');
+const path = require('path');
+let commonFuncs = require('./common');
+
+/**
+ * remove APNS env from cordova project Entitlements-Debug.plist and Entitlements-Release.plist
+ * This two file will work when xcode archive app
+ */
+let disablePushNotificationForCI = (basePath, xcodeprojName) => {
+    commonFuncs.removeAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Debug.plist');
+    commonFuncs.removeAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Release.plist');
+}
+
+/**
+ * remove APNS env to entitlement file; disable Push Notification capability in .pbxproj file
+ * This two file will work when xcode archive app
+ */
+let disablePushNotificationForXCode = (entitlementsPath, pbxprojPath) => {
+    /**
+     * remove APNS env to entitlement file
+     */
+    if( fs.existsSync(entitlementsPath) ) {
+        commonFuncs.removeAPNSinEntitlements(entitlementsPath);
+    }
+
+    /**
+     * disable Push Notification capability in .pbxproj file
+     * equally disable "Push Notification" switch in xcode
+     */
+    fs.readFile(pbxprojPath, "utf8", function(err, data) {
+        if (err) {
+            throw err;
+        }
+        console.log("Reading pbxproj file asynchronously");
+
+        // turn off Push Notification Capability
+        let re4rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities(.|[\r\n])*com\.apple\.Push = {(.|[\r\n])*enabled = [01]');
+        let parts = re4rep.exec(data);
+        if(parts !== null && parts !== undefined && parts.length > 0) {
+            result = data.replace(re4rep, parts[0].substr(0, parts[0].length - 1) + '0');
+        
+            // write result to project.pbxproj
+            fs.writeFile(pbxprojPath, result, {"encoding": 'utf8'}, function(err) {
+                if (err) {
+                    throw err;
+                }
+                console.log(pbxprojPath + " written successfully");
+            });
+        }
+    });
+}
+
+let basePath = './platforms/ios/';
+let buildType = 'dev';
+let xcodeprojName = commonFuncs.getXcodeProjName(basePath);
+let pbxprojPath = basePath + xcodeprojName + '.xcodeproj/project.pbxproj';
+let entitlementsPath = basePath + xcodeprojName + '/' + xcodeprojName + '.entitlements';
+
+disablePushNotificationForCI(basePath, xcodeprojName);
+
+disablePushNotificationForXCode(entitlementsPath, pbxprojPath);

+ 172 - 0
miaomiao/plugins/jpush-phonegap-plugin/hooks/iosEnablePush.js

xqd
@@ -0,0 +1,172 @@
+/*
+ * Author: Derek Chia <snipking@gmail.com>
+ * Cordova plugin after hook to enable `Push Notification` capability for XCode 8
+ */
+
+const fs = require('fs');
+const path = require('path');
+let commonFuncs = require('./common');
+
+/**
+ * add APNS env to cordova project Entitlements-Debug.plist and Entitlements-Release.plist
+ * This two file will work when xcode archive app
+ */
+let enablePushNotificationForCI = (basePath, xcodeprojName) => {
+    commonFuncs.addAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Debug.plist', false);
+    commonFuncs.addAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Release.plist', true);
+}
+
+/**
+ * add APNS env to entitlement file; enable Push Notification capability in .pbxproj file
+ * This two file will work when xcode archive app
+ */
+let enablePushNotificationForXCode = (entitlementsPath, pbxprojPath, cordovaBuildConfig) => {
+    console.log('will enable push notification capability for XCode');
+    let needAddEntitlementToPbxproj = false;
+    /**
+     * add APNS env to entitlement file
+     * without this file will cause a worning in xcode
+     */
+    if( fs.existsSync(entitlementsPath) ) {
+        commonFuncs.addAPNSinEntitlements(entitlementsPath, false);
+    } else {
+        // copy default entitlements file
+        fs.readFile(__dirname + '/apns.entitlements', 'utf8', function(err, data) {
+            if (err) {
+                throw err;
+            }
+
+            fs.writeFileSync(entitlementsPath, data);
+            console.log(entitlementsPath + " written successfully");
+        });
+
+        needAddEntitlementToPbxproj = true;
+    }
+
+    /**
+     * enable Push Notification capability in .pbxproj file
+     * equally enable "Push Notification" switch in xcode
+     */
+    fs.readFile(pbxprojPath, "utf8", function(err, data) {
+        if (err) {
+            throw err;
+        }
+        console.log("Reading pbxproj file asynchronously");
+
+        // add Push Notification Capability
+        let re1 = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes', 'g');
+        let re1rep = new RegExp('isa = PBXProject;(.|[\r\n])*attributes = {', 'g');
+        let re2 = new RegExp('(?:isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*)SystemCapabilities', 'g');
+        let re2rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes = {', 'g');
+        let re3 = new RegExp('(?:isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities(.|[\r\n])*)com\.apple\.Push', 'g');
+        let re3rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities = {', 'g');
+        let re4rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities(.|[\r\n])*com\.apple\.Push = {(.|[\r\n])*enabled = [01]');
+
+        let matched = data.match(re1);
+        let result;
+        if (matched === null) {
+            console.log('re1 not match, no TargetAttributes');
+            result = data.replace(re1rep,   'isa = PBXProject;\n' +
+                                            '\t\t\tattributes = {\n' +
+                                            '\t\t\t\tTargetAttributes = {\n' +
+                                            '\t\t\t\t\t1D6058900D05DD3D006BFB54 = {\n' +
+                                            '\t\t\t\t\t\tDevelopmentTeam = ' + cordovaBuildConfig.ios.release.developmentTeam + ';\n' +
+                                            '\t\t\t\t\t\tSystemCapabilities = {\n' +
+                                            '\t\t\t\t\t\t\tcom.apple.Push = {\n' +
+                                            '\t\t\t\t\t\t\t\tenabled = 1;\n' +
+                                            '\t\t\t\t\t\t\t};\n' +
+                                            '\t\t\t\t\t\t};\n' +
+                                            '\t\t\t\t\t};\n' +
+                                            '\t\t\t\t};');
+        } else {
+            matched = data.match(re2);
+            if(matched === null) {
+                console.log('re2 not match, nothing under TargetAttributes');
+                let parts = re2rep.exec(data);
+                result = data.replace(re2rep, parts[0] + '\n' + '\t\t\t\t\t1D6058900D05DD3D006BFB54 = {\n' +
+                                                                '\t\t\t\t\t\tDevelopmentTeam = ' + cordovaBuildConfig.ios.release.developmentTeam + ';\n' +
+                                                                '\t\t\t\t\t\tSystemCapabilities = {\n' +
+                                                                '\t\t\t\t\t\t\tcom.apple.Push = {\n' +
+                                                                '\t\t\t\t\t\t\t\tenabled = 1;\n' +
+                                                                '\t\t\t\t\t\t\t};\n' +
+                                                                '\t\t\t\t\t\t};\n' +
+                                                                '\t\t\t\t\t};');
+            } else {
+                matched = data.match(re3);
+                if(matched === null) {
+                    console.log('re3 not match, no com.apple.Push defined');
+                    let parts = re3rep.exec(data);
+                    result = data.replace(re3rep, parts[0] + '\n' + '\t\t\t\t\t\t\tcom.apple.Push = {\n' +
+                                                                    '\t\t\t\t\t\t\t\tenabled = 1;\n' +
+                                                                    '\t\t\t\t\t\t\t};');
+                } else {
+                    console.log('just enable com.apple.Push');
+                    let parts = re4rep.exec(data);
+                    result = data.replace(re4rep, parts[0].substr(0, parts[0].length - 1) + '1');
+                }
+            }
+        }
+
+        // add entitlements
+        if (needAddEntitlementToPbxproj) {
+
+            let pathArray = entitlementsPath.split("/");
+            let entitlementsFileName = pathArray[pathArray.length - 1];
+            let projectFolderName = pathArray[pathArray.length - 2];
+
+            result = result.replace(new RegExp('\\/\\* Begin PBXFileReference section \\*\\/'),  '/* Begin PBXFileReference section */\n' +
+                                                                        '\t\tD7BB385F1E4DB54800345BF4 /* ' + entitlementsFileName + ' */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = "' + entitlementsFileName + '"; path = "' + projectFolderName + '/' + entitlementsFileName + '"; sourceTree = "<group>"; };');
+            result = result.replace(new RegExp('\\/\\* CustomTemplate \\*\\/.*\n.*isa = PBXGroup;.*\n.*children = \\('), '/* CustomTemplate */ = {\n' +
+                            '\t\t\tisa = PBXGroup;\n' +
+                            '\t\t\tchildren = (\n' +
+                            '\t\t\t\tD7BB385F1E4DB54800345BF4 /* ' + entitlementsFileName + ' */,');
+            let re5rep = new RegExp('\\/\\* Debug \\*\\/.*\n.*isa = XCBuildConfiguration;.*\n.*\n.*buildSettings = {');
+            let parts = result.match(re5rep);
+            result = result.replace(re5rep, parts + '\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = "' + projectFolderName + '/' + entitlementsFileName + '";');
+
+            let re6rep = new RegExp('\\/\\* Release \\*\\/.*\n.*isa = XCBuildConfiguration;.*\n.*\n.*buildSettings = {');
+            parts = result.match(re6rep);
+            result = result.replace(re6rep, parts + '\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = "' + projectFolderName + '/' + entitlementsFileName + '";');
+        }
+
+        // write result to project.pbxproj
+        fs.writeFile(pbxprojPath, result, {"encoding": 'utf8'}, function(err) {
+            if (err) {
+                throw err;
+            }
+            console.log(pbxprojPath + " written successfully");
+        });
+    });
+}
+
+module.exports = (context) => {
+    let basePath = './platforms/ios/';
+    let buildType = 'dev';
+    let xcodeprojName = commonFuncs.getXcodeProjName(basePath);
+    let pbxprojPath = basePath + xcodeprojName + '.xcodeproj/project.pbxproj';
+    let entitlementsPath = basePath + xcodeprojName + '/' + xcodeprojName + '.entitlements';
+
+    let cordovaBuildConfigPath = './build.json'
+    let cordovaBuildConfig = null;
+    let willEnablePushNotificationForXCode = true;
+    try { // try to read ios developmentTeam from build.json
+        cordovaBuildConfig = JSON.parse(fs.readFileSync(cordovaBuildConfigPath, "utf8"));
+        if(cordovaBuildConfig.ios.release.developmentTeam === null && cordovaBuildConfig.ios.release.developmentTeam === undefined) {
+            throw 'no valid developmentTeam found in build.json';
+        }
+    } catch(e) {
+        console.log("Do not detected 'build.json' or ios.release.developmentTeam not avaliable in 'build.json' \n" +
+                "Will not enable XCode Push Notification Capability. \n" +
+                "Will only enable Push Notification for CI by add config to '" + basePath + xcodeprojName + "/Entitlements-Debug.plist' and '" + basePath + xcodeprojName + "/Entitlements-Release.plist' \n" +
+                "Please add 'build.json' to cordova project root folder to make after hook fully functional. \n" +
+                "Reference [1]https://cordova.apache.org/docs/en/latest/reference/cordova-cli/#cordova-build-command \n" +
+                "Reference [2]https://cordova.apache.org/docs/en/latest/guide/platforms/ios/#signing-an-app");
+        willEnablePushNotificationForXCode = false;
+    }
+
+    enablePushNotificationForCI(basePath, xcodeprojName);
+
+    if(willEnablePushNotificationForXCode) {
+        enablePushNotificationForXCode(entitlementsPath, pbxprojPath, cordovaBuildConfig);
+    }
+}

+ 21 - 0
miaomiao/plugins/jpush-phonegap-plugin/license

xqd
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) JiGuang <support@jpush.cn> (jiguang.cn)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 103 - 0
miaomiao/plugins/jpush-phonegap-plugin/package.json

xqd
@@ -0,0 +1,103 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "jpush-phonegap-plugin@3.2.3",
+        "scope": null,
+        "escapedName": "jpush-phonegap-plugin",
+        "name": "jpush-phonegap-plugin",
+        "rawSpec": "3.2.3",
+        "spec": "3.2.3",
+        "type": "version"
+      },
+      "D:\\my\\miao\\miaomiao\\node_modules"
+    ]
+  ],
+  "_from": "jpush-phonegap-plugin@3.2.3",
+  "_id": "jpush-phonegap-plugin@3.2.3",
+  "_inCache": true,
+  "_location": "/jpush-phonegap-plugin",
+  "_nodeVersion": "8.1.3",
+  "_npmOperationalInternal": {
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/jpush-phonegap-plugin-3.2.3.tgz_1500617862249_0.7207189484033734"
+  },
+  "_npmUser": {
+    "name": "jpush",
+    "email": "support@jpush.cn"
+  },
+  "_npmVersion": "5.0.3",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "jpush-phonegap-plugin@3.2.3",
+    "scope": null,
+    "escapedName": "jpush-phonegap-plugin",
+    "name": "jpush-phonegap-plugin",
+    "rawSpec": "3.2.3",
+    "spec": "3.2.3",
+    "type": "version"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/jpush-phonegap-plugin/-/jpush-phonegap-plugin-3.2.3.tgz",
+  "_shasum": "c5c9166a015892184a451684ae4e284e35a65cc4",
+  "_shrinkwrap": null,
+  "_spec": "jpush-phonegap-plugin@3.2.3",
+  "_where": "D:\\my\\miao\\miaomiao\\node_modules",
+  "author": {
+    "name": "JiGuang"
+  },
+  "bugs": {
+    "url": "https://github.com/jpush/jpush-phonegap-plugin/issues"
+  },
+  "cordova": {
+    "id": "jpush-phonegap-plugin",
+    "platforms": [
+      "ios",
+      "android"
+    ]
+  },
+  "dependencies": {},
+  "description": "JPush for cordova plugin",
+  "devDependencies": {
+    "cordova-plugin-device": "*",
+    "cordova-plugin-jcore": "*"
+  },
+  "directories": {},
+  "dist": {
+    "integrity": "sha512-T89AdQQgTZyWvsSr0ZuemZtWHuIXBJ+daIoS9THzc2QEEfNZMLQPk8gXCKMNxOZKP0AlVc/YIs0e75rvFQucuQ==",
+    "shasum": "c5c9166a015892184a451684ae4e284e35a65cc4",
+    "tarball": "https://registry.npmjs.org/jpush-phonegap-plugin/-/jpush-phonegap-plugin-3.2.3.tgz"
+  },
+  "gitHead": "c5f79634252f0091ed60e78a1c6815f65b093c75",
+  "homepage": "https://github.com/jpush/jpush-phonegap-plugin#readme",
+  "keywords": [
+    "JPush",
+    "push",
+    "Push",
+    "ecosystem:cordova",
+    "cordova-ios",
+    "cordova-android"
+  ],
+  "license": "MIT",
+  "maintainers": [
+    {
+      "name": "hev1n",
+      "email": "hev1n@qq.com"
+    },
+    {
+      "name": "jpush",
+      "email": "support@jpush.cn"
+    }
+  ],
+  "name": "jpush-phonegap-plugin",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jpush/jpush-phonegap-plugin.git"
+  },
+  "version": "3.2.3"
+}

+ 216 - 0
miaomiao/plugins/jpush-phonegap-plugin/plugin.xml

xqd
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  id="jpush-phonegap-plugin"
+  version="3.2.3">
+
+    <name>JPush</name>
+    <description>JPush for cordova plugin</description>
+    <author>JPush</author>
+    <keywords>JPush,push</keywords>
+    <license>MIT License</license>
+
+    <preference name="APP_KEY" />
+
+    <engines>
+        <engine name="cordova" version=">=3.0" />
+    </engines>
+
+    <!-- dependencies -->
+    <dependency id="cordova-plugin-device" />
+    <dependency id="cordova-plugin-jcore" />
+
+    <js-module src="www/JPushPlugin.js" name="JPushPlugin">
+        <clobbers target="JPush" />
+    </js-module>
+
+    <platform name="ios">
+        <config-file target="config.xml" parent="/*">
+            <feature name="JPushPlugin">
+                <param name="ios-package" value="JPushPlugin" />
+            </feature>
+        </config-file>
+
+        <header-file src="src/ios/Plugins/JPushDefine.h" />
+        <header-file src="src/ios/Plugins/JPushPlugin.h" />
+        <source-file src="src/ios/Plugins/JPushPlugin.m" />
+        <header-file src="src/ios/Plugins/AppDelegate+JPush.h" />
+        <source-file src="src/ios/Plugins/AppDelegate+JPush.m" />
+
+        <header-file src="src/ios/lib/JPUSHService.h" />
+        <source-file src="src/ios/lib/jpush-ios-3.0.6.a" framework="true" />
+        <resource-file src="src/ios/JPushConfig.plist" />
+
+        <framework src="CFNetwork.framework" weak="true" />
+        <framework src="CoreFoundation.framework" weak="true" />
+        <framework src="CoreTelephony.framework" weak="true" />
+        <framework src="SystemConfiguration.framework" weak="true" />
+        <framework src="CoreGraphics.framework" weak="true" />
+        <framework src="Foundation.framework" weak="true" />
+        <framework src="UIKit.framework" weak="true" />
+        <framework src="Security.framework" weak="true" />
+        <framework src="libz.tbd" weak="true" />
+        <framework src="AdSupport.framework" weak="true" />
+        <framework src="UserNotifications.framework" weak="true" />
+        <framework src="libresolv.tbd" weak="true" />
+
+        <config-file target="*JPushConfig.plist" parent="Appkey">
+            <string>$APP_KEY</string>
+        </config-file>
+
+        <!-- <hook type="after_platform_add" src="hooks/iosEnablePush.js" />
+        <hook type="after_plugin_install" src="hooks/iosEnablePush.js" />
+        <hook type="before_plugin_uninstall" src="hooks/iosDisablePush.js" /> -->
+    </platform>
+
+    <platform name="android">
+        <config-file target="res/xml/config.xml" parent="/*">
+            <feature name="JPushPlugin">
+                <param name="android-package" value="cn.jiguang.cordova.push.JPushPlugin" />
+            </feature>
+        </config-file>
+
+        <config-file target="AndroidManifest.xml" parent="/manifest">
+            <!-- Required  一些系统要求的权限,如访问网络等-->
+            <uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE" />
+            <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
+            <uses-permission android:name="android.permission.INTERNET" />
+            <uses-permission android:name="android.permission.WAKE_LOCK" />
+            <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+            <uses-permission android:name="android.permission.VIBRATE" />
+            <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+            <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
+            <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+            <permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
+               android:protectionLevel="signature" />
+        </config-file>
+
+        <config-file target="AndroidManifest.xml" parent="/manifest/application">
+            <!-- Required SDK核心功能-->
+            <activity android:name="cn.jpush.android.ui.PushActivity"
+                android:theme="@android:style/Theme.Translucent.NoTitleBar"
+                android:configChanges="orientation|keyboardHidden">
+                <intent-filter>
+                    <action android:name="cn.jpush.android.ui.PushActivity" />
+                    <category android:name="android.intent.category.DEFAULT" />
+                    <category android:name="$PACKAGE_NAME" />
+                </intent-filter>
+            </activity>
+
+            <!-- Rich push 核心功能 since 2.0.6-->
+            <activity android:name="cn.jpush.android.ui.PopWinActivity"
+                android:theme="@style/MyDialogStyle"
+                android:exported="false">
+            </activity>
+
+            <!-- Required  SDK核心功能-->
+            <service android:name="cn.jpush.android.service.DownloadService"
+               android:enabled="true"
+               android:exported="false">
+            </service>
+
+            <!-- Required SDK 核心功能-->
+            <service android:name="cn.jpush.android.service.PushService"
+              android:enabled="true"
+              android:exported="false"
+              android:process=":remote">
+                <intent-filter>
+                    <action android:name="cn.jpush.android.intent.REGISTER" />
+                    <action android:name="cn.jpush.android.intent.REPORT" />
+                    <action android:name="cn.jpush.android.intent.PushService" />
+                    <action android:name="cn.jpush.android.intent.PUSH_TIME" />
+                </intent-filter>
+            </service>
+
+            <!-- Required SDK核心功能-->
+            <receiver android:name="cn.jpush.android.service.PushReceiver"
+              android:enabled="true"
+              android:exported="false">
+                <intent-filter android:priority="1000">
+                    <!--Required  显示通知栏 -->
+                    <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
+                    <category android:name="$PACKAGE_NAME" />
+                </intent-filter>
+                <intent-filter>
+                    <action android:name="android.intent.action.USER_PRESENT" />
+                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
+                </intent-filter>
+                <!-- Optional -->
+                <intent-filter>
+                    <action android:name="android.intent.action.PACKAGE_ADDED" />
+                    <action android:name="android.intent.action.PACKAGE_REMOVED" />
+                    <data android:scheme="package" />
+                </intent-filter>
+            </receiver>
+
+            <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
+            <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
+            <service android:name="cn.jpush.android.service.DaemonService"
+               android:enabled="true"
+               android:exported="true">
+                <intent-filter>
+                    <action android:name="cn.jpush.android.intent.DaemonService" />
+                    <category android:name="$PACKAGE_NAME" />
+                </intent-filter>
+            </service>
+
+            <!-- User defined.  For test only  用户自定义的广播接收器 -->
+            <receiver
+              android:name="cn.jiguang.cordova.push.MyReceiver"
+              android:enabled="true">
+                <intent-filter android:priority="1000">
+                    <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
+                    <!-- Required  显示通知栏 -->
+                    <category android:name="$PACKAGE_NAME" />
+                </intent-filter>
+                <intent-filter>
+                    <action android:name="cn.jpush.android.intent.REGISTRATION" />
+                    <!-- Required  用户注册SDK的intent -->
+                    <action android:name="cn.jpush.android.intent.UNREGISTRATION" />
+                    <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
+                    <!-- Required  用户接收SDK消息的intent -->
+                    <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
+                    <!-- Required  用户接收SDK通知栏信息的intent -->
+                    <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
+                    <!-- Required  用户打开自定义通知栏的intent -->
+                    <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" />
+                    <!-- Optional 用户接受Rich Push Javascript 回调函数的intent -->
+                    <category android:name="$PACKAGE_NAME" />
+                </intent-filter>
+            </receiver>
+
+            <!-- Required SDK核心功能-->
+            <receiver
+              android:name="cn.jpush.android.service.AlarmReceiver"
+              android:exported="false" />
+
+            <!-- Required. Enable it you can get statistics data with channel -->
+            <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default" />
+            <meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" />
+        </config-file>
+
+        <source-file src="src/android/libs/jpush-android_v3.0.6.jar" target-dir="libs" />
+
+        <source-file src="src/android/MyReceiver.java" target-dir="src/cn/jiguang/cordova/push" />
+        <source-file src="src/android/JPushPlugin.java" target-dir="src/cn/jiguang/cordova/push" />
+
+        <source-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
+          target-dir="res/drawable" />
+        <source-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml"
+          target-dir="res/drawable" />
+
+        <source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png"
+          target-dir="res/drawable-hdpi" />
+        <source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png"
+          target-dir="res/drawable-hdpi" />
+
+        <source-file src="src/android/res/layout/jpush_popwin_layout.xml" target-dir="res/layout" />
+        <source-file src="src/android/res/layout/jpush_webview_layout.xml" target-dir="res/layout" />
+        <source-file src="src/android/res/layout/test_notification_layout.xml" target-dir="res/layout" />
+
+        <source-file src="src/android/res/values/jpush_style.xml" target-dir="res/values" />
+    </platform>
+</plugin>

+ 660 - 0
miaomiao/plugins/jpush-phonegap-plugin/src/android/JPushPlugin.java

xqd
@@ -0,0 +1,660 @@
+package cn.jiguang.cordova.push;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.os.Build;
+import android.text.TextUtils;
+import android.util.Log;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CordovaWebView;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import cn.jpush.android.api.BasicPushNotificationBuilder;
+import cn.jpush.android.api.JPushInterface;
+import cn.jpush.android.api.TagAliasCallback;
+import cn.jpush.android.data.JPushLocalNotification;
+
+public class JPushPlugin extends CordovaPlugin {
+    private final static List<String> methodList =
+            Arrays.asList(
+                    "addLocalNotification",
+                    "areNotificationEnabled",
+                    "clearAllNotification",
+                    "clearLocalNotifications",
+                    "clearNotificationById",
+                    "getNotification",
+                    "getRegistrationID",
+                    "init",
+                    "isPushStopped",
+                    "onPause",
+                    "onResume",
+                    "requestPermission",
+                    "removeLocalNotification",
+                    "reportNotificationOpened",
+                    "resumePush",
+                    "setAlias",
+                    "setBasicPushNotificationBuilder",
+                    "setCustomPushNotificationBuilder",
+                    "setDebugMode",
+                    "setLatestNotificationNum",
+                    "setPushTime",
+                    "setTags",
+                    "setTagsWithAlias",
+                    "setSilenceTime",
+                    "setStatisticsOpen",
+                    "stopPush"
+            );
+
+    private ExecutorService threadPool = Executors.newFixedThreadPool(1);
+    private static JPushPlugin instance;
+    private static Activity cordovaActivity;
+    private static String TAG = "JPushPlugin";
+
+    private static boolean shouldCacheMsg = false;
+    private static boolean isStatisticsOpened = false;    // 是否开启统计分析功能
+
+    public static String notificationTitle;
+    public static String notificationAlert;
+    public static Map<String, Object> notificationExtras = new HashMap<String, Object>();
+
+    public static String openNotificationTitle;
+    public static String openNotificationAlert;
+    public static Map<String, Object> openNotificationExtras = new HashMap<String, Object>();
+
+    public JPushPlugin() {
+        instance = this;
+    }
+
+    @Override
+    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
+        Log.i(TAG, "JPush initialize.");
+
+        super.initialize(cordova, webView);
+        JPushInterface.init(cordova.getActivity().getApplicationContext());
+
+        cordovaActivity = cordova.getActivity();
+
+        //如果同时缓存了打开事件 openNotificationAlert 和 消息事件 notificationAlert,只向 UI 发打开事件。
+        //这样做是为了和 iOS 统一。
+        if (openNotificationAlert != null) {
+            notificationAlert = null;
+            transmitNotificationOpen(openNotificationTitle, openNotificationAlert,
+                    openNotificationExtras);
+        }
+        if (notificationAlert != null) {
+            transmitNotificationReceive(notificationTitle, notificationAlert,
+                    notificationExtras);
+        }
+    }
+
+    public void onPause(boolean multitasking) {
+        Log.i(TAG, "----------------  onPause");
+        shouldCacheMsg = true;
+        if (isStatisticsOpened && multitasking) {
+            JPushInterface.onPause(this.cordova.getActivity());
+        }
+    }
+
+    public void onResume(boolean multitasking) {
+        shouldCacheMsg = false;
+        Log.i(TAG, "---------------- onResume" + "-" + openNotificationAlert
+                + "-" + notificationAlert);
+        if (isStatisticsOpened && multitasking) {
+            JPushInterface.onResume(this.cordova.getActivity());
+        }
+        if (openNotificationAlert != null) {
+            notificationAlert = null;
+            transmitNotificationOpen(openNotificationTitle, openNotificationAlert,
+                    openNotificationExtras);
+        }
+        if (notificationAlert != null) {
+            transmitNotificationReceive(notificationTitle, notificationAlert,
+                    notificationExtras);
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        cordovaActivity = null;
+        instance = null;
+    }
+
+    private static JSONObject getMessageObject(String message,
+                                               Map<String, Object> extras) {
+        JSONObject data = new JSONObject();
+        try {
+            data.put("message", message);
+            JSONObject jExtras = new JSONObject();
+            for (Entry<String, Object> entry : extras.entrySet()) {
+                if (entry.getKey().equals("cn.jpush.android.EXTRA")) {
+                    JSONObject jo = null;
+                    if (TextUtils.isEmpty((String) entry.getValue())) {
+                        jo = new JSONObject();
+                    } else {
+                        jo = new JSONObject((String) entry.getValue());
+                        String key;
+                        Iterator keys = jo.keys();
+                        while (keys.hasNext()) {
+                            key = keys.next().toString();
+                            jExtras.put(key, jo.getString(key));
+                        }
+                    }
+                    jExtras.put("cn.jpush.android.EXTRA", jo);
+                } else {
+                    jExtras.put(entry.getKey(), entry.getValue());
+                }
+            }
+            if (jExtras.length() > 0) {
+                data.put("extras", jExtras);
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return data;
+    }
+
+    private static JSONObject getNotificationObject(String title,
+                                                    String alert, Map<String, Object> extras) {
+        JSONObject data = new JSONObject();
+        try {
+            data.put("title", title);
+            data.put("alert", alert);
+            JSONObject jExtras = new JSONObject();
+            for (Entry<String, Object> entry : extras.entrySet()) {
+                if (entry.getKey().equals("cn.jpush.android.EXTRA")) {
+                    JSONObject jo;
+                    if (TextUtils.isEmpty((String) entry.getValue())) {
+                        jo = new JSONObject();
+                    } else {
+                        jo = new JSONObject((String) entry.getValue());
+                        String key;
+                        Iterator keys = jo.keys();
+                        while (keys.hasNext()) {
+                            key = keys.next().toString();
+                            jExtras.put(key, jo.getString(key));
+                        }
+                    }
+                    jExtras.put("cn.jpush.android.EXTRA", jo);
+                } else {
+                    jExtras.put(entry.getKey(), entry.getValue());
+                }
+            }
+            if (jExtras.length() > 0) {
+                data.put("extras", jExtras);
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return data;
+    }
+
+    static void transmitMessageReceive(String message, Map<String, Object> extras) {
+        if (instance == null) {
+            return;
+        }
+        JSONObject data = getMessageObject(message, extras);
+        String format = "window.plugins.jPushPlugin.receiveMessageInAndroidCallback(%s);";
+        final String js = String.format(format, data.toString());
+        cordovaActivity.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                instance.webView.loadUrl("javascript:" + js);
+            }
+        });
+    }
+
+    static void transmitNotificationOpen(String title, String alert,
+                                         Map<String, Object> extras) {
+        if (instance == null) {
+            return;
+        }
+        JSONObject data = getNotificationObject(title, alert, extras);
+        String format = "window.plugins.jPushPlugin.openNotificationInAndroidCallback(%s);";
+        final String js = String.format(format, data.toString());
+        cordovaActivity.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                instance.webView.loadUrl("javascript:" + js);
+            }
+        });
+        JPushPlugin.openNotificationTitle = null;
+        JPushPlugin.openNotificationAlert = null;
+    }
+
+    static void transmitNotificationReceive(String title, String alert,
+                                            Map<String, Object> extras) {
+        if (instance == null) {
+            return;
+        }
+        JSONObject data = getNotificationObject(title, alert, extras);
+        String format = "window.plugins.jPushPlugin.receiveNotificationInAndroidCallback(%s);";
+        final String js = String.format(format, data.toString());
+        cordovaActivity.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                instance.webView.loadUrl("javascript:" + js);
+            }
+        });
+        JPushPlugin.notificationTitle = null;
+        JPushPlugin.notificationAlert = null;
+    }
+
+    static void transmitReceiveRegistrationId(String rId) {
+        if (instance == null) {
+            return;
+        }
+        JSONObject data = new JSONObject();
+        try {
+            data.put("registrationId", rId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        String format = "window.plugins.jPushPlugin.receiveRegistrationIdInAndroidCallback(%s);";
+        final String js = String.format(format, data.toString());
+        cordovaActivity.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                instance.webView.loadUrl("javascript:" + js);
+            }
+        });
+    }
+
+    @Override
+    public boolean execute(final String action, final JSONArray data,
+                           final CallbackContext callbackContext) throws JSONException {
+        if (!methodList.contains(action)) {
+            return false;
+        }
+        threadPool.execute(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    Method method = JPushPlugin.class.getDeclaredMethod(action,
+                            JSONArray.class, CallbackContext.class);
+                    method.invoke(JPushPlugin.this, data, callbackContext);
+                } catch (Exception e) {
+                    Log.e(TAG, e.toString());
+                }
+            }
+        });
+        return true;
+    }
+
+    void init(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.init(this.cordova.getActivity().getApplicationContext());
+    }
+
+    void setDebugMode(JSONArray data, CallbackContext callbackContext) {
+        boolean mode;
+        try {
+            mode = data.getBoolean(0);
+            JPushInterface.setDebugMode(mode);
+            callbackContext.success();
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
+    void stopPush(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.stopPush(this.cordova.getActivity().getApplicationContext());
+        callbackContext.success();
+    }
+
+    void resumePush(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.resumePush(this.cordova.getActivity().getApplicationContext());
+        callbackContext.success();
+    }
+
+    void isPushStopped(JSONArray data, CallbackContext callbackContext) {
+        boolean isStopped = JPushInterface.isPushStopped(
+                this.cordova.getActivity().getApplicationContext());
+        if (isStopped) {
+            callbackContext.success(1);
+        } else {
+            callbackContext.success(0);
+        }
+    }
+
+    void areNotificationEnabled(JSONArray data, final CallbackContext callback) {
+        int isEnabled;
+        if (hasPermission("OP_POST_NOTIFICATION")) {
+            isEnabled = 1;
+        } else {
+            isEnabled = 0;
+        }
+        callback.success(isEnabled);
+    }
+
+    void setLatestNotificationNum(JSONArray data, CallbackContext callbackContext) {
+        int num = -1;
+        try {
+            num = data.getInt(0);
+        } catch (JSONException e) {
+            e.printStackTrace();
+            callbackContext.error("error reading num json");
+        }
+        if (num != -1) {
+            JPushInterface.setLatestNotificationNumber(
+                    this.cordova.getActivity().getApplicationContext(), num);
+        } else {
+            callbackContext.error("error num");
+        }
+    }
+
+    void setPushTime(JSONArray data, CallbackContext callbackContext) {
+        Set<Integer> days = new HashSet<Integer>();
+        JSONArray dayArray;
+        int startHour = -1;
+        int endHour = -1;
+        try {
+            dayArray = data.getJSONArray(0);
+            for (int i = 0; i < dayArray.length(); i++) {
+                days.add(dayArray.getInt(i));
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+            callbackContext.error("error reading days json");
+        }
+        try {
+            startHour = data.getInt(1);
+            endHour = data.getInt(2);
+        } catch (JSONException e) {
+            callbackContext.error("error reading hour json");
+        }
+        Context context = this.cordova.getActivity().getApplicationContext();
+        JPushInterface.setPushTime(context, days, startHour, endHour);
+        callbackContext.success();
+    }
+
+    void getRegistrationID(JSONArray data, CallbackContext callbackContext) {
+        Context context = this.cordova.getActivity().getApplicationContext();
+        String regID = JPushInterface.getRegistrationID(context);
+        callbackContext.success(regID);
+    }
+
+    void onResume(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.onResume(this.cordova.getActivity());
+    }
+
+    void onPause(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.onPause(this.cordova.getActivity());
+    }
+
+    void reportNotificationOpened(JSONArray data, CallbackContext callbackContext) {
+        try {
+            String msgID;
+            msgID = data.getString(0);
+            JPushInterface.reportNotificationOpened(this.cordova.getActivity(), msgID);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
+    void setTags(JSONArray data, CallbackContext callbackContext) {
+        try {
+            HashSet<String> tags = new HashSet<String>();
+            for (int i = 0; i < data.length(); i++) {
+                tags.add(data.getString(i));
+            }
+            JPushInterface.setTags(this.cordova.getActivity().getApplicationContext(),
+                    tags, mTagWithAliasCallback);
+            callbackContext.success();
+        } catch (JSONException e) {
+            e.printStackTrace();
+            callbackContext.error("Error reading tags JSON");
+        }
+    }
+
+    void setAlias(JSONArray data, CallbackContext callbackContext) {
+        try {
+            String alias = data.getString(0);
+            JPushInterface.setAlias(this.cordova.getActivity().getApplicationContext(),
+                    alias, mTagWithAliasCallback);
+            callbackContext.success();
+        } catch (JSONException e) {
+            e.printStackTrace();
+            callbackContext.error("Error reading alias JSON");
+        }
+    }
+
+    void setTagsWithAlias(JSONArray data, CallbackContext callbackContext) {
+        HashSet<String> tags = new HashSet<String>();
+        String alias;
+        try {
+            alias = data.getString(0);
+            JSONArray tagsArray = data.getJSONArray(1);
+            for (int i = 0; i < tagsArray.length(); i++) {
+                tags.add(tagsArray.getString(i));
+            }
+            JPushInterface.setAliasAndTags(this.cordova.getActivity().getApplicationContext(),
+                    alias, tags, mTagWithAliasCallback);
+            callbackContext.success();
+        } catch (JSONException e) {
+            e.printStackTrace();
+            callbackContext.error("Error reading tagAlias JSON");
+        }
+    }
+
+    void getConnectionState(JSONArray data, CallbackContext callback) {
+        boolean isConnected = JPushInterface.getConnectionState(cordovaActivity.getApplicationContext());
+        callback.success(String.valueOf(isConnected));
+    }
+
+    /**
+     *   自定义通知行为,声音、震动、呼吸灯等。
+     */
+    void setBasicPushNotificationBuilder(JSONArray data,
+                                         CallbackContext callbackContext) {
+        BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(
+                this.cordova.getActivity());
+        builder.developerArg0 = "Basic builder 1";
+        JPushInterface.setPushNotificationBuilder(1, builder);
+        JSONObject obj = new JSONObject();
+        try {
+            obj.put("id", 1);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 自定义推送通知栏样式,需要自己实现具体代码。
+     * http://docs.jiguang.cn/client/android_tutorials/#_11
+     */
+    void setCustomPushNotificationBuilder(JSONArray data,
+                                          CallbackContext callbackContext) {
+        // CustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(
+        //         this.cordova.getActivity(), R.layout.test_notification_layout,
+        //         R.id.icon, R.id.title, R.id.text);
+        // JPushInterface.setPushNotificationBuilder(2, builder);
+        // JPushInterface.setDefaultPushNotificationBuilder(builder);
+    }
+
+    void clearAllNotification(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.clearAllNotifications(this.cordova.getActivity());
+    }
+
+    void clearNotificationById(JSONArray data, CallbackContext callbackContext) {
+        int notificationId = -1;
+        try {
+            notificationId = data.getInt(0);
+        } catch (JSONException e) {
+            e.printStackTrace();
+            callbackContext.error("error reading id json");
+            return;
+        }
+        if (notificationId != -1) {
+            JPushInterface.clearNotificationById(this.cordova.getActivity(), notificationId);
+        } else {
+            callbackContext.error("error id");
+        }
+    }
+
+    void addLocalNotification(JSONArray data, CallbackContext callbackContext)
+            throws JSONException {
+        int builderId = data.getInt(0);
+        String content = data.getString(1);
+        String title = data.getString(2);
+        int notificationID = data.getInt(3);
+        int broadcastTime = data.getInt(4);
+        String extrasStr = data.isNull(5) ? "" : data.getString(5);
+        JSONObject extras = new JSONObject();
+        if (!extrasStr.isEmpty()) {
+            extras = new JSONObject(extrasStr);
+        }
+
+        JPushLocalNotification ln = new JPushLocalNotification();
+        ln.setBuilderId(builderId);
+        ln.setContent(content);
+        ln.setTitle(title);
+        ln.setNotificationId(notificationID);
+        ln.setBroadcastTime(System.currentTimeMillis() + broadcastTime);
+        ln.setExtras(extras.toString());
+
+        JPushInterface.addLocalNotification(this.cordova.getActivity(), ln);
+    }
+
+    void removeLocalNotification(JSONArray data, CallbackContext callbackContext)
+            throws JSONException {
+        int notificationID = data.getInt(0);
+        JPushInterface.removeLocalNotification(this.cordova.getActivity(), notificationID);
+    }
+
+    void clearLocalNotifications(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.clearLocalNotifications(this.cordova.getActivity());
+    }
+
+    /**
+     * 决定是否启用统计分析功能。
+     */
+    void setStatisticsOpen(JSONArray data, CallbackContext callbackContext) {
+        try {
+            isStatisticsOpened = data.getBoolean(0);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 设置通知静默时间
+     * http://docs.jpush.io/client/android_api/#api_5
+     */
+    void setSilenceTime(JSONArray data, CallbackContext callbackContext) {
+        try {
+            int startHour = data.getInt(0);
+            int startMinute = data.getInt(1);
+            int endHour = data.getInt(2);
+            int endMinute = data.getInt(3);
+            if (!isValidHour(startHour) || !isValidMinute(startMinute)) {
+                callbackContext.error("开始时间数值错误");
+                return;
+            }
+            if (!isValidHour(endHour) || !isValidMinute(endMinute)) {
+                callbackContext.error("结束时间数值错误");
+                return;
+            }
+            JPushInterface.setSilenceTime(this.cordova.getActivity(), startHour, startMinute,
+                    endHour, endMinute);
+        } catch (JSONException e) {
+            e.printStackTrace();
+            callbackContext.error("error: reading json data.");
+        }
+    }
+
+    private boolean isValidHour(int hour) {
+        return !(hour < 0 || hour > 23);
+    }
+
+    private boolean isValidMinute(int minute) {
+        return !(minute < 0 || minute > 59);
+    }
+
+    /**
+     * 用于 Android 6.0 以上系统申请权限,具体可参考:
+     * http://docs.Push.io/client/android_api/#android-60
+     */
+    void requestPermission(JSONArray data, CallbackContext callbackContext) {
+        JPushInterface.requestPermission(this.cordova.getActivity());
+    }
+
+    private final TagAliasCallback mTagWithAliasCallback = new TagAliasCallback() {
+        @Override
+        public void gotResult(int code, String alias, Set<String> tags) {
+            if (instance == null) {
+                return;
+            }
+            JSONObject data = new JSONObject();
+            try {
+                data.put("resultCode", code);
+                data.put("tags", tags);
+                data.put("alias", alias);
+                final String jsEvent = String.format(
+                        "cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)",
+                        data.toString());
+                cordova.getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        instance.webView.loadUrl("javascript:" + jsEvent);
+                    }
+                });
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+    };
+
+    @TargetApi(Build.VERSION_CODES.KITKAT)
+    private boolean hasPermission(String appOpsServiceId) {
+        Context context = cordova.getActivity().getApplicationContext();
+        AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+        ApplicationInfo appInfo = context.getApplicationInfo();
+
+        String pkg = context.getPackageName();
+        int uid = appInfo.uid;
+        Class appOpsClazz = null;
+
+        try {
+            appOpsClazz = Class.forName(AppOpsManager.class.getName());
+            Method checkOpNoThrowMethod = appOpsClazz.getMethod("checkOpNoThrow",
+                    Integer.TYPE, Integer.TYPE, String.class);
+            Field opValue = appOpsClazz.getDeclaredField(appOpsServiceId);
+            int value = opValue.getInt(Integer.class);
+            Object result = checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg);
+            return Integer.parseInt(result.toString()) == AppOpsManager.MODE_ALLOWED;
+        } catch (InvocationTargetException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        } catch (NoSuchMethodException e) {
+            e.printStackTrace();
+        } catch (NoSuchFieldException e) {
+            e.printStackTrace();
+        } catch (ClassNotFoundException e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+}

+ 95 - 0
miaomiao/plugins/jpush-phonegap-plugin/src/android/MyReceiver.java

xqd
@@ -0,0 +1,95 @@
+package cn.jiguang.cordova.push;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import cn.jpush.android.api.JPushInterface;
+
+public class MyReceiver extends BroadcastReceiver {
+
+    private static final List<String> IGNORED_EXTRAS_KEYS =
+            Arrays.asList(
+                    "cn.jpush.android.TITLE",
+                    "cn.jpush.android.MESSAGE",
+                    "cn.jpush.android.APPKEY",
+                    "cn.jpush.android.NOTIFICATION_CONTENT_TITLE"
+            );
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction();
+        if (action.equals(JPushInterface.ACTION_REGISTRATION_ID)) {
+            String rId = intent.getStringExtra(JPushInterface.EXTRA_REGISTRATION_ID);
+            JPushPlugin.transmitReceiveRegistrationId(rId);
+        } else if (action.equals(JPushInterface.ACTION_MESSAGE_RECEIVED)) {
+            handlingMessageReceive(intent);
+        } else if (action.equals(JPushInterface.ACTION_NOTIFICATION_RECEIVED)) {
+            handlingNotificationReceive(context, intent);
+        } else if (action.equals(JPushInterface.ACTION_NOTIFICATION_OPENED)) {
+            handlingNotificationOpen(context, intent);
+        }
+    }
+
+    private void handlingMessageReceive(Intent intent) {
+        String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE);
+        Map<String, Object> extras = getNotificationExtras(intent);
+        JPushPlugin.transmitMessageReceive(msg, extras);
+    }
+
+    private void handlingNotificationOpen(Context context, Intent intent) {
+        String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
+        JPushPlugin.openNotificationTitle = title;
+
+        String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
+        JPushPlugin.openNotificationAlert = alert;
+
+        Map<String, Object> extras = getNotificationExtras(intent);
+        JPushPlugin.openNotificationExtras = extras;
+
+        JPushPlugin.transmitNotificationOpen(title, alert, extras);
+
+        Intent launch = context.getPackageManager().getLaunchIntentForPackage(
+                context.getPackageName());
+        launch.addCategory(Intent.CATEGORY_LAUNCHER);
+        launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+        context.startActivity(launch);
+    }
+
+    private void handlingNotificationReceive(Context context, Intent intent) {
+        Intent launch = context.getPackageManager().getLaunchIntentForPackage(
+                context.getPackageName());
+        launch.addCategory(Intent.CATEGORY_LAUNCHER);
+        launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+
+        String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
+        JPushPlugin.notificationTitle = title;
+
+        String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
+        JPushPlugin.notificationAlert = alert;
+
+        Map<String, Object> extras = getNotificationExtras(intent);
+        JPushPlugin.notificationExtras = extras;
+
+        JPushPlugin.transmitNotificationReceive(title, alert, extras);
+    }
+
+    private Map<String, Object> getNotificationExtras(Intent intent) {
+        Map<String, Object> extrasMap = new HashMap<String, Object>();
+        for (String key : intent.getExtras().keySet()) {
+            if (!IGNORED_EXTRAS_KEYS.contains(key)) {
+                if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
+                    extrasMap.put(key, intent.getIntExtra(key, 0));
+                } else {
+                    extrasMap.put(key, intent.getStringExtra(key));
+                }
+            }
+        }
+        return extrasMap;
+    }
+}

BIN
miaomiao/plugins/jpush-phonegap-plugin/src/android/libs/jpush-android_v3.0.6.jar


BIN
miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png


BIN
miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png


+ 21 - 0
miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml

xqd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?> 
+<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
+    <!-- 获得焦点但未按下时的背景图片 --> 
+    <item 
+        android:state_focused="true" 
+        android:state_enabled="true" 
+        android:state_pressed="false" 
+        android:drawable="@drawable/jpush_ic_richpush_actionbar_back" />
+     <!-- 按下时的背景图片 --> 
+    <item 
+        android:state_enabled="true" 
+        android:state_pressed="true" 
+        android:drawable="@android:color/darker_gray" /> 
+    <!-- 按下时的背景图片 --> 
+    <item 
+        android:state_enabled="true" 
+        android:state_checked="true" 
+        android:drawable="@android:color/darker_gray" /> 
+    <!-- 默认时的背景图片 --> 
+    <item android:drawable="@drawable/jpush_ic_richpush_actionbar_back" />
+</selector> 

+ 20 - 0
miaomiao/plugins/jpush-phonegap-plugin/src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml

xqd
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <!-- 背景  gradient是渐变,corners定义的是圆角 -->
+    <item android:id="@android:id/background">
+        <shape>
+            <solid android:color="#ffffff" />
+        </shape>
+    </item>
+    
+    <!-- 进度条 -->
+    <item android:id="@android:id/progress">
+        <clip>
+            <shape>
+                <solid android:color="#4393ea" />
+            </shape>
+        </clip>
+    </item>
+
+</layer-list>

+ 15 - 0
miaomiao/plugins/jpush-phonegap-plugin/src/android/res/layout/jpush_popwin_layout.xml

xqd
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/popLayoutId"
+    style="@style/MyDialogStyle"
+    android:orientation="vertical"
+    android:layout_width="280dp"
+    android:layout_height="250dp" >
+
+        <WebView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:id="@+id/wvPopwin"/>
+
+</LinearLayout>

+ 59 - 0
miaomiao/plugins/jpush-phonegap-plugin/src/android/res/layout/jpush_webview_layout.xml

xqd
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<cn.jpush.android.ui.FullScreenView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/actionbarLayoutId"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical" >
+
+    <RelativeLayout
+        android:id="@+id/rlRichpushTitleBar"
+        android:layout_width="match_parent"
+        android:layout_height="40.0dp"
+        android:background="#29313a">
+
+        <ImageButton
+            android:id="@+id/imgRichpushBtnBack"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="9dp"
+            android:layout_marginRight="10dp"
+            android:background="@drawable/jpush_richpush_btn_selector" />
+
+        <ImageView
+            android:id="@+id/imgView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_toRightOf="@id/imgRichpushBtnBack"
+            android:clickable="false"
+            android:src="@drawable/jpush_ic_richpush_actionbar_divider" />
+
+        <TextView
+            android:id="@+id/tvRichpushTitle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="7dp"
+            android:layout_marginRight="5dp"
+            android:layout_toRightOf="@id/imgView"
+            android:clickable="false"
+            android:text=" "
+            android:textSize="20sp"
+            android:textColor="#ffffff" />
+    </RelativeLayout>
+
+    <ProgressBar
+        android:id="@+id/pushPrograssBar"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:progress="0"
+        android:progressDrawable="@drawable/jpush_richpush_progressbar"
+        style="?android:attr/progressBarStyleHorizontal" />
+    <WebView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:id="@+id/fullWebView"
+        android:background="#000000" />
+
+</cn.jpush.android.ui.FullScreenView>

Деякі файли не було показано, через те що забагато файлів було змінено