packages feed

lpeg 1.0.0 → 1.0.1

raw patch · 8 files changed

+660/−43 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Lua.LPeg: luaopen_re_ptr :: CFunction

Files

CHANGELOG.md view
@@ -1,11 +1,20 @@ # Changelog -`lua` uses [PVP Versioning][1].+`lpeg` uses [PVP Versioning][1]. +## lpeg 1.0.1++Released 2021-11-08.++  - The 're' package is a Lua script that's part of LPeg. It is now+    included as a byte array in the C sources; a loader function for+    this library is provided, and 're' is now handled by the lpeg+    searcher.+ ## lpeg 1.0.0 -Release pending.+Released 2021-10-31. -- Initially created.+- A wild package appears.  [1]: https://pvp.haskell.org
cbits/placeholder.c view
@@ -1,12 +1,18 @@ #include <string.h>- #include "lua.h"  int luaopen_lpeg (lua_State *L); int luaopen_lpeg (lua_State *L) {-  const char *msg =   lua_pushliteral(L, "Non-functional placeholder. Configuration prevented "                   "the inclusion of the real LPeg package.");+  lua_error(L);+}++int luaopen_re (lua_State *L);+int luaopen_re (lua_State *L)+{+  lua_pushliteral(L, "Non-functional placeholder. Configuration prevented "+                     "the inclusion of the real 're' package.");   lua_error(L); }
+ cbits/re.c view
@@ -0,0 +1,10 @@+#include "lua.h"+#include "lauxlib.h"+#include "re.h"++int luaopen_re(lua_State *L);+int luaopen_re(lua_State *L) {+  luaL_loadstring(L, cbits_lpeg_1_0_2_re_lua);+  lua_call(L, 0, 1);+  return 1;+}
+ cbits/re.h view
@@ -0,0 +1,541 @@+unsigned char cbits_lpeg_1_0_2_re_lua[] = {+  0x2d, 0x2d, 0x20, 0x24, 0x49, 0x64, 0x3a, 0x20, 0x72, 0x65, 0x2e, 0x6c,+  0x75, 0x61, 0x20, 0x24, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x69, 0x6d, 0x70,+  0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,+  0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x6f, 0x64, 0x75,+  0x6c, 0x65, 0x73, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x6f,+  0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65,+  0x2c, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x65, 0x72, 0x72,+  0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65,+  0x72, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x69,+  0x6e, 0x74, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0a, 0x6c, 0x6f,+  0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74,+  0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x74, 0x6d, 0x65,+  0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,+  0x65, 0x22, 0x6c, 0x70, 0x65, 0x67, 0x22, 0x0a, 0x0a, 0x2d, 0x2d, 0x20,+  0x27, 0x6d, 0x27, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20,+  0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x73,+  0x65, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,+  0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x27, 0x6d, 0x6d, 0x27, 0x20,+  0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64,+  0x20, 0x74, 0x6f, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74,+  0x65, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,+  0x73, 0x3b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x2c, 0x20,+  0x27, 0x72, 0x65, 0x27, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6f, 0x6e,+  0x20, 0x27, 0x6d, 0x27, 0x2c, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69,+  0x6e, 0x67, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x0a,+  0x2d, 0x2d, 0x20, 0x6f, 0x6e, 0x20, 0x27, 0x6d, 0x6d, 0x27, 0x0a, 0x6c,+  0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x6d, 0x20, 0x3d, 0x20, 0x6d, 0x0a,+  0x0a, 0x2d, 0x2d, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x27,+  0x73, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a,+  0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x74, 0x20, 0x3d, 0x20, 0x67,+  0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28,+  0x6d, 0x6d, 0x2e, 0x50, 0x28, 0x30, 0x29, 0x29, 0x0a, 0x0a, 0x0a, 0x0a,+  0x2d, 0x2d, 0x20, 0x4e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x67,+  0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73,+  0x65, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69,+  0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x0a, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20,+  0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a, 0x69, 0x66, 0x20,+  0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x22,+  0x4c, 0x75, 0x61, 0x20, 0x35, 0x2e, 0x32, 0x22, 0x20, 0x74, 0x68, 0x65,+  0x6e, 0x20, 0x5f, 0x45, 0x4e, 0x56, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c,+  0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,+  0x20, 0x61, 0x6e, 0x79, 0x20, 0x3d, 0x20, 0x6d, 0x2e, 0x50, 0x28, 0x31,+  0x29, 0x0a, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x2d, 0x64,+  0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,+  0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65,+  0x66, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x6e, 0x6c, 0x20, 0x3d, 0x20, 0x6d,+  0x2e, 0x50, 0x22, 0x5c, 0x6e, 0x22, 0x20, 0x7d, 0x0a, 0x0a, 0x0a, 0x6c,+  0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x6d, 0x0a, 0x6c, 0x6f, 0x63,+  0x61, 0x6c, 0x20, 0x66, 0x6d, 0x65, 0x6d, 0x0a, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x67, 0x6d, 0x65, 0x6d, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63,+  0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,+  0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65,+  0x20, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x6d, 0x6d, 0x2e, 0x6c, 0x6f, 0x63,+  0x61, 0x6c, 0x65, 0x28, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x29, 0x0a,+  0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x61, 0x20, 0x3d,+  0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x61, 0x6c, 0x70, 0x68,+  0x61, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x63,+  0x20, 0x3d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x63, 0x6e,+  0x74, 0x72, 0x6c, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66,+  0x2e, 0x64, 0x20, 0x3d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e,+  0x64, 0x69, 0x67, 0x69, 0x74, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64,+  0x65, 0x66, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65,+  0x66, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x0a, 0x20, 0x20, 0x50, 0x72,+  0x65, 0x64, 0x65, 0x66, 0x2e, 0x6c, 0x20, 0x3d, 0x20, 0x50, 0x72, 0x65,+  0x64, 0x65, 0x66, 0x2e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x0a, 0x20, 0x20,+  0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x70, 0x20, 0x3d, 0x20, 0x50,+  0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x70, 0x75, 0x6e, 0x63, 0x74, 0x0a,+  0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x73, 0x20, 0x3d,+  0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x73, 0x70, 0x61, 0x63,+  0x65, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x75,+  0x20, 0x3d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x75, 0x70,+  0x70, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66,+  0x2e, 0x77, 0x20, 0x3d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e,+  0x61, 0x6c, 0x6e, 0x75, 0x6d, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64,+  0x65, 0x66, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65,+  0x66, 0x2e, 0x78, 0x64, 0x69, 0x67, 0x69, 0x74, 0x0a, 0x20, 0x20, 0x50,+  0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x41, 0x20, 0x3d, 0x20, 0x61, 0x6e,+  0x79, 0x20, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x61,+  0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x43, 0x20,+  0x3d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x64,+  0x65, 0x66, 0x2e, 0x63, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65,+  0x66, 0x2e, 0x44, 0x20, 0x3d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x2d, 0x20,+  0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x64, 0x0a, 0x20, 0x20, 0x50,+  0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x47, 0x20, 0x3d, 0x20, 0x61, 0x6e,+  0x79, 0x20, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x67,+  0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x4c, 0x20,+  0x3d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x64,+  0x65, 0x66, 0x2e, 0x6c, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65,+  0x66, 0x2e, 0x50, 0x20, 0x3d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x2d, 0x20,+  0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x70, 0x0a, 0x20, 0x20, 0x50,+  0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x53, 0x20, 0x3d, 0x20, 0x61, 0x6e,+  0x79, 0x20, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x73,+  0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x55, 0x20,+  0x3d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x64,+  0x65, 0x66, 0x2e, 0x75, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65,+  0x66, 0x2e, 0x57, 0x20, 0x3d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x2d, 0x20,+  0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x77, 0x0a, 0x20, 0x20, 0x50,+  0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x58, 0x20, 0x3d, 0x20, 0x61, 0x6e,+  0x79, 0x20, 0x2d, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x78,+  0x0a, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x20,+  0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72,+  0x74, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,+  0x6e, 0x0a, 0x20, 0x20, 0x66, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x7b,+  0x7d, 0x0a, 0x20, 0x20, 0x67, 0x6d, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x7b,+  0x7d, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x74,+  0x20, 0x3d, 0x20, 0x7b, 0x5f, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d,+  0x20, 0x22, 0x76, 0x22, 0x7d, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x74, 0x6d,+  0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x6d, 0x65, 0x6d,+  0x2c, 0x20, 0x6d, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x74, 0x6d,+  0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x66, 0x6d, 0x65,+  0x6d, 0x2c, 0x20, 0x6d, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x74,+  0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x67, 0x6d,+  0x65, 0x6d, 0x2c, 0x20, 0x6d, 0x74, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a,+  0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x65, 0x28, 0x29, 0x0a, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x49, 0x20, 0x3d, 0x20, 0x6d, 0x2e, 0x50, 0x28, 0x66, 0x75,+  0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x2c, 0x69, 0x29,+  0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x69, 0x2c, 0x20, 0x73, 0x3a,+  0x73, 0x75, 0x62, 0x28, 0x31, 0x2c, 0x20, 0x69, 0x2d, 0x31, 0x29, 0x29,+  0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x20, 0x65,+  0x6e, 0x64, 0x29, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,+  0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x61, 0x74,+  0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x28, 0x73, 0x2c, 0x20,+  0x69, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d,+  0x73, 0x67, 0x20, 0x3d, 0x20, 0x28, 0x23, 0x73, 0x20, 0x3c, 0x20, 0x69,+  0x20, 0x2b, 0x20, 0x32, 0x30, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73,+  0x3a, 0x73, 0x75, 0x62, 0x28, 0x69, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x6f, 0x72, 0x20, 0x73, 0x3a, 0x73, 0x75, 0x62, 0x28, 0x69, 0x2c,+  0x69, 0x2b, 0x32, 0x30, 0x29, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x2e, 0x2e,+  0x2e, 0x22, 0x0a, 0x20, 0x20, 0x6d, 0x73, 0x67, 0x20, 0x3d, 0x20, 0x28,+  0x22, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x65, 0x72, 0x72,+  0x6f, 0x72, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x27, 0x25, 0x73, 0x27,+  0x22, 0x29, 0x3a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x6d, 0x73,+  0x67, 0x29, 0x0a, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x6d,+  0x73, 0x67, 0x2c, 0x20, 0x32, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a,+  0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,+  0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x20, 0x28, 0x70, 0x2c, 0x20,+  0x6e, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e,+  0x70, 0x20, 0x3d, 0x20, 0x6d, 0x6d, 0x2e, 0x50, 0x28, 0x74, 0x72, 0x75,+  0x65, 0x29, 0x0a, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x6e,+  0x20, 0x3e, 0x3d, 0x20, 0x31, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20,+  0x20, 0x69, 0x66, 0x20, 0x6e, 0x25, 0x32, 0x20, 0x3e, 0x3d, 0x20, 0x31,+  0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6e, 0x70, 0x20, 0x3d, 0x20, 0x6e,+  0x70, 0x20, 0x2a, 0x20, 0x70, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x70, 0x20, 0x2a, 0x20, 0x70, 0x0a,+  0x20, 0x20, 0x20, 0x20, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x2f, 0x32, 0x0a,+  0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,+  0x72, 0x6e, 0x20, 0x6e, 0x70, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c,+  0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,+  0x6e, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x63, 0x61, 0x70, 0x20, 0x28,+  0x73, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x69,+  0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x63, 0x29, 0x20, 0x7e, 0x3d,+  0x20, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x68,+  0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69,+  0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x65, 0x20, 0x3d, 0x20, 0x23, 0x63, 0x20, 0x2b, 0x20, 0x69,+  0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x3a, 0x73, 0x75, 0x62, 0x28,+  0x69, 0x2c, 0x20, 0x65, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 0x3d, 0x3d,+  0x20, 0x63, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75,+  0x72, 0x6e, 0x20, 0x65, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65,+  0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x20, 0x65, 0x6e, 0x64,+  0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,+  0x20, 0x53, 0x20, 0x3d, 0x20, 0x28, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66,+  0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x2b, 0x20, 0x22, 0x2d, 0x2d,+  0x22, 0x20, 0x2a, 0x20, 0x28, 0x61, 0x6e, 0x79, 0x20, 0x2d, 0x20, 0x50,+  0x72, 0x65, 0x64, 0x65, 0x66, 0x2e, 0x6e, 0x6c, 0x29, 0x5e, 0x30, 0x29,+  0x5e, 0x30, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e, 0x61,+  0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x2e, 0x52, 0x28, 0x22, 0x41, 0x5a,+  0x22, 0x2c, 0x20, 0x22, 0x61, 0x7a, 0x22, 0x2c, 0x20, 0x22, 0x5f, 0x5f,+  0x22, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x52, 0x28, 0x22, 0x41, 0x5a,+  0x22, 0x2c, 0x20, 0x22, 0x61, 0x7a, 0x22, 0x2c, 0x20, 0x22, 0x5f, 0x5f,+  0x22, 0x2c, 0x20, 0x22, 0x30, 0x39, 0x22, 0x29, 0x5e, 0x30, 0x0a, 0x0a,+  0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20,+  0x3d, 0x20, 0x53, 0x20, 0x2a, 0x20, 0x22, 0x3c, 0x2d, 0x22, 0x0a, 0x0a,+  0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x71, 0x5f, 0x66, 0x6f,+  0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x6d, 0x2e, 0x50, 0x22, 0x2f,+  0x22, 0x20, 0x2b, 0x20, 0x22, 0x29, 0x22, 0x20, 0x2b, 0x20, 0x22, 0x7d,+  0x22, 0x20, 0x2b, 0x20, 0x22, 0x3a, 0x7d, 0x22, 0x20, 0x2b, 0x20, 0x22,+  0x7e, 0x7d, 0x22, 0x20, 0x2b, 0x20, 0x22, 0x7c, 0x7d, 0x22, 0x20, 0x2b,+  0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x20, 0x61, 0x72, 0x72,+  0x6f, 0x77, 0x29, 0x20, 0x2b, 0x20, 0x2d, 0x31, 0x0a, 0x0a, 0x6e, 0x61,+  0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x2e, 0x43, 0x28, 0x6e, 0x61, 0x6d,+  0x65, 0x29, 0x0a, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x61, 0x20, 0x64, 0x65,+  0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f,+  0x6e, 0x6c, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6d, 0x65, 0x61,+  0x6e, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x67, 0x69,+  0x76, 0x65, 0x6e, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,+  0x65, 0x6e, 0x74, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x44, 0x65,+  0x66, 0x20, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x20, 0x6d,+  0x2e, 0x43, 0x61, 0x72, 0x67, 0x28, 0x31, 0x29, 0x0a, 0x0a, 0x0a, 0x6c,+  0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,+  0x6e, 0x20, 0x67, 0x65, 0x74, 0x64, 0x65, 0x66, 0x20, 0x28, 0x69, 0x64,+  0x2c, 0x20, 0x64, 0x65, 0x66, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f,+  0x63, 0x61, 0x6c, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x66, 0x73,+  0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x66, 0x73, 0x5b, 0x69, 0x64,+  0x5d, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63,+  0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28,+  0x22, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6e,+  0x61, 0x6d, 0x65, 0x3a, 0x20, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x69, 0x64,+  0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,+  0x72, 0x6e, 0x20, 0x63, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d,+  0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d,+  0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,+  0x20, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x6f, 0x66, 0x20,+  0x69, 0x74, 0x73, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f,+  0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69,+  0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x2d, 0x2d, 0x20, 0x61, 0x6e, 0x64, 0x20,+  0x27, 0x66, 0x27, 0x20, 0x28, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x66,+  0x6f, 0x6c, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x27, 0x53, 0x75,+  0x66, 0x66, 0x69, 0x78, 0x27, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,+  0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65,+  0x66, 0x77, 0x69, 0x74, 0x68, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x28, 0x66,+  0x29, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d,+  0x2e, 0x43, 0x67, 0x28, 0x44, 0x65, 0x66, 0x20, 0x2f, 0x20, 0x67, 0x65,+  0x74, 0x64, 0x65, 0x66, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x63, 0x28,+  0x66, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f,+  0x63, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x20, 0x3d, 0x20, 0x6d, 0x2e,+  0x43, 0x28, 0x6d, 0x2e, 0x52, 0x22, 0x30, 0x39, 0x22, 0x5e, 0x31, 0x29,+  0x20, 0x2a, 0x20, 0x53, 0x20, 0x2f, 0x20, 0x74, 0x6f, 0x6e, 0x75, 0x6d,+  0x62, 0x65, 0x72, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x53,+  0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x22, 0x27, 0x22, 0x20,+  0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x28, 0x28, 0x61, 0x6e, 0x79, 0x20, 0x2d,+  0x20, 0x22, 0x27, 0x22, 0x29, 0x5e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x22,+  0x27, 0x22, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x22, 0x27, 0x20,+  0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x28, 0x28, 0x61, 0x6e, 0x79, 0x20, 0x2d,+  0x20, 0x27, 0x22, 0x27, 0x29, 0x5e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x27,+  0x22, 0x27, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64,+  0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x22, 0x25, 0x22,+  0x20, 0x2a, 0x20, 0x44, 0x65, 0x66, 0x20, 0x2f, 0x20, 0x66, 0x75, 0x6e,+  0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x63, 0x2c, 0x44, 0x65, 0x66,+  0x73, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63,+  0x61, 0x74, 0x20, 0x3d, 0x20, 0x20, 0x44, 0x65, 0x66, 0x73, 0x20, 0x61,+  0x6e, 0x64, 0x20, 0x44, 0x65, 0x66, 0x73, 0x5b, 0x63, 0x5d, 0x20, 0x6f,+  0x72, 0x20, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x5b, 0x63, 0x5d, 0x0a,+  0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x61, 0x74,+  0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20,+  0x28, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x27, 0x22, 0x20, 0x2e, 0x2e,+  0x20, 0x63, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x27, 0x20, 0x75, 0x6e, 0x64,+  0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x22, 0x29, 0x20, 0x65, 0x6e, 0x64,+  0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x61,+  0x74, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,+  0x20, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x2e, 0x43,+  0x73, 0x28, 0x61, 0x6e, 0x79, 0x20, 0x2a, 0x20, 0x28, 0x6d, 0x2e, 0x50,+  0x22, 0x2d, 0x22, 0x2f, 0x22, 0x22, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x61,+  0x6e, 0x79, 0x20, 0x2d, 0x20, 0x22, 0x5d, 0x22, 0x29, 0x29, 0x20, 0x2f,+  0x20, 0x6d, 0x6d, 0x2e, 0x52, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,+  0x20, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x64, 0x65, 0x66,+  0x69, 0x6e, 0x65, 0x64, 0x20, 0x2b, 0x20, 0x52, 0x61, 0x6e, 0x67, 0x65,+  0x20, 0x2b, 0x20, 0x6d, 0x2e, 0x43, 0x28, 0x61, 0x6e, 0x79, 0x29, 0x29,+  0x20, 0x2f, 0x20, 0x6d, 0x2e, 0x50, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x3d, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x22, 0x5b, 0x22, 0x0a, 0x20, 0x20, 0x2a, 0x20, 0x28, 0x6d,+  0x2e, 0x43, 0x28, 0x6d, 0x2e, 0x50, 0x22, 0x5e, 0x22, 0x5e, 0x2d, 0x31,+  0x29, 0x29, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x6f, 0x70, 0x74,+  0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65,+  0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x0a,+  0x20, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x66, 0x28, 0x69, 0x74, 0x65,+  0x6d, 0x20, 0x2a, 0x20, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x2d, 0x20,+  0x22, 0x5d, 0x22, 0x29, 0x5e, 0x30, 0x2c, 0x20, 0x6d, 0x74, 0x2e, 0x5f,+  0x5f, 0x61, 0x64, 0x64, 0x29, 0x20, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75,+  0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x63, 0x2c, 0x20, 0x70,+  0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x20, 0x3d,+  0x3d, 0x20, 0x22, 0x5e, 0x22, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e,+  0x79, 0x20, 0x2d, 0x20, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x20, 0x65,+  0x6e, 0x64, 0x0a, 0x20, 0x20, 0x2a, 0x20, 0x22, 0x5d, 0x22, 0x0a, 0x0a,+  0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,+  0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x64, 0x65, 0x66, 0x20, 0x28, 0x74,+  0x2c, 0x20, 0x6b, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x29, 0x0a, 0x20, 0x20,+  0x69, 0x66, 0x20, 0x74, 0x5b, 0x6b, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e,+  0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22,+  0x27, 0x22, 0x2e, 0x2e, 0x6b, 0x2e, 0x2e, 0x22, 0x27, 0x20, 0x61, 0x6c,+  0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,+  0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x22,+  0x29, 0x0a, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20,+  0x20, 0x74, 0x5b, 0x6b, 0x5d, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x70, 0x0a,+  0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,+  0x72, 0x6e, 0x20, 0x74, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f,+  0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,+  0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x64, 0x65, 0x66, 0x20, 0x28, 0x6e,+  0x2c, 0x20, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,+  0x61, 0x64, 0x64, 0x64, 0x65, 0x66, 0x28, 0x7b, 0x6e, 0x7d, 0x2c, 0x20,+  0x6e, 0x2c, 0x20, 0x72, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x0a,+  0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,+  0x6f, 0x6e, 0x20, 0x4e, 0x54, 0x20, 0x28, 0x6e, 0x2c, 0x20, 0x62, 0x29,+  0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x20,+  0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x72, 0x72,+  0x6f, 0x72, 0x28, 0x22, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x27, 0x22, 0x2e,+  0x2e, 0x6e, 0x2e, 0x2e, 0x22, 0x27, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,+  0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x67, 0x72,+  0x61, 0x6d, 0x6d, 0x61, 0x72, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x65, 0x6c,+  0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6d,+  0x2e, 0x56, 0x28, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,+  0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,+  0x65, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x6d, 0x2e, 0x50, 0x7b, 0x20, 0x22,+  0x45, 0x78, 0x70, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x45, 0x78, 0x70, 0x20,+  0x3d, 0x20, 0x53, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x6d, 0x2e, 0x56, 0x22,+  0x47, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x22, 0x0a, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x6d,+  0x2e, 0x43, 0x66, 0x28, 0x6d, 0x2e, 0x56, 0x22, 0x53, 0x65, 0x71, 0x22,+  0x20, 0x2a, 0x20, 0x28, 0x22, 0x2f, 0x22, 0x20, 0x2a, 0x20, 0x53, 0x20,+  0x2a, 0x20, 0x6d, 0x2e, 0x56, 0x22, 0x53, 0x65, 0x71, 0x22, 0x29, 0x5e,+  0x30, 0x2c, 0x20, 0x6d, 0x74, 0x2e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x29,+  0x20, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x53, 0x65, 0x71, 0x20, 0x3d, 0x20,+  0x6d, 0x2e, 0x43, 0x66, 0x28, 0x6d, 0x2e, 0x43, 0x63, 0x28, 0x6d, 0x2e,+  0x50, 0x22, 0x22, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x56, 0x22, 0x50,+  0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x5e, 0x30, 0x20, 0x2c, 0x20, 0x6d,+  0x74, 0x2e, 0x5f, 0x5f, 0x6d, 0x75, 0x6c, 0x29, 0x0a, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x28, 0x23, 0x73, 0x65, 0x71,+  0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x2b, 0x20, 0x70, 0x61,+  0x74, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x3b, 0x0a, 0x20,+  0x20, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x3d, 0x20, 0x22, 0x26,+  0x22, 0x20, 0x2a, 0x20, 0x53, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x56, 0x22,+  0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x20, 0x2f, 0x20, 0x6d, 0x74,+  0x2e, 0x5f, 0x5f, 0x6c, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x22, 0x21, 0x22, 0x20, 0x2a, 0x20,+  0x53, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x56, 0x22, 0x50, 0x72, 0x65, 0x66,+  0x69, 0x78, 0x22, 0x20, 0x2f, 0x20, 0x6d, 0x74, 0x2e, 0x5f, 0x5f, 0x75,+  0x6e, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x2b, 0x20, 0x6d, 0x2e, 0x56, 0x22, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78,+  0x22, 0x3b, 0x0a, 0x20, 0x20, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x20,+  0x3d, 0x20, 0x6d, 0x2e, 0x43, 0x66, 0x28, 0x6d, 0x2e, 0x56, 0x22, 0x50,+  0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x20, 0x2a, 0x20, 0x53, 0x20,+  0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x28, 0x20, 0x28, 0x20, 0x6d, 0x2e, 0x50, 0x22, 0x2b, 0x22, 0x20, 0x2a,+  0x20, 0x6d, 0x2e, 0x43, 0x63, 0x28, 0x31, 0x2c, 0x20, 0x6d, 0x74, 0x2e,+  0x5f, 0x5f, 0x70, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x6d, 0x2e, 0x50,+  0x22, 0x2a, 0x22, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x63, 0x28, 0x30,+  0x2c, 0x20, 0x6d, 0x74, 0x2e, 0x5f, 0x5f, 0x70, 0x6f, 0x77, 0x29, 0x0a,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x2b, 0x20, 0x6d, 0x2e, 0x50, 0x22, 0x3f, 0x22, 0x20, 0x2a, 0x20, 0x6d,+  0x2e, 0x43, 0x63, 0x28, 0x2d, 0x31, 0x2c, 0x20, 0x6d, 0x74, 0x2e, 0x5f,+  0x5f, 0x70, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x22, 0x5e, 0x22, 0x20,+  0x2a, 0x20, 0x28, 0x20, 0x6d, 0x2e, 0x43, 0x67, 0x28, 0x6e, 0x75, 0x6d,+  0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x63, 0x28, 0x6d, 0x75, 0x6c, 0x74,+  0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b,+  0x20, 0x6d, 0x2e, 0x43, 0x67, 0x28, 0x6d, 0x2e, 0x43, 0x28, 0x6d, 0x2e,+  0x53, 0x22, 0x2b, 0x2d, 0x22, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x52, 0x22,+  0x30, 0x39, 0x22, 0x5e, 0x31, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43,+  0x63, 0x28, 0x6d, 0x74, 0x2e, 0x5f, 0x5f, 0x70, 0x6f, 0x77, 0x29, 0x29,+  0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x0a, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b,+  0x20, 0x22, 0x2d, 0x3e, 0x22, 0x20, 0x2a, 0x20, 0x53, 0x20, 0x2a, 0x20,+  0x28, 0x20, 0x6d, 0x2e, 0x43, 0x67, 0x28, 0x28, 0x53, 0x74, 0x72, 0x69,+  0x6e, 0x67, 0x20, 0x2b, 0x20, 0x6e, 0x75, 0x6d, 0x29, 0x20, 0x2a, 0x20,+  0x6d, 0x2e, 0x43, 0x63, 0x28, 0x6d, 0x74, 0x2e, 0x5f, 0x5f, 0x64, 0x69,+  0x76, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x6d, 0x2e, 0x50, 0x22, 0x7b,+  0x7d, 0x22, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x63, 0x28, 0x6e, 0x69,+  0x6c, 0x2c, 0x20, 0x6d, 0x2e, 0x43, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20,+  0x64, 0x65, 0x66, 0x77, 0x69, 0x74, 0x68, 0x66, 0x75, 0x6e, 0x63, 0x28,+  0x6d, 0x74, 0x2e, 0x5f, 0x5f, 0x64, 0x69, 0x76, 0x29, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29,+  0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x2b, 0x20, 0x22, 0x3d, 0x3e, 0x22, 0x20, 0x2a, 0x20, 0x53, 0x20,+  0x2a, 0x20, 0x64, 0x65, 0x66, 0x77, 0x69, 0x74, 0x68, 0x66, 0x75, 0x6e,+  0x63, 0x28, 0x6d, 0x2e, 0x43, 0x6d, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x22,+  0x7e, 0x3e, 0x22, 0x20, 0x2a, 0x20, 0x53, 0x20, 0x2a, 0x20, 0x64, 0x65,+  0x66, 0x77, 0x69, 0x74, 0x68, 0x66, 0x75, 0x6e, 0x63, 0x28, 0x6d, 0x2e,+  0x43, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x53, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x5e, 0x30, 0x2c,+  0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61,+  0x2c, 0x62, 0x2c, 0x66, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,+  0x20, 0x66, 0x28, 0x61, 0x2c, 0x62, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x20,+  0x29, 0x3b, 0x0a, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,+  0x20, 0x3d, 0x20, 0x22, 0x28, 0x22, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x56,+  0x22, 0x45, 0x78, 0x70, 0x22, 0x20, 0x2a, 0x20, 0x22, 0x29, 0x22, 0x0a,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x2b, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x2f, 0x20, 0x6d,+  0x6d, 0x2e, 0x50, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x0a,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x2b, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20,+  0x22, 0x7b, 0x3a, 0x22, 0x20, 0x2a, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65,+  0x20, 0x2a, 0x20, 0x22, 0x3a, 0x22, 0x20, 0x2b, 0x20, 0x6d, 0x2e, 0x43,+  0x63, 0x28, 0x6e, 0x69, 0x6c, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x2e,+  0x56, 0x22, 0x45, 0x78, 0x70, 0x22, 0x20, 0x2a, 0x20, 0x22, 0x3a, 0x7d,+  0x22, 0x20, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x6e,+  0x2c, 0x20, 0x70, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,+  0x6d, 0x6d, 0x2e, 0x43, 0x67, 0x28, 0x70, 0x2c, 0x20, 0x6e, 0x29, 0x20,+  0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x22, 0x3d, 0x22, 0x20, 0x2a, 0x20,+  0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2f, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,+  0x69, 0x6f, 0x6e, 0x20, 0x28, 0x6e, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75,+  0x72, 0x6e, 0x20, 0x6d, 0x6d, 0x2e, 0x43, 0x6d, 0x74, 0x28, 0x6d, 0x6d,+  0x2e, 0x43, 0x62, 0x28, 0x6e, 0x29, 0x2c, 0x20, 0x65, 0x71, 0x75, 0x61,+  0x6c, 0x63, 0x61, 0x70, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20,+  0x6d, 0x2e, 0x50, 0x22, 0x7b, 0x7d, 0x22, 0x20, 0x2f, 0x20, 0x6d, 0x6d,+  0x2e, 0x43, 0x70, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x22, 0x7b, 0x7e, 0x22, 0x20, 0x2a,+  0x20, 0x6d, 0x2e, 0x56, 0x22, 0x45, 0x78, 0x70, 0x22, 0x20, 0x2a, 0x20,+  0x22, 0x7e, 0x7d, 0x22, 0x20, 0x2f, 0x20, 0x6d, 0x6d, 0x2e, 0x43, 0x73,+  0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x2b, 0x20, 0x22, 0x7b, 0x7c, 0x22, 0x20, 0x2a, 0x20, 0x6d, 0x2e,+  0x56, 0x22, 0x45, 0x78, 0x70, 0x22, 0x20, 0x2a, 0x20, 0x22, 0x7c, 0x7d,+  0x22, 0x20, 0x2f, 0x20, 0x6d, 0x6d, 0x2e, 0x43, 0x74, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x20,+  0x22, 0x7b, 0x22, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x56, 0x22, 0x45, 0x78,+  0x70, 0x22, 0x20, 0x2a, 0x20, 0x22, 0x7d, 0x22, 0x20, 0x2f, 0x20, 0x6d,+  0x6d, 0x2e, 0x43, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x6d, 0x2e, 0x50, 0x22, 0x2e, 0x22,+  0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x63, 0x28, 0x61, 0x6e, 0x79, 0x29,+  0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x2b, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x20, 0x2d,+  0x61, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x2b, 0x20, 0x22, 0x3c, 0x22, 0x20,+  0x2a, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x20, 0x22, 0x3e, 0x22,+  0x29, 0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x62, 0x28, 0x22, 0x47, 0x22,+  0x29, 0x20, 0x2f, 0x20, 0x4e, 0x54, 0x3b, 0x0a, 0x20, 0x20, 0x44, 0x65,+  0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x6e,+  0x61, 0x6d, 0x65, 0x20, 0x2a, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20,+  0x2a, 0x20, 0x6d, 0x2e, 0x56, 0x22, 0x45, 0x78, 0x70, 0x22, 0x3b, 0x0a,+  0x20, 0x20, 0x47, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x20, 0x3d, 0x20,+  0x6d, 0x2e, 0x43, 0x67, 0x28, 0x6d, 0x2e, 0x43, 0x63, 0x28, 0x74, 0x72,+  0x75, 0x65, 0x29, 0x2c, 0x20, 0x22, 0x47, 0x22, 0x29, 0x20, 0x2a, 0x0a,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x6d, 0x2e, 0x43, 0x66, 0x28, 0x6d, 0x2e, 0x56, 0x22, 0x44, 0x65, 0x66,+  0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x2f, 0x20, 0x66,+  0x69, 0x72, 0x73, 0x74, 0x64, 0x65, 0x66, 0x20, 0x2a, 0x20, 0x6d, 0x2e,+  0x43, 0x67, 0x28, 0x6d, 0x2e, 0x56, 0x22, 0x44, 0x65, 0x66, 0x69, 0x6e,+  0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x29, 0x5e, 0x30, 0x2c, 0x0a, 0x20,+  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,+  0x20, 0x61, 0x64, 0x64, 0x64, 0x65, 0x66, 0x29, 0x20, 0x2f, 0x20, 0x6d,+  0x6d, 0x2e, 0x50, 0x0a, 0x7d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,+  0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x3d, 0x20, 0x53,+  0x20, 0x2a, 0x20, 0x6d, 0x2e, 0x43, 0x67, 0x28, 0x6d, 0x2e, 0x43, 0x63,+  0x28, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x2c, 0x20, 0x22, 0x47, 0x22,+  0x29, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x70, 0x20, 0x2f, 0x20, 0x6d, 0x6d,+  0x2e, 0x50, 0x20, 0x2a, 0x20, 0x28, 0x2d, 0x61, 0x6e, 0x79, 0x20, 0x2b,+  0x20, 0x70, 0x61, 0x74, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x29,+  0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e,+  0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,+  0x65, 0x20, 0x28, 0x70, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x73, 0x29, 0x0a,+  0x20, 0x20, 0x69, 0x66, 0x20, 0x6d, 0x6d, 0x2e, 0x74, 0x79, 0x70, 0x65,+  0x28, 0x70, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x70, 0x61, 0x74, 0x74,+  0x65, 0x72, 0x6e, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65,+  0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x20,+  0x20, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20,+  0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x6c,+  0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x70, 0x20, 0x3d, 0x20, 0x70, 0x61,+  0x74, 0x74, 0x65, 0x72, 0x6e, 0x3a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x28,+  0x70, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x73, 0x29, 0x0a,+  0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x70, 0x20,+  0x74, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22,+  0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x70, 0x61,+  0x74, 0x74, 0x65, 0x72, 0x6e, 0x22, 0x2c, 0x20, 0x33, 0x29, 0x20, 0x65,+  0x6e, 0x64, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,+  0x63, 0x70, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d,+  0x61, 0x74, 0x63, 0x68, 0x20, 0x28, 0x73, 0x2c, 0x20, 0x70, 0x2c, 0x20,+  0x69, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63,+  0x70, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x6d, 0x5b, 0x70, 0x5d, 0x0a, 0x20,+  0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x70, 0x20, 0x74,+  0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x70, 0x20, 0x3d,+  0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x70, 0x29, 0x0a,+  0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x5b, 0x70, 0x5d, 0x20, 0x3d,+  0x20, 0x63, 0x70, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,+  0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x70, 0x3a, 0x6d, 0x61,+  0x74, 0x63, 0x68, 0x28, 0x73, 0x2c, 0x20, 0x69, 0x20, 0x6f, 0x72, 0x20,+  0x31, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61,+  0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66,+  0x69, 0x6e, 0x64, 0x20, 0x28, 0x73, 0x2c, 0x20, 0x70, 0x2c, 0x20, 0x69,+  0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x70,+  0x20, 0x3d, 0x20, 0x66, 0x6d, 0x65, 0x6d, 0x5b, 0x70, 0x5d, 0x0a, 0x20,+  0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x70, 0x20, 0x74,+  0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x70, 0x20, 0x3d,+  0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x70, 0x29, 0x20,+  0x2f, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x70, 0x20, 0x3d,+  0x20, 0x6d, 0x6d, 0x2e, 0x50, 0x7b, 0x20, 0x6d, 0x6d, 0x2e, 0x43, 0x70,+  0x28, 0x29, 0x20, 0x2a, 0x20, 0x63, 0x70, 0x20, 0x2a, 0x20, 0x6d, 0x6d,+  0x2e, 0x43, 0x70, 0x28, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x2a, 0x20,+  0x6d, 0x6d, 0x2e, 0x56, 0x28, 0x31, 0x29, 0x20, 0x7d, 0x0a, 0x20, 0x20,+  0x20, 0x20, 0x66, 0x6d, 0x65, 0x6d, 0x5b, 0x70, 0x5d, 0x20, 0x3d, 0x20,+  0x63, 0x70, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x6c,+  0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x2c, 0x20, 0x65, 0x20, 0x3d, 0x20,+  0x63, 0x70, 0x3a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x28, 0x73, 0x2c, 0x20,+  0x69, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x69, 0x66,+  0x20, 0x69, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75,+  0x72, 0x6e, 0x20, 0x69, 0x2c, 0x20, 0x65, 0x20, 0x2d, 0x20, 0x31, 0x0a,+  0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,+  0x6e, 0x20, 0x69, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e,+  0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e,+  0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x73, 0x75, 0x62, 0x20, 0x28,+  0x73, 0x2c, 0x20, 0x70, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x29, 0x0a, 0x20,+  0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x20, 0x3d, 0x20, 0x67,+  0x6d, 0x65, 0x6d, 0x5b, 0x70, 0x5d, 0x20, 0x6f, 0x72, 0x20, 0x7b, 0x7d,+  0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65,+  0x20, 0x67, 0x6d, 0x65, 0x6d, 0x5b, 0x70, 0x5d, 0x20, 0x69, 0x73, 0x20,+  0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65,+  0x64, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x68, 0x65, 0x72, 0x65,+  0x0a, 0x20, 0x20, 0x67, 0x6d, 0x65, 0x6d, 0x5b, 0x70, 0x5d, 0x20, 0x3d,+  0x20, 0x67, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63,+  0x70, 0x20, 0x3d, 0x20, 0x67, 0x5b, 0x72, 0x65, 0x70, 0x5d, 0x0a, 0x20,+  0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x70, 0x20, 0x74,+  0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x70, 0x20, 0x3d,+  0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x28, 0x70, 0x29, 0x0a,+  0x20, 0x20, 0x20, 0x20, 0x63, 0x70, 0x20, 0x3d, 0x20, 0x6d, 0x6d, 0x2e,+  0x43, 0x73, 0x28, 0x28, 0x63, 0x70, 0x20, 0x2f, 0x20, 0x72, 0x65, 0x70,+  0x20, 0x2b, 0x20, 0x31, 0x29, 0x5e, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20,+  0x20, 0x67, 0x5b, 0x72, 0x65, 0x70, 0x5d, 0x20, 0x3d, 0x20, 0x63, 0x70,+  0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74,+  0x75, 0x72, 0x6e, 0x20, 0x63, 0x70, 0x3a, 0x6d, 0x61, 0x74, 0x63, 0x68,+  0x28, 0x73, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x0a, 0x2d, 0x2d,+  0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x61,+  0x6d, 0x65, 0x73, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65,+  0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69,+  0x6c, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,+  0x2c, 0x0a, 0x20, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x3d, 0x20,+  0x6d, 0x61, 0x74, 0x63, 0x68, 0x2c, 0x0a, 0x20, 0x20, 0x66, 0x69, 0x6e,+  0x64, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20,+  0x67, 0x73, 0x75, 0x62, 0x20, 0x3d, 0x20, 0x67, 0x73, 0x75, 0x62, 0x2c,+  0x0a, 0x20, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x6c, 0x6f, 0x63,+  0x61, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,+  0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2c, 0x0a, 0x7d, 0x0a, 0x0a, 0x69,+  0x66, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d,+  0x20, 0x22, 0x4c, 0x75, 0x61, 0x20, 0x35, 0x2e, 0x31, 0x22, 0x20, 0x74,+  0x68, 0x65, 0x6e, 0x20, 0x5f, 0x47, 0x2e, 0x72, 0x65, 0x20, 0x3d, 0x20,+  0x72, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x72, 0x65, 0x74, 0x75,+  0x72, 0x6e, 0x20, 0x72, 0x65, 0x0a+};+unsigned int cbits_lpeg_1_0_2_re_lua_len = 6450;
lpeg.cabal view
@@ -1,6 +1,6 @@ cabal-version:       2.2 name:                lpeg-version:             1.0.0+version:             1.0.1 synopsis:            LPeg – Parsing Expression Grammars For Lua description:         This package contains the C sources of LPeg, as well                      as some tiny Haskell helper to load the package.@@ -17,6 +17,7 @@ category:            Foreign build-type:          Simple extra-source-files:  cbits/lpeg-1.0.2/*.h+                   , cbits/re.h                    , README.md                    , CHANGELOG.md tested-with:         GHC == 8.0.2@@ -69,11 +70,13 @@   else     hs-source-dirs:      src     include-dirs:        cbits/lpeg-1.0.2+                       , cbits     c-sources:           cbits/lpeg-1.0.2/lpvm.c                        , cbits/lpeg-1.0.2/lptree.c                        , cbits/lpeg-1.0.2/lpprint.c                        , cbits/lpeg-1.0.2/lpcode.c                        , cbits/lpeg-1.0.2/lpcap.c+                       , cbits/re.c     cc-options:          -std=c99 -fPIC  test-suite test-lpeg
src/Lua/LPeg.hs view
@@ -8,6 +8,7 @@ -} module Lua.LPeg   ( luaopen_lpeg_ptr+  , luaopen_re_ptr   , lpeg_searcher   ) where @@ -21,9 +22,8 @@ foreign import ccall unsafe "lptree.c &luaopen_lpeg"   luaopen_lpeg_ptr :: CFunction --- | Name under which the module is loaded.-moduleName :: String-moduleName = "lpeg"+foreign import ccall unsafe "&luaopen_re"+  luaopen_re_ptr :: CFunction  -- | A package searcher to be used with @package.searchers@), just for -- the "lpeg" module. Returns @nil@ on most inputs, but pushes a@@ -37,6 +37,7 @@       else do         cstrLen <- peek lenPtr         pkg <- peekCStringLen (cstr, fromIntegral cstrLen)-        if pkg /= moduleName-          then lua_pushnil l-          else lua_pushcclosure l luaopen_lpeg_ptr 0+        case pkg of+          "lpeg" -> lua_pushcclosure l luaopen_lpeg_ptr 0+          "re"   -> lua_pushcclosure l luaopen_re_ptr 0+          _      -> lua_pushnil l
substitute/Lua/LPeg.hs view
@@ -8,6 +8,7 @@ -} module Lua.LPeg   ( luaopen_lpeg_ptr+  , luaopen_re_ptr   , lpeg_searcher   ) where @@ -17,11 +18,16 @@ import Foreign.Marshal (alloca) import Lua --- | Pointer to the placeholder library loader. Trying to load the+-- | Pointer to the placeholder lpeg library loader. Trying to load the -- library will result in an error. foreign import ccall unsafe "placeholder.c &luaopen_lpeg"   luaopen_lpeg_ptr :: CFunction +-- | Pointer to the placeholder re library loader. Trying to load the+-- library will result in an error.+foreign import ccall unsafe "placeholder.c &luaopen_re"+  luaopen_re_ptr :: CFunction+ -- | Placeholder package searcher to be used with @package.searchers@), -- just for the "lpeg" module. Returns @nil@ on most inputs, but pushes -- adds a message about the module being unavailable when called on the@@ -35,12 +41,9 @@       else do         cstrLen <- peek lenPtr         pkg <- peekCStringLen (cstr, fromIntegral cstrLen)-        if pkg /= moduleName-          then 1 <$ lua_pushnil l-          else 1 <$ withCString msg (lua_pushstring l)+        case pkg of+          "lpeg" -> 1 <$ withCString msg (lua_pushstring l)+          "re"   -> 1 <$ withCString msg (lua_pushstring l)+          _      -> 1 <$ lua_pushnil l  where   msg = "\n\tlpeg was configured to be excluded from the binary."---- | Name under which the module is loaded.-moduleName :: String-moduleName = "lpeg"
test/test-lpeg.hs view
@@ -10,7 +10,7 @@ -} module Main where -import Control.Monad (void, when)+import Control.Monad import Foreign.C import Foreign.Ptr (nullPtr) import Lua@@ -25,12 +25,18 @@ tests = testGroup "LPeg" $   -- tests to check the correct types to make sure placeholder and the real   -- thing don't diverge.-  [ testCase "can push loader" $ do+  [ testCase "can push lpeg loader" $ do       l <- hsluaL_newstate       lua_pushcclosure l luaopen_lpeg_ptr 0       assertEqual "loader should be a function"         LUA_TFUNCTION =<< lua_type l (-1)       lua_close l+  , testCase "can push re loader" $ do+      l <- hsluaL_newstate+      lua_pushcclosure l luaopen_re_ptr 0+      assertEqual "loader should be a function"+        LUA_TFUNCTION =<< lua_type l (-1)+      lua_close l   , testCase "can push searcher" $ do       l <- hsluaL_newstate       hslua_pushhsfunction l lpeg_searcher@@ -39,7 +45,7 @@       lua_close l   ] ++ #ifndef RELY_ON_SYSTEM_INSTALL-  [ testCase "load library via CFunction" $ do+  [ testCase "load lpeg library via CFunction" $ do       l <- hsluaL_newstate       lua_pushcclosure l luaopen_lpeg_ptr 0       stts <- lua_pcall l 0 1 0@@ -52,21 +58,45 @@         LUA_TFUNCTION =<< lua_type l (-1)       lua_close l -  , testCase "load library manually" $ do+  , testCase "load libraries manually" $ do       l <- hsluaL_newstate       luaL_openlibs l++      -- unset searchers+      _ <- withCString "package" $ lua_getglobal l+      pushstring l "searchers"+      _ <- lua_gettable l (-2)+      forM_ [1..4] $ \i -> lua_pushnil l *> lua_rawseti l (-2) i+      lua_pop l 2++      -- ensure that lpeg cannot be found+      runScript l "assert(not pcall(function() require 'lpeg' end))"+      -- ensure that re cannot be found+      runScript l "assert(not pcall(function() require 're' end))"+       -- get table "_LOADED" from registry       _ <- withCString loadedTableRegistryField $ lua_pushstring l       lua_rawget l LUA_REGISTRYINDEX +      -- load lpeg       _ <- withCString "lpeg" $ lua_pushstring l  -- key       lua_pushcclosure l luaopen_lpeg_ptr 0       stts <- lua_pcall l 0 1 0-      when (stts /= LUA_OK) $-        fail =<< peekCString =<< lua_tolstring l (-1) nullPtr+      if stts == LUA_OK+        then lua_rawset l (-3)+        else fail =<< peekCString =<< lua_tolstring l (-1) nullPtr -      runTestScript l+      -- load re+      _ <- withCString "re" $ lua_pushstring l  -- key+      lua_pushcclosure l luaopen_re_ptr 0+      stts' <- lua_pcall l 0 1 0+      if stts' == LUA_OK+        then lua_rawset l (-3)+        else fail =<< peekCString =<< lua_tolstring l (-1) nullPtr +      runScript l testScript+      runScript l "re = require 're'; assert(type(re.gsub) == 'function')"+       lua_close l    , testCase "use lpeg_searcher as searcher" $ do@@ -82,29 +112,32 @@       lua_pushnil l *> lua_rawseti l (-2) 4       lua_pop l 2 -      runTestScript l+      runScript l testScript+      runScript l "local re = require 're'\n"        lua_close l   ]  where-  runTestScript l = do-    stts <- withCStringLen testScript $ \(s, slen) ->+  runScript l script = do+    stts <- withCStringLen script $ \(s, slen) ->       withCString "test script" $ \n ->       luaL_loadbuffer l s (fromIntegral slen) n     when (stts /= LUA_OK) $ do       fail =<< peekCString =<< lua_tolstring l (-1) nullPtr+    stts' <- lua_pcall l 0 0 0+    when (stts' /= LUA_OK) $ do+      fail =<< peekCString =<< lua_tolstring l (-1) nullPtr  testScript :: String testScript = unlines-  [ "local m = require'lpeg'"+  [ "local m = require 'lpeg'"   , "assert(type(m.version()) == 'string')"   , "assert(m.type(m.P'alo') == 'pattern')"   , "assert(m.match('a' * m.P(true), 'a') == 2)"-  , "print 'HI MOM'"   ]  #else-  [ testCase "loading the placeholder library causes an error" $ do+  [ testCase "loading the lpeg placeholder library causes an error" $ do       l <- hsluaL_newstate       lua_pushcclosure l luaopen_lpeg_ptr 0       stts <- lua_pcall l 0 1 0@@ -112,6 +145,14 @@       when (stts /= LUA_ERRRUN) $         fail "library loading should have failed with LUA_ERRRUN" +  , testCase "loading the re placeholder library causes an error" $ do+      l <- hsluaL_newstate+      lua_pushcclosure l luaopen_re_ptr 0+      stts <- lua_pcall l 0 1 0+      stts `seq` lua_close l+      when (stts /= LUA_ERRRUN) $+        fail "library loading should have failed with LUA_ERRRUN"+   , testCase "searcher returns message" $ do       l <- hsluaL_newstate       luaL_openlibs l@@ -126,17 +167,20 @@       lua_pushnil l *> lua_rawseti l (-2) 4       lua_pop l 2  -- tables 'package' and 'searchers' -      stts <- withCStringLen "require 'lpeg'" $ \(s, slen) ->-        withCString "test script" $ \n ->-        luaL_loadbuffer l s (fromIntegral slen) n-      when (stts /= LUA_OK) $ do-        fail =<< peekCString =<< lua_tolstring l (-1) nullPtr-      callStatus <- lua_pcall l 0 0 0-      case callStatus of-        LUA_OK -> fail "require should have failed"-        LUA_ERRRUN -> return ()-        _ -> fail =<< peekCString =<< lua_tolstring l (-1) nullPtr+      let ensureRequireFails lib = do+            stts <- withCStringLen ("require '" ++ lib ++ "'") $ \(s, slen) ->+              withCString "test script" $+                luaL_loadbuffer l s (fromIntegral slen)+            when (stts /= LUA_OK) $ do+              fail =<< peekCString =<< lua_tolstring l (-1) nullPtr+            callStatus <- lua_pcall l 0 0 0+            case callStatus of+              LUA_OK -> fail "require should have failed"+              LUA_ERRRUN -> return ()+              _ -> fail =<< peekCString =<< lua_tolstring l (-1) nullPtr +      ensureRequireFails "lpeg"+      ensureRequireFails "re"       lua_close l   ] #endif