From 5b5bd699fff2526408d46527d5ea1c8433f51fc6 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 25 Feb 2018 12:04:55 +0000 Subject: Starting to build the implementation of the private methods and variables. Definition support. --- generic/tclInt.h | 4 +++ generic/tclOO.c | 2 ++ generic/tclOODefineCmds.c | 87 +++++++++++++++++++++++++++++++++++++++++++++-- generic/tclOOInt.h | 3 ++ 4 files changed, 93 insertions(+), 3 deletions(-) diff --git a/generic/tclInt.h b/generic/tclInt.h index 797e1cb..f41a5cc 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -1146,6 +1146,10 @@ typedef struct CallFrame { * field contains an Object reference that has * been confirmed to refer to a class. Part of * TIP#257. */ +#define FRAME_IS_PRIVATE_DEFINE 0x10 + /* Marks this frame as being used for private + * declarations with [oo::define]. Usually + * OR'd with FRAME_IS_OO_DEFINE. TIP#500. */ /* * TIP #280 diff --git a/generic/tclOO.c b/generic/tclOO.c index 39e3fb2..4975303 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -31,6 +31,7 @@ static const struct { {"export", TclOODefineExportObjCmd, 0}, {"forward", TclOODefineForwardObjCmd, 0}, {"method", TclOODefineMethodObjCmd, 0}, + {"private", TclOODefinePrivateObjCmd, 0}, {"renamemethod", TclOODefineRenameMethodObjCmd, 0}, {"self", TclOODefineSelfObjCmd, 0}, {"unexport", TclOODefineUnexportObjCmd, 0}, @@ -41,6 +42,7 @@ static const struct { {"export", TclOODefineExportObjCmd, 1}, {"forward", TclOODefineForwardObjCmd, 1}, {"method", TclOODefineMethodObjCmd, 1}, + {"private", TclOODefinePrivateObjCmd, 1}, {"renamemethod", TclOODefineRenameMethodObjCmd, 1}, {"self", TclOODefineObjSelfObjCmd, 0}, {"unexport", TclOODefineUnexportObjCmd, 1}, diff --git a/generic/tclOODefineCmds.c b/generic/tclOODefineCmds.c index 7c2a641..7710b71 100644 --- a/generic/tclOODefineCmds.c +++ b/generic/tclOODefineCmds.c @@ -17,6 +17,12 @@ #include "tclOOInt.h" /* + * The actual value used to mark private declaration frames. + */ + +#define PRIVATE_FRAME (FRAME_IS_OO_DEFINE | FRAME_IS_PRIVATE_DEFINE) + +/* * The maximum length of fully-qualified object name to use in an errorinfo * message. Longer than this will be curtailed. */ @@ -714,7 +720,8 @@ TclOOGetDefineCmdContext( Tcl_Object object; if ((iPtr->varFramePtr == NULL) - || (iPtr->varFramePtr->isProcCallFrame != FRAME_IS_OO_DEFINE)) { + || (iPtr->varFramePtr->isProcCallFrame != FRAME_IS_OO_DEFINE + && iPtr->varFramePtr->isProcCallFrame != PRIVATE_FRAME)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "this command may only be called from within the context of" " an ::oo::define or ::oo::objdefine command", -1)); @@ -755,7 +762,8 @@ GetClassInOuterContext( Object *oPtr; CallFrame *savedFramePtr = iPtr->varFramePtr; - while (iPtr->varFramePtr->isProcCallFrame == FRAME_IS_OO_DEFINE) { + while (iPtr->varFramePtr->isProcCallFrame == FRAME_IS_OO_DEFINE + || iPtr->varFramePtr->isProcCallFrame == PRIVATE_FRAME) { if (iPtr->varFramePtr->callerVarPtr == NULL) { Tcl_Panic("getting outer context when already in global context"); } @@ -1071,7 +1079,7 @@ TclOODefineSelfObjCmd( Tcl_IncrRefCount(objNameObj); result = TclEvalObjEx(interp, objv[1], 0, - ((Interp *)interp)->cmdFramePtr, 2); + ((Interp *)interp)->cmdFramePtr, 1); if (result == TCL_ERROR) { GenerateErrorInfo(interp, oPtr, objNameObj, "class object"); } @@ -1126,6 +1134,79 @@ TclOODefineObjSelfObjCmd( /* * ---------------------------------------------------------------------- * + * TclOODefinePrivateObjCmd -- + * + * Implementation of the "private" subcommand of the "oo::define" + * and "oo::objdefine" commands. + * + * ---------------------------------------------------------------------- + */ + +int +TclOODefinePrivateObjCmd( + ClientData clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *const *objv) +{ + int isInstancePrivate = (clientData != NULL); + /* Just so that we can generate the correct + * error message depending on the context of + * usage of this function. */ + Interp *iPtr = (Interp *) interp; + Object *oPtr = (Object *) TclOOGetDefineCmdContext(interp); + int saved; /* The saved flag. We restore it on exit so + * that [private private ...] doesn't make + * things go weird. */ + int result; + + if (oPtr == NULL) { + return TCL_ERROR; + } + if (objc < 2) { + Tcl_WrongNumArgs(interp, 1, objv, "definitionCommand ..."); + return TCL_ERROR; + } + + /* + * Change the frame type flag while evaluating the body. + */ + + saved = iPtr->varFramePtr->isProcCallFrame; + iPtr->varFramePtr->isProcCallFrame = PRIVATE_FRAME; + + /* + * Evaluate the body; standard pattern. + */ + + AddRef(oPtr); + if (objc == 2) { + Tcl_Obj *objNameObj = TclOOObjectName(interp, oPtr); + + Tcl_IncrRefCount(objNameObj); + result = TclEvalObjEx(interp, objv[1], 0, iPtr->cmdFramePtr, 1); + if (result == TCL_ERROR) { + GenerateErrorInfo(interp, oPtr, objNameObj, + isInstancePrivate ? "object" : "class"); + } + TclDecrRefCount(objNameObj); + } else { + result = MagicDefinitionInvoke(interp, TclGetCurrentNamespace(interp), + 1, objc, objv); + } + TclOODecrRefCount(oPtr); + + /* + * Restore the frame type flag to what it was previously. + */ + + iPtr->varFramePtr->isProcCallFrame = saved; + return result; +} + +/* + * ---------------------------------------------------------------------- + * * TclOODefineClassObjCmd -- * * Implementation of the "class" subcommand of the "oo::objdefine" diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index 084c026..53fc0e9 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -431,6 +431,9 @@ MODULE_SCOPE int TclOODefineSelfObjCmd(ClientData clientData, MODULE_SCOPE int TclOODefineObjSelfObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); +MODULE_SCOPE int TclOODefinePrivateObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj *const *objv); MODULE_SCOPE int TclOOUnknownDefinition(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); -- cgit v0.12 From 383c53f80e5569976680d358a135e25f7e402e9a Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 18 Mar 2018 18:04:50 +0000 Subject: This should be the implementation of private variables. --- generic/tclOO.c | 18 +++ generic/tclOODefineCmds.c | 278 ++++++++++++++++++++++++++++++---------------- generic/tclOOInt.h | 44 +++++++- generic/tclOOMethod.c | 20 +++- 4 files changed, 264 insertions(+), 96 deletions(-) diff --git a/generic/tclOO.c b/generic/tclOO.c index 4975303..0cc10a7 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -970,6 +970,7 @@ ReleaseClassContents( Method *mPtr; Foundation *fPtr = oPtr->fPtr; Tcl_Obj *variableObj; + PrivateVariableMapping *privateVariable; /* * Sanity check! @@ -1062,6 +1063,14 @@ ReleaseClassContents( ckfree(clsPtr->variables.list); } + FOREACH_STRUCT(privateVariable, clsPtr->privateVariables) { + TclDecrRefCount(privateVariable->variableObj); + TclDecrRefCount(privateVariable->fullNameObj); + } + if (i) { + ckfree(clsPtr->privateVariables.list); + } + if (IsRootClass(oPtr) && !Deleted(fPtr->objectCls->thisPtr)) { Tcl_DeleteCommandFromToken(interp, fPtr->objectCls->thisPtr->command); } @@ -1091,6 +1100,7 @@ ObjectNamespaceDeleted( Class *mixinPtr; Method *mPtr; Tcl_Obj *filterObj, *variableObj; + PrivateVariableMapping *privateVariable; Tcl_Interp *interp = oPtr->fPtr->interp; int i; @@ -1210,6 +1220,14 @@ ObjectNamespaceDeleted( ckfree(oPtr->variables.list); } + FOREACH_STRUCT(privateVariable, oPtr->privateVariables) { + TclDecrRefCount(privateVariable->variableObj); + TclDecrRefCount(privateVariable->fullNameObj); + } + if (i) { + ckfree(oPtr->privateVariables.list); + } + if (oPtr->chainCache) { TclOODeleteChainCache(oPtr->chainCache); } diff --git a/generic/tclOODefineCmds.c b/generic/tclOODefineCmds.c index 7710b71..916fb41 100644 --- a/generic/tclOODefineCmds.c +++ b/generic/tclOODefineCmds.c @@ -124,6 +124,30 @@ static const struct DeclaredSlot slots[] = { SLOT("objdefine::variable", ObjVarsGet, ObjVarsSet), {NULL, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}} }; + +#define PRIVATE_VARIABLE_PATTERN "%d : %s" + +/* + * ---------------------------------------------------------------------- + * + * IsPrivateDefine -- + * + * Extracts whether the current context is handling private definitions. + * + * ---------------------------------------------------------------------- + */ + +static inline int +IsPrivateDefine( + Tcl_Interp *interp) +{ + Interp *iPtr = (Interp *) interp; + + if (!iPtr->varFramePtr) { + return 0; + } + return iPtr->varFramePtr->isProcCallFrame == PRIVATE_FRAME; +} /* * ---------------------------------------------------------------------- @@ -431,6 +455,123 @@ TclOOClassSetMixins( /* * ---------------------------------------------------------------------- * + * InstallStandardVariableMapping, InstallPrivateVariableMapping -- + * + * Helpers for installing standard and private variable maps. + * + * ---------------------------------------------------------------------- + */ +static inline void +InstallStandardVariableMapping( + VariableNameList *vnlPtr, + int varc, + Tcl_Obj *const *varv) +{ + Tcl_Obj *variableObj; + int i, n, created; + Tcl_HashTable uniqueTable; + + for (i=0 ; ilist); + } else if (i) { + vnlPtr->list = ckrealloc(vnlPtr->list, sizeof(Tcl_Obj *) * varc); + } else { + vnlPtr->list = ckalloc(sizeof(Tcl_Obj *) * varc); + } + } + vnlPtr->num = 0; + if (varc > 0) { + Tcl_InitObjHashTable(&uniqueTable); + for (i=n=0 ; ilist[n++] = varv[i]; + } else { + Tcl_DecrRefCount(varv[i]); + } + } + vnlPtr->num = n; + + /* + * Shouldn't be necessary, but maintain num/list invariant. + */ + + if (n != varc) { + vnlPtr->list = ckrealloc(vnlPtr->list, sizeof(Tcl_Obj *) * n); + } + Tcl_DeleteHashTable(&uniqueTable); + } +} + +static inline void +InstallPrivateVariableMapping( + PrivateVariableList *pvlPtr, + int varc, + Tcl_Obj *const *varv, + int creationEpoch) +{ + PrivateVariableMapping *privatePtr; + int i, n, created; + Tcl_HashTable uniqueTable; + + for (i=0 ; ivariableObj); + Tcl_DecrRefCount(privatePtr->fullNameObj); + } + if (i != varc) { + if (varc == 0) { + ckfree(pvlPtr->list); + } else if (i) { + pvlPtr->list = ckrealloc(pvlPtr->list, + sizeof(PrivateVariableMapping) * varc); + } else { + pvlPtr->list = ckalloc(sizeof(PrivateVariableMapping) * varc); + } + } + + pvlPtr->num = 0; + if (varc > 0) { + Tcl_InitObjHashTable(&uniqueTable); + for (i=n=0 ; ilist[n++]); + privatePtr->variableObj = varv[i]; + privatePtr->fullNameObj = Tcl_ObjPrintf( + PRIVATE_VARIABLE_PATTERN, + creationEpoch, Tcl_GetString(varv[i])); + Tcl_IncrRefCount(privatePtr->fullNameObj); + } else { + Tcl_DecrRefCount(varv[i]); + } + } + pvlPtr->num = n; + + /* + * Shouldn't be necessary, but maintain num/list invariant. + */ + + if (n != varc) { + pvlPtr->list = ckrealloc(pvlPtr->list, + sizeof(PrivateVariableMapping) * n); + } + Tcl_DeleteHashTable(&uniqueTable); + } +} + +/* + * ---------------------------------------------------------------------- + * * RenameDeleteMethod -- * * Core of the code to rename and delete methods. @@ -1611,6 +1752,9 @@ TclOODefineForwardObjCmd( } isPublic = Tcl_StringMatch(TclGetString(objv[1]), "[a-z]*") ? PUBLIC_METHOD : 0; + if (IsPrivateDefine(interp)) { + isPublic = TRUE_PRIVATE_METHOD; + } /* * Create the method structure. @@ -1670,6 +1814,9 @@ TclOODefineMethodObjCmd( } isPublic = Tcl_StringMatch(TclGetString(objv[1]), "[a-z]*") ? PUBLIC_METHOD : 0; + if (IsPrivateDefine(interp)) { + isPublic = TRUE_PRIVATE_METHOD; + } /* * Create the method by using the right back-end API. @@ -2408,7 +2555,7 @@ ClassVarsGet( Tcl_Obj *const *objv) { Object *oPtr = (Object *) TclOOGetDefineCmdContext(interp); - Tcl_Obj *resultObj, *variableObj; + Tcl_Obj *resultObj; int i; if (Tcl_ObjectContextSkippedArgs(context) != objc) { @@ -2426,8 +2573,18 @@ ClassVarsGet( } resultObj = Tcl_NewObj(); - FOREACH(variableObj, oPtr->classPtr->variables) { - Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + if (IsPrivateDefine(interp)) { + PrivateVariableMapping *privatePtr; + + FOREACH_STRUCT(privatePtr, oPtr->classPtr->privateVariables) { + Tcl_ListObjAppendElement(NULL, resultObj, privatePtr->variableObj); + } + } else { + Tcl_Obj *variableObj; + + FOREACH(variableObj, oPtr->classPtr->variables) { + Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + } } Tcl_SetObjResult(interp, resultObj); return TCL_OK; @@ -2443,7 +2600,7 @@ ClassVarsSet( { Object *oPtr = (Object *) TclOOGetDefineCmdContext(interp); int varc; - Tcl_Obj **varv, *variableObj; + Tcl_Obj **varv; int i; if (Tcl_ObjectContextSkippedArgs(context)+1 != objc) { @@ -2484,49 +2641,11 @@ ClassVarsSet( } } - for (i=0 ; iclassPtr->variables) { - Tcl_DecrRefCount(variableObj); - } - if (i != varc) { - if (varc == 0) { - ckfree(oPtr->classPtr->variables.list); - } else if (i) { - oPtr->classPtr->variables.list = (Tcl_Obj **) - ckrealloc((char *) oPtr->classPtr->variables.list, - sizeof(Tcl_Obj *) * varc); - } else { - oPtr->classPtr->variables.list = (Tcl_Obj **) - ckalloc(sizeof(Tcl_Obj *) * varc); - } - } - - oPtr->classPtr->variables.num = 0; - if (varc > 0) { - int created, n; - Tcl_HashTable uniqueTable; - - Tcl_InitObjHashTable(&uniqueTable); - for (i=n=0 ; iclassPtr->variables.list[n++] = varv[i]; - } else { - Tcl_DecrRefCount(varv[i]); - } - } - oPtr->classPtr->variables.num = n; - - /* - * Shouldn't be necessary, but maintain num/list invariant. - */ - - oPtr->classPtr->variables.list = (Tcl_Obj **) - ckrealloc((char *) oPtr->classPtr->variables.list, - sizeof(Tcl_Obj *) * n); - Tcl_DeleteHashTable(&uniqueTable); + if (IsPrivateDefine(interp)) { + InstallPrivateVariableMapping(&oPtr->classPtr->privateVariables, + varc, varv, oPtr->classPtr->thisPtr->creationEpoch); + } else { + InstallStandardVariableMapping(&oPtr->classPtr->variables, varc, varv); } return TCL_OK; } @@ -2715,7 +2834,7 @@ ObjVarsGet( Tcl_Obj *const *objv) { Object *oPtr = (Object *) TclOOGetDefineCmdContext(interp); - Tcl_Obj *resultObj, *variableObj; + Tcl_Obj *resultObj; int i; if (Tcl_ObjectContextSkippedArgs(context) != objc) { @@ -2727,8 +2846,18 @@ ObjVarsGet( } resultObj = Tcl_NewObj(); - FOREACH(variableObj, oPtr->variables) { - Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + if (IsPrivateDefine(interp)) { + PrivateVariableMapping *privatePtr; + + FOREACH_STRUCT(privatePtr, oPtr->privateVariables) { + Tcl_ListObjAppendElement(NULL, resultObj, privatePtr->variableObj); + } + } else { + Tcl_Obj *variableObj; + + FOREACH(variableObj, oPtr->variables) { + Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + } } Tcl_SetObjResult(interp, resultObj); return TCL_OK; @@ -2744,7 +2873,7 @@ ObjVarsSet( { Object *oPtr = (Object *) TclOOGetDefineCmdContext(interp); int varc, i; - Tcl_Obj **varv, *variableObj; + Tcl_Obj **varv; if (Tcl_ObjectContextSkippedArgs(context)+1 != objc) { Tcl_WrongNumArgs(interp, Tcl_ObjectContextSkippedArgs(context), objv, @@ -2777,49 +2906,12 @@ ObjVarsSet( return TCL_ERROR; } } - for (i=0 ; ivariables) { - Tcl_DecrRefCount(variableObj); - } - if (i != varc) { - if (varc == 0) { - ckfree(oPtr->variables.list); - } else if (i) { - oPtr->variables.list = (Tcl_Obj **) - ckrealloc((char *) oPtr->variables.list, - sizeof(Tcl_Obj *) * varc); - } else { - oPtr->variables.list = (Tcl_Obj **) - ckalloc(sizeof(Tcl_Obj *) * varc); - } - } - oPtr->variables.num = 0; - if (varc > 0) { - int created, n; - Tcl_HashTable uniqueTable; - - Tcl_InitObjHashTable(&uniqueTable); - for (i=n=0 ; ivariables.list[n++] = varv[i]; - } else { - Tcl_DecrRefCount(varv[i]); - } - } - oPtr->variables.num = n; - - /* - * Shouldn't be necessary, but maintain num/list invariant. - */ - oPtr->variables.list = (Tcl_Obj **) - ckrealloc((char *) oPtr->variables.list, - sizeof(Tcl_Obj *) * n); - Tcl_DeleteHashTable(&uniqueTable); + if (IsPrivateDefine(interp)) { + InstallPrivateVariableMapping(&oPtr->privateVariables, varc, varv, + oPtr->creationEpoch); + } else { + InstallStandardVariableMapping(&oPtr->variables, varc, varv); } return TCL_OK; } diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index 53fc0e9..10c25ee 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -125,6 +125,18 @@ typedef struct ForwardMethod { } ForwardMethod; /* + * Structure used in private variable mappings. Describes the mapping of a + * single variable from the user's local name to the system's storage name. + * [TIP #500] + */ + +typedef struct { + Tcl_Obj *variableObj; /* Name used within methods. This is the part + * that is properly under user control. */ + Tcl_Obj *fullNameObj; /* Name used at the instance namespace level. */ +} PrivateVariableMapping; + +/* * Helper definitions that declare a "list" array. The two varieties are * either optimized for simplicity (in the case that the whole array is * typically assigned at once) or efficiency (in the case that the array is @@ -142,6 +154,13 @@ typedef struct ForwardMethod { struct { int num, size; listType_t *list; } /* + * These types are needed in function arguments. + */ + +typedef LIST_STATIC(Tcl_Obj *) VariableNameList; +typedef LIST_STATIC(PrivateVariableMapping) PrivateVariableList; + +/* * Now, the definition of what an object actually is. */ @@ -186,7 +205,10 @@ typedef struct Object { Tcl_ObjectMapMethodNameProc *mapMethodNameProc; /* Function to allow remapping of method * names. For itcl-ng. */ - LIST_STATIC(Tcl_Obj *) variables; + VariableNameList variables; + PrivateVariableList privateVariables; + /* Configurations for the variable resolver + * used inside methods. */ } Object; #define OBJECT_DELETED 1 /* Flag to say that an object has been @@ -268,7 +290,10 @@ typedef struct Class { * object doesn't override with its own mixins * (and filters and method implementations for * when getting method chains). */ - LIST_STATIC(Tcl_Obj *) variables; + VariableNameList variables; + PrivateVariableList privateVariables; + /* Configurations for the variable resolver + * used inside methods. */ } Class; /* @@ -374,6 +399,10 @@ typedef struct CallContext { #define OO_UNKNOWN_METHOD 0x04 /* This is an unknown method. */ #define CONSTRUCTOR 0x08 /* This is a constructor. */ #define DESTRUCTOR 0x10 /* This is a destructor. */ +#define TRUE_PRIVATE_METHOD 0x20 + /* This is a private method only accessible + * from other methods defined on this class + * or instance. [TIP #500] */ /* * Structure containing definition information about basic class methods. @@ -564,10 +593,21 @@ MODULE_SCOPE void TclOOSetupVariableResolver(Tcl_Namespace *nsPtr); } else if (var = (ary).list[i], 1) /* + * A variation where the array is an array of structs. There's no issue with + * possible NULLs; every element of the array will be iterated over and the + * varable set to a pointer to each of those elements in turn. + * REQUIRES DECLARATION: int i; + */ + +#define FOREACH_STRUCT(var,ary) \ + for(i=0 ; var=&((ary).list[i]), i<(ary).num; i++) + +/* * Convenience macros for iterating through hash tables. FOREACH_HASH_DECLS * sets up the declarations needed for the main macro, FOREACH_HASH, which * does the actual iteration. FOREACH_HASH_VALUE is a restricted version that * only iterates over values. + * REQUIRES DECLARATION: FOREACH_HASH_DECLS; */ #define FOREACH_HASH_DECLS \ diff --git a/generic/tclOOMethod.c b/generic/tclOOMethod.c index e8fad82..30100b1 100644 --- a/generic/tclOOMethod.c +++ b/generic/tclOOMethod.c @@ -928,7 +928,7 @@ PushMethodCallFrame( * variables used in methods. The compiled variable resolver is more * important, but both are needed as it is possible to have a variable * that is only referred to in ways that aren't compilable and we can't - * force LVT presence. [TIP #320] + * force LVT presence. [TIP #320, #500] * * ---------------------------------------------------------------------- */ @@ -986,6 +986,7 @@ ProcedureMethodCompiledVarConnect( CallFrame *framePtr = iPtr->varFramePtr; CallContext *contextPtr; Tcl_Obj *variableObj; + PrivateVariableMapping *privateVar; Tcl_HashEntry *hPtr; int i, isNew, cacheIt, varLen, len; const char *match, *varName; @@ -1019,6 +1020,15 @@ ProcedureMethodCompiledVarConnect( varName = TclGetStringFromObj(infoPtr->variableObj, &varLen); if (contextPtr->callPtr->chain[contextPtr->index] .mPtr->declaringClassPtr != NULL) { + FOREACH_STRUCT(privateVar, contextPtr->callPtr->chain[contextPtr->index] + .mPtr->declaringClassPtr->privateVariables) { + match = TclGetStringFromObj(privateVar->variableObj, &len); + if ((len == varLen) && !memcmp(match, varName, len)) { + variableObj = privateVar->fullNameObj; + cacheIt = 0; + goto gotMatch; + } + } FOREACH(variableObj, contextPtr->callPtr->chain[contextPtr->index] .mPtr->declaringClassPtr->variables) { match = TclGetStringFromObj(variableObj, &len); @@ -1028,6 +1038,14 @@ ProcedureMethodCompiledVarConnect( } } } else { + FOREACH_STRUCT(privateVar, contextPtr->oPtr->privateVariables) { + match = TclGetStringFromObj(privateVar->variableObj, &len); + if ((len == varLen) && !memcmp(match, varName, len)) { + variableObj = privateVar->fullNameObj; + cacheIt = 1; + goto gotMatch; + } + } FOREACH(variableObj, contextPtr->oPtr->variables) { match = TclGetStringFromObj(variableObj, &len); if ((len == varLen) && !memcmp(match, varName, len)) { -- cgit v0.12 From 5a8d06b0762d730fdbb4d5b792a737c5f50540c5 Mon Sep 17 00:00:00 2001 From: dkf Date: Thu, 5 Apr 2018 07:26:27 +0000 Subject: Start of private method dispatch machinery. --- generic/tclOO.c | 19 +++++++++++++++++++ generic/tclOOCall.c | 41 +++++++++++++++++++++++++++++++---------- generic/tclOOInt.h | 12 +++++++++++- generic/tclOOMethod.c | 6 ++++-- 4 files changed, 65 insertions(+), 13 deletions(-) diff --git a/generic/tclOO.c b/generic/tclOO.c index 5c41067..db9f399 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -2546,6 +2546,7 @@ TclOOObjectCmdCore( { CallContext *contextPtr; Tcl_Obj *methodNamePtr; + CallFrame *framePtr = ((Interp *) interp)->varFramePtr; int result; /* @@ -2560,6 +2561,24 @@ TclOOObjectCmdCore( } /* + * Determine if we're in a context that can see the extra, private methods + * in this class. + */ + + if (framePtr->isProcCallFrame & FRAME_IS_METHOD) { + CallContext *callerContextPtr = framePtr->clientData; + Method *callerMethodPtr = + callerContextPtr->callPtr->chain[callerContextPtr->index].mPtr; + + if (callerMethodPtr->declaringObjectPtr == oPtr) { + flags |= OBJECT_PRIVATE_METHOD; + } + if (callerMethodPtr->declaringClassPtr == oPtr->selfCls) { + flags |= CLASS_PRIVATE_METHOD; + } + } + + /* * Give plugged in code a chance to remap the method name. */ diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index 7da9da0..aa30808 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -717,14 +717,26 @@ AddSimpleChainToCallContext( * object or this isn't a filter. */ { int i; + Tcl_HashEntry *hPtr; + Method *mPtr; - if (!(flags & (KNOWN_STATE | SPECIAL)) && oPtr->methodsPtr) { - Tcl_HashEntry *hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, - (char *) methodNameObj); + if (flags & OBJECT_PRIVATE_METHOD && oPtr->methodsPtr) { + hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodNameObj); if (hPtr != NULL) { - Method *mPtr = Tcl_GetHashValue(hPtr); + mPtr = Tcl_GetHashValue(hPtr); + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, + flags); + } + } + flags &= ~OBJECT_PRIVATE_METHOD; + flags |= DEFINITE_PROTECTED; + } else if (!(flags & (KNOWN_STATE | SPECIAL)) && oPtr->methodsPtr) { + hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodNameObj); + if (hPtr != NULL) { + mPtr = Tcl_GetHashValue(hPtr); if (flags & PUBLIC_METHOD) { if (!(mPtr->flags & PUBLIC_METHOD)) { return; @@ -737,7 +749,6 @@ AddSimpleChainToCallContext( } } if (!(flags & SPECIAL)) { - Tcl_HashEntry *hPtr; Class *mixinPtr; FOREACH(mixinPtr, oPtr->mixins) { @@ -747,8 +758,11 @@ AddSimpleChainToCallContext( if (oPtr->methodsPtr) { hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char*) methodNameObj); if (hPtr != NULL) { - AddMethodToCallChain(Tcl_GetHashValue(hPtr), cbPtr, - doneFilters, filterDecl, flags); + mPtr = Tcl_GetHashValue(hPtr); + if (!(mPtr->flags & TRUE_PRIVATE_METHOD)) { + AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, + flags); + } } } } @@ -1433,9 +1447,11 @@ AddSimpleClassChainToCallContext( * NULL, either the filter was declared by the * object or this isn't a filter. */ { - int i; + int i, private = (flags & CLASS_PRIVATE_METHOD); Class *superPtr; + flags &= ~CLASS_PRIVATE_METHOD; + /* * We hard-code the tail-recursive form. It's by far the most common case * *and* it is much more gentle on the stack. @@ -1464,7 +1480,9 @@ AddSimpleClassChainToCallContext( if (hPtr != NULL) { register Method *mPtr = Tcl_GetHashValue(hPtr); - if (!(flags & KNOWN_STATE)) { + if (private && mPtr->flags & TRUE_PRIVATE_METHOD) { + flags |= DEFINITE_PROTECTED; + } else if (!(flags & KNOWN_STATE)) { if (flags & PUBLIC_METHOD) { if (mPtr->flags & PUBLIC_METHOD) { flags |= DEFINITE_PUBLIC; @@ -1475,7 +1493,10 @@ AddSimpleClassChainToCallContext( flags |= DEFINITE_PROTECTED; } } - AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, flags); + if (private || !(mPtr->flags & TRUE_PRIVATE_METHOD)) { + AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, + flags); + } } } diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index 10c25ee..55847ca 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -395,7 +395,7 @@ typedef struct CallContext { #define PUBLIC_METHOD 0x01 /* This is a public (exported) method. */ #define PRIVATE_METHOD 0x02 /* This is a private (class's direct instances - * only) method. */ + * only) method. Supports itcl. */ #define OO_UNKNOWN_METHOD 0x04 /* This is an unknown method. */ #define CONSTRUCTOR 0x08 /* This is a constructor. */ #define DESTRUCTOR 0x10 /* This is a destructor. */ @@ -403,6 +403,16 @@ typedef struct CallContext { /* This is a private method only accessible * from other methods defined on this class * or instance. [TIP #500] */ +#define OBJECT_PRIVATE_METHOD 0x40 + /* This is a call of a method on an object + * that may include TRUE_PRIVATE_METHOD + * instance method implementations in its call + * chain. */ +#define CLASS_PRIVATE_METHOD 0x80 + /* This is a call of a method on an object + * that may include TRUE_PRIVATE_METHOD class + * method implementations in its call + * chain. */ /* * Structure containing definition information about basic class methods. diff --git a/generic/tclOOMethod.c b/generic/tclOOMethod.c index 30100b1..82204f1 100644 --- a/generic/tclOOMethod.c +++ b/generic/tclOOMethod.c @@ -186,7 +186,8 @@ Tcl_NewInstanceMethod( mPtr->declaringObjectPtr = oPtr; mPtr->declaringClassPtr = NULL; if (flags) { - mPtr->flags |= flags & (PUBLIC_METHOD | PRIVATE_METHOD); + mPtr->flags |= flags & + (PUBLIC_METHOD | PRIVATE_METHOD | TRUE_PRIVATE_METHOD); } oPtr->epoch++; return (Tcl_Method) mPtr; @@ -250,7 +251,8 @@ Tcl_NewMethod( mPtr->declaringObjectPtr = NULL; mPtr->declaringClassPtr = clsPtr; if (flags) { - mPtr->flags |= flags & (PUBLIC_METHOD | PRIVATE_METHOD); + mPtr->flags |= flags & + (PUBLIC_METHOD | PRIVATE_METHOD | TRUE_PRIVATE_METHOD); } return (Tcl_Method) mPtr; -- cgit v0.12 From 8262e514d0b65f088e0799e9cea671f7efd1fa25 Mon Sep 17 00:00:00 2001 From: dkf Date: Thu, 12 Apr 2018 23:54:58 +0000 Subject: Added introspectors mentioned in TIP. --- generic/tclOOInfo.c | 154 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 135 insertions(+), 19 deletions(-) diff --git a/generic/tclOOInfo.c b/generic/tclOOInfo.c index 76eaef5..05e600f 100644 --- a/generic/tclOOInfo.c +++ b/generic/tclOOInfo.c @@ -22,6 +22,7 @@ static Tcl_ObjCmdProc InfoObjectClassCmd; static Tcl_ObjCmdProc InfoObjectDefnCmd; static Tcl_ObjCmdProc InfoObjectFiltersCmd; static Tcl_ObjCmdProc InfoObjectForwardCmd; +static Tcl_ObjCmdProc InfoObjectIdCmd; static Tcl_ObjCmdProc InfoObjectIsACmd; static Tcl_ObjCmdProc InfoObjectMethodsCmd; static Tcl_ObjCmdProc InfoObjectMethodTypeCmd; @@ -50,6 +51,7 @@ static Tcl_ObjCmdProc InfoClassVariablesCmd; static const EnsembleImplMap infoObjectCmds[] = { {"call", InfoObjectCallCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"class", InfoObjectClassCmd, TclCompileInfoObjectClassCmd, NULL, NULL, 0}, + {"creationid", InfoObjectIdCmd, TclCompileBasic0ArgCmd, NULL, NULL, 0}, {"definition", InfoObjectDefnCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"filters", InfoObjectFiltersCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"forward", InfoObjectForwardCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, @@ -58,7 +60,7 @@ static const EnsembleImplMap infoObjectCmds[] = { {"methodtype", InfoObjectMethodTypeCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"mixins", InfoObjectMixinsCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"namespace", InfoObjectNsCmd, TclCompileInfoObjectNamespaceCmd, NULL, NULL, 0}, - {"variables", InfoObjectVariablesCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, + {"variables", InfoObjectVariablesCmd, TclCompileBasic1Or2ArgCmd, NULL, NULL, 0}, {"vars", InfoObjectVarsCmd, TclCompileBasic1Or2ArgCmd, NULL, NULL, 0}, {NULL, NULL, NULL, NULL, NULL, 0} }; @@ -80,7 +82,7 @@ static const EnsembleImplMap infoClassCmds[] = { {"mixins", InfoClassMixinsCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"subclasses", InfoClassSubsCmd, TclCompileBasic1Or2ArgCmd, NULL, NULL, 0}, {"superclasses", InfoClassSupersCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, - {"variables", InfoClassVariablesCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, + {"variables", InfoClassVariablesCmd, TclCompileBasic1Or2ArgCmd, NULL, NULL, 0}, {NULL, NULL, NULL, NULL, NULL, 0} }; @@ -517,15 +519,21 @@ InfoObjectMethodsCmd( Tcl_Obj *const objv[]) { Object *oPtr; - int flag = PUBLIC_METHOD, recurse = 0; + int flag = PUBLIC_METHOD, recurse = 0, scope = -1; FOREACH_HASH_DECLS; Tcl_Obj *namePtr, *resultObj; Method *mPtr; static const char *const options[] = { - "-all", "-localprivate", "-private", NULL + "-all", "-localprivate", "-private", "-scope", NULL }; enum Options { - OPT_ALL, OPT_LOCALPRIVATE, OPT_PRIVATE + OPT_ALL, OPT_LOCALPRIVATE, OPT_PRIVATE, OPT_SCOPE + }; + static const char *const scopes[] = { + "private", "public", "unexported" + }; + enum Scopes { + SCOPE_PRIVATE, SCOPE_PUBLIC, SCOPE_UNEXPORTED }; if (objc < 2) { @@ -554,9 +562,36 @@ InfoObjectMethodsCmd( case OPT_PRIVATE: flag = 0; break; + case OPT_SCOPE: + if (++i >= objc) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "missing option for -scope")); + Tcl_SetErrorCode(interp, "TCL", "ARGUMENT", "MISSING", + NULL); + return TCL_ERROR; + } + if (Tcl_GetIndexFromObj(interp, objv[i], scopes, "scope", 0, + &scope) != TCL_OK) { + return TCL_ERROR; + } + break; } } } + if (scope != -1) { + recurse = 0; + switch (scope) { + case SCOPE_PRIVATE: + flag = TRUE_PRIVATE_METHOD; + break; + case SCOPE_PUBLIC: + flag = PUBLIC_METHOD; + break; + case SCOPE_UNEXPORTED: + flag = 0; + break; + } + } resultObj = Tcl_NewObj(); if (recurse) { @@ -684,6 +719,38 @@ InfoObjectMixinsCmd( /* * ---------------------------------------------------------------------- * + * InfoObjectIdCmd -- + * + * Implements [info object creationid $objName] + * + * ---------------------------------------------------------------------- + */ + +static int +InfoObjectIdCmd( + ClientData clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *const objv[]) +{ + Object *oPtr; + + if (objc != 2) { + Tcl_WrongNumArgs(interp, 1, objv, "objName"); + return TCL_ERROR; + } + oPtr = (Object *) Tcl_GetObjectFromObj(interp, objv[1]); + if (oPtr == NULL) { + return TCL_ERROR; + } + + Tcl_SetObjResult(interp, Tcl_NewIntObj(oPtr->creationEpoch)); + return TCL_OK; +} + +/* + * ---------------------------------------------------------------------- + * * InfoObjectNsCmd -- * * Implements [info object namespace $objName] @@ -719,7 +786,7 @@ InfoObjectNsCmd( * * InfoObjectVariablesCmd -- * - * Implements [info object variables $objName] + * Implements [info object variables $objName ?-private?] * * ---------------------------------------------------------------------- */ @@ -735,8 +802,8 @@ InfoObjectVariablesCmd( Tcl_Obj *variableObj, *resultObj; int i; - if (objc != 2) { - Tcl_WrongNumArgs(interp, 1, objv, "objName"); + if (objc != 2 && objc != 3) { + Tcl_WrongNumArgs(interp, 1, objv, "objName ?-private?"); return TCL_ERROR; } oPtr = (Object *) Tcl_GetObjectFromObj(interp, objv[1]); @@ -1128,7 +1195,7 @@ InfoClassInstancesCmd( * * InfoClassMethodsCmd -- * - * Implements [info class methods $clsName ?-private?] + * Implements [info class methods $clsName ?options...?] * * ---------------------------------------------------------------------- */ @@ -1140,15 +1207,21 @@ InfoClassMethodsCmd( int objc, Tcl_Obj *const objv[]) { - int flag = PUBLIC_METHOD, recurse = 0; + int flag = PUBLIC_METHOD, recurse = 0, scope = -1; Tcl_Obj *namePtr, *resultObj; Method *mPtr; Class *clsPtr; static const char *const options[] = { - "-all", "-localprivate", "-private", NULL + "-all", "-localprivate", "-private", "-scope", NULL }; enum Options { - OPT_ALL, OPT_LOCALPRIVATE, OPT_PRIVATE + OPT_ALL, OPT_LOCALPRIVATE, OPT_PRIVATE, OPT_SCOPE + }; + static const char *const scopes[] = { + "private", "public", "unexported" + }; + enum Scopes { + SCOPE_PRIVATE, SCOPE_PUBLIC, SCOPE_UNEXPORTED }; if (objc < 2) { @@ -1177,9 +1250,36 @@ InfoClassMethodsCmd( case OPT_PRIVATE: flag = 0; break; + case OPT_SCOPE: + if (++i >= objc) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "missing option for -scope")); + Tcl_SetErrorCode(interp, "TCL", "ARGUMENT", "MISSING", + NULL); + return TCL_ERROR; + } + if (Tcl_GetIndexFromObj(interp, objv[i], scopes, "scope", 0, + &scope) != TCL_OK) { + return TCL_ERROR; + } + break; } } } + if (scope != -1) { + recurse = 0; + switch (scope) { + case SCOPE_PRIVATE: + flag = TRUE_PRIVATE_METHOD; + break; + case SCOPE_PUBLIC: + flag = PUBLIC_METHOD; + break; + case SCOPE_UNEXPORTED: + flag = 0; + break; + } + } resultObj = Tcl_NewObj(); if (recurse) { @@ -1399,7 +1499,7 @@ InfoClassSupersCmd( * * InfoClassVariablesCmd -- * - * Implements [info class variables $clsName] + * Implements [info class variables $clsName ?-private?] * * ---------------------------------------------------------------------- */ @@ -1412,21 +1512,37 @@ InfoClassVariablesCmd( Tcl_Obj *const objv[]) { Class *clsPtr; - Tcl_Obj *variableObj, *resultObj; - int i; + Tcl_Obj *resultObj; + int i, private = 0; - if (objc != 2) { - Tcl_WrongNumArgs(interp, 1, objv, "className"); + if (objc != 2 && objc != 3) { + Tcl_WrongNumArgs(interp, 1, objv, "className ?-private?"); return TCL_ERROR; } + if (objc == 3) { + if (strcmp("-private", Tcl_GetString(objv[2])) != 0) { + return TCL_ERROR; + } + private = 1; + } clsPtr = GetClassFromObj(interp, objv[1]); if (clsPtr == NULL) { return TCL_ERROR; } resultObj = Tcl_NewObj(); - FOREACH(variableObj, clsPtr->variables) { - Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + if (private) { + PrivateVariableMapping *privatePtr; + + FOREACH_STRUCT(privatePtr, clsPtr->privateVariables) { + Tcl_ListObjAppendElement(NULL, resultObj, privatePtr->variableObj); + } + } else { + Tcl_Obj *variableObj; + + FOREACH(variableObj, clsPtr->variables) { + Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + } } Tcl_SetObjResult(interp, resultObj); return TCL_OK; -- cgit v0.12 From 49879791f48b7a18d94b3f8ea1281e9eed7b0e37 Mon Sep 17 00:00:00 2001 From: dkf Date: Fri, 13 Apr 2018 07:23:37 +0000 Subject: Duplicate the private variable config when cloning objects. --- generic/tclOO.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/generic/tclOO.c b/generic/tclOO.c index db9f399..1080967 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -1904,6 +1904,7 @@ Tcl_CopyObjectInstance( Class *mixinPtr; CallContext *contextPtr; Tcl_Obj *keyPtr, *filterObj, *variableObj, *args[3]; + PrivateVariableMapping *privateVariable; int i, result; /* @@ -1973,7 +1974,7 @@ Tcl_CopyObjectInstance( } /* - * Copy the object's variable resolution list to the new object. + * Copy the object's variable resolution lists to the new object. */ DUPLICATE(o2Ptr->variables, oPtr->variables, Tcl_Obj *); @@ -1981,6 +1982,13 @@ Tcl_CopyObjectInstance( Tcl_IncrRefCount(variableObj); } + DUPLICATE(o2Ptr->privateVariables, oPtr->privateVariables, + PrivateVariableMapping); + FOREACH_STRUCT(privateVariable, o2Ptr->privateVariables) { + Tcl_IncrRefCount(privateVariable->variableObj); + Tcl_IncrRefCount(privateVariable->fullNameObj); + } + /* * Copy the object's flags to the new object, clearing those that must be * kept object-local. The duplicate is never deleted at this point, nor is @@ -2069,7 +2077,7 @@ Tcl_CopyObjectInstance( } /* - * Copy the source class's variable resolution list. + * Copy the source class's variable resolution lists. */ DUPLICATE(cls2Ptr->variables, clsPtr->variables, Tcl_Obj *); @@ -2077,6 +2085,13 @@ Tcl_CopyObjectInstance( Tcl_IncrRefCount(variableObj); } + DUPLICATE(cls2Ptr->privateVariables, clsPtr->privateVariables, + PrivateVariableMapping); + FOREACH_STRUCT(privateVariable, cls2Ptr->privateVariables) { + Tcl_IncrRefCount(privateVariable->variableObj); + Tcl_IncrRefCount(privateVariable->fullNameObj); + } + /* * Duplicate the source class's mixins (which cannot be circular * references to the duplicate). -- cgit v0.12 From 637c7dbc7ef7c87a8528e00c422624be5b102bed Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 15 Apr 2018 10:29:48 +0000 Subject: Added tests for [info object creationid] --- generic/tclOOInfo.c | 2 +- tests/oo.test | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/generic/tclOOInfo.c b/generic/tclOOInfo.c index 05e600f..bdb67ae 100644 --- a/generic/tclOOInfo.c +++ b/generic/tclOOInfo.c @@ -51,7 +51,7 @@ static Tcl_ObjCmdProc InfoClassVariablesCmd; static const EnsembleImplMap infoObjectCmds[] = { {"call", InfoObjectCallCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"class", InfoObjectClassCmd, TclCompileInfoObjectClassCmd, NULL, NULL, 0}, - {"creationid", InfoObjectIdCmd, TclCompileBasic0ArgCmd, NULL, NULL, 0}, + {"creationid", InfoObjectIdCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"definition", InfoObjectDefnCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, {"filters", InfoObjectFiltersCmd, TclCompileBasic1ArgCmd, NULL, NULL, 0}, {"forward", InfoObjectForwardCmd, TclCompileBasic2ArgCmd, NULL, NULL, 0}, diff --git a/tests/oo.test b/tests/oo.test index 2d23a3c..f2bce76 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -2202,7 +2202,7 @@ test oo-16.2 {OO: object introspection} -body { } -returnCodes 1 -result {NOTANOBJECT does not refer to an object} test oo-16.3 {OO: object introspection} -body { info object gorp oo::object -} -returnCodes 1 -result {unknown or ambiguous subcommand "gorp": must be call, class, definition, filters, forward, isa, methods, methodtype, mixins, namespace, variables, or vars} +} -returnCodes 1 -result {unknown or ambiguous subcommand "gorp": must be call, class, creationid, definition, filters, forward, isa, methods, methodtype, mixins, namespace, variables, or vars} test oo-16.4 {OO: object introspection} -setup { oo::class create meta { superclass oo::class } [meta create instance1] create instance2 @@ -2332,6 +2332,73 @@ test oo-16.14 {OO: object introspection: TIP #436} -setup { } -cleanup { meta destroy } -result {class {0 0} meta {0 0 0} type {0 0 0 0 0 0} mix {0 0 0 0 0 0}} +test oo-16.15 {OO: object introspection: creationid #500} -setup { + oo::class create cls +} -body { + info object creationid [cls new] +} -cleanup { + cls destroy +} -result {^\d+$} -match regexp +test oo-16.16 {OO: object introspection: creationid #500} -setup { + oo::class create cls +} -body { + set obj [cls new] + set id [info object creationid $obj] + rename $obj gorp + set id2 [info object creationid gorp] + list $id $id2 +} -cleanup { + cls destroy +} -result {^(\d+) \1$} -match regexp +test oo-16.17 {OO: object introspection: creationid #500} -body { + info object creationid nosuchobject +} -returnCodes error -result {nosuchobject does not refer to an object} +test oo-16.18 {OO: object introspection: creationid #500} -body { + info object creationid +} -returnCodes error -result {wrong # args: should be "info object creationid objName"} +test oo-16.18 {OO: object introspection: creationid #500} -body { + info object creationid oo::object gorp +} -returnCodes error -result {wrong # args: should be "info object creationid objName"} +test oo-16.19 {OO: object introspection: creationid #500} -setup { + oo::class create cls +} -body { + set id1 [info object creationid [set o1 [cls new]]] + set id2 [info object creationid [set o2 [cls new]]] + if {$id1 == $id2} { + format "objects %s and %s have same creation id: %d" $o1 $o2 $id1 + } else { + string cat not-equal + } +} -cleanup { + cls destroy +} -result not-equal +test oo-16.20 {OO: object introspection: creationid #500} -setup { + oo::class create cls +} -body { + set id1 [info object creationid [set o1 [cls new]]] + $o1 destroy + set id2 [info object creationid [set o2 [cls new]]] + if {$id1 == $id2} { + format "objects %s and %s have same creation id: %d" $o1 $o2 $id1 + } else { + string cat not-equal + } +} -cleanup { + cls destroy +} -result not-equal +test oo-16.21 {OO: object introspection: creationid #500} -setup { + oo::class create cls +} -body { + set id1 [info object creationid [set o1 [cls new]]] + set id2 [info object creationid [set o2 [oo::copy $o1]]] + if {$id1 == $id2} { + format "objects %s and %s have same creation id: %d" $o1 $o2 $id1 + } else { + string cat not-equal + } +} -cleanup { + cls destroy +} -result not-equal test oo-17.1 {OO: class introspection} -body { info class -- cgit v0.12 From 28e500cbf94b82fc75c2a0a5007458fc6756504e Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 15 Apr 2018 14:47:26 +0000 Subject: Testing the private variables. --- generic/tclOOInfo.c | 24 +++++++++++++--- tests/oo.test | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 4 deletions(-) diff --git a/generic/tclOOInfo.c b/generic/tclOOInfo.c index bdb67ae..d189528 100644 --- a/generic/tclOOInfo.c +++ b/generic/tclOOInfo.c @@ -799,21 +799,37 @@ InfoObjectVariablesCmd( Tcl_Obj *const objv[]) { Object *oPtr; - Tcl_Obj *variableObj, *resultObj; - int i; + Tcl_Obj *resultObj; + int i, private = 0; if (objc != 2 && objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "objName ?-private?"); return TCL_ERROR; } + if (objc == 3) { + if (strcmp("-private", Tcl_GetString(objv[2])) != 0) { + return TCL_ERROR; + } + private = 1; + } oPtr = (Object *) Tcl_GetObjectFromObj(interp, objv[1]); if (oPtr == NULL) { return TCL_ERROR; } resultObj = Tcl_NewObj(); - FOREACH(variableObj, oPtr->variables) { - Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + if (private) { + PrivateVariableMapping *privatePtr; + + FOREACH_STRUCT(privatePtr, oPtr->privateVariables) { + Tcl_ListObjAppendElement(NULL, resultObj, privatePtr->variableObj); + } + } else { + Tcl_Obj *variableObj; + + FOREACH(variableObj, oPtr->variables) { + Tcl_ListObjAppendElement(NULL, resultObj, variableObj); + } } Tcl_SetObjResult(interp, resultObj); return TCL_OK; diff --git a/tests/oo.test b/tests/oo.test index f2bce76..fb29464 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4169,6 +4169,88 @@ test oo-36.10 {TIP #470: introspection within oo::define} -setup { Cls destroy catch {rename oo::objdefine::testself {}} } -result {{} {1 {this command may only be called from within the context of an ::oo::define or ::oo::objdefine command} 0 ::obj}} + +test oo-37.1 {TIP 500: private variables don't cross-interfere with each other or normal ones} -setup { + oo::class create parent +} -body { + oo::class create clsA { + superclass parent + private variable x + constructor {} { + set x 1 + } + method getA {} { + return $x + } + } + oo::class create clsB { + superclass clsA + private { + variable x + } + constructor {} { + set x 2 + next + } + method getB {} { + return $x + } + } + oo::class create clsC { + superclass clsB + variable x + constructor {} { + set x 3 + next + } + method getC {} { + return $x + } + } + clsC create obj + oo::objdefine obj { + private { + variable x + } + method setup {} { + set x 4 + } + method getO {} { + return $x + } + } + obj setup + list [obj getA] [obj getB] [obj getC] [obj getO] \ + [lsort [string map [list [info object creationid clsA] CLASS-A \ + [info object creationid clsB] CLASS-B \ + [info object creationid obj] OBJ] \ + [info object vars obj]]] +} -cleanup { + parent destroy +} -result {1 2 3 4 {{CLASS-A : x} {CLASS-B : x} {OBJ : x} x}} +test oo-37.2 {TIP 500: private variables introspection} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + private { + variable x1 + variable x2 + } + variable y1 y2 + } + cls create obj + oo::objdefine obj { + private variable a1 a2 + variable b1 b2 + } + list [lsort [info class variables cls]] \ + [lsort [info class variables cls -private]] \ + [lsort [info object variables obj]] \ + [lsort [info object variables obj -private]] +} -cleanup { + parent destroy +} -result {{y1 y2} {x1 x2} {b1 b2} {a1 a2}} cleanupTests return -- cgit v0.12 From ad02c0b532b8fd75ad05376bcc62f88318c83ca5 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 15 Apr 2018 15:11:38 +0000 Subject: Added basic tests of the 'private' definition command. --- tests/oo.test | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/tests/oo.test b/tests/oo.test index fb29464..491ac20 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4170,7 +4170,55 @@ test oo-36.10 {TIP #470: introspection within oo::define} -setup { catch {rename oo::objdefine::testself {}} } -result {{} {1 {this command may only be called from within the context of an ::oo::define or ::oo::objdefine command} 0 ::obj}} -test oo-37.1 {TIP 500: private variables don't cross-interfere with each other or normal ones} -setup { +test oo-37.1 {TIP 500: private command propagates errors} -setup { + oo::class create cls +} -body { + oo::define cls { + private ::error "this is an error" + } +} -cleanup { + cls destroy +} -returnCodes error -result {this is an error} +test oo-37.2 {TIP 500: private command propagates errors} -setup { + oo::class create cls +} -body { + oo::define cls { + private { + ::error "this is an error" + } + } +} -cleanup { + cls destroy +} -returnCodes error -result {this is an error} +test oo-37.3 {TIP 500: private command propagates errors} -setup { + oo::object create obj +} -body { + oo::objdefine obj { + private ::error "this is an error" + } +} -cleanup { + obj destroy +} -returnCodes error -result {this is an error} +test oo-37.4 {TIP 500: private command propagates errors} -setup { + oo::object create obj +} -body { + oo::objdefine obj { + private { + ::error "this is an error" + } + } +} -cleanup { + obj destroy +} -returnCodes error -result {this is an error} +test oo-37.5 {TIP 500: private command can't be used outside definitions} -body { + oo::define::private error "xyz" +} -returnCodes error -result {this command may only be called from within the context of an ::oo::define or ::oo::objdefine command} +test oo-37.6 {TIP 500: private command can't be used outside definitions} -body { + oo::objdefine::private error "xyz" +} -returnCodes error -result {this command may only be called from within the context of an ::oo::define or ::oo::objdefine command} + + +test oo-38.1 {TIP 500: private variables don't cross-interfere with each other or normal ones} -setup { oo::class create parent } -body { oo::class create clsA { @@ -4228,7 +4276,7 @@ test oo-37.1 {TIP 500: private variables don't cross-interfere with each other o } -cleanup { parent destroy } -result {1 2 3 4 {{CLASS-A : x} {CLASS-B : x} {OBJ : x} x}} -test oo-37.2 {TIP 500: private variables introspection} -setup { +test oo-38.2 {TIP 500: private variables introspection} -setup { oo::class create parent } -body { oo::class create cls { -- cgit v0.12 From f58e9ed8421d4020d88ac31edc1e1954fd7838c4 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 5 May 2018 17:23:17 +0000 Subject: Private methods seem to be working... --- generic/tclOO.c | 25 +++++---- generic/tclOOBasic.c | 3 +- generic/tclOOCall.c | 156 ++++++++++++++++++++++++++++++++++++++++----------- generic/tclOOInfo.c | 3 +- generic/tclOOInt.h | 11 +--- tests/oo.test | 110 +++++++++++++++++++++++++++++++++++- 6 files changed, 253 insertions(+), 55 deletions(-) diff --git a/generic/tclOO.c b/generic/tclOO.c index 1080967..6aa03fa 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -1174,7 +1174,7 @@ ObjectNamespaceDeleted( if (!Tcl_InterpDeleted(interp) && !(oPtr->flags & DESTRUCTOR_CALLED)) { CallContext *contextPtr = - TclOOGetCallContext(oPtr, NULL, DESTRUCTOR, NULL); + TclOOGetCallContext(oPtr, NULL, DESTRUCTOR, NULL, NULL, NULL); int result; Tcl_InterpState state; @@ -1651,7 +1651,7 @@ Tcl_NewObjectInstance( if (objc >= 0) { CallContext *contextPtr = - TclOOGetCallContext(oPtr, NULL, CONSTRUCTOR, NULL); + TclOOGetCallContext(oPtr, NULL, CONSTRUCTOR, NULL, NULL, NULL); if (contextPtr != NULL) { int isRoot, result; @@ -1724,7 +1724,7 @@ TclNRNewObjectInstance( *objectPtr = (Tcl_Object) oPtr; return TCL_OK; } - contextPtr = TclOOGetCallContext(oPtr, NULL, CONSTRUCTOR, NULL); + contextPtr = TclOOGetCallContext(oPtr, NULL, CONSTRUCTOR, NULL, NULL, NULL); if (contextPtr == NULL) { *objectPtr = (Tcl_Object) oPtr; return TCL_OK; @@ -2164,7 +2164,8 @@ Tcl_CopyObjectInstance( } TclResetRewriteEnsemble(interp, 1); - contextPtr = TclOOGetCallContext(o2Ptr, oPtr->fPtr->clonedName, 0, NULL); + contextPtr = TclOOGetCallContext(o2Ptr, oPtr->fPtr->clonedName, 0, NULL, + NULL, NULL); if (contextPtr) { args[0] = TclOOObjectName(interp, o2Ptr); args[1] = oPtr->fPtr->clonedName; @@ -2562,6 +2563,8 @@ TclOOObjectCmdCore( CallContext *contextPtr; Tcl_Obj *methodNamePtr; CallFrame *framePtr = ((Interp *) interp)->varFramePtr; + Object *callerObjPtr = NULL; + Class *callerClsPtr = NULL; int result; /* @@ -2585,11 +2588,11 @@ TclOOObjectCmdCore( Method *callerMethodPtr = callerContextPtr->callPtr->chain[callerContextPtr->index].mPtr; - if (callerMethodPtr->declaringObjectPtr == oPtr) { - flags |= OBJECT_PRIVATE_METHOD; + if (callerMethodPtr->declaringObjectPtr) { + callerObjPtr = callerMethodPtr->declaringObjectPtr; } - if (callerMethodPtr->declaringClassPtr == oPtr->selfCls) { - flags |= CLASS_PRIVATE_METHOD; + if (callerMethodPtr->declaringClassPtr) { + callerClsPtr = callerMethodPtr->declaringClassPtr; } } @@ -2620,7 +2623,8 @@ TclOOObjectCmdCore( Tcl_IncrRefCount(mappedMethodName); contextPtr = TclOOGetCallContext(oPtr, mappedMethodName, - flags | (oPtr->flags & FILTER_HANDLING), methodNamePtr); + flags | (oPtr->flags & FILTER_HANDLING), callerObjPtr, + callerClsPtr, methodNamePtr); TclDecrRefCount(mappedMethodName); if (contextPtr == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( @@ -2637,7 +2641,8 @@ TclOOObjectCmdCore( noMapping: contextPtr = TclOOGetCallContext(oPtr, methodNamePtr, - flags | (oPtr->flags & FILTER_HANDLING), NULL); + flags | (oPtr->flags & FILTER_HANDLING), callerObjPtr, + callerClsPtr, NULL); if (contextPtr == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "impossible to invoke method \"%s\": no defined method or" diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index d874cba..dc49356 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -347,7 +347,8 @@ TclOO_Object_Destroy( } if (!(oPtr->flags & DESTRUCTOR_CALLED)) { oPtr->flags |= DESTRUCTOR_CALLED; - contextPtr = TclOOGetCallContext(oPtr, NULL, DESTRUCTOR, NULL); + contextPtr = TclOOGetCallContext(oPtr, NULL, DESTRUCTOR, NULL, NULL, + NULL); if (contextPtr != NULL) { contextPtr->callPtr->flags |= DESTRUCTOR; contextPtr->skip = 0; diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index aa30808..55f7e5b 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -60,6 +60,13 @@ static inline void AddMethodToCallChain(Method *const mPtr, Tcl_HashTable *const doneFilters, Class *const filterDecl, int flags); static inline void AddSimpleChainToCallContext(Object *const oPtr, + Object *const contextObj, Class *const contextCls, + Tcl_Obj *const methodNameObj, + struct ChainBuilder *const cbPtr, + Tcl_HashTable *const doneFilters, int flags, + Class *const filterDecl); +static void AddPrivatesFromClassChainToCallContext(Class *classPtr, + Class *const contextCls, Tcl_Obj *const methodNameObj, struct ChainBuilder *const cbPtr, Tcl_HashTable *const doneFilters, int flags, @@ -703,6 +710,12 @@ AddClassMethodNames( static inline void AddSimpleChainToCallContext( Object *const oPtr, /* Object to add call chain entries for. */ + Object *const contextObj, /* Context object; when equal to oPtr, it + * means that private methods may also be + * added. [TIP 500] */ + Class *const contextCls, /* Context class; the currently considered + * class is equal to this, private methods may + * also be added. [TIP 500] */ Tcl_Obj *const methodNameObj, /* Name of method to add the call chain * entries for. */ @@ -720,7 +733,7 @@ AddSimpleChainToCallContext( Tcl_HashEntry *hPtr; Method *mPtr; - if (flags & OBJECT_PRIVATE_METHOD && oPtr->methodsPtr) { + if ((oPtr == contextObj) && oPtr->methodsPtr) { hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodNameObj); if (hPtr != NULL) { @@ -730,7 +743,6 @@ AddSimpleChainToCallContext( flags); } } - flags &= ~OBJECT_PRIVATE_METHOD; flags |= DEFINITE_PROTECTED; } else if (!(flags & (KNOWN_STATE | SPECIAL)) && oPtr->methodsPtr) { hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodNameObj); @@ -752,6 +764,11 @@ AddSimpleChainToCallContext( Class *mixinPtr; FOREACH(mixinPtr, oPtr->mixins) { + if (contextCls) { + AddPrivatesFromClassChainToCallContext(mixinPtr, contextCls, + methodNameObj, cbPtr, doneFilters, + flags|TRAVERSED_MIXIN, filterDecl); + } AddSimpleClassChainToCallContext(mixinPtr, methodNameObj, cbPtr, doneFilters, flags|TRAVERSED_MIXIN, filterDecl); } @@ -766,6 +783,10 @@ AddSimpleChainToCallContext( } } } + if (contextCls) { + AddPrivatesFromClassChainToCallContext(oPtr->selfCls, contextCls, + methodNameObj, cbPtr, doneFilters, flags, filterDecl); + } AddSimpleClassChainToCallContext(oPtr->selfCls, methodNameObj, cbPtr, doneFilters, flags, filterDecl); } @@ -971,6 +992,12 @@ TclOOGetCallContext( * Only the bits PUBLIC_METHOD, CONSTRUCTOR, * PRIVATE_METHOD, DESTRUCTOR and * FILTER_HANDLING are useful. */ + Object *contextObj, /* Context object; when equal to oPtr, it + * means that private methods may also be + * added. [TIP 500] */ + Class *contextCls, /* Context class; the currently considered + * class is equal to this, private methods may + * also be added. [TIP 500] */ Tcl_Obj *cacheInThisObj) /* What object to cache in, or NULL if it is * to be in the same object as the * methodNameObj. */ @@ -1070,10 +1097,11 @@ TclOOGetCallContext( */ if (flags & FORCE_UNKNOWN) { - AddSimpleChainToCallContext(oPtr, oPtr->fPtr->unknownMethodNameObj, - &cb, NULL, BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, oPtr->fPtr->unknownMethodNameObj, - &cb, NULL, 0, NULL); + AddSimpleChainToCallContext(oPtr, NULL, NULL, + oPtr->fPtr->unknownMethodNameObj, &cb, NULL, BUILDING_MIXINS, + NULL); + AddSimpleChainToCallContext(oPtr, NULL, NULL, + oPtr->fPtr->unknownMethodNameObj, &cb, NULL, 0, NULL); callPtr->flags |= OO_UNKNOWN_METHOD; callPtr->epoch = -1; if (callPtr->numChain == 0) { @@ -1102,10 +1130,10 @@ TclOOGetCallContext( OBJECT_MIXIN); } FOREACH(filterObj, oPtr->filters) { - AddSimpleChainToCallContext(oPtr, filterObj, &cb, &doneFilters, - BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, filterObj, &cb, &doneFilters, 0, - NULL); + AddSimpleChainToCallContext(oPtr, contextObj, contextCls, + filterObj, &cb, &doneFilters, BUILDING_MIXINS, NULL); + AddSimpleChainToCallContext(oPtr, contextObj, contextCls, + filterObj, &cb, &doneFilters, 0, NULL); } AddClassFiltersToCallContext(oPtr, oPtr->selfCls, &cb, &doneFilters, BUILDING_MIXINS); @@ -1120,9 +1148,10 @@ TclOOGetCallContext( * handle class mixins right. */ - AddSimpleChainToCallContext(oPtr, methodNameObj, &cb, NULL, - flags|BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, methodNameObj, &cb, NULL, flags, NULL); + AddSimpleChainToCallContext(oPtr, contextObj, contextCls, methodNameObj, + &cb, NULL, flags|BUILDING_MIXINS, NULL); + AddSimpleChainToCallContext(oPtr, contextObj, contextCls, methodNameObj, + &cb, NULL, flags, NULL); /* * Check to see if the method has no implementation. If so, we probably @@ -1140,10 +1169,11 @@ TclOOGetCallContext( TclOODeleteChain(callPtr); return NULL; } - AddSimpleChainToCallContext(oPtr, oPtr->fPtr->unknownMethodNameObj, - &cb, NULL, BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, oPtr->fPtr->unknownMethodNameObj, - &cb, NULL, 0, NULL); + AddSimpleChainToCallContext(oPtr, NULL, NULL, + oPtr->fPtr->unknownMethodNameObj, &cb, NULL, BUILDING_MIXINS, + NULL); + AddSimpleChainToCallContext(oPtr, NULL, NULL, + oPtr->fPtr->unknownMethodNameObj, &cb, NULL, 0, NULL); callPtr->flags |= OO_UNKNOWN_METHOD; callPtr->epoch = -1; if (count == callPtr->numChain) { @@ -1301,9 +1331,10 @@ TclOOGetStereotypeCallChain( * Add the actual method implementations. */ - AddSimpleChainToCallContext(&obj, methodNameObj, &cb, NULL, + AddSimpleChainToCallContext(&obj, NULL, NULL, methodNameObj, &cb, NULL, flags|BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(&obj, methodNameObj, &cb, NULL, flags, NULL); + AddSimpleChainToCallContext(&obj, NULL, NULL, methodNameObj, &cb, NULL, + flags, NULL); /* * Check to see if the method has no implementation. If so, we probably @@ -1312,10 +1343,10 @@ TclOOGetStereotypeCallChain( */ if (count == callPtr->numChain) { - AddSimpleChainToCallContext(&obj, fPtr->unknownMethodNameObj, &cb, - NULL, BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(&obj, fPtr->unknownMethodNameObj, &cb, - NULL, 0, NULL); + AddSimpleChainToCallContext(&obj, NULL, NULL, + fPtr->unknownMethodNameObj, &cb, NULL, BUILDING_MIXINS, NULL); + AddSimpleChainToCallContext(&obj, NULL, NULL, + fPtr->unknownMethodNameObj, &cb, NULL, 0, NULL); callPtr->flags |= OO_UNKNOWN_METHOD; callPtr->epoch = -1; if (count == callPtr->numChain) { @@ -1395,9 +1426,9 @@ AddClassFiltersToCallContext( (void) Tcl_CreateHashEntry(doneFilters, (char *) filterObj, &isNew); if (isNew) { - AddSimpleChainToCallContext(oPtr, filterObj, cbPtr, + AddSimpleChainToCallContext(oPtr, NULL, NULL, filterObj, cbPtr, doneFilters, clearedFlags|BUILDING_MIXINS, clsPtr); - AddSimpleChainToCallContext(oPtr, filterObj, cbPtr, + AddSimpleChainToCallContext(oPtr, NULL, NULL, filterObj, cbPtr, doneFilters, clearedFlags, clsPtr); } } @@ -1432,8 +1463,11 @@ AddClassFiltersToCallContext( */ static void -AddSimpleClassChainToCallContext( +AddPrivatesFromClassChainToCallContext( Class *classPtr, /* Class to add the call chain entries for. */ + Class *const contextCls, /* Context class; the currently considered + * class is equal to this, private methods may + * also be added. [TIP 500] */ Tcl_Obj *const methodNameObj, /* Name of method to add the call chain * entries for. */ @@ -1447,10 +1481,70 @@ AddSimpleClassChainToCallContext( * NULL, either the filter was declared by the * object or this isn't a filter. */ { - int i, private = (flags & CLASS_PRIVATE_METHOD); + int i; Class *superPtr; - flags &= ~CLASS_PRIVATE_METHOD; + /* + * We hard-code the tail-recursive form. It's by far the most common case + * *and* it is much more gentle on the stack. + * + * Note that mixins must be processed before the main class hierarchy. + * [Bug 1998221] + */ + + tailRecurse: + FOREACH(superPtr, classPtr->mixins) { + AddPrivatesFromClassChainToCallContext(superPtr, contextCls, + methodNameObj, cbPtr, doneFilters, flags|TRAVERSED_MIXIN, + filterDecl); + } + + if (classPtr == contextCls) { + Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&classPtr->classMethods, + (char *) methodNameObj); + + if (hPtr != NULL) { + register Method *mPtr = Tcl_GetHashValue(hPtr); + + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, + flags); + } + } + } + + switch (classPtr->superclasses.num) { + case 1: + classPtr = classPtr->superclasses.list[0]; + goto tailRecurse; + default: + FOREACH(superPtr, classPtr->superclasses) { + AddPrivatesFromClassChainToCallContext(superPtr, contextCls, + methodNameObj, cbPtr, doneFilters, flags, filterDecl); + } + case 0: + return; + } +} + +static void +AddSimpleClassChainToCallContext( + Class *classPtr, /* Class to add the call chain entries for. */ + Tcl_Obj *const methodNameObj, + /* Name of method to add the call chain + * entries for. */ + struct ChainBuilder *const cbPtr, + /* Where to add the call chain entries. */ + Tcl_HashTable *const doneFilters, + /* Where to record what call chain entries + * have been processed. */ + int flags, /* What sort of call chain are we building. */ + Class *const filterDecl) /* The class that declared the filter. If + * NULL, either the filter was declared by the + * object or this isn't a filter. */ +{ + int i; + Class *superPtr; /* * We hard-code the tail-recursive form. It's by far the most common case @@ -1480,9 +1574,7 @@ AddSimpleClassChainToCallContext( if (hPtr != NULL) { register Method *mPtr = Tcl_GetHashValue(hPtr); - if (private && mPtr->flags & TRUE_PRIVATE_METHOD) { - flags |= DEFINITE_PROTECTED; - } else if (!(flags & KNOWN_STATE)) { + if (!(flags & KNOWN_STATE)) { if (flags & PUBLIC_METHOD) { if (mPtr->flags & PUBLIC_METHOD) { flags |= DEFINITE_PUBLIC; @@ -1493,7 +1585,7 @@ AddSimpleClassChainToCallContext( flags |= DEFINITE_PROTECTED; } } - if (private || !(mPtr->flags & TRUE_PRIVATE_METHOD)) { + if (!(mPtr->flags & TRUE_PRIVATE_METHOD)) { AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, flags); } diff --git a/generic/tclOOInfo.c b/generic/tclOOInfo.c index d189528..30cf8af 100644 --- a/generic/tclOOInfo.c +++ b/generic/tclOOInfo.c @@ -1597,7 +1597,8 @@ InfoObjectCallCmd( * Get the call context and render its call chain. */ - contextPtr = TclOOGetCallContext(oPtr, objv[2], PUBLIC_METHOD, NULL); + contextPtr = TclOOGetCallContext(oPtr, objv[2], PUBLIC_METHOD, NULL, NULL, + NULL); if (contextPtr == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "cannot construct any call chain", -1)); diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index 55847ca..1937680 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -403,16 +403,6 @@ typedef struct CallContext { /* This is a private method only accessible * from other methods defined on this class * or instance. [TIP #500] */ -#define OBJECT_PRIVATE_METHOD 0x40 - /* This is a call of a method on an object - * that may include TRUE_PRIVATE_METHOD - * instance method implementations in its call - * chain. */ -#define CLASS_PRIVATE_METHOD 0x80 - /* This is a call of a method on an object - * that may include TRUE_PRIVATE_METHOD class - * method implementations in its call - * chain. */ /* * Structure containing definition information about basic class methods. @@ -546,6 +536,7 @@ MODULE_SCOPE void TclOODeleteContext(CallContext *contextPtr); MODULE_SCOPE void TclOODelMethodRef(Method *method); MODULE_SCOPE CallContext *TclOOGetCallContext(Object *oPtr, Tcl_Obj *methodNameObj, int flags, + Object *contextObjPtr, Class *contextClsPtr, Tcl_Obj *cacheInThisObj); MODULE_SCOPE CallChain *TclOOGetStereotypeCallChain(Class *clsPtr, Tcl_Obj *methodNameObj, int flags); diff --git a/tests/oo.test b/tests/oo.test index 491ac20..1075d0d 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4217,7 +4217,6 @@ test oo-37.6 {TIP 500: private command can't be used outside definitions} -body oo::objdefine::private error "xyz" } -returnCodes error -result {this command may only be called from within the context of an ::oo::define or ::oo::objdefine command} - test oo-38.1 {TIP 500: private variables don't cross-interfere with each other or normal ones} -setup { oo::class create parent } -body { @@ -4299,6 +4298,115 @@ test oo-38.2 {TIP 500: private variables introspection} -setup { } -cleanup { parent destroy } -result {{y1 y2} {x1 x2} {b1 b2} {a1 a2}} + +test oo-38.1 {TIP 500: private methods internal call} -setup { + oo::class create parent +} -body { + oo::class create clsA { + superclass parent + variable x + constructor {} { + set x 1 + } + method act {} { + my step + my step + my step + return + } + private { + method step {} { + incr x 2 + } + } + method x {} { + return $x + } + } + clsA create obj + obj act + list [obj x] [catch {obj step} msg] $msg +} -cleanup { + parent destroy +} -result {7 1 {unknown method "step": must be act, destroy or x}} +test oo-38.2 {TIP 500: private methods internal call} -setup { + oo::class create parent +} -body { + oo::class create clsA { + superclass parent + variable x + constructor {} { + set x 1 + } + method act {} { + my step + my step + my step + return + } + private { + method step {} { + incr x 2 + } + } + method x {} { + return $x + } + } + oo::class create clsB { + superclass clsA + variable x + method step {} { + incr x 5 + } + } + clsB create obj + obj act + list [obj x] [obj step] +} -cleanup { + parent destroy +} -result {7 12} +test oo-38.3 {TIP 500: private methods internal call} -setup { + oo::class create parent +} -body { + oo::class create clsA { + superclass parent + variable x + constructor {} { + set x 1 + } + method act {} { + my Step + my Step + my Step + return + } + method x {} { + return $x + } + } + oo::class create clsB { + superclass clsA + variable x + method Step {} { + incr x 5 + } + } + clsB create obj + obj act + set result [obj x] + oo::define clsA { + private { + method Step {} { + incr x 2 + } + } + } + obj act + lappend result [obj x] +} -cleanup { + parent destroy +} -result {16 22} cleanupTests return -- cgit v0.12 From 2a19591dc76f5811ee0ebacb3610cad0ff165aec Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 6 May 2018 07:13:30 +0000 Subject: Fix up instance privates. --- generic/tclOOCall.c | 183 +++++++++++++++++++++++++++++++++------------------- tests/oo.test | 44 +++++++++++++ 2 files changed, 160 insertions(+), 67 deletions(-) diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index 55f7e5b..becf7ff 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -59,13 +59,16 @@ static inline void AddMethodToCallChain(Method *const mPtr, struct ChainBuilder *const cbPtr, Tcl_HashTable *const doneFilters, Class *const filterDecl, int flags); -static inline void AddSimpleChainToCallContext(Object *const oPtr, - Object *const contextObj, Class *const contextCls, +static inline int AddInstancePrivateToCallContext(Object *const oPtr, + Tcl_Obj *const methodNameObj, + struct ChainBuilder *const cbPtr, int flags); +static inline int AddSimpleChainToCallContext(Object *const oPtr, + Class *const contextCls, Tcl_Obj *const methodNameObj, struct ChainBuilder *const cbPtr, Tcl_HashTable *const doneFilters, int flags, Class *const filterDecl); -static void AddPrivatesFromClassChainToCallContext(Class *classPtr, +static int AddPrivatesFromClassChainToCallContext(Class *classPtr, Class *const contextCls, Tcl_Obj *const methodNameObj, struct ChainBuilder *const cbPtr, @@ -697,22 +700,58 @@ AddClassMethodNames( /* * ---------------------------------------------------------------------- * + * AddInstancePrivateToCallContext -- + * + * Add private methods from the instance. Called when the calling Tcl + * context is a TclOO method declared by an object that is the same as + * the current object. Returns true iff a private method was actually + * found and added to the call chain (as this suppresses caching). + * + * ---------------------------------------------------------------------- + */ + +static inline int +AddInstancePrivateToCallContext( + Object *const oPtr, /* Object to add call chain entries for. */ + Tcl_Obj *const methodName, /* Name of method to add the call chain + * entries for. */ + struct ChainBuilder *const cbPtr, + /* Where to add the call chain entries. */ + int flags) /* What sort of call chain are we building. */ +{ + Tcl_HashEntry *hPtr; + Method *mPtr; + int donePrivate = 0; + + if (oPtr->methodsPtr) { + hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodName); + if (hPtr != NULL) { + mPtr = Tcl_GetHashValue(hPtr); + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + AddMethodToCallChain(mPtr, cbPtr, NULL, NULL, flags); + donePrivate = 1; + } + } + } + return donePrivate; +} + +/* + * ---------------------------------------------------------------------- + * * AddSimpleChainToCallContext -- * * The core of the call-chain construction engine, this handles calling a * particular method on a particular object. Note that filters and * unknown handling are already handled by the logic that uses this - * function. + * function. Returns true if a private method was one of those found. * * ---------------------------------------------------------------------- */ -static inline void +static inline int AddSimpleChainToCallContext( Object *const oPtr, /* Object to add call chain entries for. */ - Object *const contextObj, /* Context object; when equal to oPtr, it - * means that private methods may also be - * added. [TIP 500] */ Class *const contextCls, /* Context class; the currently considered * class is equal to this, private methods may * also be added. [TIP 500] */ @@ -729,34 +768,25 @@ AddSimpleChainToCallContext( * NULL, either the filter was declared by the * object or this isn't a filter. */ { - int i; + int i, foundPrivate = 0; Tcl_HashEntry *hPtr; Method *mPtr; - if ((oPtr == contextObj) && oPtr->methodsPtr) { - hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodNameObj); - - if (hPtr != NULL) { - mPtr = Tcl_GetHashValue(hPtr); - if (mPtr->flags & TRUE_PRIVATE_METHOD) { - AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, - flags); - } - } - flags |= DEFINITE_PROTECTED; - } else if (!(flags & (KNOWN_STATE | SPECIAL)) && oPtr->methodsPtr) { + if (!(flags & (KNOWN_STATE | SPECIAL)) && oPtr->methodsPtr) { hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodNameObj); if (hPtr != NULL) { mPtr = Tcl_GetHashValue(hPtr); - if (flags & PUBLIC_METHOD) { - if (!(mPtr->flags & PUBLIC_METHOD)) { - return; + if (!(mPtr->flags & TRUE_PRIVATE_METHOD)) { + if (flags & PUBLIC_METHOD) { + if (!(mPtr->flags & PUBLIC_METHOD)) { + return 0; + } else { + flags |= DEFINITE_PUBLIC; + } } else { - flags |= DEFINITE_PUBLIC; + flags |= DEFINITE_PROTECTED; } - } else { - flags |= DEFINITE_PROTECTED; } } } @@ -765,9 +795,9 @@ AddSimpleChainToCallContext( FOREACH(mixinPtr, oPtr->mixins) { if (contextCls) { - AddPrivatesFromClassChainToCallContext(mixinPtr, contextCls, - methodNameObj, cbPtr, doneFilters, - flags|TRAVERSED_MIXIN, filterDecl); + foundPrivate |= AddPrivatesFromClassChainToCallContext( + mixinPtr, contextCls, methodNameObj, cbPtr, + doneFilters, flags|TRAVERSED_MIXIN, filterDecl); } AddSimpleClassChainToCallContext(mixinPtr, methodNameObj, cbPtr, doneFilters, flags|TRAVERSED_MIXIN, filterDecl); @@ -784,11 +814,13 @@ AddSimpleChainToCallContext( } } if (contextCls) { - AddPrivatesFromClassChainToCallContext(oPtr->selfCls, contextCls, - methodNameObj, cbPtr, doneFilters, flags, filterDecl); + foundPrivate |= AddPrivatesFromClassChainToCallContext(oPtr->selfCls, + contextCls, methodNameObj, cbPtr, doneFilters, flags, + filterDecl); } AddSimpleClassChainToCallContext(oPtr->selfCls, methodNameObj, cbPtr, doneFilters, flags, filterDecl); + return foundPrivate; } /* @@ -1005,7 +1037,7 @@ TclOOGetCallContext( CallContext *contextPtr; CallChain *callPtr; struct ChainBuilder cb; - int i, count, doFilters; + int i, count, doFilters, donePrivate = 0; Tcl_HashEntry *hPtr; Tcl_HashTable doneFilters; @@ -1097,10 +1129,10 @@ TclOOGetCallContext( */ if (flags & FORCE_UNKNOWN) { - AddSimpleChainToCallContext(oPtr, NULL, NULL, + AddSimpleChainToCallContext(oPtr, NULL, oPtr->fPtr->unknownMethodNameObj, &cb, NULL, BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, NULL, NULL, + AddSimpleChainToCallContext(oPtr, NULL, oPtr->fPtr->unknownMethodNameObj, &cb, NULL, 0, NULL); callPtr->flags |= OO_UNKNOWN_METHOD; callPtr->epoch = -1; @@ -1130,9 +1162,9 @@ TclOOGetCallContext( OBJECT_MIXIN); } FOREACH(filterObj, oPtr->filters) { - AddSimpleChainToCallContext(oPtr, contextObj, contextCls, + donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, filterObj, &cb, &doneFilters, BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, contextObj, contextCls, + donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, filterObj, &cb, &doneFilters, 0, NULL); } AddClassFiltersToCallContext(oPtr, oPtr->selfCls, &cb, &doneFilters, @@ -1148,10 +1180,14 @@ TclOOGetCallContext( * handle class mixins right. */ - AddSimpleChainToCallContext(oPtr, contextObj, contextCls, methodNameObj, - &cb, NULL, flags|BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, contextObj, contextCls, methodNameObj, - &cb, NULL, flags, NULL); + donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, + methodNameObj, &cb, NULL, flags|BUILDING_MIXINS, NULL); + if (oPtr == contextObj) { + donePrivate |= AddInstancePrivateToCallContext(oPtr, methodNameObj, + &cb, flags); + } + donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, + methodNameObj, &cb, NULL, flags, NULL); /* * Check to see if the method has no implementation. If so, we probably @@ -1169,10 +1205,10 @@ TclOOGetCallContext( TclOODeleteChain(callPtr); return NULL; } - AddSimpleChainToCallContext(oPtr, NULL, NULL, + AddSimpleChainToCallContext(oPtr, NULL, oPtr->fPtr->unknownMethodNameObj, &cb, NULL, BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(oPtr, NULL, NULL, + AddSimpleChainToCallContext(oPtr, NULL, oPtr->fPtr->unknownMethodNameObj, &cb, NULL, 0, NULL); callPtr->flags |= OO_UNKNOWN_METHOD; callPtr->epoch = -1; @@ -1180,7 +1216,7 @@ TclOOGetCallContext( TclOODeleteChain(callPtr); return NULL; } - } else if (doFilters) { + } else if (doFilters && !donePrivate) { if (hPtr == NULL) { if (oPtr->flags & USE_CLASS_CACHE) { if (oPtr->selfCls->classChainCache == NULL) { @@ -1331,10 +1367,10 @@ TclOOGetStereotypeCallChain( * Add the actual method implementations. */ - AddSimpleChainToCallContext(&obj, NULL, NULL, methodNameObj, &cb, NULL, + AddSimpleChainToCallContext(&obj, NULL, methodNameObj, &cb, NULL, flags|BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(&obj, NULL, NULL, methodNameObj, &cb, NULL, - flags, NULL); + AddSimpleChainToCallContext(&obj, NULL, methodNameObj, &cb, NULL, flags, + NULL); /* * Check to see if the method has no implementation. If so, we probably @@ -1343,10 +1379,10 @@ TclOOGetStereotypeCallChain( */ if (count == callPtr->numChain) { - AddSimpleChainToCallContext(&obj, NULL, NULL, - fPtr->unknownMethodNameObj, &cb, NULL, BUILDING_MIXINS, NULL); - AddSimpleChainToCallContext(&obj, NULL, NULL, - fPtr->unknownMethodNameObj, &cb, NULL, 0, NULL); + AddSimpleChainToCallContext(&obj, NULL, fPtr->unknownMethodNameObj, + &cb, NULL, BUILDING_MIXINS, NULL); + AddSimpleChainToCallContext(&obj, NULL, fPtr->unknownMethodNameObj, + &cb, NULL, 0, NULL); callPtr->flags |= OO_UNKNOWN_METHOD; callPtr->epoch = -1; if (count == callPtr->numChain) { @@ -1426,9 +1462,9 @@ AddClassFiltersToCallContext( (void) Tcl_CreateHashEntry(doneFilters, (char *) filterObj, &isNew); if (isNew) { - AddSimpleChainToCallContext(oPtr, NULL, NULL, filterObj, cbPtr, + AddSimpleChainToCallContext(oPtr, NULL, filterObj, cbPtr, doneFilters, clearedFlags|BUILDING_MIXINS, clsPtr); - AddSimpleChainToCallContext(oPtr, NULL, NULL, filterObj, cbPtr, + AddSimpleChainToCallContext(oPtr, NULL, filterObj, cbPtr, doneFilters, clearedFlags, clsPtr); } } @@ -1455,21 +1491,22 @@ AddClassFiltersToCallContext( /* * ---------------------------------------------------------------------- * - * AddSimpleClassChainToCallContext -- + * AddPrivatesFromClassChainToCallContext -- * - * Construct a call-chain from a class hierarchy. + * Helper for AddSimpleChainToCallContext that is used to find private + * methds and add them to the call chain. Returns true when a private + * method is found and added. [TIP 500] * * ---------------------------------------------------------------------- */ -static void +static int AddPrivatesFromClassChainToCallContext( Class *classPtr, /* Class to add the call chain entries for. */ Class *const contextCls, /* Context class; the currently considered * class is equal to this, private methods may - * also be added. [TIP 500] */ - Tcl_Obj *const methodNameObj, - /* Name of method to add the call chain + * also be added. */ + Tcl_Obj *const methodName, /* Name of method to add the call chain * entries for. */ struct ChainBuilder *const cbPtr, /* Where to add the call chain entries. */ @@ -1481,7 +1518,7 @@ AddPrivatesFromClassChainToCallContext( * NULL, either the filter was declared by the * object or this isn't a filter. */ { - int i; + int i, foundPrivate = 0; Class *superPtr; /* @@ -1494,14 +1531,14 @@ AddPrivatesFromClassChainToCallContext( tailRecurse: FOREACH(superPtr, classPtr->mixins) { - AddPrivatesFromClassChainToCallContext(superPtr, contextCls, - methodNameObj, cbPtr, doneFilters, flags|TRAVERSED_MIXIN, - filterDecl); + foundPrivate |= AddPrivatesFromClassChainToCallContext(superPtr, + contextCls, methodName, cbPtr, doneFilters, + flags|TRAVERSED_MIXIN, filterDecl); } if (classPtr == contextCls) { Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&classPtr->classMethods, - (char *) methodNameObj); + (char *) methodName); if (hPtr != NULL) { register Method *mPtr = Tcl_GetHashValue(hPtr); @@ -1509,6 +1546,7 @@ AddPrivatesFromClassChainToCallContext( if (mPtr->flags & TRUE_PRIVATE_METHOD) { AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, flags); + foundPrivate = 1; } } } @@ -1519,13 +1557,24 @@ AddPrivatesFromClassChainToCallContext( goto tailRecurse; default: FOREACH(superPtr, classPtr->superclasses) { - AddPrivatesFromClassChainToCallContext(superPtr, contextCls, - methodNameObj, cbPtr, doneFilters, flags, filterDecl); + foundPrivate |= AddPrivatesFromClassChainToCallContext(superPtr, + contextCls, methodName, cbPtr, doneFilters, flags, + filterDecl); } case 0: - return; + return foundPrivate; } } + +/* + * ---------------------------------------------------------------------- + * + * AddSimpleClassChainToCallContext -- + * + * Construct a call-chain from a class hierarchy. + * + * ---------------------------------------------------------------------- + */ static void AddSimpleClassChainToCallContext( diff --git a/tests/oo.test b/tests/oo.test index 1075d0d..8a1718e 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4407,6 +4407,50 @@ test oo-38.3 {TIP 500: private methods internal call} -setup { } -cleanup { parent destroy } -result {16 22} +test oo-38.4 {TIP 500: private methods internal call} -setup { + oo::class create parent +} -body { + oo::class create clsA { + superclass parent + variable x + constructor {} { + set x 1 + } + method act {} { + my step + return + } + method step {} { + incr x + } + method x {} { + return $x + } + } + clsA create obj + obj act + set result [obj x] + oo::objdefine obj { + variable x + private { + method step {} { + incr x 2 + } + } + } + obj act + lappend result [obj x] + oo::objdefine obj { + method act {} { + my step + next + } + } + obj act + lappend result [obj x] +} -cleanup { + parent destroy +} -result {2 3 6} cleanupTests return -- cgit v0.12 From 13bdb0305c528847cf3e006d30905860ca9ea1b1 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 6 May 2018 07:17:27 +0000 Subject: Corrections to test names. --- tests/oo.test | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/oo.test b/tests/oo.test index 8a1718e..6ebeb99 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4299,7 +4299,7 @@ test oo-38.2 {TIP 500: private variables introspection} -setup { parent destroy } -result {{y1 y2} {x1 x2} {b1 b2} {a1 a2}} -test oo-38.1 {TIP 500: private methods internal call} -setup { +test oo-39.1 {TIP 500: private methods internal call; class private} -setup { oo::class create parent } -body { oo::class create clsA { @@ -4329,7 +4329,7 @@ test oo-38.1 {TIP 500: private methods internal call} -setup { } -cleanup { parent destroy } -result {7 1 {unknown method "step": must be act, destroy or x}} -test oo-38.2 {TIP 500: private methods internal call} -setup { +test oo-39.2 {TIP 500: private methods internal call; class private} -setup { oo::class create parent } -body { oo::class create clsA { @@ -4366,7 +4366,7 @@ test oo-38.2 {TIP 500: private methods internal call} -setup { } -cleanup { parent destroy } -result {7 12} -test oo-38.3 {TIP 500: private methods internal call} -setup { +test oo-39.3 {TIP 500: private methods internal call; class private} -setup { oo::class create parent } -body { oo::class create clsA { @@ -4407,7 +4407,7 @@ test oo-38.3 {TIP 500: private methods internal call} -setup { } -cleanup { parent destroy } -result {16 22} -test oo-38.4 {TIP 500: private methods internal call} -setup { +test oo-39.4 {TIP 500: private methods internal call; instance private} -setup { oo::class create parent } -body { oo::class create clsA { -- cgit v0.12 From 66525c95eedb95b9387daeb7f30df0cbb0476ab5 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 6 May 2018 14:20:29 +0000 Subject: Documentation. --- doc/define.n | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++-- doc/info.n | 12 +++++++ generic/tclOOCall.c | 4 +-- 3 files changed, 105 insertions(+), 4 deletions(-) diff --git a/doc/define.n b/doc/define.n index c836c2f..d68e463 100644 --- a/doc/define.n +++ b/doc/define.n @@ -105,6 +105,13 @@ fully-qualified, the command will be searched for in each object's namespace, using the instances' namespace's path, or by looking in the global namespace. The method will be exported if \fIname\fR starts with a lower-case letter, and non-exported otherwise. +.RS +.PP +.VS TIP500 +If in a private definition context (see the \fBprivate\fR definition command, +below), this command creates private forwarded methods. +.VE TIP500 +.RE .TP \fBmethod\fI name argList bodyScript\fR . @@ -117,6 +124,13 @@ be a namespace that is unique to the current object. The method will be exported if \fIname\fR starts with a lower-case letter, and non-exported otherwise; this behavior can be overridden via \fBexport\fR and \fBunexport\fR. +.RS +.PP +.VS TIP500 +If in a private definition context (see the \fBprivate\fR definition command, +below), this command creates private procedure-like methods. +.VE TIP500 +.RE .TP \fBmixin\fR ?\fI\-slotOperation\fR? ?\fIclassName ...\fR? .VS @@ -129,6 +143,16 @@ names a single class that is to be mixed in. By default, this slot works by replacement. .VE .TP +\fBprivate \fIcmd arg...\fR +.TP +\fBprivate \fIscript\fR +. +.VS TIP500 +This evaluates the \fIscript\fR (or the list of command and arguments given by +\fIcmd\fR and \fIarg\fRs) in a context where the definitions made on the +current class will be private definitions. +.VE TIP500 +.TP \fBrenamemethod\fI fromName toName\fR . This renames the method called \fIfromName\fR in a class to \fItoName\fR. The @@ -191,11 +215,25 @@ variables to be automatically made available in the methods, constructor and destructor declared by the class being defined. Each variable name must not have any namespace separators and must not look like an array access. All variables will be -actually present in the instance object on which the method is executed. Note +actually present in the namespace of the instance object on which the method +is executed. Note that the variable lists declared by a superclass or subclass are completely disjoint, as are variable lists declared by instances; the list of variable names is just for methods (and constructors and destructors) declared by this class. By default, this slot works by appending. +.RS +.PP +.VS TIP500 +If in a private definition context (see the \fBprivate\fR definition command, +below), this slot manipulates the list of private variable bindings for this +class. In a private variable binding, the name of the variable within the +instance object is different to the name given in the definition; the name +used in the definition is the name that you use to access the variable within +the methods of this class, and the name of the variable in the instance +namespace has a unique prefix that makes accidental use from other classes +extremely unlikely. +.VE TIP500 +.RE .VE .SS "CONFIGURING OBJECTS" .PP @@ -244,6 +282,13 @@ additional arguments, \fIarg\fR etc., added before those arguments specified by the caller of the method. Forwarded methods should be deleted using the \fBmethod\fR subcommand. The method will be exported if \fIname\fR starts with a lower-case letter, and non-exported otherwise. +.RS +.PP +.VS TIP500 +If in a private definition context (see the \fBprivate\fR definition command, +below), this command creates private forwarded methods. +.VE TIP500 +.RE .TP \fBmethod\fI name argList bodyScript\fR . @@ -254,6 +299,13 @@ method will be \fIbodyScript\fR. When the body of the method is evaluated, the current namespace of the method will be a namespace that is unique to the object. The method will be exported if \fIname\fR starts with a lower-case letter, and non-exported otherwise. +.RS +.PP +.VS TIP500 +If in a private definition context (see the \fBprivate\fR definition command, +below), this command creates private procedure-like methods. +.VE TIP500 +.RE .TP \fBmixin\fR ?\fI\-slotOperation\fR? ?\fIclassName ...\fR? .VS @@ -266,6 +318,16 @@ that is to be mixed in. By default, this slot works by replacement. .VE .TP +\fBprivate \fIcmd arg...\fR +.TP +\fBprivate \fIscript\fR +. +.VS TIP500 +This evaluates the \fIscript\fR (or the list of command and arguments given by +\fIcmd\fR and \fIarg\fRs) in a context where the definitions made on the +current object will be private definitions. +.VE TIP500 +.TP \fBrenamemethod\fI fromName toName\fR . This renames the method called \fIfromName\fR in an object to \fItoName\fR. @@ -294,10 +356,37 @@ This slot (see \fBSLOTTED DEFINITIONS\fR below) arranges for each of the named variables to be automatically made available in the methods declared by the object being defined. Each variable name must not have any namespace separators and must not look like an array access. All variables will be -actually present in the object on which the method is executed. Note that the +actually present in the namespace of the object on which the method is +executed. Note that the variable lists declared by the classes and mixins of which the object is an instance are completely disjoint; the list of variable names is just for methods declared by this object. By default, this slot works by appending. +.RS +.PP +.VS TIP500 +If in a private definition context (see the \fBprivate\fR definition command, +below), this slot manipulates the list of private variable bindings for this +object. In a private variable binding, the name of the variable within the +instance object is different to the name given in the definition; the name +used in the definition is the name that you use to access the variable within +the methods of this instance object, and the name of the variable in the +instance namespace has a unique prefix that makes accidental use from +superclass methods extremely unlikely. +.VE TIP500 +.RE +.SH "PRIVATE METHODS" +.VS TIP500 +When a class or instance has a private method, that private method can only be +invoked from within methods of that class or instance. Other callers of the +object's methods \fIcannot\fR invoke private methods, it is as if the private +methods do not exist. However, a private method of a class \fIcan\fR be +invoked from the class's methods when those methods are being used on another +instance object; this means that a class can use them to coordinate behaviour +between several instances of itself without interfering with how other +classes (especially either subclasses or superclasses) interact. Private +methods precede all mixed in classes in the method call order (as reported by +\fBself call\fR). +.VE TIP500 .SH "SLOTTED DEFINITIONS" Some of the configurable definitions of a class or object are \fIslotted definitions\fR. This means that the configuration is implemented by a slot diff --git a/doc/info.n b/doc/info.n index c3a62c9..9fb89fa 100644 --- a/doc/info.n +++ b/doc/info.n @@ -561,6 +561,18 @@ If \fIclassName\fR is unspecified, this subcommand returns class of the boolean value indicating whether the \fIobject\fR is of that class. .VE 8.6 .TP +\fBinfo object creationid\fI object\fR +.VS TIP500 +Returns the unique creation identifier for the \fIobject\fR object. This +creation identifier is unique to the object (within a Tcl interpreter) and +cannot be controlled at object creation time or altered afterwards. +.RS +.PP +\fIImplementation note:\fR the creation identifier is used to generate unique +identifiers associated with the object, especially for private variables. +.RE +.VE TIP500 +.TP \fBinfo object definition\fI object method\fR .VS 8.6 This subcommand returns a description of the definition of the method named diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index becf7ff..40562e3 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -1180,13 +1180,13 @@ TclOOGetCallContext( * handle class mixins right. */ - donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, - methodNameObj, &cb, NULL, flags|BUILDING_MIXINS, NULL); if (oPtr == contextObj) { donePrivate |= AddInstancePrivateToCallContext(oPtr, methodNameObj, &cb, flags); } donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, + methodNameObj, &cb, NULL, flags|BUILDING_MIXINS, NULL); + donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, methodNameObj, &cb, NULL, flags, NULL); /* -- cgit v0.12 From 5cef8b0f8e5bcecd44d03df35952b0df592e6528 Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 7 May 2018 12:43:40 +0000 Subject: Make the 'varname' method know about private variables. --- generic/tclOOBasic.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/oo.test | 34 +++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index dc49356..7af25c0 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -685,6 +685,7 @@ TclOO_Object_VarName( { Var *varPtr, *aryVar; Tcl_Obj *varNamePtr, *argPtr; + CallFrame *framePtr = ((Interp *) interp)->varFramePtr; const char *arg; if (Tcl_ObjectContextSkippedArgs(context)+1 != objc) { @@ -710,6 +711,58 @@ TclOO_Object_VarName( Tcl_Namespace *namespacePtr = Tcl_GetObjectNamespace(Tcl_ObjectContextObject(context)); + /* + * Private method handling. [TIP 500] + * + * If we're in a context that can see some private methods of an + * object, we may need to precede a variable name with its prefix. + * This is a little tricky as we need to check through the inheritance + * hierarchy when the method was declared by a class to see if the + * current object is an instance of that class. + */ + + if (framePtr->isProcCallFrame & FRAME_IS_METHOD) { + Object *oPtr = (Object *) Tcl_ObjectContextObject(context); + CallContext *callerContext = framePtr->clientData; + Method *mPtr = callerContext->callPtr->chain[ + callerContext->index].mPtr; + PrivateVariableMapping *pvPtr; + int i; + + if (mPtr->declaringObjectPtr == oPtr) { + FOREACH_STRUCT(pvPtr, oPtr->privateVariables) { + if (!strcmp(Tcl_GetString(pvPtr->variableObj), + Tcl_GetString(argPtr))) { + argPtr = pvPtr->fullNameObj; + break; + } + } + } else if (mPtr->declaringClassPtr && + mPtr->declaringClassPtr->privateVariables.num) { + Class *clsPtr = mPtr->declaringClassPtr; + int isInstance = TclOOIsReachable(clsPtr, oPtr->selfCls); + Class *mixinCls; + + if (!isInstance) { + FOREACH(mixinCls, oPtr->mixins) { + if (TclOOIsReachable(clsPtr, mixinCls)) { + isInstance = 1; + break; + } + } + } + if (isInstance) { + FOREACH_STRUCT(pvPtr, clsPtr->privateVariables) { + if (!strcmp(Tcl_GetString(pvPtr->variableObj), + Tcl_GetString(argPtr))) { + argPtr = pvPtr->fullNameObj; + break; + } + } + } + } + } + varNamePtr = Tcl_NewStringObj(namespacePtr->fullName, -1); Tcl_AppendToObj(varNamePtr, "::", 2); Tcl_AppendObjToObj(varNamePtr, argPtr); diff --git a/tests/oo.test b/tests/oo.test index 6ebeb99..b97503d 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4298,6 +4298,40 @@ test oo-38.2 {TIP 500: private variables introspection} -setup { } -cleanup { parent destroy } -result {{y1 y2} {x1 x2} {b1 b2} {a1 a2}} +test oo-38.3 {TIP 500: private variables and obj·varname} -setup { + oo::class create parent +} -body { + oo::class create clsA { + superclass parent + private { + variable x + } + method getx {} { + set x 1 + my varname x + } + method readx {} { + return $x + } + } + oo::class create clsB { + superclass clsA + variable x + method gety {} { + set x 1 + my varname x + } + method ready {} { + return $x + } + } + clsB create obj + set [obj getx] 2 + set [obj gety] 3 + list [obj readx] [obj ready] +} -cleanup { + parent destroy +} -result {2 3} test oo-39.1 {TIP 500: private methods internal call; class private} -setup { oo::class create parent -- cgit v0.12 From 08f43a1ff49699c5bff357c9e7d56d2a06613179 Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 7 May 2018 15:42:08 +0000 Subject: More efficient way of getting array element names; why search when direct lookup is possible? --- generic/tclOOBasic.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index 7af25c0..6306416 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -783,26 +783,16 @@ TclOO_Object_VarName( varNamePtr = Tcl_NewObj(); if (aryVar != NULL) { - Tcl_HashEntry *hPtr; - Tcl_HashSearch search; - Tcl_GetVariableFullName(interp, (Tcl_Var) aryVar, varNamePtr); /* * WARNING! This code pokes inside the implementation of hash tables! */ - hPtr = Tcl_FirstHashEntry((Tcl_HashTable *) aryVar->value.tablePtr, - &search); - while (hPtr != NULL) { - if (varPtr == Tcl_GetHashValue(hPtr)) { - Tcl_AppendToObj(varNamePtr, "(", -1); - Tcl_AppendObjToObj(varNamePtr, hPtr->key.objPtr); - Tcl_AppendToObj(varNamePtr, ")", -1); - break; - } - hPtr = Tcl_NextHashEntry(&search); - } + Tcl_AppendToObj(varNamePtr, "(", -1); + Tcl_AppendObjToObj(varNamePtr, ((VarInHash *) + varPtr)->entry.key.objPtr); + Tcl_AppendToObj(varNamePtr, ")", -1); } else { Tcl_GetVariableFullName(interp, (Tcl_Var) varPtr, varNamePtr); } -- cgit v0.12 From 9333525d11e12a66c55b6fff2721bf601abb5763 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 13 May 2018 16:10:44 +0000 Subject: Make [info vars] aware of private variable resolution. --- generic/tclVar.c | 33 +++++++++++++++++++++++++++++---- tests/oo.test | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/generic/tclVar.c b/generic/tclVar.c index d5e0fa1..7a4d4e9 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -6323,25 +6323,50 @@ AppendLocals( } if (iPtr->varFramePtr->isProcCallFrame & FRAME_IS_METHOD) { - CallContext *contextPtr = iPtr->varFramePtr->clientData; - Method *mPtr = contextPtr->callPtr->chain[contextPtr->index].mPtr; + Method *mPtr = (Method *) + Tcl_ObjectContextMethod(iPtr->varFramePtr->clientData); + PrivateVariableMapping *privatePtr; if (mPtr->declaringObjectPtr) { - FOREACH(objNamePtr, mPtr->declaringObjectPtr->variables) { + Object *oPtr = mPtr->declaringObjectPtr; + + FOREACH(objNamePtr, oPtr->variables) { Tcl_CreateHashEntry(&addedTable, objNamePtr, &added); if (added && (!pattern || Tcl_StringMatch(TclGetString(objNamePtr), pattern))) { Tcl_ListObjAppendElement(interp, listPtr, objNamePtr); } } + FOREACH_STRUCT(privatePtr, oPtr->privateVariables) { + Tcl_CreateHashEntry(&addedTable, privatePtr->variableObj, + &added); + if (added && (!pattern || + Tcl_StringMatch(TclGetString(privatePtr->variableObj), + pattern))) { + Tcl_ListObjAppendElement(interp, listPtr, + privatePtr->variableObj); + } + } } else { - FOREACH(objNamePtr, mPtr->declaringClassPtr->variables) { + Class *clsPtr = mPtr->declaringClassPtr; + + FOREACH(objNamePtr, clsPtr->variables) { Tcl_CreateHashEntry(&addedTable, objNamePtr, &added); if (added && (!pattern || Tcl_StringMatch(TclGetString(objNamePtr), pattern))) { Tcl_ListObjAppendElement(interp, listPtr, objNamePtr); } } + FOREACH_STRUCT(privatePtr, clsPtr->privateVariables) { + Tcl_CreateHashEntry(&addedTable, privatePtr->variableObj, + &added); + if (added && (!pattern || + Tcl_StringMatch(TclGetString(privatePtr->variableObj), + pattern))) { + Tcl_ListObjAppendElement(interp, listPtr, + privatePtr->variableObj); + } + } } } Tcl_DeleteHashTable(&addedTable); diff --git a/tests/oo.test b/tests/oo.test index b97503d..f0c08b4 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4332,6 +4332,46 @@ test oo-38.3 {TIP 500: private variables and obj·varname} -setup { } -cleanup { parent destroy } -result {2 3} +test oo-38.4 {TIP 500: private variables introspection} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + private { + variable x1 x2 + } + variable y1 y2 + constructor {} { + variable z boo + set x1 a + set y1 c + } + method list {} { + variable z + set ok 1 + list [info locals] [lsort [info vars]] [info exist x2] + } + } + cls create obj + oo::objdefine obj { + private variable a1 a2 + variable b1 b2 + method init {} { + # Because we don't have a constructor to do this setup for us + set a1 p + set b1 r + } + method list {} { + variable z + set yes 1 + list {*}[next] [info locals] [lsort [info vars]] [info exist a2] + } + } + obj init + obj list +} -cleanup { + parent destroy +} -result {ok {ok x1 x2 y1 y2 z} 0 yes {a1 a2 b1 b2 yes z} 0} test oo-39.1 {TIP 500: private methods internal call; class private} -setup { oo::class create parent -- cgit v0.12 From 5eef06ea24f7486a2dcca559a64b3ec08f0c6710 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 13 May 2018 19:20:52 +0000 Subject: Correct results from unknown method handler. --- generic/tclOOBasic.c | 26 +++++- generic/tclOOCall.c | 227 +++++++++++++++++++++++++++++++++------------------ generic/tclOOInfo.c | 3 +- generic/tclOOInt.h | 3 +- tests/oo.test | 139 +++++++++++++++++++++++++++++++ 5 files changed, 315 insertions(+), 83 deletions(-) diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index 6306416..763f0ad 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -500,9 +500,12 @@ TclOO_Object_Unknown( Tcl_Obj *const *objv) /* The actual arguments. */ { CallContext *contextPtr = (CallContext *) context; + Object *callerObj = NULL; + Class *callerCls = NULL; Object *oPtr = contextPtr->oPtr; const char **methodNames; int numMethodNames, i, skip = Tcl_ObjectContextSkippedArgs(context); + CallFrame *framePtr = ((Interp *) interp)->varFramePtr; Tcl_Obj *errorMsg; /* @@ -517,10 +520,31 @@ TclOO_Object_Unknown( } /* + * Determine if the calling context should know about extra private + * methods, and if so, which. + */ + + if (framePtr->isProcCallFrame & FRAME_IS_METHOD) { + CallContext *callerContext = framePtr->clientData; + Method *mPtr = callerContext->callPtr->chain[ + callerContext->index].mPtr; + + if (mPtr->declaringObjectPtr) { + if (oPtr == mPtr->declaringObjectPtr) { + callerObj = mPtr->declaringObjectPtr; + } + } else { + if (TclOOIsReachable(mPtr->declaringClassPtr, oPtr->selfCls)) { + callerCls = mPtr->declaringClassPtr; + } + } + } + + /* * Get the list of methods that we want to know about. */ - numMethodNames = TclOOGetSortedMethodList(oPtr, + numMethodNames = TclOOGetSortedMethodList(oPtr, callerObj, callerCls, contextPtr->callPtr->flags & PUBLIC_METHOD, &methodNames); /* diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index 40562e3..494a627 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -87,6 +87,8 @@ static inline int IsStillValid(CallChain *callPtr, Object *oPtr, int flags, int reuseMask); static Tcl_NRPostProc ResetFilterFlags; static Tcl_NRPostProc SetFilterFlags; +static int SortMethodNames(Tcl_HashTable *namesPtr, int flags, + const char ***stringsPtr); static inline void StashCallChain(Tcl_Obj *objPtr, CallChain *callPtr); /* @@ -376,6 +378,14 @@ FinalizeMethodRefs( int TclOOGetSortedMethodList( Object *oPtr, /* The object to get the method names for. */ + Object *contextObj, /* From what context object we are inquiring. + * NULL when the context shouldn't see + * object-level private methods. Note that + * flags can override this. */ + Class *contextCls, /* From what context class we are inquiring. + * NULL when the context shouldn't see + * class-level private methods. Note that + * flags can override this. */ int flags, /* Whether we just want the public method * names. */ const char ***stringsPtr) /* Where to write a pointer to the array of @@ -388,12 +398,10 @@ TclOOGetSortedMethodList( * at. Is set-like in nature and keyed by * pointer to class. */ FOREACH_HASH_DECLS; - int i; + int i, numStrings; Class *mixinPtr; Tcl_Obj *namePtr; Method *mPtr; - int isWantedIn; - void *isWanted; Tcl_InitObjHashTable(&names); Tcl_InitHashTable(&examinedClasses, TCL_ONE_WORD_KEYS); @@ -415,10 +423,14 @@ TclOOGetSortedMethodList( if ((mPtr->flags & PRIVATE_METHOD) && !(flags & PRIVATE_METHOD)) { continue; } + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + continue; + } hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); if (isNew) { - isWantedIn = ((!(flags & PUBLIC_METHOD) + int isWantedIn = ((!(flags & PUBLIC_METHOD) || mPtr->flags & PUBLIC_METHOD) ? IN_LIST : 0); + isWantedIn |= (mPtr->typePtr == NULL ? NO_IMPLEMENTATION : 0); Tcl_SetHashValue(hPtr, INT2PTR(isWantedIn)); } @@ -431,18 +443,21 @@ TclOOGetSortedMethodList( if (flags & PRIVATE_METHOD) { FOREACH_HASH(namePtr, mPtr, &oPtr->selfCls->classMethods) { - if (mPtr->flags & PRIVATE_METHOD) { + if ((mPtr->flags & PRIVATE_METHOD) + && !(mPtr->flags & TRUE_PRIVATE_METHOD)) { int isNew; hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); if (isNew) { - isWantedIn = IN_LIST; + int isWantedIn = IN_LIST; + if (mPtr->typePtr == NULL) { isWantedIn |= NO_IMPLEMENTATION; } Tcl_SetHashValue(hPtr, INT2PTR(isWantedIn)); } else if (mPtr->typePtr != NULL) { - isWantedIn = PTR2INT(Tcl_GetHashValue(hPtr)); + int isWantedIn = PTR2INT(Tcl_GetHashValue(hPtr)); + if (isWantedIn & NO_IMPLEMENTATION) { isWantedIn &= ~NO_IMPLEMENTATION; Tcl_SetHashValue(hPtr, INT2PTR(isWantedIn)); @@ -453,6 +468,32 @@ TclOOGetSortedMethodList( } /* + * Process method names due to private methods on the context's object or + * class. Which must be correct if either are not NULL. + */ + + if (contextObj && contextObj->methodsPtr) { + FOREACH_HASH(namePtr, mPtr, contextObj->methodsPtr) { + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + int isNew; + + hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); + Tcl_SetHashValue(hPtr, INT2PTR(IN_LIST)); + } + } + } + if (contextCls) { + FOREACH_HASH(namePtr, mPtr, &contextCls->classMethods) { + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + int isNew; + + hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); + Tcl_SetHashValue(hPtr, INT2PTR(IN_LIST)); + } + } + } + + /* * Process (normal) method names from the class hierarchy and the mixin * hierarchy. */ @@ -463,50 +504,15 @@ TclOOGetSortedMethodList( &examinedClasses); } - Tcl_DeleteHashTable(&examinedClasses); - /* - * See how many (visible) method names there are. If none, we do not (and - * should not) try to sort the list of them. + * Tidy up, sort the names and resolve finally whether we really want + * them (processing export layering). */ - i = 0; - if (names.numEntries != 0) { - const char **strings; - - /* - * We need to build the list of methods to sort. We will be using - * qsort() for this, because it is very unlikely that the list will be - * heavily sorted when it is long enough to matter. - */ - - strings = ckalloc(sizeof(char *) * names.numEntries); - FOREACH_HASH(namePtr, isWanted, &names) { - if (!(flags & PUBLIC_METHOD) || (PTR2INT(isWanted) & IN_LIST)) { - if (PTR2INT(isWanted) & NO_IMPLEMENTATION) { - continue; - } - strings[i++] = TclGetString(namePtr); - } - } - - /* - * Note that 'i' may well be less than names.numEntries when we are - * dealing with public method names. - */ - - if (i > 0) { - if (i > 1) { - qsort((void *) strings, (unsigned) i, sizeof(char *), CmpStr); - } - *stringsPtr = strings; - } else { - ckfree(strings); - } - } - + Tcl_DeleteHashTable(&examinedClasses); + numStrings = SortMethodNames(&names, flags, stringsPtr); Tcl_DeleteHashTable(&names); - return i; + return numStrings; } int @@ -523,10 +529,7 @@ TclOOGetSortedClassMethodList( /* Used to track what classes have been looked * at. Is set-like in nature and keyed by * pointer to class. */ - FOREACH_HASH_DECLS; - int i; - Tcl_Obj *namePtr; - void *isWanted; + int numStrings; Tcl_InitObjHashTable(&names); Tcl_InitHashTable(&examinedClasses, TCL_ONE_WORD_KEYS); @@ -539,50 +542,111 @@ TclOOGetSortedClassMethodList( Tcl_DeleteHashTable(&examinedClasses); /* - * See how many (visible) method names there are. If none, we do not (and - * should not) try to sort the list of them. + * Process private method names if we should. [TIP 500] */ - i = 0; - if (names.numEntries != 0) { - const char **strings; + if (flags & TRUE_PRIVATE_METHOD) { + FOREACH_HASH_DECLS; + Method *mPtr; + Tcl_Obj *namePtr; - /* - * We need to build the list of methods to sort. We will be using - * qsort() for this, because it is very unlikely that the list will be - * heavily sorted when it is long enough to matter. - */ + FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + int isNew; - strings = ckalloc(sizeof(char *) * names.numEntries); - FOREACH_HASH(namePtr, isWanted, &names) { - if (!(flags & PUBLIC_METHOD) || (PTR2INT(isWanted) & IN_LIST)) { - if (PTR2INT(isWanted) & NO_IMPLEMENTATION) { - continue; - } - strings[i++] = TclGetString(namePtr); + hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); + Tcl_SetHashValue(hPtr, INT2PTR(IN_LIST)); } } + flags &= ~TRUE_PRIVATE_METHOD; + } - /* - * Note that 'i' may well be less than names.numEntries when we are - * dealing with public method names. - */ + /* + * Tidy up, sort the names and resolve finally whether we really want + * them (processing export layering). + */ + + numStrings = SortMethodNames(&names, flags, stringsPtr); + Tcl_DeleteHashTable(&names); + return numStrings; +} + +/* + * ---------------------------------------------------------------------- + * + * SortMethodNames -- + * + * Shared helper for TclOOGetSortedMethodList etc. that knows the method + * sorting rules. + * + * Returns: + * The length of the sorted list. + * + * ---------------------------------------------------------------------- + */ - if (i > 0) { - if (i > 1) { - qsort((void *) strings, (unsigned) i, sizeof(char *), CmpStr); +static int +SortMethodNames( + Tcl_HashTable *namesPtr, /* The table of names; unsorted, but contains + * whether the names are wanted and under what + * circumstances. */ + int flags, /* Whether we are looking for unexported + * methods. Full private methods are handled + * on insertion to the table. */ + const char ***stringsPtr) /* Where to store the sorted list of strings + * that we produce. ckalloced() */ +{ + const char **strings; + FOREACH_HASH_DECLS; + Tcl_Obj *namePtr; + void *isWanted; + int i = 0; + + /* + * See how many (visible) method names there are. If none, we do not (and + * should not) try to sort the list of them. + */ + + if (namesPtr->numEntries == 0) { + *stringsPtr = NULL; + return 0; + } + + /* + * We need to build the list of methods to sort. We will be using qsort() + * for this, because it is very unlikely that the list will be heavily + * sorted when it is long enough to matter. + */ + + strings = ckalloc(sizeof(char *) * namesPtr->numEntries); + FOREACH_HASH(namePtr, isWanted, namesPtr) { + if (!(flags & PUBLIC_METHOD) || (PTR2INT(isWanted) & IN_LIST)) { + if (PTR2INT(isWanted) & NO_IMPLEMENTATION) { + continue; } - *stringsPtr = strings; - } else { - ckfree(strings); + strings[i++] = TclGetString(namePtr); } } - Tcl_DeleteHashTable(&names); + /* + * Note that 'i' may well be less than names.numEntries when we are + * dealing with public method names. We don't sort unless there's at least + * two method names. + */ + + if (i > 0) { + if (i > 1) { + qsort((void *) strings, (unsigned) i, sizeof(char *), CmpStr); + } + *stringsPtr = strings; + } else { + ckfree(strings); + *stringsPtr = NULL; + } return i; } -/* Comparator for GetSortedMethodList */ +/* Comparator for SortMethodNames */ static int CmpStr( const void *ptr1, @@ -665,6 +729,9 @@ AddClassMethodNames( } FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { + if (mPtr->flags & TRUE_PRIVATE_METHOD) { + continue; + } hPtr = Tcl_CreateHashEntry(namesPtr, (char *) namePtr, &isNew); if (isNew) { int isWanted = (!(flags & PUBLIC_METHOD) diff --git a/generic/tclOOInfo.c b/generic/tclOOInfo.c index 30cf8af..db490fb 100644 --- a/generic/tclOOInfo.c +++ b/generic/tclOOInfo.c @@ -596,7 +596,8 @@ InfoObjectMethodsCmd( resultObj = Tcl_NewObj(); if (recurse) { const char **names; - int i, numNames = TclOOGetSortedMethodList(oPtr, flag, &names); + int i, numNames = TclOOGetSortedMethodList(oPtr, NULL, NULL, flag, + &names); for (i=0 ; i, destroy, equal, eval, unknown, variable, varname or x} +test oo-39.9 {TIP 500: private methods internal call; error reporting} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + variable x + constructor {val} { + set x $val + } + private method x {} { + return $x + } + } + oo::class create cls2 { + superclass cls + method equal {other} { + expr {[my y] == [$other x]} + } + } + cls2 create a 1 + cls2 create b 2 + a equal b +} -returnCodes error -cleanup { + parent destroy +} -result {unknown method "y": must be , destroy, equal, eval, unknown, variable or varname} +test oo-39.10 {TIP 500: private methods internal call; error reporting} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + variable x + constructor {val} { + set x $val + } + private method x {} { + return $x + } + } + oo::class create cls2 { + superclass cls + method equal {other} { + expr {[my x] == [$other x]} + } + } + cls2 create a 1 + cls2 create b 2 + a equal b +} -returnCodes error -cleanup { + parent destroy +} -result {unknown method "x": must be , destroy, equal, eval, unknown, variable or varname} cleanupTests return -- cgit v0.12 From bd706be303307bc4bdeacf15c1af1a43f1585d6b Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 14 May 2018 20:55:40 +0000 Subject: Make sure that [self call] reports useful info. --- generic/tclOOCall.c | 306 +++++++++++++++++++++++++++----------------------- generic/tclOOInt.h | 4 + generic/tclOOMethod.c | 6 + tests/oo.test | 27 +++++ 4 files changed, 201 insertions(+), 142 deletions(-) diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index 494a627..5fd0c2a 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -44,6 +44,21 @@ struct ChainBuilder { #define MIXIN_CONSISTENT(flags) \ (((flags) & OBJECT_MIXIN) || \ !((flags) & BUILDING_MIXINS) == !((flags) & TRAVERSED_MIXIN)) +/* + * Note that the flag bit PRIVATE_METHOD has a confusing name. + */ +#define IS_PUBLIC(mPtr) \ + (((mPtr)->flags & PUBLIC_METHOD) != 0) +#define IS_UNEXPORTED(mPtr) \ + (((mPtr)->flags & PRIVATE_METHOD) != 0) +#define IS_PRIVATE(mPtr) \ + (((mPtr)->flags & TRUE_PRIVATE_METHOD) != 0) +#define WANT_PUBLIC(flags) \ + (((flags) & PUBLIC_METHOD) != 0) +#define WANT_UNEXPORTED(flags) \ + (((flags) & PRIVATE_METHOD) != 0) +#define WANT_PRIVATE(flags) \ + (((flags) & TRUE_PRIVATE_METHOD) != 0) /* * Function declarations for things defined in this file. @@ -62,6 +77,10 @@ static inline void AddMethodToCallChain(Method *const mPtr, static inline int AddInstancePrivateToCallContext(Object *const oPtr, Tcl_Obj *const methodNameObj, struct ChainBuilder *const cbPtr, int flags); +static inline void AddStandardMethodName(int flags, Tcl_Obj *namePtr, + Method *mPtr, Tcl_HashTable *namesPtr); +static inline void AddPrivateMethodNames(Tcl_HashTable *methodsTablePtr, + Tcl_HashTable *namesPtr); static inline int AddSimpleChainToCallContext(Object *const oPtr, Class *const contextCls, Tcl_Obj *const methodNameObj, @@ -74,7 +93,7 @@ static int AddPrivatesFromClassChainToCallContext(Class *classPtr, struct ChainBuilder *const cbPtr, Tcl_HashTable *const doneFilters, int flags, Class *const filterDecl); -static void AddSimpleClassChainToCallContext(Class *classPtr, +static int AddSimpleClassChainToCallContext(Class *classPtr, Tcl_Obj *const methodNameObj, struct ChainBuilder *const cbPtr, Tcl_HashTable *const doneFilters, int flags, @@ -418,22 +437,13 @@ TclOOGetSortedMethodList( if (oPtr->methodsPtr) { FOREACH_HASH(namePtr, mPtr, oPtr->methodsPtr) { - int isNew; - - if ((mPtr->flags & PRIVATE_METHOD) && !(flags & PRIVATE_METHOD)) { + if (IS_PRIVATE(mPtr)) { continue; } - if (mPtr->flags & TRUE_PRIVATE_METHOD) { + if (IS_UNEXPORTED(mPtr) && !WANT_UNEXPORTED(flags)) { continue; } - hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); - if (isNew) { - int isWantedIn = ((!(flags & PUBLIC_METHOD) - || mPtr->flags & PUBLIC_METHOD) ? IN_LIST : 0); - - isWantedIn |= (mPtr->typePtr == NULL ? NO_IMPLEMENTATION : 0); - Tcl_SetHashValue(hPtr, INT2PTR(isWantedIn)); - } + AddStandardMethodName(flags, namePtr, mPtr, &names); } } @@ -441,28 +451,10 @@ TclOOGetSortedMethodList( * Process method names due to private methods on the object's class. */ - if (flags & PRIVATE_METHOD) { + if (WANT_UNEXPORTED(flags)) { FOREACH_HASH(namePtr, mPtr, &oPtr->selfCls->classMethods) { - if ((mPtr->flags & PRIVATE_METHOD) - && !(mPtr->flags & TRUE_PRIVATE_METHOD)) { - int isNew; - - hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); - if (isNew) { - int isWantedIn = IN_LIST; - - if (mPtr->typePtr == NULL) { - isWantedIn |= NO_IMPLEMENTATION; - } - Tcl_SetHashValue(hPtr, INT2PTR(isWantedIn)); - } else if (mPtr->typePtr != NULL) { - int isWantedIn = PTR2INT(Tcl_GetHashValue(hPtr)); - - if (isWantedIn & NO_IMPLEMENTATION) { - isWantedIn &= ~NO_IMPLEMENTATION; - Tcl_SetHashValue(hPtr, INT2PTR(isWantedIn)); - } - } + if (IS_UNEXPORTED(mPtr)) { + AddStandardMethodName(flags, namePtr, mPtr, &names); } } } @@ -473,24 +465,10 @@ TclOOGetSortedMethodList( */ if (contextObj && contextObj->methodsPtr) { - FOREACH_HASH(namePtr, mPtr, contextObj->methodsPtr) { - if (mPtr->flags & TRUE_PRIVATE_METHOD) { - int isNew; - - hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); - Tcl_SetHashValue(hPtr, INT2PTR(IN_LIST)); - } - } + AddPrivateMethodNames(contextObj->methodsPtr, &names); } if (contextCls) { - FOREACH_HASH(namePtr, mPtr, &contextCls->classMethods) { - if (mPtr->flags & TRUE_PRIVATE_METHOD) { - int isNew; - - hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); - Tcl_SetHashValue(hPtr, INT2PTR(IN_LIST)); - } - } + AddPrivateMethodNames(&contextCls->classMethods, &names); } /* @@ -500,7 +478,7 @@ TclOOGetSortedMethodList( AddClassMethodNames(oPtr->selfCls, flags, &names, &examinedClasses); FOREACH(mixinPtr, oPtr->mixins) { - AddClassMethodNames(mixinPtr, flags|TRAVERSED_MIXIN, &names, + AddClassMethodNames(mixinPtr, flags | TRAVERSED_MIXIN, &names, &examinedClasses); } @@ -545,19 +523,8 @@ TclOOGetSortedClassMethodList( * Process private method names if we should. [TIP 500] */ - if (flags & TRUE_PRIVATE_METHOD) { - FOREACH_HASH_DECLS; - Method *mPtr; - Tcl_Obj *namePtr; - - FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { - if (mPtr->flags & TRUE_PRIVATE_METHOD) { - int isNew; - - hPtr = Tcl_CreateHashEntry(&names, (char *) namePtr, &isNew); - Tcl_SetHashValue(hPtr, INT2PTR(IN_LIST)); - } - } + if (WANT_PRIVATE(flags)) { + AddPrivateMethodNames(&clsPtr->classMethods, &names); flags &= ~TRUE_PRIVATE_METHOD; } @@ -620,7 +587,7 @@ SortMethodNames( strings = ckalloc(sizeof(char *) * namesPtr->numEntries); FOREACH_HASH(namePtr, isWanted, namesPtr) { - if (!(flags & PUBLIC_METHOD) || (PTR2INT(isWanted) & IN_LIST)) { + if (!WANT_PUBLIC(flags) || (PTR2INT(isWanted) & IN_LIST)) { if (PTR2INT(isWanted) & NO_IMPLEMENTATION) { continue; } @@ -655,7 +622,7 @@ CmpStr( const char **strPtr1 = (const char **) ptr1; const char **strPtr2 = (const char **) ptr2; - return TclpUtfNcmp2(*strPtr1, *strPtr2, strlen(*strPtr1)+1); + return TclpUtfNcmp2(*strPtr1, *strPtr2, strlen(*strPtr1) + 1); } /* @@ -688,6 +655,8 @@ AddClassMethodNames( * pointers to the classes, and the values are * immaterial. */ { + int i; + /* * If we've already started looking at this class, stop working on it now * to prevent repeated work. @@ -718,7 +687,6 @@ AddClassMethodNames( if (clsPtr->mixins.num != 0) { Class *mixinPtr; - int i; FOREACH(mixinPtr, clsPtr->mixins) { if (mixinPtr != clsPtr) { @@ -729,23 +697,7 @@ AddClassMethodNames( } FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { - if (mPtr->flags & TRUE_PRIVATE_METHOD) { - continue; - } - hPtr = Tcl_CreateHashEntry(namesPtr, (char *) namePtr, &isNew); - if (isNew) { - int isWanted = (!(flags & PUBLIC_METHOD) - || (mPtr->flags & PUBLIC_METHOD)) ? IN_LIST : 0; - - isWanted |= (mPtr->typePtr == NULL ? NO_IMPLEMENTATION : 0); - Tcl_SetHashValue(hPtr, INT2PTR(isWanted)); - } else if ((PTR2INT(Tcl_GetHashValue(hPtr)) & NO_IMPLEMENTATION) - && mPtr->typePtr != NULL) { - int isWanted = PTR2INT(Tcl_GetHashValue(hPtr)); - - isWanted &= ~NO_IMPLEMENTATION; - Tcl_SetHashValue(hPtr, INT2PTR(isWanted)); - } + AddStandardMethodName(flags, namePtr, mPtr, namesPtr); } if (clsPtr->superclasses.num != 1) { @@ -755,7 +707,6 @@ AddClassMethodNames( } if (clsPtr->superclasses.num != 0) { Class *superPtr; - int i; FOREACH(superPtr, clsPtr->superclasses) { AddClassMethodNames(superPtr, flags, namesPtr, @@ -767,6 +718,66 @@ AddClassMethodNames( /* * ---------------------------------------------------------------------- * + * AddPrivateMethodNames, AddStandardMethodName -- + * + * Factored-out helpers for the sorted name list production functions. + * + * ---------------------------------------------------------------------- + */ + +static inline void +AddPrivateMethodNames( + Tcl_HashTable *methodsTablePtr, + Tcl_HashTable *namesPtr) +{ + FOREACH_HASH_DECLS; + Method *mPtr; + Tcl_Obj *namePtr; + + FOREACH_HASH(namePtr, mPtr, methodsTablePtr) { + if (IS_PRIVATE(mPtr)) { + int isNew; + + hPtr = Tcl_CreateHashEntry(namesPtr, (char *) namePtr, &isNew); + Tcl_SetHashValue(hPtr, INT2PTR(IN_LIST)); + } + } +} + +static inline void +AddStandardMethodName( + int flags, + Tcl_Obj *namePtr, + Method *mPtr, + Tcl_HashTable *namesPtr) +{ + if (!IS_PRIVATE(mPtr)) { + int isNew; + Tcl_HashEntry *hPtr = + Tcl_CreateHashEntry(namesPtr, (char *) namePtr, &isNew); + + if (isNew) { + int isWanted = (!WANT_PUBLIC(flags) || IS_PUBLIC(mPtr)) + ? IN_LIST : 0; + + isWanted |= (mPtr->typePtr == NULL ? NO_IMPLEMENTATION : 0); + Tcl_SetHashValue(hPtr, INT2PTR(isWanted)); + } else if ((PTR2INT(Tcl_GetHashValue(hPtr)) & NO_IMPLEMENTATION) + && mPtr->typePtr != NULL) { + int isWanted = PTR2INT(Tcl_GetHashValue(hPtr)); + + isWanted &= ~NO_IMPLEMENTATION; + Tcl_SetHashValue(hPtr, INT2PTR(isWanted)); + } + } +} + +#undef IN_LIST +#undef NO_IMPLEMENTATION + +/* + * ---------------------------------------------------------------------- + * * AddInstancePrivateToCallContext -- * * Add private methods from the instance. Called when the calling Tcl @@ -794,7 +805,7 @@ AddInstancePrivateToCallContext( hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char *) methodName); if (hPtr != NULL) { mPtr = Tcl_GetHashValue(hPtr); - if (mPtr->flags & TRUE_PRIVATE_METHOD) { + if (IS_PRIVATE(mPtr)) { AddMethodToCallChain(mPtr, cbPtr, NULL, NULL, flags); donePrivate = 1; } @@ -835,7 +846,7 @@ AddSimpleChainToCallContext( * NULL, either the filter was declared by the * object or this isn't a filter. */ { - int i, foundPrivate = 0; + int i, foundPrivate = 0, blockedUnexported = 0; Tcl_HashEntry *hPtr; Method *mPtr; @@ -844,10 +855,10 @@ AddSimpleChainToCallContext( if (hPtr != NULL) { mPtr = Tcl_GetHashValue(hPtr); - if (!(mPtr->flags & TRUE_PRIVATE_METHOD)) { - if (flags & PUBLIC_METHOD) { - if (!(mPtr->flags & PUBLIC_METHOD)) { - return 0; + if (!IS_PRIVATE(mPtr)) { + if (WANT_PUBLIC(flags)) { + if (!IS_PUBLIC(mPtr)) { + blockedUnexported = 1; } else { flags |= DEFINITE_PUBLIC; } @@ -866,14 +877,15 @@ AddSimpleChainToCallContext( mixinPtr, contextCls, methodNameObj, cbPtr, doneFilters, flags|TRAVERSED_MIXIN, filterDecl); } - AddSimpleClassChainToCallContext(mixinPtr, methodNameObj, cbPtr, - doneFilters, flags|TRAVERSED_MIXIN, filterDecl); + foundPrivate |= AddSimpleClassChainToCallContext(mixinPtr, + methodNameObj, cbPtr, doneFilters, + flags | TRAVERSED_MIXIN, filterDecl); } - if (oPtr->methodsPtr) { + if (oPtr->methodsPtr && !blockedUnexported) { hPtr = Tcl_FindHashEntry(oPtr->methodsPtr, (char*) methodNameObj); if (hPtr != NULL) { mPtr = Tcl_GetHashValue(hPtr); - if (!(mPtr->flags & TRUE_PRIVATE_METHOD)) { + if (!IS_PRIVATE(mPtr)) { AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, flags); } @@ -885,8 +897,10 @@ AddSimpleChainToCallContext( contextCls, methodNameObj, cbPtr, doneFilters, flags, filterDecl); } - AddSimpleClassChainToCallContext(oPtr->selfCls, methodNameObj, cbPtr, - doneFilters, flags, filterDecl); + if (!blockedUnexported) { + foundPrivate |= AddSimpleClassChainToCallContext(oPtr->selfCls, + methodNameObj, cbPtr, doneFilters, flags, filterDecl); + } return foundPrivate; } @@ -950,8 +964,8 @@ AddMethodToCallChain( * should be sufficient for [incr Tcl] support though. */ - if (!(callPtr->flags & PRIVATE_METHOD) - && (mPtr->flags & PRIVATE_METHOD) + if (!WANT_UNEXPORTED(callPtr->flags) + && IS_UNEXPORTED(mPtr) && (mPtr->declaringClassPtr != NULL) && (mPtr->declaringClassPtr != cbPtr->oPtr->selfCls)) { return; @@ -992,7 +1006,7 @@ AddMethodToCallChain( if (callPtr->numChain == CALL_CHAIN_STATIC_SIZE) { callPtr->chain = - ckalloc(sizeof(struct MInvoke) * (callPtr->numChain+1)); + ckalloc(sizeof(struct MInvoke) * (callPtr->numChain + 1)); memcpy(callPtr->chain, callPtr->staticChain, sizeof(struct MInvoke) * callPtr->numChain); } else if (callPtr->numChain > CALL_CHAIN_STATIC_SIZE) { @@ -1144,7 +1158,7 @@ TclOOGetCallContext( * the object, and in the class). */ - const int reuseMask = ((flags & PUBLIC_METHOD) ? ~0 : ~PUBLIC_METHOD); + const int reuseMask = (WANT_PUBLIC(flags) ? ~0 : ~PUBLIC_METHOD); if (cacheInThisObj->typePtr == &methodNameType) { callPtr = cacheInThisObj->internalRep.twoPtrValue.ptr1; @@ -1250,6 +1264,7 @@ TclOOGetCallContext( if (oPtr == contextObj) { donePrivate |= AddInstancePrivateToCallContext(oPtr, methodNameObj, &cb, flags); + donePrivate |= (contextObj->flags & HAS_PRIVATE_METHODS); } donePrivate |= AddSimpleChainToCallContext(oPtr, contextCls, methodNameObj, &cb, NULL, flags|BUILDING_MIXINS, NULL); @@ -1389,8 +1404,7 @@ TclOOGetStereotypeCallChain( hPtr = Tcl_FindHashEntry(clsPtr->classChainCache, (char *) methodNameObj); if (hPtr != NULL && Tcl_GetHashValue(hPtr) != NULL) { - const int reuseMask = - ((flags & PUBLIC_METHOD) ? ~0 : ~PUBLIC_METHOD); + const int reuseMask = (WANT_PUBLIC(flags) ? ~0 : ~PUBLIC_METHOD); callPtr = Tcl_GetHashValue(hPtr); if (IsStillValid(callPtr, &obj, flags, reuseMask)) { @@ -1585,7 +1599,7 @@ AddPrivatesFromClassChainToCallContext( * NULL, either the filter was declared by the * object or this isn't a filter. */ { - int i, foundPrivate = 0; + int i; Class *superPtr; /* @@ -1598,9 +1612,11 @@ AddPrivatesFromClassChainToCallContext( tailRecurse: FOREACH(superPtr, classPtr->mixins) { - foundPrivate |= AddPrivatesFromClassChainToCallContext(superPtr, - contextCls, methodName, cbPtr, doneFilters, - flags|TRAVERSED_MIXIN, filterDecl); + if (AddPrivatesFromClassChainToCallContext(superPtr, contextCls, + methodName, cbPtr, doneFilters, flags|TRAVERSED_MIXIN, + filterDecl)) { + return 1; + } } if (classPtr == contextCls) { @@ -1610,10 +1626,10 @@ AddPrivatesFromClassChainToCallContext( if (hPtr != NULL) { register Method *mPtr = Tcl_GetHashValue(hPtr); - if (mPtr->flags & TRUE_PRIVATE_METHOD) { + if (IS_PRIVATE(mPtr)) { AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, flags); - foundPrivate = 1; + return 1; } } } @@ -1624,12 +1640,13 @@ AddPrivatesFromClassChainToCallContext( goto tailRecurse; default: FOREACH(superPtr, classPtr->superclasses) { - foundPrivate |= AddPrivatesFromClassChainToCallContext(superPtr, - contextCls, methodName, cbPtr, doneFilters, flags, - filterDecl); + if (AddPrivatesFromClassChainToCallContext(superPtr, contextCls, + methodName, cbPtr, doneFilters, flags, filterDecl)) { + return 1; + } } case 0: - return foundPrivate; + return 0; } } @@ -1643,7 +1660,7 @@ AddPrivatesFromClassChainToCallContext( * ---------------------------------------------------------------------- */ -static void +static int AddSimpleClassChainToCallContext( Class *classPtr, /* Class to add the call chain entries for. */ Tcl_Obj *const methodNameObj, @@ -1659,7 +1676,7 @@ AddSimpleClassChainToCallContext( * NULL, either the filter was declared by the * object or this isn't a filter. */ { - int i; + int i, privateDanger = 0; Class *superPtr; /* @@ -1672,8 +1689,9 @@ AddSimpleClassChainToCallContext( tailRecurse: FOREACH(superPtr, classPtr->mixins) { - AddSimpleClassChainToCallContext(superPtr, methodNameObj, cbPtr, - doneFilters, flags|TRAVERSED_MIXIN, filterDecl); + privateDanger |= AddSimpleClassChainToCallContext(superPtr, + methodNameObj, cbPtr, doneFilters, flags | TRAVERSED_MIXIN, + filterDecl); } if (flags & CONSTRUCTOR) { @@ -1687,21 +1705,23 @@ AddSimpleClassChainToCallContext( Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&classPtr->classMethods, (char *) methodNameObj); + if (classPtr->flags & HAS_PRIVATE_METHODS) { + privateDanger |= 1; + } if (hPtr != NULL) { register Method *mPtr = Tcl_GetHashValue(hPtr); - if (!(flags & KNOWN_STATE)) { - if (flags & PUBLIC_METHOD) { - if (mPtr->flags & PUBLIC_METHOD) { + if (!IS_PRIVATE(mPtr)) { + if (!(flags & KNOWN_STATE)) { + if (flags & PUBLIC_METHOD) { + if (!IS_PUBLIC(mPtr)) { + return privateDanger; + } flags |= DEFINITE_PUBLIC; } else { - return; + flags |= DEFINITE_PROTECTED; } - } else { - flags |= DEFINITE_PROTECTED; } - } - if (!(mPtr->flags & TRUE_PRIVATE_METHOD)) { AddMethodToCallChain(mPtr, cbPtr, doneFilters, filterDecl, flags); } @@ -1714,11 +1734,11 @@ AddSimpleClassChainToCallContext( goto tailRecurse; default: FOREACH(superPtr, classPtr->superclasses) { - AddSimpleClassChainToCallContext(superPtr, methodNameObj, cbPtr, - doneFilters, flags, filterDecl); + privateDanger |= AddSimpleClassChainToCallContext(superPtr, + methodNameObj, cbPtr, doneFilters, flags, filterDecl); } case 0: - return; + return privateDanger; } } @@ -1738,7 +1758,7 @@ TclOORenderCallChain( Tcl_Interp *interp, CallChain *callPtr) { - Tcl_Obj *filterLiteral, *methodLiteral, *objectLiteral; + Tcl_Obj *filterLiteral, *methodLiteral, *objectLiteral, *privateLiteral; Tcl_Obj *resultObj, *descObjs[4], **objv; Foundation *fPtr = TclOOGetFoundation(interp); int i; @@ -1747,12 +1767,14 @@ TclOORenderCallChain( * Allocate the literals (potentially) used in our description. */ - filterLiteral = Tcl_NewStringObj("filter", -1); + TclNewLiteralStringObj(filterLiteral, "filter"); Tcl_IncrRefCount(filterLiteral); - methodLiteral = Tcl_NewStringObj("method", -1); + TclNewLiteralStringObj(methodLiteral, "method"); Tcl_IncrRefCount(methodLiteral); - objectLiteral = Tcl_NewStringObj("object", -1); + TclNewLiteralStringObj(objectLiteral, "object"); Tcl_IncrRefCount(objectLiteral); + TclNewLiteralStringObj(privateLiteral, "private"); + Tcl_IncrRefCount(privateLiteral); /* * Do the actual construction of the descriptions. They consist of a list @@ -1770,16 +1792,15 @@ TclOORenderCallChain( for (i=0 ; inumChain ; i++) { struct MInvoke *miPtr = &callPtr->chain[i]; - descObjs[0] = miPtr->isFilter - ? filterLiteral - : callPtr->flags & OO_UNKNOWN_METHOD - ? fPtr->unknownMethodNameObj - : methodLiteral; - descObjs[1] = callPtr->flags & CONSTRUCTOR - ? fPtr->constructorName - : callPtr->flags & DESTRUCTOR - ? fPtr->destructorName - : miPtr->mPtr->namePtr; + descObjs[0] = + miPtr->isFilter ? filterLiteral : + callPtr->flags & OO_UNKNOWN_METHOD ? fPtr->unknownMethodNameObj : + IS_PRIVATE(miPtr->mPtr) ? privateLiteral : + methodLiteral; + descObjs[1] = + callPtr->flags & CONSTRUCTOR ? fPtr->constructorName : + callPtr->flags & DESTRUCTOR ? fPtr->destructorName : + miPtr->mPtr->namePtr; descObjs[2] = miPtr->mPtr->declaringClassPtr ? Tcl_GetObjectName(interp, (Tcl_Object) miPtr->mPtr->declaringClassPtr->thisPtr) @@ -1797,6 +1818,7 @@ TclOORenderCallChain( Tcl_DecrRefCount(filterLiteral); Tcl_DecrRefCount(methodLiteral); Tcl_DecrRefCount(objectLiteral); + Tcl_DecrRefCount(privateLiteral); /* * Finish building the description and return it. diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index 43e2709..e81bbf9 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -236,6 +236,10 @@ typedef struct Object { * other spots). */ #define FORCE_UNKNOWN 0x10000 /* States that we are *really* looking up the * unknown method handler at that point. */ +#define HAS_PRIVATE_METHODS 0x20000 + /* Object/class has (or had) private methods, + * and so shouldn't be cached so + * aggressively. */ /* * And the definition of a class. Note that every class also has an associated diff --git a/generic/tclOOMethod.c b/generic/tclOOMethod.c index 82204f1..9bc9daa 100644 --- a/generic/tclOOMethod.c +++ b/generic/tclOOMethod.c @@ -188,6 +188,9 @@ Tcl_NewInstanceMethod( if (flags) { mPtr->flags |= flags & (PUBLIC_METHOD | PRIVATE_METHOD | TRUE_PRIVATE_METHOD); + if (flags & TRUE_PRIVATE_METHOD) { + oPtr->flags |= HAS_PRIVATE_METHODS; + } } oPtr->epoch++; return (Tcl_Method) mPtr; @@ -253,6 +256,9 @@ Tcl_NewMethod( if (flags) { mPtr->flags |= flags & (PUBLIC_METHOD | PRIVATE_METHOD | TRUE_PRIVATE_METHOD); + if (flags & TRUE_PRIVATE_METHOD) { + clsPtr->flags |= HAS_PRIVATE_METHODS; + } } return (Tcl_Method) mPtr; diff --git a/tests/oo.test b/tests/oo.test index 66400ff..9aedaaf 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4664,6 +4664,33 @@ test oo-39.10 {TIP 500: private methods internal call; error reporting} -setup { } -returnCodes error -cleanup { parent destroy } -result {unknown method "x": must be , destroy, equal, eval, unknown, variable or varname} +test oo-39.11 {TIP 500: private methods; call chain caching and reporting} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + method chain {} { + return [self call] + } + } + oo::class create cls2 { + superclass cls + private method chain {} { + next + } + method chain2 {} { + my chain + } + method chain3 {} { + [self] chain + } + } + cls create a + cls2 create b + list [a chain] [b chain] [b chain2] [b chain3] +} -cleanup { + parent destroy +} -result {{{{method chain ::cls method}} 0} {{{method chain ::cls method}} 0} {{{private chain ::cls2 method} {method chain ::cls method}} 1} {{{private chain ::cls2 method} {method chain ::cls method}} 1}} cleanupTests return -- cgit v0.12 From e6fdfbe93b022e8ac8dc26c7de9706b7b45d422f Mon Sep 17 00:00:00 2001 From: dkf Date: Tue, 15 May 2018 13:04:10 +0000 Subject: Make [info object methods] and [info class methods] work right. --- generic/tclOOCall.c | 9 ++++++++- generic/tclOOInfo.c | 10 +++++++--- generic/tclOOInt.h | 1 + tests/oo.test | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index 5fd0c2a..bc84da0 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -44,18 +44,25 @@ struct ChainBuilder { #define MIXIN_CONSISTENT(flags) \ (((flags) & OBJECT_MIXIN) || \ !((flags) & BUILDING_MIXINS) == !((flags) & TRAVERSED_MIXIN)) + /* - * Note that the flag bit PRIVATE_METHOD has a confusing name. + * Note that the flag bit PRIVATE_METHOD has a confusing name; it's just for + * Itcl's special type of private. */ + #define IS_PUBLIC(mPtr) \ (((mPtr)->flags & PUBLIC_METHOD) != 0) #define IS_UNEXPORTED(mPtr) \ + (((mPtr)->flags & SCOPE_FLAGS) == 0) +#define IS_ITCLPRIVATE(mPtr) \ (((mPtr)->flags & PRIVATE_METHOD) != 0) #define IS_PRIVATE(mPtr) \ (((mPtr)->flags & TRUE_PRIVATE_METHOD) != 0) #define WANT_PUBLIC(flags) \ (((flags) & PUBLIC_METHOD) != 0) #define WANT_UNEXPORTED(flags) \ + (((flags) & (PRIVATE_METHOD | TRUE_PRIVATE_METHOD)) == 0) +#define WANT_ITCLPRIVATE(flags) \ (((flags) & PRIVATE_METHOD) != 0) #define WANT_PRIVATE(flags) \ (((flags) & TRUE_PRIVATE_METHOD) != 0) diff --git a/generic/tclOOInfo.c b/generic/tclOOInfo.c index db490fb..fe433e4 100644 --- a/generic/tclOOInfo.c +++ b/generic/tclOOInfo.c @@ -533,7 +533,8 @@ InfoObjectMethodsCmd( "private", "public", "unexported" }; enum Scopes { - SCOPE_PRIVATE, SCOPE_PUBLIC, SCOPE_UNEXPORTED + SCOPE_PRIVATE, SCOPE_PUBLIC, SCOPE_UNEXPORTED, + SCOPE_LOCALPRIVATE }; if (objc < 2) { @@ -587,6 +588,9 @@ InfoObjectMethodsCmd( case SCOPE_PUBLIC: flag = PUBLIC_METHOD; break; + case SCOPE_LOCALPRIVATE: + flag = PRIVATE_METHOD; + break; case SCOPE_UNEXPORTED: flag = 0; break; @@ -608,7 +612,7 @@ InfoObjectMethodsCmd( } } else if (oPtr->methodsPtr) { FOREACH_HASH(namePtr, mPtr, oPtr->methodsPtr) { - if (mPtr->typePtr != NULL && (mPtr->flags & flag) == flag) { + if (mPtr->typePtr && (mPtr->flags & SCOPE_FLAGS) == flag) { Tcl_ListObjAppendElement(NULL, resultObj, namePtr); } } @@ -1314,7 +1318,7 @@ InfoClassMethodsCmd( FOREACH_HASH_DECLS; FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { - if (mPtr->typePtr != NULL && (mPtr->flags & flag) == flag) { + if (mPtr->typePtr && (mPtr->flags & SCOPE_FLAGS) == flag) { Tcl_ListObjAppendElement(NULL, resultObj, namePtr); } } diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index e81bbf9..a43ab76 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -407,6 +407,7 @@ typedef struct CallContext { /* This is a private method only accessible * from other methods defined on this class * or instance. [TIP #500] */ +#define SCOPE_FLAGS (PUBLIC_METHOD | PRIVATE_METHOD | TRUE_PRIVATE_METHOD) /* * Structure containing definition information about basic class methods. diff --git a/tests/oo.test b/tests/oo.test index 9aedaaf..9563b4f 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4691,6 +4691,42 @@ test oo-39.11 {TIP 500: private methods; call chain caching and reporting} -setu } -cleanup { parent destroy } -result {{{{method chain ::cls method}} 0} {{{method chain ::cls method}} 0} {{{private chain ::cls2 method} {method chain ::cls method}} 1} {{{private chain ::cls2 method} {method chain ::cls method}} 1}} +test oo-39.12 {TIP 500: private methods; introspection} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + method chain {} { + return [self call] + } + private method abc {} {} + } + oo::class create cls2 { + superclass cls + method chain2 {} { + my chain + } + method chain3 {} { + [self] chain + } + private method def {} {} + unexport chain3 + } + cls create a + cls2 create b + oo::objdefine b { + private method ghi {} {} + method ABC {} {} + method foo {} {} + } + set scopes {public unexported private} + list a: [lmap s $scopes {info object methods a -scope $s}] \ + b: [lmap s $scopes {info object methods b -scope $s}] \ + cls: [lmap s $scopes {info class methods cls -scope $s}] \ + cls2: [lmap s $scopes {info class methods cls2 -scope $s}] \ +} -cleanup { + parent destroy +} -result {a: {{} {} {}} b: {foo ABC ghi} cls: {chain {} abc} cls2: {chain2 chain3 def}} cleanupTests return -- cgit v0.12 From ba42e43e970a3a2f5299df4f36fb283c7cc9526b Mon Sep 17 00:00:00 2001 From: fvogel Date: Fri, 18 May 2018 06:18:56 +0000 Subject: Add test filesystem-1.30.1 checking file normalize ~$::tcl_platform(user). This test should currently fail when the computer is connected to a Windows domain controller, due to [9e6b569963]: file normalize ~user fails on Windows --- tests/fileSystem.test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/fileSystem.test b/tests/fileSystem.test index b805780..edc1df2 100644 --- a/tests/fileSystem.test +++ b/tests/fileSystem.test @@ -264,6 +264,9 @@ removeDirectory dir.dir test filesystem-1.30 {normalisation of nonexistent user} -body { file normalize ~noonewiththisname } -returnCodes error -result {user "noonewiththisname" doesn't exist} +test filesystem-1.30.1 {normalisation of existing user} -body { + catch {file normalize ~$::tcl_platform(user)} +} -result {0} test filesystem-1.31 {link normalisation: link near filesystem root} {testsetplatform} { testsetplatform unix file normalize /foo/../bar -- cgit v0.12 From 423f761169b37ab7bd60fa145f1b2a63c4075db0 Mon Sep 17 00:00:00 2001 From: fvogel Date: Fri, 18 May 2018 19:54:56 +0000 Subject: Fix [9e6b569963]: file normalize ~user fails on Windows --- win/tclWinFile.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 9afe0a9..beab147 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1444,6 +1444,7 @@ TclpGetUserHome( char *domain; WCHAR *wName, *wHomeDir, *wDomain, **wDomainPtr = &wDomain; WCHAR buf[MAX_PATH]; + LPCWSTR wServername = NULL; Tcl_DStringInit(bufferPtr); wDomain = NULL; @@ -1458,7 +1459,8 @@ TclpGetUserHome( if (badDomain == 0) { Tcl_DStringInit(&ds); wName = Tcl_UtfToUniCharDString(name, nameLen, &ds); - if (NetUserGetInfo(wDomain, wName, 1, (LPBYTE *) uiPtrPtr) == 0) { + NetGetDCName(NULL, wDomain, (LPBYTE *) &wServername); + if (NetUserGetInfo(wServername, wName, 1, (LPBYTE *) uiPtrPtr) == 0) { wHomeDir = uiPtr->usri1_home_dir; if ((wHomeDir != NULL) && (wHomeDir[0] != L'\0')) { Tcl_UniCharToUtfDString(wHomeDir, lstrlenW(wHomeDir), -- cgit v0.12 From dffe6bc7f17cc047da64213a097fe2f9b3a58865 Mon Sep 17 00:00:00 2001 From: fvogel Date: Sat, 19 May 2018 07:10:43 +0000 Subject: Add test filesystem-1.30.2 {normalisation of nonexistent user specified as user@domain} --- tests/fileSystem.test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/fileSystem.test b/tests/fileSystem.test index edc1df2..f778112 100644 --- a/tests/fileSystem.test +++ b/tests/fileSystem.test @@ -267,6 +267,9 @@ test filesystem-1.30 {normalisation of nonexistent user} -body { test filesystem-1.30.1 {normalisation of existing user} -body { catch {file normalize ~$::tcl_platform(user)} } -result {0} +test filesystem-1.30.2 {normalisation of nonexistent user specified as user@domain} -body { + file normalize ~nonexistentuser@nonexistentdomain +} -returnCodes error -result {user "nonexistentuser@nonexistentdomain" doesn't exist} test filesystem-1.31 {link normalisation: link near filesystem root} {testsetplatform} { testsetplatform unix file normalize /foo/../bar -- cgit v0.12 From d431841a06870d53eb32d3ae2e11339e58094aad Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 19 May 2018 08:38:42 +0000 Subject: Corrections for a number of small things to align with TIP --- generic/tclOO.decls | 4 +-- generic/tclOO.h | 9 +++++ generic/tclOODecls.h | 8 ++--- generic/tclOODefineCmds.c | 13 ++++--- tests/oo.test | 88 ++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 111 insertions(+), 11 deletions(-) diff --git a/generic/tclOO.decls b/generic/tclOO.decls index 265ba88..5bce926 100644 --- a/generic/tclOO.decls +++ b/generic/tclOO.decls @@ -58,12 +58,12 @@ declare 10 { } declare 11 { Tcl_Method Tcl_NewInstanceMethod(Tcl_Interp *interp, Tcl_Object object, - Tcl_Obj *nameObj, int isPublic, const Tcl_MethodType *typePtr, + Tcl_Obj *nameObj, int flags, const Tcl_MethodType *typePtr, ClientData clientData) } declare 12 { Tcl_Method Tcl_NewMethod(Tcl_Interp *interp, Tcl_Class cls, - Tcl_Obj *nameObj, int isPublic, const Tcl_MethodType *typePtr, + Tcl_Obj *nameObj, int flags, const Tcl_MethodType *typePtr, ClientData clientData) } declare 13 { diff --git a/generic/tclOO.h b/generic/tclOO.h index d051e79..9c1dd1e 100644 --- a/generic/tclOO.h +++ b/generic/tclOO.h @@ -99,6 +99,15 @@ typedef struct { */ #define TCL_OO_METHOD_VERSION_CURRENT 1 + +/* + * Visibility constants for the flags parameter to Tcl_NewMethod and + * Tcl_NewInstanceMethod. + */ + +#define TCL_OO_METHOD_PUBLIC 1 +#define TCL_OO_METHOD_UNEXPORTED 0 +#define TCL_OO_METHOD_PRIVATE 0x20 /* * The type of some object (or class) metadata. This describes how to delete diff --git a/generic/tclOODecls.h b/generic/tclOODecls.h index 9fd62ec..fd0f687 100644 --- a/generic/tclOODecls.h +++ b/generic/tclOODecls.h @@ -59,11 +59,11 @@ TCLAPI Tcl_Obj * Tcl_MethodName(Tcl_Method method); /* 11 */ TCLAPI Tcl_Method Tcl_NewInstanceMethod(Tcl_Interp *interp, Tcl_Object object, Tcl_Obj *nameObj, - int isPublic, const Tcl_MethodType *typePtr, + int flags, const Tcl_MethodType *typePtr, ClientData clientData); /* 12 */ TCLAPI Tcl_Method Tcl_NewMethod(Tcl_Interp *interp, Tcl_Class cls, - Tcl_Obj *nameObj, int isPublic, + Tcl_Obj *nameObj, int flags, const Tcl_MethodType *typePtr, ClientData clientData); /* 13 */ @@ -136,8 +136,8 @@ typedef struct TclOOStubs { int (*tcl_MethodIsPublic) (Tcl_Method method); /* 8 */ int (*tcl_MethodIsType) (Tcl_Method method, const Tcl_MethodType *typePtr, ClientData *clientDataPtr); /* 9 */ Tcl_Obj * (*tcl_MethodName) (Tcl_Method method); /* 10 */ - Tcl_Method (*tcl_NewInstanceMethod) (Tcl_Interp *interp, Tcl_Object object, Tcl_Obj *nameObj, int isPublic, const Tcl_MethodType *typePtr, ClientData clientData); /* 11 */ - Tcl_Method (*tcl_NewMethod) (Tcl_Interp *interp, Tcl_Class cls, Tcl_Obj *nameObj, int isPublic, const Tcl_MethodType *typePtr, ClientData clientData); /* 12 */ + Tcl_Method (*tcl_NewInstanceMethod) (Tcl_Interp *interp, Tcl_Object object, Tcl_Obj *nameObj, int flags, const Tcl_MethodType *typePtr, ClientData clientData); /* 11 */ + Tcl_Method (*tcl_NewMethod) (Tcl_Interp *interp, Tcl_Class cls, Tcl_Obj *nameObj, int flags, const Tcl_MethodType *typePtr, ClientData clientData); /* 12 */ Tcl_Object (*tcl_NewObjectInstance) (Tcl_Interp *interp, Tcl_Class cls, const char *nameStr, const char *nsNameStr, int objc, Tcl_Obj *const *objv, int skip); /* 13 */ int (*tcl_ObjectDeleted) (Tcl_Object object); /* 14 */ int (*tcl_ObjectContextIsFiltering) (Tcl_ObjectContext context); /* 15 */ diff --git a/generic/tclOODefineCmds.c b/generic/tclOODefineCmds.c index 403ed1a..7281d7a 100644 --- a/generic/tclOODefineCmds.c +++ b/generic/tclOODefineCmds.c @@ -1187,7 +1187,7 @@ TclOODefineSelfObjCmd( { Foundation *fPtr = TclOOGetFoundation(interp); Object *oPtr; - int result; + int result, private; oPtr = (Object *) TclOOGetDefineCmdContext(interp); if (oPtr == NULL) { @@ -1199,6 +1199,8 @@ TclOODefineSelfObjCmd( return TCL_OK; } + private = IsPrivateDefine(interp); + /* * Make the oo::objdefine namespace the current namespace and evaluate the * command(s). @@ -1207,6 +1209,9 @@ TclOODefineSelfObjCmd( if (InitDefineContext(interp, fPtr->objdefNs, oPtr, objc,objv) != TCL_OK){ return TCL_ERROR; } + if (private) { + ((Interp *) interp)->varFramePtr->isProcCallFrame = PRIVATE_FRAME; + } AddRef(oPtr); if (objc == 2) { @@ -1298,9 +1303,9 @@ TclOODefinePrivateObjCmd( if (oPtr == NULL) { return TCL_ERROR; } - if (objc < 2) { - Tcl_WrongNumArgs(interp, 1, objv, "definitionCommand ..."); - return TCL_ERROR; + if (objc == 1) { + Tcl_SetObjResult(interp, Tcl_NewBooleanObj(IsPrivateDefine(interp))); + return TCL_OK; } /* diff --git a/tests/oo.test b/tests/oo.test index 9563b4f..24f23ae 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4298,7 +4298,7 @@ test oo-38.2 {TIP 500: private variables introspection} -setup { } -cleanup { parent destroy } -result {{y1 y2} {x1 x2} {b1 b2} {a1 a2}} -test oo-38.3 {TIP 500: private variables and obj·varname} -setup { +test oo-38.3 {TIP 500: private variables and oo::object·varname} -setup { oo::class create parent } -body { oo::class create clsA { @@ -4372,6 +4372,65 @@ test oo-38.4 {TIP 500: private variables introspection} -setup { } -cleanup { parent destroy } -result {ok {ok x1 x2 y1 y2 z} 0 yes {a1 a2 b1 b2 yes z} 0} +test oo-38.5 {TIP 500: private variables and oo::object·variable} -setup { + oo::class create parent +} -body { + oo::class create cls1 { + superclass parent + private variable x + method abc val { + my variable x + set x $val + } + method def val { + my variable y + set y $val + } + method get1 {} { + my variable x y + return [list $x $y] + } + } + oo::class create cls2 { + superclass cls1 + private variable x + method x-exists {} { + return [info exists x],[uplevel 1 {info exists x}] + } + method ghi x { + # Additional instrumentation to show that we're not using the + # resolved variable until we ask for it; the argument nixed that + # happening by default. + set val $x + set before [my x-exists] + unset x + set x $val + set mid [my x-exists] + unset x + set mid2 [my x-exists] + my variable x + set x $val + set after [my x-exists] + return "$before;$mid;$mid2;$after" + } + method jkl val { + my variable y + set y $val + } + method get2 {} { + my variable x y + return [list $x $y] + } + } + cls2 create a + a abc 123 + a def 234 + set tmp [a ghi 345] + a jkl 456 + list $tmp [a get1] [a get2] +} -cleanup { + parent destroy +} -result {{0,1;0,1;0,0;1,1} {123 456} {345 456}} test oo-39.1 {TIP 500: private methods internal call; class private} -setup { oo::class create parent @@ -4727,6 +4786,33 @@ test oo-39.12 {TIP 500: private methods; introspection} -setup { } -cleanup { parent destroy } -result {a: {{} {} {}} b: {foo ABC ghi} cls: {chain {} abc} cls2: {chain2 chain3 def}} + +test oo-40.1 {TIP 500: private and self} -setup { + oo::class create cls +} -body { + oo::define cls { + self { + private { + variable a + } + variable b + } + private { + self { + variable c + } + variable d + } + variable e + } + list \ + [lsort [info class variables cls]] \ + [lsort [info class variables cls -private]] \ + [lsort [info object variables cls]] \ + [lsort [info object variables cls -private]] +} -cleanup { + cls destroy +} -result {e d b {a c}} cleanupTests return -- cgit v0.12 From 791f1c2741cd972e66bbaf65821f64e76d9c6f89 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 19 May 2018 11:18:51 +0000 Subject: Minor updates to C API to handle private methods. --- doc/Method.3 | 44 +++++++++++++++++++++++++++++++------------- generic/tclOO.decls | 3 +++ generic/tclOODecls.h | 5 +++++ generic/tclOOMethod.c | 7 +++++++ generic/tclOOStubInit.c | 1 + 5 files changed, 47 insertions(+), 13 deletions(-) diff --git a/doc/Method.3 b/doc/Method.3 index 225da00..9e636a1 100644 --- a/doc/Method.3 +++ b/doc/Method.3 @@ -9,18 +9,18 @@ .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME -Tcl_ClassSetConstructor, Tcl_ClassSetDestructor, Tcl_MethodDeclarerClass, Tcl_MethodDeclarerObject, Tcl_MethodIsPublic, Tcl_MethodIsType, Tcl_MethodName, Tcl_NewInstanceMethod, Tcl_NewMethod, Tcl_ObjectContextInvokeNext, Tcl_ObjectContextIsFiltering, Tcl_ObjectContextMethod, Tcl_ObjectContextObject, Tcl_ObjectContextSkippedArgs \- manipulate methods and method-call contexts +Tcl_ClassSetConstructor, Tcl_ClassSetDestructor, Tcl_MethodDeclarerClass, Tcl_MethodDeclarerObject, Tcl_MethodIsPublic, Tcl_MethodIsPrivate, Tcl_MethodIsType, Tcl_MethodName, Tcl_NewInstanceMethod, Tcl_NewMethod, Tcl_ObjectContextInvokeNext, Tcl_ObjectContextIsFiltering, Tcl_ObjectContextMethod, Tcl_ObjectContextObject, Tcl_ObjectContextSkippedArgs \- manipulate methods and method-call contexts .SH SYNOPSIS .nf \fB#include \fR .sp Tcl_Method -\fBTcl_NewMethod\fR(\fIinterp, class, nameObj, isPublic, - methodTypePtr, clientData\fR) +\fBTcl_NewMethod\fR(\fIinterp, class, nameObj, flags, methodTypePtr, + clientData\fR) .sp Tcl_Method -\fBTcl_NewInstanceMethod\fR(\fIinterp, object, nameObj, isPublic, - methodTypePtr, clientData\fR) +\fBTcl_NewInstanceMethod\fR(\fIinterp, object, nameObj, flags, methodTypePtr, + clientData\fR) .sp \fBTcl_ClassSetConstructor\fR(\fIinterp, class, method\fR) .sp @@ -35,8 +35,13 @@ Tcl_Object Tcl_Obj * \fBTcl_MethodName\fR(\fImethod\fR) .sp +.VS TIP500 int \fBTcl_MethodIsPublic\fR(\fImethod\fR) +.VE TIP500 +.sp +int +\fBTcl_MethodIsPrivate\fR(\fImethod\fR) .sp int \fBTcl_MethodIsType\fR(\fImethod, methodTypePtr, clientDataPtr\fR) @@ -66,10 +71,15 @@ The class to create the method in. .AP Tcl_Obj *nameObj in The name of the method to create. Should not be NULL unless creating constructors or destructors. -.AP int isPublic in -A flag saying what the visibility of the method is. The only supported public -values of this flag are 0 for a non-exported method, and 1 for an exported -method. +.AP int flags in +A flag saying (currently) what the visibility of the method is. The supported +public values of this flag are \fBTCL_OO_METHOD_PUBLIC\fR (which is fixed at 1 +for backward compatibility) for an exported method, +\fBTCL_OO_METHOD_UNEXPORTED\fR (which is fixed at 0 for backward +compatibility) for a non-exported method, +.VS TIP500 +and \fBTCL_OO_METHOD_PRIVATE\fR for a private method. +.VE TIP500 .AP Tcl_MethodType *methodTypePtr in A description of the type of the method to create, or the type of method to compare against. @@ -105,8 +115,12 @@ Given a method, the entity that declared it can be found using attached to (or NULL if the method is not attached to any class) and \fBTcl_MethodDeclarerObject\fR which returns the object that the method is attached to (or NULL if the method is not attached to an object). The name of -the method can be retrieved with \fBTcl_MethodName\fR and whether the method -is exported is retrieved with \fBTcl_MethodIsPublic\fR. The type of the method +the method can be retrieved with \fBTcl_MethodName\fR, whether the method +is exported is retrieved with \fBTcl_MethodIsPublic\fR, +.VS TIP500 +and whether the method is private is retrieved with \fBTcl_MethodIsPrivate\fR. +.VE TIP500 +The type of the method can also be introspected upon to a limited degree; the function \fBTcl_MethodIsType\fR returns whether a method is of a particular type, assigning the per-method \fIclientData\fR to the variable pointed to by @@ -117,8 +131,12 @@ Methods are created by \fBTcl_NewMethod\fR and \fBTcl_NewInstanceMethod\fR, which create a method attached to a class or an object respectively. In both cases, the \fInameObj\fR argument gives the name of the method to create, the -\fIisPublic\fR argument states whether the method should be exported -initially, the \fImethodTypePtr\fR argument describes the implementation of +\fIflags\fR argument states whether the method should be exported +initially +.VS TIP500 +or be marked as a private method, +.VE TIP500 +the \fImethodTypePtr\fR argument describes the implementation of the method (see the \fBMETHOD TYPES\fR section below) and the \fIclientData\fR argument gives some implementation-specific data that is passed on to the implementation of the method when it is called. diff --git a/generic/tclOO.decls b/generic/tclOO.decls index 5bce926..f1bb320 100644 --- a/generic/tclOO.decls +++ b/generic/tclOO.decls @@ -126,6 +126,9 @@ declare 27 { declare 28 { Tcl_Obj *Tcl_GetObjectName(Tcl_Interp *interp, Tcl_Object object) } +declare 29 { + int Tcl_MethodIsPrivate(Tcl_Method method) +} ###################################################################### # Private API, exposed to support advanced OO systems that plug in on top of diff --git a/generic/tclOODecls.h b/generic/tclOODecls.h index fd0f687..928d07e 100644 --- a/generic/tclOODecls.h +++ b/generic/tclOODecls.h @@ -116,6 +116,8 @@ TCLAPI void Tcl_ClassSetDestructor(Tcl_Interp *interp, /* 28 */ TCLAPI Tcl_Obj * Tcl_GetObjectName(Tcl_Interp *interp, Tcl_Object object); +/* 29 */ +TCLAPI int Tcl_MethodIsPrivate(Tcl_Method method); typedef struct { const struct TclOOIntStubs *tclOOIntStubs; @@ -154,6 +156,7 @@ typedef struct TclOOStubs { void (*tcl_ClassSetConstructor) (Tcl_Interp *interp, Tcl_Class clazz, Tcl_Method method); /* 26 */ void (*tcl_ClassSetDestructor) (Tcl_Interp *interp, Tcl_Class clazz, Tcl_Method method); /* 27 */ Tcl_Obj * (*tcl_GetObjectName) (Tcl_Interp *interp, Tcl_Object object); /* 28 */ + int (*tcl_MethodIsPrivate) (Tcl_Method method); /* 29 */ } TclOOStubs; extern const TclOOStubs *tclOOStubsPtr; @@ -226,6 +229,8 @@ extern const TclOOStubs *tclOOStubsPtr; (tclOOStubsPtr->tcl_ClassSetDestructor) /* 27 */ #define Tcl_GetObjectName \ (tclOOStubsPtr->tcl_GetObjectName) /* 28 */ +#define Tcl_MethodIsPrivate \ + (tclOOStubsPtr->tcl_MethodIsPrivate) /* 29 */ #endif /* defined(USE_TCLOO_STUBS) */ diff --git a/generic/tclOOMethod.c b/generic/tclOOMethod.c index 9bc9daa..ad14a1a 100644 --- a/generic/tclOOMethod.c +++ b/generic/tclOOMethod.c @@ -1699,6 +1699,13 @@ Tcl_MethodIsPublic( { return (((Method *)method)->flags & PUBLIC_METHOD) ? 1 : 0; } + +int +Tcl_MethodIsPrivate( + Tcl_Method method) +{ + return (((Method *)method)->flags & TRUE_PRIVATE_METHOD) ? 1 : 0; +} /* * Extended method construction for itcl-ng. diff --git a/generic/tclOOStubInit.c b/generic/tclOOStubInit.c index 900ab22..5e235f4 100644 --- a/generic/tclOOStubInit.c +++ b/generic/tclOOStubInit.c @@ -73,6 +73,7 @@ const TclOOStubs tclOOStubs = { Tcl_ClassSetConstructor, /* 26 */ Tcl_ClassSetDestructor, /* 27 */ Tcl_GetObjectName, /* 28 */ + Tcl_MethodIsPrivate, /* 29 */ }; /* !END!: Do not edit above this line. */ -- cgit v0.12 From 0cab7d260b6e86a7ba0c877e2d83ec6b8df0edf1 Mon Sep 17 00:00:00 2001 From: dkf Date: Tue, 22 May 2018 08:26:55 +0000 Subject: More docs --- doc/info.n | 209 ++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 115 insertions(+), 94 deletions(-) diff --git a/doc/info.n b/doc/info.n index 9fb89fa..869169d 100644 --- a/doc/info.n +++ b/doc/info.n @@ -35,10 +35,9 @@ Returns the body of procedure \fIprocname\fR. \fIProcname\fR must be the name of a Tcl command procedure. .TP \fBinfo class\fI subcommand class\fR ?\fIarg ...\fR -.VS 8.6 +. Returns information about the class, \fIclass\fR. The \fIsubcommand\fRs are described in \fBCLASS INTROSPECTION\fR below. -.VE 8.6 .TP \fBinfo cmdcount\fR . @@ -78,11 +77,10 @@ command is not complete, the script can delay evaluating it until additional lines have been typed to complete the command. .TP \fBinfo coroutine\fR -.VS 8.6 +. Returns the name of the currently executing \fBcoroutine\fR, or the empty string if either no coroutine is currently executing, or the current coroutine has been deleted (but has not yet returned or yielded since deletion). -.VE 8.6 .TP \fBinfo default \fIprocname arg varname\fR . @@ -93,7 +91,7 @@ Otherwise it returns \fB1\fR and places the default value of \fIarg\fR into variable \fIvarname\fR. .TP \fBinfo errorstack \fR?\fIinterp\fR? -.VS 8.6 +. Returns, in a form that is programmatically easy to parse, the function names and arguments at each level from the call stack of the last error in the given \fIinterp\fR, or in the current one if not specified. @@ -118,7 +116,6 @@ options dictionary returned by 3-argument \fBcatch\fR; \fBinfo errorstack\fR is a convenient way of retrieving it for uncaught errors at top-level in an interactive \fBtclsh\fR. .RE -.VE 8.6 .TP \fBinfo exists \fIvarName\fR . @@ -329,10 +326,9 @@ was invoked. If Tcl was unable to identify the file, then an empty string is returned. .TP \fBinfo object\fI subcommand object\fR ?\fIarg ...\fR -.VS 8.6 +. Returns information about the object, \fIobject\fR. The \fIsubcommand\fRs are described in \fBOBJECT INTROSPECTION\fR below. -.VE 8.6 .TP \fBinfo patchlevel\fR . @@ -399,13 +395,11 @@ Note that a currently-visible variable may not yet if it has not been set (e.g. a variable declared but not set by \fBvariable\fR). .SS "CLASS INTROSPECTION" -.VS 8.6 .PP The following \fIsubcommand\fR values are supported by \fBinfo class\fR: -.VE 8.6 .TP \fBinfo class call\fI class method\fR -.VS +. Returns a description of the method implementations that are used to provide a stereotypical instance of \fIclass\fR's implementation of \fImethod\fR (stereotypical instances being objects instantiated by a class without having @@ -425,115 +419,134 @@ implementation (see \fBinfo class methodtype\fR). Note that there is no inspection of whether the method implementations actually use \fBnext\fR to transfer control along the call chain. .RE -.VE 8.6 .TP \fBinfo class constructor\fI class\fR -.VS 8.6 +. This subcommand returns a description of the definition of the constructor of class \fIclass\fR. The definition is described as a two element list; the first element is the list of arguments to the constructor in a form suitable for passing to another call to \fBproc\fR or a method definition, and the second element is the body of the constructor. If no constructor is present, this returns the empty list. -.VE 8.6 .TP \fBinfo class definition\fI class method\fR -.VS 8.6 +. This subcommand returns a description of the definition of the method named \fImethod\fR of class \fIclass\fR. The definition is described as a two element list; the first element is the list of arguments to the method in a form suitable for passing to another call to \fBproc\fR or a method definition, and the second element is the body of the method. -.VE 8.6 .TP \fBinfo class destructor\fI class\fR -.VS 8.6 +. This subcommand returns the body of the destructor of class \fIclass\fR. If no destructor is present, this returns the empty string. -.VE 8.6 .TP \fBinfo class filters\fI class\fR -.VS 8.6 +. This subcommand returns the list of filter methods set on the class. -.VE 8.6 .TP \fBinfo class forward\fI class method\fR -.VS 8.6 +. This subcommand returns the argument list for the method forwarding called \fImethod\fR that is set on the class called \fIclass\fR. -.VE 8.6 .TP \fBinfo class instances\fI class\fR ?\fIpattern\fR? -.VS 8.6 +. This subcommand returns a list of instances of class \fIclass\fR. If the optional \fIpattern\fR argument is present, it constrains the list of returned instances to those that match it according to the rules of \fBstring match\fR. -.VE 8.6 .TP \fBinfo class methods\fI class\fR ?\fIoptions...\fR? -.VS 8.6 +. This subcommand returns a list of all public (i.e. exported) methods of the class called \fIclass\fR. Any of the following \fIoption\fRs may be specified, controlling exactly which method names are returned: .RS -.VE 8.6 .TP \fB\-all\fR -.VS 8.6 -If the \fB\-all\fR flag is given, the list of methods will include those +. +If the \fB\-all\fR flag is given, +.VS TIP500 +and the \fB\-scope\fR flag is not given, +.VE TIP500 +the list of methods will include those methods defined not just by the class, but also by the class's superclasses and mixins. -.VE 8.6 .TP \fB\-private\fR -.VS 8.6 -If the \fB\-private\fR flag is given, the list of methods will also include -the private (i.e. non-exported) methods of the class (and superclasses and +. +If the \fB\-private\fR flag is given, +.VS TIP500 +and the \fB\-scope\fR flag is not given, +.VE TIP500 +the list of methods will also include +the non-exported methods of the class (and superclasses and mixins, if \fB\-all\fR is also given). +.VS TIP500 +Note that this naming is an unfortunate clash with true private methods; this +option name is retained for backward compatibility. +.VE TIP500 +.TP +\fB\-scope\fI scope\fR +.VS TIP500 +Returns a list of all methods on \fIclass\fR that have the given visibility +\fIscope\fR. When this option is supplied, both the \fB\-all\fR and +\fB\-private\fR options are ignored. The valid values for \fIscope\fR are: +.RS +.IP \fBpublic\fR 3 +Only methods with \fIpublic\fR scope (i.e., callable from anywhere by any instance +of this class) are to be returned. +.IP \fBunexported\fR 3 +Only methods with \fIunexported\fR scope (i.e., only callable via \fBmy\fR) are to +be returned. +.IP \fBprivate\fR 3 +Only methods with \fIprivate\fR scope (i.e., only callable from within this class's +methods) are to be returned. +.RE +.VE TIP500 .RE -.VE 8.6 .TP \fBinfo class methodtype\fI class method\fR -.VS 8.6 +. This subcommand returns a description of the type of implementation used for the method named \fImethod\fR of class \fIclass\fR. When the result is \fBmethod\fR, further information can be discovered with \fBinfo class definition\fR, and when the result is \fBforward\fR, further information can be discovered with \fBinfo class forward\fR. -.VE 8.6 .TP \fBinfo class mixins\fI class\fR -.VS 8.6 +. This subcommand returns a list of all classes that have been mixed into the class named \fIclass\fR. -.VE 8.6 .TP \fBinfo class subclasses\fI class\fR ?\fIpattern\fR? -.VS 8.6 +. This subcommand returns a list of direct subclasses of class \fIclass\fR. If the optional \fIpattern\fR argument is present, it constrains the list of returned classes to those that match it according to the rules of \fBstring match\fR. -.VE 8.6 .TP \fBinfo class superclasses\fI class\fR -.VS 8.6 +. This subcommand returns a list of direct superclasses of class \fIclass\fR in inheritance precedence order. -.VE 8.6 .TP -\fBinfo class variables\fI class\fR -.VS 8.6 +\fBinfo class variables\fI class\fR ?\fB\-private\fR? +. This subcommand returns a list of all variables that have been declared for the class named \fIclass\fR (i.e. that are automatically present in the class's methods, constructor and destructor). +.VS TIP500 +If the \fB\-private\fR option is specified, this lists the private variables +declared instead. +.VE TIP500 .SS "OBJECT INTROSPECTION" .PP The following \fIsubcommand\fR values are supported by \fBinfo object\fR: -.VE 8.6 .TP \fBinfo object call\fI object method\fR -.VS 8.6 +. Returns a description of the method implementations that are used to provide \fIobject\fR's implementation of \fImethod\fR. This consists of a list of lists of four elements, where each sublist consists of a word that describes @@ -552,14 +565,12 @@ implementation (see \fBinfo object methodtype\fR). Note that there is no inspection of whether the method implementations actually use \fBnext\fR to transfer control along the call chain. .RE -.VE 8.6 .TP \fBinfo object class\fI object\fR ?\fIclassName\fR? -.VS 8.6 +. If \fIclassName\fR is unspecified, this subcommand returns class of the \fIobject\fR object. If \fIclassName\fR is present, this subcommand returns a boolean value indicating whether the \fIobject\fR is of that class. -.VE 8.6 .TP \fBinfo object creationid\fI object\fR .VS TIP500 @@ -574,116 +585,134 @@ identifiers associated with the object, especially for private variables. .VE TIP500 .TP \fBinfo object definition\fI object method\fR -.VS 8.6 +. This subcommand returns a description of the definition of the method named \fImethod\fR of object \fIobject\fR. The definition is described as a two element list; the first element is the list of arguments to the method in a form suitable for passing to another call to \fBproc\fR or a method definition, and the second element is the body of the method. -.VE 8.6 .TP \fBinfo object filters\fI object\fR -.VS 8.6 +. This subcommand returns the list of filter methods set on the object. -.VE 8.6 .TP \fBinfo object forward\fI object method\fR -.VS 8.6 +. This subcommand returns the argument list for the method forwarding called \fImethod\fR that is set on the object called \fIobject\fR. -.VE 8.6 .TP \fBinfo object isa\fI category object\fR ?\fIarg\fR? -.VS 8.6 +. This subcommand tests whether an object belongs to a particular category, returning a boolean value that indicates whether the \fIobject\fR argument meets the criteria for the category. The supported categories are: -.VE 8.6 .RS .TP \fBinfo object isa class\fI object\fR -.VS 8.6 +. This returns whether \fIobject\fR is a class (i.e. an instance of \fBoo::class\fR or one of its subclasses). -.VE 8.6 .TP \fBinfo object isa metaclass\fI object\fR -.VS 8.6 +. This returns whether \fIobject\fR is a class that can manufacture classes (i.e. is \fBoo::class\fR or a subclass of it). -.VE 8.6 .TP \fBinfo object isa mixin\fI object class\fR -.VS 8.6 +. This returns whether \fIclass\fR is directly mixed into \fIobject\fR. -.VE 8.6 .TP \fBinfo object isa object\fI object\fR -.VS 8.6 +. This returns whether \fIobject\fR really is an object. -.VE 8.6 .TP \fBinfo object isa typeof\fI object class\fR -.VS 8.6 +. This returns whether \fIclass\fR is the type of \fIobject\fR (i.e. whether \fIobject\fR is an instance of \fIclass\fR or one of its subclasses, whether direct or indirect). .RE -.VE 8.6 .TP \fBinfo object methods\fI object\fR ?\fIoption...\fR? -.VS 8.6 +. This subcommand returns a list of all public (i.e. exported) methods of the object called \fIobject\fR. Any of the following \fIoption\fRs may be specified, controlling exactly which method names are returned: .RS -.VE 8.6 .TP \fB\-all\fR -.VS 8.6 -If the \fB\-all\fR flag is given, the list of methods will include those +. +If the \fB\-all\fR flag is given, +.VS TIP500 +and the \fB\-scope\fR flag is not given, +.VE TIP500 +the list of methods will include those methods defined not just by the object, but also by the object's class and mixins, plus the superclasses of those classes. -.VE 8.6 .TP \fB\-private\fR -.VS 8.6 -If the \fB\-private\fR flag is given, the list of methods will also include -the private (i.e. non-exported) methods of the object (and classes, if +. +If the \fB\-private\fR flag is given, +.VS TIP500 +and the \fB\-scope\fR flag is not given, +.VE TIP500 +the list of methods will also include +the non-exported methods of the object (and classes, if \fB\-all\fR is also given). +.VS TIP500 +Note that this naming is an unfortunate clash with true private methods; this +option name is retained for backward compatibility. +.VE TIP500 +.TP +\fB\-scope\fI scope\fR +.VS TIP500 +Returns a list of all methods on \fIobject\fR that have the given visibility +\fIscope\fR. When this option is supplied, both the \fB\-all\fR and +\fB\-private\fR options are ignored. The valid values for \fIscope\fR are: +.RS +.IP \fBpublic\fR 3 +Only methods with \fIpublic\fR scope (i.e., callable from anywhere) are to be +returned. +.IP \fBunexported\fR 3 +Only methods with \fIunexported\fR scope (i.e., only callable via \fBmy\fR) are to +be returned. +.IP \fBprivate\fR 3 +Only methods with \fIprivate\fR scope (i.e., only callable from within this object's +instance methods) are to be returned. +.RE +.VE TIP500 .RE -.VE 8.6 .TP \fBinfo object methodtype\fI object method\fR -.VS 8.6 +. This subcommand returns a description of the type of implementation used for the method named \fImethod\fR of object \fIobject\fR. When the result is \fBmethod\fR, further information can be discovered with \fBinfo object definition\fR, and when the result is \fBforward\fR, further information can be discovered with \fBinfo object forward\fR. -.VE 8.6 .TP \fBinfo object mixins\fI object\fR -.VS 8.6 +. This subcommand returns a list of all classes that have been mixed into the object named \fIobject\fR. -.VE 8.6 .TP \fBinfo object namespace\fI object\fR -.VS 8.6 +. This subcommand returns the name of the internal namespace of the object named \fIobject\fR. -.VE 8.6 .TP -\fBinfo object variables\fI object\fR -.VS 8.6 +\fBinfo object variables\fI object\fRR ?\fB\-private\fR? +. This subcommand returns a list of all variables that have been declared for the object named \fIobject\fR (i.e. that are automatically present in the object's methods). -.VE 8.6 +.VS TIP500 +If the \fB\-private\fR option is specified, this lists the private variables +declared instead. +.VE TIP500 .TP \fBinfo object vars\fI object\fR ?\fIpattern\fR? -.VS 8.6 +. This subcommand returns a list of all variables in the private namespace of the object named \fIobject\fR. If the optional \fIpattern\fR argument is given, it is a filter (in the syntax of a \fBstring match\fR glob pattern) @@ -692,7 +721,6 @@ from the list returned by \fBinfo object variables\fR; that can include variables that are currently unset, whereas this can include variables that are not automatically included by any of \fIobject\fR's methods (or those of its class, superclasses or mixins). -.VE 8.6 .SH EXAMPLES .PP This command prints out a procedure suitable for saving in a Tcl @@ -715,7 +743,6 @@ proc printProc {procName} { } .CE .SS "EXAMPLES WITH OBJECTS" -.VS 8.6 .PP Every object necessarily knows what its class is; this information is trivially extractable through introspection: @@ -772,18 +799,12 @@ proc getDef {obj method} { return [\fBinfo class definition\fR $cls $method] } .CE -.VE 8.6 .SH "SEE ALSO" -.VS 8.6 global(n), oo::class(n), oo::define(n), oo::object(n), proc(n), self(n), -.VE 8.6 tcl_library(n), tcl_patchLevel(n), tcl_version(n) .SH KEYWORDS command, information, interpreter, introspection, level, namespace, -.VS 8.6 -object, -.VE 8.6 -procedure, variable +object, procedure, variable '\" Local Variables: '\" mode: nroff '\" fill-column: 78 -- cgit v0.12 From 36a1a69178cf1667f7ddd31ee00274f9e7709139 Mon Sep 17 00:00:00 2001 From: fvogel Date: Wed, 23 May 2018 21:08:01 +0000 Subject: Add support for ~domain\user style user names, with new test test filesystem-1.30.3. Warning: does not yet work. --- tests/fileSystem.test | 3 +++ win/tclWinFile.c | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/tests/fileSystem.test b/tests/fileSystem.test index f778112..277fcd3 100644 --- a/tests/fileSystem.test +++ b/tests/fileSystem.test @@ -270,6 +270,9 @@ test filesystem-1.30.1 {normalisation of existing user} -body { test filesystem-1.30.2 {normalisation of nonexistent user specified as user@domain} -body { file normalize ~nonexistentuser@nonexistentdomain } -returnCodes error -result {user "nonexistentuser@nonexistentdomain" doesn't exist} +test filesystem-1.30.3 {normalisation of nonexistent user specified as domain\user} -body { + file normalize ~nonexistentdomain\\nonexistentuser +} -returnCodes error -result {user "nonexistentdomain\nonexistentuser" doesn't exist} test filesystem-1.31 {link normalisation: link near filesystem root} {testsetplatform} { testsetplatform unix file normalize /foo/../bar diff --git a/win/tclWinFile.c b/win/tclWinFile.c index beab147..b8fb046 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1441,11 +1441,13 @@ TclpGetUserHome( Tcl_DString ds; int nameLen = -1; int badDomain = 0; - char *domain; + char *domain, *user; + const char *nameStart; WCHAR *wName, *wHomeDir, *wDomain, **wDomainPtr = &wDomain; WCHAR buf[MAX_PATH]; LPCWSTR wServername = NULL; + nameStart = name; Tcl_DStringInit(bufferPtr); wDomain = NULL; domain = strchr(name, '@'); @@ -1455,10 +1457,20 @@ TclpGetUserHome( badDomain = NetGetDCName(NULL, wName, (LPBYTE *) wDomainPtr); Tcl_DStringFree(&ds); nameLen = domain - name; + } else { + user = strchr(name, '\\'); + if (user != NULL) { + Tcl_DStringInit(&ds); + wName = Tcl_UtfToUniCharDString(name, user - name, &ds); + badDomain = NetGetDCName(NULL, wName, (LPBYTE *) wDomainPtr); + Tcl_DStringFree(&ds); + nameStart = user + 1; + nameLen = name + strlen(name) - 1 - user; + } } if (badDomain == 0) { Tcl_DStringInit(&ds); - wName = Tcl_UtfToUniCharDString(name, nameLen, &ds); + wName = Tcl_UtfToUniCharDString(nameStart, nameLen, &ds); NetGetDCName(NULL, wDomain, (LPBYTE *) &wServername); if (NetUserGetInfo(wServername, wName, 1, (LPBYTE *) uiPtrPtr) == 0) { wHomeDir = uiPtr->usri1_home_dir; @@ -1477,7 +1489,7 @@ TclpGetUserHome( } Tcl_UniCharToUtfDString(buf, size-1, bufferPtr); Tcl_DStringAppend(bufferPtr, "/", -1); - Tcl_DStringAppend(bufferPtr, name, -1); + Tcl_DStringAppend(bufferPtr, nameStart, nameLen); } result = Tcl_DStringValue(bufferPtr); NetApiBufferFree((void *) uiPtr); -- cgit v0.12 From 1c13d543f4934c33e441ef5c77a592b9822a8823 Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 24 May 2018 20:49:12 +0000 Subject: [9e6b569963] win: if user specified without domain (and local user was not found), try to resolve user-home using current domain, so following code's are similar: file normalize ~$::tcl_platform(user)@$::env(USERDOMAIN) file normalize ~$::tcl_platform(user) --- win/tclWinFile.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 1acc225..a3fad1d 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1446,30 +1446,41 @@ TclpGetUserHome( GetProcAddress(userenvInst, "GetProfilesDirectoryW"); if ((netUserGetInfoProc != NULL) && (netGetDCNameProc != NULL) && (netApiBufferFreeProc != NULL) && (getProfilesDirectoryProc != NULL)) { - USER_INFO_1 *uiPtr, **uiPtrPtr = &uiPtr; + USER_INFO_1 *uiPtr; Tcl_DString ds; - int nameLen, badDomain; + int nameLen, rc; char *domain; WCHAR *wName, *wHomeDir, *wDomain; WCHAR buf[MAX_PATH]; - badDomain = 0; + rc = 0; nameLen = -1; wDomain = NULL; domain = strchr(name, '@'); if (domain != NULL) { Tcl_DStringInit(&ds); wName = Tcl_UtfToUniCharDString(domain + 1, -1, &ds); - badDomain = (netGetDCNameProc)(NULL, wName, - (LPBYTE *) &wDomain); + rc = (netGetDCNameProc)(NULL, wName, (LPBYTE *) &wDomain); Tcl_DStringFree(&ds); nameLen = domain - name; } - if (badDomain == 0) { + if (rc == 0) { Tcl_DStringInit(&ds); wName = Tcl_UtfToUniCharDString(name, nameLen, &ds); - if ((netUserGetInfoProc)(wDomain, wName, 1, - (LPBYTE *) uiPtrPtr) == 0) { + while ((netUserGetInfoProc)(wDomain, wName, 1, + (LPBYTE *) &uiPtr) != 0) { + /* + * user does not exists - if domain was not specified, + * try again using current domain. + */ + rc = 1; + if (domain != NULL) break; + /* get current domain */ + rc = (netGetDCNameProc)(NULL, NULL, (LPBYTE *) &wDomain); + if (rc != 0) break; + domain = INT2PTR(-1); /* repeat once */ + } + if (rc == 0) { DWORD i, size = MAX_PATH; wHomeDir = uiPtr->usri1_home_dir; if ((wHomeDir != NULL) && (wHomeDir[0] != L'\0')) { -- cgit v0.12 From 6d943ef7b5327ee4ccdf46fecd74ecbb5f75ca73 Mon Sep 17 00:00:00 2001 From: fvogel Date: Thu, 24 May 2018 20:51:45 +0000 Subject: Remove test filesystem-1.30.3, this is unstestable --- tests/fileSystem.test | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/fileSystem.test b/tests/fileSystem.test index 277fcd3..f778112 100644 --- a/tests/fileSystem.test +++ b/tests/fileSystem.test @@ -270,9 +270,6 @@ test filesystem-1.30.1 {normalisation of existing user} -body { test filesystem-1.30.2 {normalisation of nonexistent user specified as user@domain} -body { file normalize ~nonexistentuser@nonexistentdomain } -returnCodes error -result {user "nonexistentuser@nonexistentdomain" doesn't exist} -test filesystem-1.30.3 {normalisation of nonexistent user specified as domain\user} -body { - file normalize ~nonexistentdomain\\nonexistentuser -} -returnCodes error -result {user "nonexistentdomain\nonexistentuser" doesn't exist} test filesystem-1.31 {link normalisation: link near filesystem root} {testsetplatform} { testsetplatform unix file normalize /foo/../bar -- cgit v0.12 From a0290b85c51fde9541564338e5b7908153f0cc96 Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 25 May 2018 15:04:27 +0000 Subject: optimized winapi-stubs loading (8.5th only); if user name specified without domain and equals the current user - try safest and fastest way to get current user-home path (without usage of netapi) --- win/tclWinFile.c | 187 ++++++++++++++++++++++++++++++++----------------------- win/tclWinInit.c | 34 ++++++---- win/tclWinInt.h | 2 + 3 files changed, 134 insertions(+), 89 deletions(-) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index a3fad1d..3819960 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1422,95 +1422,126 @@ TclpGetUserHome( * name of user's home directory. */ { char *result; - HINSTANCE netapiInst; - HINSTANCE userenvInst; + + static NETAPIBUFFERFREEPROC *netApiBufferFreeProc; + static NETGETDCNAMEPROC *netGetDCNameProc; + static NETUSERGETINFOPROC *netUserGetInfoProc; + static GETPROFILESDIRECTORYPROC *getProfilesDirectoryProc; + static int apistubs = 0; result = NULL; Tcl_DStringInit(bufferPtr); - netapiInst = LoadLibraryA("netapi32.dll"); - userenvInst = LoadLibraryA("userenv.dll"); - if (netapiInst != NULL && userenvInst != NULL) { - NETAPIBUFFERFREEPROC *netApiBufferFreeProc; - NETGETDCNAMEPROC *netGetDCNameProc; - NETUSERGETINFOPROC *netUserGetInfoProc; - GETPROFILESDIRECTORYPROC *getProfilesDirectoryProc; - - netApiBufferFreeProc = (NETAPIBUFFERFREEPROC *) - GetProcAddress(netapiInst, "NetApiBufferFree"); - netGetDCNameProc = (NETGETDCNAMEPROC *) - GetProcAddress(netapiInst, "NetGetDCName"); - netUserGetInfoProc = (NETUSERGETINFOPROC *) - GetProcAddress(netapiInst, "NetUserGetInfo"); - getProfilesDirectoryProc = (GETPROFILESDIRECTORYPROC *) - GetProcAddress(userenvInst, "GetProfilesDirectoryW"); - if ((netUserGetInfoProc != NULL) && (netGetDCNameProc != NULL) - && (netApiBufferFreeProc != NULL) && (getProfilesDirectoryProc != NULL)) { - USER_INFO_1 *uiPtr; - Tcl_DString ds; - int nameLen, rc; - char *domain; - WCHAR *wName, *wHomeDir, *wDomain; - WCHAR buf[MAX_PATH]; - - rc = 0; - nameLen = -1; - wDomain = NULL; - domain = strchr(name, '@'); - if (domain != NULL) { - Tcl_DStringInit(&ds); - wName = Tcl_UtfToUniCharDString(domain + 1, -1, &ds); - rc = (netGetDCNameProc)(NULL, wName, (LPBYTE *) &wDomain); - Tcl_DStringFree(&ds); - nameLen = domain - name; + if (!apistubs) { + HINSTANCE handle; + TCL_DECLARE_MUTEX(initializeMutex) + Tcl_MutexLock(&initializeMutex); + + handle = LoadLibraryA("netapi32.dll"); + if (handle) { + netApiBufferFreeProc = (NETAPIBUFFERFREEPROC *) + GetProcAddress(handle, "NetApiBufferFree"); + netGetDCNameProc = (NETGETDCNAMEPROC *) + GetProcAddress(handle, "NetGetDCName"); + netUserGetInfoProc = (NETUSERGETINFOPROC *) + GetProcAddress(handle, "NetUserGetInfo"); + Tcl_CreateExitHandler(TclpUnloadFile, handle); + } + handle = LoadLibraryA("userenv.dll"); + if (handle) { + getProfilesDirectoryProc = (GETPROFILESDIRECTORYPROC *) + GetProcAddress(handle, "GetProfilesDirectoryW"); + Tcl_CreateExitHandler(TclpUnloadFile, handle); + } + + apistubs = -1; + if ( (netUserGetInfoProc != NULL) && (netGetDCNameProc != NULL) + && (netApiBufferFreeProc != NULL) && (getProfilesDirectoryProc != NULL) + ) { + apistubs = 1; + } + Tcl_MutexUnlock(&initializeMutex); + } + + if (apistubs == 1) { + USER_INFO_1 *uiPtr; + Tcl_DString ds; + int nameLen, rc; + char *domain; + WCHAR *wName, *wHomeDir, *wDomain; + WCHAR buf[MAX_PATH]; + + rc = 0; + nameLen = -1; + wDomain = NULL; + domain = strchr(name, '@'); + if (domain == NULL) { + const char *ptr; + + /* no domain - firstly check it's the current user */ + if ( (ptr = TclpGetUserName(&ds)) != NULL + && strcasecmp(name, ptr) == 0 + ) { + /* try safest and fastest way to get current user home */ + ptr = TclGetEnv("HOME", &ds); + if (ptr != NULL) { + Tcl_JoinPath(1, &ptr, bufferPtr); + rc = 1; + result = Tcl_DStringValue(bufferPtr); + } + } + Tcl_DStringFree(&ds); + } else { + Tcl_DStringInit(&ds); + wName = Tcl_UtfToUniCharDString(domain + 1, -1, &ds); + rc = (netGetDCNameProc)(NULL, wName, (LPBYTE *) &wDomain); + Tcl_DStringFree(&ds); + nameLen = domain - name; + } + if (rc == 0) { + Tcl_DStringInit(&ds); + wName = Tcl_UtfToUniCharDString(name, nameLen, &ds); + while ((netUserGetInfoProc)(wDomain, wName, 1, + (LPBYTE *) &uiPtr) != 0) { + /* + * user does not exists - if domain was not specified, + * try again using current domain. + */ + rc = 1; + if (domain != NULL) break; + /* get current domain */ + rc = (netGetDCNameProc)(NULL, NULL, (LPBYTE *) &wDomain); + if (rc != 0) break; + domain = INT2PTR(-1); /* repeat once */ } if (rc == 0) { - Tcl_DStringInit(&ds); - wName = Tcl_UtfToUniCharDString(name, nameLen, &ds); - while ((netUserGetInfoProc)(wDomain, wName, 1, - (LPBYTE *) &uiPtr) != 0) { - /* - * user does not exists - if domain was not specified, - * try again using current domain. + DWORD i, size = MAX_PATH; + wHomeDir = uiPtr->usri1_home_dir; + if ((wHomeDir != NULL) && (wHomeDir[0] != L'\0')) { + size = lstrlenW(wHomeDir); + Tcl_UniCharToUtfDString(wHomeDir, size, bufferPtr); + } else { + /* + * User exists but has no home dir. Return + * "{GetProfilesDirectory}/". */ - rc = 1; - if (domain != NULL) break; - /* get current domain */ - rc = (netGetDCNameProc)(NULL, NULL, (LPBYTE *) &wDomain); - if (rc != 0) break; - domain = INT2PTR(-1); /* repeat once */ + getProfilesDirectoryProc(buf, &size); + Tcl_UniCharToUtfDString(buf, size-1, bufferPtr); + Tcl_DStringAppend(bufferPtr, "/", 1); + Tcl_DStringAppend(bufferPtr, name, nameLen); } - if (rc == 0) { - DWORD i, size = MAX_PATH; - wHomeDir = uiPtr->usri1_home_dir; - if ((wHomeDir != NULL) && (wHomeDir[0] != L'\0')) { - size = lstrlenW(wHomeDir); - Tcl_UniCharToUtfDString(wHomeDir, size, bufferPtr); - } else { - /* - * User exists but has no home dir. Return - * "{GetProfilesDirectory}/". - */ - getProfilesDirectoryProc(buf, &size); - Tcl_UniCharToUtfDString(buf, size-1, bufferPtr); - Tcl_DStringAppend(bufferPtr, "/", 1); - Tcl_DStringAppend(bufferPtr, name, nameLen); - } - result = Tcl_DStringValue(bufferPtr); - /* be sure we returns normalized path */ - for (i = 0; i < size; ++i){ - if (result[i] == '\\') result[i] = '/'; - } - (*netApiBufferFreeProc)((void *) uiPtr); + result = Tcl_DStringValue(bufferPtr); + /* be sure we returns normalized path */ + for (i = 0; i < size; ++i){ + if (result[i] == '\\') result[i] = '/'; } - Tcl_DStringFree(&ds); - } - if (wDomain != NULL) { - (*netApiBufferFreeProc)((void *) wDomain); + (*netApiBufferFreeProc)((void *) uiPtr); } + Tcl_DStringFree(&ds); + } + if (wDomain != NULL) { + (*netApiBufferFreeProc)((void *) wDomain); } - FreeLibrary(userenvInst); - FreeLibrary(netapiInst); } if (result == NULL) { /* diff --git a/win/tclWinInit.c b/win/tclWinInit.c index 1ba7a31..7fa2b7a 100644 --- a/win/tclWinInit.c +++ b/win/tclWinInit.c @@ -532,6 +532,27 @@ Tcl_GetEncodingNameFromEnvironment( return Tcl_DStringValue(bufPtr); } +const char * +TclpGetUserName( + Tcl_DString *bufferPtr) /* Uninitialized or free DString filled with + * the name of user. */ +{ + Tcl_DStringInit(bufferPtr); + + if (TclGetEnv("USERNAME", bufferPtr) == NULL) { + WCHAR szUserName[UNLEN+1]; + DWORD cchUserNameLen = UNLEN; + + if (!tclWinProcs->getUserName((LPTSTR)szUserName, &cchUserNameLen)) { + return NULL; + } + cchUserNameLen--; + if (tclWinProcs->useWide) cchUserNameLen *= sizeof(WCHAR); + Tcl_WinTCharToUtf((LPTSTR)szUserName, cchUserNameLen, bufferPtr); + } + return Tcl_DStringValue(bufferPtr); +} + /* *--------------------------------------------------------------------------- * @@ -562,8 +583,6 @@ TclpSetVariables( static OSVERSIONINFOW osInfo; static int osInfoInitialized = 0; Tcl_DString ds; - WCHAR szUserName[UNLEN+1]; - DWORD cchUserNameLen = UNLEN; Tcl_SetVar2Ex(interp, "tclDefaultLibrary", NULL, TclGetProcessGlobalValue(&defaultLibraryDir), TCL_GLOBAL_ONLY); @@ -641,15 +660,8 @@ TclpSetVariables( * Note: cchUserNameLen is number of characters including nul terminator. */ - Tcl_DStringInit(&ds); - if (TclGetEnv("USERNAME", &ds) == NULL) { - if (tclWinProcs->getUserName((LPTSTR)szUserName, &cchUserNameLen) != 0) { - int cbUserNameLen = cchUserNameLen - 1; - if (tclWinProcs->useWide) cbUserNameLen *= sizeof(WCHAR); - Tcl_WinTCharToUtf((LPTSTR)szUserName, cbUserNameLen, &ds); - } - } - Tcl_SetVar2(interp, "tcl_platform", "user", Tcl_DStringValue(&ds), + ptr = TclpGetUserName(&ds); + Tcl_SetVar2(interp, "tcl_platform", "user", ptr ? ptr : "", TCL_GLOBAL_ONLY); Tcl_DStringFree(&ds); } diff --git a/win/tclWinInt.h b/win/tclWinInt.h index ccf48bb..af6619f 100644 --- a/win/tclWinInt.h +++ b/win/tclWinInt.h @@ -201,6 +201,8 @@ MODULE_SCOPE void * TclpGetAllocCache(void); MODULE_SCOPE void TclpSetAllocCache(void *); #endif /* TCL_THREADS */ +MODULE_SCOPE const char*TclpGetUserName(Tcl_DString *bufferPtr); + /* Needed by tclWinFile.c and tclWinFCmd.c */ #ifndef FILE_ATTRIBUTE_REPARSE_POINT #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 -- cgit v0.12 From f4651a56605698bf681e88594e7a97d8acd50fac Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 25 May 2018 15:48:50 +0000 Subject: avoid dual init of stubs (possible race condition, 8.5th only) --- win/tclWinFile.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 3819960..2395ae1 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1436,29 +1436,30 @@ TclpGetUserHome( HINSTANCE handle; TCL_DECLARE_MUTEX(initializeMutex) Tcl_MutexLock(&initializeMutex); - - handle = LoadLibraryA("netapi32.dll"); - if (handle) { - netApiBufferFreeProc = (NETAPIBUFFERFREEPROC *) + if (!apistubs) { + handle = LoadLibraryA("netapi32.dll"); + if (handle) { + netApiBufferFreeProc = (NETAPIBUFFERFREEPROC *) GetProcAddress(handle, "NetApiBufferFree"); - netGetDCNameProc = (NETGETDCNAMEPROC *) + netGetDCNameProc = (NETGETDCNAMEPROC *) GetProcAddress(handle, "NetGetDCName"); - netUserGetInfoProc = (NETUSERGETINFOPROC *) + netUserGetInfoProc = (NETUSERGETINFOPROC *) GetProcAddress(handle, "NetUserGetInfo"); - Tcl_CreateExitHandler(TclpUnloadFile, handle); - } - handle = LoadLibraryA("userenv.dll"); - if (handle) { - getProfilesDirectoryProc = (GETPROFILESDIRECTORYPROC *) + Tcl_CreateExitHandler(TclpUnloadFile, handle); + } + handle = LoadLibraryA("userenv.dll"); + if (handle) { + getProfilesDirectoryProc = (GETPROFILESDIRECTORYPROC *) GetProcAddress(handle, "GetProfilesDirectoryW"); - Tcl_CreateExitHandler(TclpUnloadFile, handle); - } - - apistubs = -1; - if ( (netUserGetInfoProc != NULL) && (netGetDCNameProc != NULL) - && (netApiBufferFreeProc != NULL) && (getProfilesDirectoryProc != NULL) - ) { - apistubs = 1; + Tcl_CreateExitHandler(TclpUnloadFile, handle); + } + + apistubs = -1; + if ( (netUserGetInfoProc != NULL) && (netGetDCNameProc != NULL) + && (netApiBufferFreeProc != NULL) && (getProfilesDirectoryProc != NULL) + ) { + apistubs = 1; + } } Tcl_MutexUnlock(&initializeMutex); } -- cgit v0.12 From 5e7a1545a61ab4e66c1796ad19343e15cd2cc2ba Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 25 May 2018 15:51:23 +0000 Subject: minor indentation fix (no functional changes) --- win/tclWinFile.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 2395ae1..0bed39e 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1440,17 +1440,17 @@ TclpGetUserHome( handle = LoadLibraryA("netapi32.dll"); if (handle) { netApiBufferFreeProc = (NETAPIBUFFERFREEPROC *) - GetProcAddress(handle, "NetApiBufferFree"); + GetProcAddress(handle, "NetApiBufferFree"); netGetDCNameProc = (NETGETDCNAMEPROC *) - GetProcAddress(handle, "NetGetDCName"); + GetProcAddress(handle, "NetGetDCName"); netUserGetInfoProc = (NETUSERGETINFOPROC *) - GetProcAddress(handle, "NetUserGetInfo"); + GetProcAddress(handle, "NetUserGetInfo"); Tcl_CreateExitHandler(TclpUnloadFile, handle); } handle = LoadLibraryA("userenv.dll"); if (handle) { getProfilesDirectoryProc = (GETPROFILESDIRECTORYPROC *) - GetProcAddress(handle, "GetProfilesDirectoryW"); + GetProcAddress(handle, "GetProfilesDirectoryW"); Tcl_CreateExitHandler(TclpUnloadFile, handle); } -- cgit v0.12 From 813979693c1e419effe81ceaa6fea3211ad6e0fa Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 27 May 2018 12:04:39 +0000 Subject: Add sensible behaviour with export and unexport of private methods. --- generic/tclOODefineCmds.c | 12 +++++++++--- tests/oo.test | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/generic/tclOODefineCmds.c b/generic/tclOODefineCmds.c index 7281d7a..19cd42b 100644 --- a/generic/tclOODefineCmds.c +++ b/generic/tclOODefineCmds.c @@ -125,6 +125,11 @@ static const struct DeclaredSlot slots[] = { {NULL, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}} }; +/* + * How to build the in-namespace name of a private variable. This is a pattern + * used with Tcl_ObjPrintf(). + */ + #define PRIVATE_VARIABLE_PATTERN "%d : %s" /* @@ -1687,8 +1692,9 @@ TclOODefineExportObjCmd( } else { mPtr = Tcl_GetHashValue(hPtr); } - if (isNew || !(mPtr->flags & PUBLIC_METHOD)) { + if (isNew || !(mPtr->flags & (PUBLIC_METHOD | PRIVATE_METHOD))) { mPtr->flags |= PUBLIC_METHOD; + mPtr->flags &= ~TRUE_PRIVATE_METHOD; changed = 1; } } @@ -2028,8 +2034,8 @@ TclOODefineUnexportObjCmd( } else { mPtr = Tcl_GetHashValue(hPtr); } - if (isNew || mPtr->flags & PUBLIC_METHOD) { - mPtr->flags &= ~PUBLIC_METHOD; + if (isNew || mPtr->flags & (PUBLIC_METHOD | TRUE_PRIVATE_METHOD)) { + mPtr->flags &= ~(PUBLIC_METHOD | TRUE_PRIVATE_METHOD); changed = 1; } } diff --git a/tests/oo.test b/tests/oo.test index 24f23ae..9a22438 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4813,6 +4813,38 @@ test oo-40.1 {TIP 500: private and self} -setup { } -cleanup { cls destroy } -result {e d b {a c}} +test oo-40.2 {TIP 500: private and export} -setup { + oo::class create cls +} -body { + oo::define cls { + private method foo {} {} + } + set result [lmap s {public unexported private} { + info class methods cls -scope $s}] + oo::define cls { + export foo + } + lappend result {*}[lmap s {public unexported private} { + info class methods cls -scope $s}] +} -cleanup { + cls destroy +} -result {{} {} foo foo {} {}} +test oo-40.3 {TIP 500: private and unexport} -setup { + oo::class create cls +} -body { + oo::define cls { + private method foo {} {} + } + set result [lmap s {public unexported private} { + info class methods cls -scope $s}] + oo::define cls { + unexport foo + } + lappend result {*}[lmap s {public unexported private} { + info class methods cls -scope $s}] +} -cleanup { + cls destroy +} -result {{} {} foo {} foo {}} cleanupTests return -- cgit v0.12 From bb5d24622ffab4d7e6aaf6dba2086cdc870f8470 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sun, 27 May 2018 14:17:08 +0000 Subject: don't bother to use constraint "threaded", because that's the way we want to build anyway --- tests/async.test | 7 +++---- tests/unixNotfy.test | 9 ++------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/tests/async.test b/tests/async.test index cb67cc2..6de814b 100644 --- a/tests/async.test +++ b/tests/async.test @@ -20,7 +20,6 @@ if {[lsearch [namespace children] ::tcltest] == -1} { catch [list package require -exact Tcltest [info patchlevel]] testConstraint testasync [llength [info commands testasync]] -testConstraint threaded [::tcl::pkgconfig get threaded] proc async1 {result code} { global aresult acode @@ -149,7 +148,7 @@ test async-3.1 {deleting handlers} testasync { } {3 del2 {0 0 0 del1 del2}} test async-4.1 {async interrupting bytecode sequence} -constraints { - testasync threaded + testasync } -setup { set hm [testasync create async3] proc nothing {} { @@ -171,7 +170,7 @@ test async-4.1 {async interrupting bytecode sequence} -constraints { testasync delete $hm } test async-4.2 {async interrupting straight bytecode sequence} -constraints { - testasync threaded + testasync } -setup { set hm [testasync create async3] } -body { @@ -188,7 +187,7 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints { testasync delete $hm } test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { - testasync threaded + testasync } -setup { set hm [testasync create async3] } -body { diff --git a/tests/unixNotfy.test b/tests/unixNotfy.test index 18b967f..0bd8c69 100644 --- a/tests/unixNotfy.test +++ b/tests/unixNotfy.test @@ -18,16 +18,11 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # When run in a Tk shell, these tests hang. testConstraint noTk [expr {0 != [catch {package present Tk}]}] testConstraint thread [expr {0 == [catch {package require Thread 2.7-}]}] -# Darwin always uses a threaded notifier -testConstraint unthreaded [expr { - ![::tcl::pkgconfig get threaded] - && $tcl_platform(os) ne "Darwin" -}] # The next two tests will hang if threads are enabled because the notifier # will not necessarily wait for ever in this case, so it does not generate # an error. -test unixNotfy-1.1 {Tcl_DeleteFileHandler} -constraints {noTk unix unthreaded} -body { +test unixNotfy-1.1 {Tcl_DeleteFileHandler} -constraints nonPortable -body { catch {vwait x} set f [open [makeFile "" foo] w] fileevent $f writable {set x 1} @@ -38,7 +33,7 @@ test unixNotfy-1.1 {Tcl_DeleteFileHandler} -constraints {noTk unix unthreaded} - catch { close $f } catch { removeFile foo } } -test unixNotfy-1.2 {Tcl_DeleteFileHandler} -constraints {noTk unix unthreaded} -body { +test unixNotfy-1.2 {Tcl_DeleteFileHandler} -constraints nonPortable -body { catch {vwait x} set f1 [open [makeFile "" foo] w] set f2 [open [makeFile "" foo2] w] -- cgit v0.12 From 6a4d06759ed9c9ac3c94860c9d7b17c076f28b7e Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 28 May 2018 13:13:39 +0000 Subject: win: searching for FQDN in user-name should be utf-8 safe (user-name could contain non-ascii utf-8 chars) --- win/tclWinFile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 0bed39e..3655321 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1468,14 +1468,14 @@ TclpGetUserHome( USER_INFO_1 *uiPtr; Tcl_DString ds; int nameLen, rc; - char *domain; + const char *domain; WCHAR *wName, *wHomeDir, *wDomain; WCHAR buf[MAX_PATH]; rc = 0; nameLen = -1; wDomain = NULL; - domain = strchr(name, '@'); + domain = Tcl_UtfFindFirst(name, '@'); if (domain == NULL) { const char *ptr; -- cgit v0.12 From 267cdaec036394312cd843ed142d998f7bbee4f3 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 29 May 2018 07:23:05 +0000 Subject: One TCL_NORETURN -> TCL_NORETURN1 minor mistake. Make it build when Tcl_SetPanicProc is a macro (normally it isn't) --- generic/tclPanic.c | 3 ++- generic/tclStubInit.c | 1 + win/tclWinFile.c | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/generic/tclPanic.c b/generic/tclPanic.c index b50271b..85b7388 100644 --- a/generic/tclPanic.c +++ b/generic/tclPanic.c @@ -24,7 +24,7 @@ */ #if defined(__CYGWIN__) || (defined(_WIN32) && (defined(TCL_NO_DEPRECATED) || TCL_MAJOR_VERSION > 8)) -static TCL_NORETURN Tcl_PanicProc *panicProc = tclWinDebugPanic; +static TCL_NORETURN1 Tcl_PanicProc *panicProc = tclWinDebugPanic; #else static TCL_NORETURN1 Tcl_PanicProc *panicProc = NULL; #endif @@ -45,6 +45,7 @@ static TCL_NORETURN1 Tcl_PanicProc *panicProc = NULL; *---------------------------------------------------------------------- */ +#undef Tcl_SetPanicProc void Tcl_SetPanicProc( TCL_NORETURN1 Tcl_PanicProc *proc) diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 5057b05..7ce0758 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -40,6 +40,7 @@ #undef Tcl_CreateHashEntry #undef Tcl_Panic #undef Tcl_FindExecutable +#undef Tcl_SetPanicProc #undef TclpGetPid #undef TclSockMinimumBuffers #undef Tcl_SetIntObj diff --git a/win/tclWinFile.c b/win/tclWinFile.c index bd4f13b..a70717e 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -867,6 +867,7 @@ TclpFindExecutable( */ if (argv0 == NULL) { +# undef Tcl_SetPanicProc Tcl_SetPanicProc(tclWinDebugPanic); } -- cgit v0.12 From 63b0fef31a850917cdee0f9d059c51516e4b8593 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 30 May 2018 07:15:13 +0000 Subject: No longer pass "--enable-threads" to battery-included sub-packages, since it's the default, even when Tcl is built without threads, now. This opens the way (in the future) to remove this option from the sub-packages --- unix/Makefile.in | 2 +- win/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unix/Makefile.in b/unix/Makefile.in index 51c06e5..e1d7d65 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -1759,7 +1759,7 @@ configure-packages: $$i/configure --with-tcl=../.. \ --with-tclinclude=$(GENERIC_DIR) \ $(PKG_CFG_ARGS) --libdir=$(PACKAGE_DIR) \ - --enable-shared --enable-threads; ) || exit $$?; \ + --enable-shared; ) || exit $$?; \ fi; \ fi; \ fi; \ diff --git a/win/Makefile.in b/win/Makefile.in index d155b8d..bf9ab8c 100644 --- a/win/Makefile.in +++ b/win/Makefile.in @@ -774,7 +774,7 @@ packages: if [ ! -f $(PKG_DIR)/$$pkg/Makefile ]; then \ ( cd $(PKG_DIR)/$$pkg; \ echo "Configuring package '$$i' wd = `$(CYGPATH) $$(pwd -P)`"; \ - $$i/configure --with-tcl=$$builddir --with-tclinclude=$(GENERIC_DIR_NATIVE) $(PKG_CFG_ARGS) --enable-shared --enable-threads; ) \ + $$i/configure --with-tcl=$$builddir --with-tclinclude=$(GENERIC_DIR_NATIVE) $(PKG_CFG_ARGS) --enable-shared; ) \ fi ; \ echo "Building package '$$pkg'"; \ ( cd $(PKG_DIR)/$$pkg; $(MAKE); ) \ -- cgit v0.12 From 6ab540f5ff1eca1d921e511eed5caaa192f4e547 Mon Sep 17 00:00:00 2001 From: dkf Date: Wed, 30 May 2018 09:38:48 +0000 Subject: Tweaking the documentation --- doc/define.n | 70 +++++++++++++++++++++++++++++------------------------------- doc/info.n | 29 +++++++++++++++++++++---- doc/my.n | 39 +++++++++++++++++++++++++++------ doc/next.n | 5 +++++ doc/self.n | 7 +++++- 5 files changed, 103 insertions(+), 47 deletions(-) diff --git a/doc/define.n b/doc/define.n index d68e463..b489e5f 100644 --- a/doc/define.n +++ b/doc/define.n @@ -82,17 +82,14 @@ by a superclass; subclass exports override superclass visibility, and may in turn be overridden by instances. .TP \fBfilter\fR ?\fI\-slotOperation\fR? ?\fImethodName ...\fR? -.VS +. This slot (see \fBSLOTTED DEFINITIONS\fR below) -.VE sets or updates the list of method names that are used to guard whether method call to instances of the class may be called and what the method's results are. Each \fImethodName\fR names a single filtering method (which may be exposed or not exposed); it is not an error for a non-existent method to be named since they may be defined by subclasses. -.VS By default, this slot works by appending. -.VE .TP \fBforward\fI name cmdName \fR?\fIarg ...\fR? . @@ -133,15 +130,12 @@ below), this command creates private procedure-like methods. .RE .TP \fBmixin\fR ?\fI\-slotOperation\fR? ?\fIclassName ...\fR? -.VS +. This slot (see \fBSLOTTED DEFINITIONS\fR below) -.VE sets or updates the list of additional classes that are to be mixed into all the instances of the class being defined. Each \fIclassName\fR argument names a single class that is to be mixed in. -.VS By default, this slot works by replacement. -.VE .TP \fBprivate \fIcmd arg...\fR .TP @@ -151,6 +145,15 @@ By default, this slot works by replacement. This evaluates the \fIscript\fR (or the list of command and arguments given by \fIcmd\fR and \fIarg\fRs) in a context where the definitions made on the current class will be private definitions. +.RS +.PP +The following class definition commands are affected by \fBprivate\fR: +\fBforward\fR, \fBmethod\fR, \fBself\fR, and \fBvariable\fR. Nesting +\fBprivate\fR inside \fBprivate\fR has no cumulative effect; the innermost +definition context is just a private definition context. All other definition +commands have no difference in behavior when used in a private definition +context. +.RE .VE TIP500 .TP \fBrenamemethod\fI fromName toName\fR @@ -183,21 +186,23 @@ operates identically to If no arguments at all are used, this gives the name of the class currently being configured. .VE TIP470 +.VS TIP500 +If in a private definition context (see the \fBprivate\fR definition command, +below), the definitions on the class object will also be made in a private +definition context. +.VE TIP500 .RE .TP \fBsuperclass\fR ?\fI\-slotOperation\fR? ?\fIclassName ...\fR? -.VS +. This slot (see \fBSLOTTED DEFINITIONS\fR below) -.VE allows the alteration of the superclasses of the class being defined. Each \fIclassName\fR argument names one class that is to be a superclass of the defined class. Note that objects must not be changed from being classes to being non-classes or vice-versa, that an empty parent class is equivalent to \fBoo::object\fR, and that the parent classes of \fBoo::object\fR and \fBoo::class\fR may not be modified. -.VS By default, this slot works by replacement. -.VE .TP \fBunexport\fI name \fR?\fIname ...\fR? . @@ -209,7 +214,7 @@ actually defined by a superclass; subclass unexports override superclass visibility, and may be overridden by instance unexports. .TP \fBvariable\fR ?\fI\-slotOperation\fR? ?\fIname ...\fR? -.VS +. This slot (see \fBSLOTTED DEFINITIONS\fR below) arranges for each of the named variables to be automatically made available in the methods, constructor and destructor declared by the class @@ -234,7 +239,6 @@ namespace has a unique prefix that makes accidental use from other classes extremely unlikely. .VE TIP500 .RE -.VE .SS "CONFIGURING OBJECTS" .PP The following commands are supported in the \fIdefScript\fR for @@ -261,18 +265,15 @@ being defined. Note that the methods themselves may be actually defined by a class or superclass; object exports override class visibility. .TP \fBfilter\fR ?\fI\-slotOperation\fR? ?\fImethodName ...\fR? -.VS +. This slot (see \fBSLOTTED DEFINITIONS\fR below) -.VE sets or updates the list of method names that are used to guard whether a method call to the object may be called and what the method's results are. Each \fImethodName\fR names a single filtering method (which may be exposed or not exposed); it is not an error for a non-existent method to be named. Note that the actual list of filters also depends on the filters set upon any classes that the object is an instance of. -.VS By default, this slot works by appending. -.VE .TP \fBforward\fI name cmdName \fR?\fIarg ...\fR? . @@ -308,24 +309,28 @@ below), this command creates private procedure-like methods. .RE .TP \fBmixin\fR ?\fI\-slotOperation\fR? ?\fIclassName ...\fR? -.VS +. This slot (see \fBSLOTTED DEFINITIONS\fR below) -.VE sets or updates a per-object list of additional classes that are to be mixed into the object. Each argument, \fIclassName\fR, names a single class that is to be mixed in. -.VS By default, this slot works by replacement. -.VE .TP \fBprivate \fIcmd arg...\fR .TP \fBprivate \fIscript\fR -. .VS TIP500 This evaluates the \fIscript\fR (or the list of command and arguments given by \fIcmd\fR and \fIarg\fRs) in a context where the definitions made on the current object will be private definitions. +.RS +.PP +The following class definition commands are affected by \fBprivate\fR: +\fBforward\fR, \fBmethod\fR, and \fBvariable\fR. Nesting \fBprivate\fR inside +\fBprivate\fR has no cumulative effect; the innermost definition context is +just a private definition context. All other definition commands have no +difference in behavior when used in a private definition context. +.RE .VE TIP500 .TP \fBrenamemethod\fI fromName toName\fR @@ -337,7 +342,6 @@ that the object is an instance of. Does not change the export status of the method; if it was exported before, it will be afterwards. .TP \fBself \fR -. .VS TIP470 This gives the name of the object currently being configured. .VE TIP470 @@ -351,7 +355,7 @@ object being defined. Note that the methods themselves may be actually defined by a class; instance unexports override class visibility. .TP \fBvariable\fR ?\fI\-slotOperation\fR? ?\fIname ...\fR? -.VS +. This slot (see \fBSLOTTED DEFINITIONS\fR below) arranges for each of the named variables to be automatically made available in the methods declared by the object being defined. Each variable name must not have any namespace @@ -394,20 +398,17 @@ object, that is an instance of the class \fBoo::Slot\fR, which manages a list of values (class names, variable names, etc.) that comprises the contents of the slot. The class defines three operations (as methods) that may be done on the slot: -.VE .TP \fIslot\fR \fB\-append\fR ?\fImember ...\fR? -.VS +. This appends the given \fImember\fR elements to the slot definition. -.VE .TP \fIslot\fR \fB\-clear\fR -.VS +. This sets the slot definition to the empty list. -.VE .TP \fIslot\fR \fB\-set\fR ?\fImember ...\fR? -.VS +. This replaces the slot definition with the given \fImember\fR elements. .PP A consequence of this is that any use of a slot's default operation where the @@ -420,17 +421,15 @@ which is forwarded to the default operation of the slot (thus, for the class slot, this is forwarded to .QW "\fBmy \-append\fR" ), and these methods which provide the implementation interface: -.VE .TP \fIslot\fR \fBGet\fR -.VS +. Returns a list that is the current contents of the slot. This method must always be called from a stack frame created by a call to \fBoo::define\fR or \fBoo::objdefine\fR. -.VE .TP \fIslot\fR \fBSet \fIelementList\fR -.VS +. Sets the contents of the slot to the list \fIelementList\fR and returns the empty string. This method must always be called from a stack frame created by a call to \fBoo::define\fR or \fBoo::objdefine\fR. @@ -441,7 +440,6 @@ an unknown method handler to tie all these pieces together, and they hide their \fBdestroy\fR method so that it is not invoked inadvertently. It is \fIrecommended\fR that any user changes to the slot mechanism be restricted to defining new operations whose names start with a hyphen. -.VE .SH EXAMPLES This example demonstrates how to use both forms of the \fBoo::define\fR and \fBoo::objdefine\fR commands (they work in the same way), as well as diff --git a/doc/info.n b/doc/info.n index 869169d..02470af 100644 --- a/doc/info.n +++ b/doc/info.n @@ -406,7 +406,11 @@ stereotypical instance of \fIclass\fR's implementation of \fImethod\fR any object-specific definitions added). This consists of a list of lists of four elements, where each sublist consists of a word that describes the general type of method implementation (being one of \fBmethod\fR for an -ordinary method, \fBfilter\fR for an applied filter, and \fBunknown\fR for a +ordinary method, \fBfilter\fR for an applied filter, +.VS TIP500 +\fBprivate\fR for a private method, +.VE TIP500 +and \fBunknown\fR for a method that is invoked as part of unknown method handling), a word giving the name of the particular method invoked (which is always the same as \fImethod\fR for the \fBmethod\fR type, and @@ -417,7 +421,11 @@ implementation (see \fBinfo class methodtype\fR). .RS .PP Note that there is no inspection of whether the method implementations -actually use \fBnext\fR to transfer control along the call chain. +actually use \fBnext\fR to transfer control along the call chain, +.VS TIP500 +and the call chains that this command files do not actually contain private +methods. +.VE TIP500 .RE .TP \fBinfo class constructor\fI class\fR @@ -551,7 +559,11 @@ Returns a description of the method implementations that are used to provide \fIobject\fR's implementation of \fImethod\fR. This consists of a list of lists of four elements, where each sublist consists of a word that describes the general type of method implementation (being one of \fBmethod\fR for an -ordinary method, \fBfilter\fR for an applied filter, and \fBunknown\fR for a +ordinary method, \fBfilter\fR for an applied filter, +.VS TIP500 +\fBprivate\fR for a private method, +.VE TIP500 +and \fBunknown\fR for a method that is invoked as part of unknown method handling), a word giving the name of the particular method invoked (which is always the same as \fImethod\fR for the \fBmethod\fR type, and @@ -563,7 +575,11 @@ implementation (see \fBinfo object methodtype\fR). .RS .PP Note that there is no inspection of whether the method implementations -actually use \fBnext\fR to transfer control along the call chain. +actually use \fBnext\fR to transfer control along the call chain, +.VS TIP500 +and the call chains that this command files do not actually contain private +methods. +.VE TIP500 .RE .TP \fBinfo object class\fI object\fR ?\fIclassName\fR? @@ -763,8 +779,10 @@ method and get how it is defined. This procedure illustrates how: proc getDef {obj method} { foreach inf [\fBinfo object call\fR $obj $method] { lassign $inf calltype name locus methodtype + # Assume no forwards or filters, and hence no $calltype # or $methodtype checks... + if {$locus eq "object"} { return [\fBinfo object definition\fR $obj $name] } else { @@ -787,7 +805,9 @@ proc getDef {obj method} { # Assume no forwards return [\fBinfo object definition\fR $obj $method] } + set cls [\fBinfo object class\fR $obj] + while {$method ni [\fBinfo class methods\fR $cls]} { # Assume the simple case set cls [lindex [\fBinfo class superclass\fR $cls] 0] @@ -795,6 +815,7 @@ proc getDef {obj method} { error "no definition for $method" } } + # Assume no forwards return [\fBinfo class definition\fR $cls $method] } diff --git a/doc/my.n b/doc/my.n index 2a9769b..26d861a 100644 --- a/doc/my.n +++ b/doc/my.n @@ -19,13 +19,18 @@ package require TclOO .BE .SH DESCRIPTION .PP -The \fBmy\fR command is used to allow methods of objects to invoke any method +The \fBmy\fR command is used to allow methods of objects to invoke methods of the object (or its class). In particular, the set of valid values for \fImethodName\fR is the set of all methods supported by an object and its -superclasses, including those that are not exported. The object upon which the -method is invoked is always the one that is the current context of the method -(i.e. the object that is returned by \fBself object\fR) from which the -\fBmy\fR command is invoked. +superclasses, including those that are not exported +.VS TIP500 +and private methods of the object or class when used within another method +defined by that object or class. +.VE TIP500 +The object upon which the method is invoked is the one that owns the namespace +that the \fBmy\fR command is contained in initially (\fBNB:\fR the link +remains if the command is renamed), which is the currently invoked object by +default. .PP Each object has its own \fBmy\fR command, contained in its instance namespace. .SH EXAMPLES @@ -40,16 +45,38 @@ oo::class create c { puts [incr counter] } } + c create o o count \fI\(-> prints "1"\fR o count \fI\(-> prints "2"\fR o count \fI\(-> prints "3"\fR .CE +.PP +This example shows how you can use \fBmy\fR to make callbacks to private +methods from outside the object (from a \fBtrace\fR), using +\fBnamespace code\fR to enter the correct context: +.PP +.CS +oo::class create HasCallback { + method makeCallback {} { + return [namespace code { + \fBmy\fR Callback + }] + } + + method Callback {args} { + puts "callback: $args" + } +} + +set o [HasCallback new] +trace add variable xyz write [$o makeCallback] +set xyz "called" \fI\(-> prints "callback: xyz {} write"\fR +.CE .SH "SEE ALSO" next(n), oo::object(n), self(n) .SH KEYWORDS method, method visibility, object, private method, public method - .\" Local variables: .\" mode: nroff .\" fill-column: 78 diff --git a/doc/next.n b/doc/next.n index db846be..8ebaed2 100644 --- a/doc/next.n +++ b/doc/next.n @@ -112,6 +112,7 @@ oo::class create theSuperclass { puts "in the superclass, args = $args" } } + oo::class create theSubclass { superclass theSuperclass method example {args} { @@ -121,6 +122,7 @@ oo::class create theSubclass { puts "after chaining from subclass" } } + theSubclass create obj oo::objdefine obj method example args { puts "per-object method, args = $args" @@ -167,6 +169,7 @@ oo::class create cache { \fI# Compute value, insert into cache, and return it\fR return [set ValueCache($key) [\fBnext\fR {*}$args]] } + method flushCache {} { my variable ValueCache unset ValueCache @@ -178,10 +181,12 @@ oo::class create cache { oo::object create demo oo::objdefine demo { mixin cache + method compute {a b c} { after 3000 \fI;# Simulate deep thought\fR return [expr {$a + $b * $c}] } + method compute2 {a b c} { after 3000 \fI;# Simulate deep thought\fR return [expr {$a * $b + $c}] diff --git a/doc/self.n b/doc/self.n index 0ad5428..855d067 100644 --- a/doc/self.n +++ b/doc/self.n @@ -32,7 +32,12 @@ implement the current call chain. The first element is the same as would be reported by \fBinfo object\fR \fBcall\fR for the current method (except that this also reports useful values from within constructors and destructors, whose names are reported as \fB\fR and \fB\fR -respectively), and the second element is an index into the first element's +respectively, +.VS TIP500 +and for private methods, which are described as being \fBprivate\fR instead of +being a \fBmethod\fR), +.VE TIP500 +and the second element is an index into the first element's list that indicates which actual implementation is currently executing (the first implementation to execute is always at index 0). .TP -- cgit v0.12 From 5e3ca11761b27133a62ee5cd5e340956c640ca8d Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 31 May 2018 07:17:23 +0000 Subject: Neither use --disable-threads on MacOS builds, and don't mention it any more in the README --- macosx/GNUmakefile | 2 +- macosx/Tcl-Common.xcconfig | 2 +- unix/README | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/macosx/GNUmakefile b/macosx/GNUmakefile index 1d26a7a..43f8419 100644 --- a/macosx/GNUmakefile +++ b/macosx/GNUmakefile @@ -132,7 +132,7 @@ ${objdir}/Makefile: ${UNIX_DIR}/Makefile.in ${UNIX_DIR}/configure \ mkdir -p "${OBJ_DIR}" && cd "${OBJ_DIR}" && \ if [ ${UNIX_DIR}/configure -nt config.status ]; then ${UNIX_DIR}/configure -C \ --prefix="${PREFIX}" --bindir="${BINDIR}" --libdir="${LIBDIR}" \ - --mandir="${MANDIR}" --enable-threads --enable-framework --enable-dtrace \ + --mandir="${MANDIR}" --enable-framework --enable-dtrace \ ${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS}; else ./config.status; fi build-${PROJECT}: ${objdir}/Makefile diff --git a/macosx/Tcl-Common.xcconfig b/macosx/Tcl-Common.xcconfig index 77402b7..0670479 100644 --- a/macosx/Tcl-Common.xcconfig +++ b/macosx/Tcl-Common.xcconfig @@ -30,7 +30,7 @@ MANDIR = $(PREFIX)/man PER_ARCH_CFLAGS_ppc = -mcpu=G3 -mtune=G4 $(PER_ARCH_CFLAGS_ppc) PER_ARCH_CFLAGS_ppc64 = -mcpu=G5 -mpowerpc64 $(PER_ARCH_CFLAGS_ppc64) PREFIX = /usr/local -TCL_CONFIGURE_ARGS = --enable-threads --enable-dtrace +TCL_CONFIGURE_ARGS = --enable-dtrace TCL_LIBRARY = $(LIBDIR)/tcl$(VERSION) TCL_PACKAGE_PATH = "$(LIBDIR)" TCL_DEFS = HAVE_TCL_CONFIG_H diff --git a/unix/README b/unix/README index d8f1090..381cbdd 100644 --- a/unix/README +++ b/unix/README @@ -45,8 +45,6 @@ How To Compile And Install Tcl: refer to the autoconf documentation (not included here). Tcl's "configure" supports the following special switches in addition to the standard ones: - --enable-threads If this switch is set, Tcl will compile itself - with multithreading support. --disable-load If this switch is specified then Tcl will configure itself not to allow dynamic loading, even if your system appears to support it. -- cgit v0.12 From 240e6b50d2dfd9d501eeb3e180be594f51f6f03c Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 4 Jun 2018 13:49:38 +0000 Subject: fixes [92564326a9] if compiled on some x86 systems (with dirent64 but without DIR64, partially cherry-picked from https://www.androwish.org/index.html/info/6119b8ac2aee8411). --- unix/configure | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ unix/tcl.m4 | 11 ++++++++- unix/tclConfig.h.in | 3 +++ unix/tclUnixPort.h | 13 ++++++----- 4 files changed, 85 insertions(+), 6 deletions(-) diff --git a/unix/configure b/unix/configure index 7ff9f72..61d922a 100755 --- a/unix/configure +++ b/unix/configure @@ -9643,6 +9643,70 @@ _ACEOF fi + echo "$as_me:$LINENO: checking for DIR64" >&5 +echo $ECHO_N "checking for DIR64... $ECHO_C" >&6 +if test "${tcl_cv_DIR64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +struct dirent64 *p; DIR64 d = opendir64("."); + p = readdir64(d); rewinddir64(d); closedir64(d); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + tcl_cv_DIR64=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +tcl_cv_DIR64=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $tcl_cv_DIR64" >&5 +echo "${ECHO_T}$tcl_cv_DIR64" >&6 + if test "x${tcl_cv_DIR64}" = "xyes" ; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DIR64 1 +_ACEOF + + fi + echo "$as_me:$LINENO: checking for struct stat64" >&5 echo $ECHO_N "checking for struct stat64... $ECHO_C" >&6 if test "${tcl_cv_struct_stat64+set}" = set; then diff --git a/unix/tcl.m4 b/unix/tcl.m4 index 6b6d373..294ecf0 100644 --- a/unix/tcl.m4 +++ b/unix/tcl.m4 @@ -2749,7 +2749,7 @@ AC_DEFUN([SC_TCL_EARLY_FLAGS],[ # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE -# HAVE_STRUCT_DIRENT64 +# HAVE_STRUCT_DIRENT64, HAVE_DIR64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T # @@ -2785,6 +2785,15 @@ AC_DEFUN([SC_TCL_64BIT_FLAGS], [ AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi + AC_CACHE_CHECK([for DIR64], tcl_cv_DIR64,[ + AC_TRY_COMPILE([#include +#include ],[struct dirent64 *p; DIR64 d = opendir64("."); + p = readdir64(d); rewinddir64(d); closedir64(d);], + tcl_cv_DIR64=yes,tcl_cv_DIR64=no)]) + if test "x${tcl_cv_DIR64}" = "xyes" ; then + AC_DEFINE(HAVE_DIR64, 1, [Is 'DIR64' in ?]) + fi + AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], diff --git a/unix/tclConfig.h.in b/unix/tclConfig.h.in index 9774ce9..0879c7a 100644 --- a/unix/tclConfig.h.in +++ b/unix/tclConfig.h.in @@ -193,6 +193,9 @@ /* Is 'struct dirent64' in ? */ #undef HAVE_STRUCT_DIRENT64 +/* Is 'DIR64' in ? */ +#undef HAVE_DIR64 + /* Is 'struct stat64' in ? */ #undef HAVE_STRUCT_STAT64 diff --git a/unix/tclUnixPort.h b/unix/tclUnixPort.h index a248213..9a923ef 100644 --- a/unix/tclUnixPort.h +++ b/unix/tclUnixPort.h @@ -58,16 +58,19 @@ */ #ifdef HAVE_STRUCT_DIRENT64 -typedef DIR64 TclDIR; -typedef struct dirent64 Tcl_DirEntry; +typedef struct dirent64 Tcl_DirEntry; # define TclOSreaddir readdir64 +#else +typedef struct dirent Tcl_DirEntry; +# define TclOSreaddir readdir +#endif +#ifdef HAVE_DIR64 +typedef DIR64 TclDIR; # define TclOSopendir opendir64 # define TclOSrewinddir rewinddir64 # define TclOSclosedir closedir64 #else -typedef DIR TclDIR; -typedef struct dirent Tcl_DirEntry; -# define TclOSreaddir readdir +typedef DIR TclDIR; # define TclOSopendir opendir # define TclOSrewinddir rewinddir # define TclOSclosedir closedir -- cgit v0.12 From 3b14a4b0ed16f753791f2c6046b761c4fcd5be05 Mon Sep 17 00:00:00 2001 From: sebres Date: Tue, 5 Jun 2018 09:10:56 +0000 Subject: re-autoconfigure with v.2.69 --- unix/configure | 66 +++++++++++++++++++++------------------------------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/unix/configure b/unix/configure index 2f5f72d..101c7f4 100755 --- a/unix/configure +++ b/unix/configure @@ -729,6 +729,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -815,6 +816,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1067,6 +1069,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1204,7 +1215,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1357,6 +1368,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -6868,17 +6880,13 @@ $as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h fi - echo "$as_me:$LINENO: checking for DIR64" >&5 -echo $ECHO_N "checking for DIR64... $ECHO_C" >&6 -if test "${tcl_cv_DIR64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DIR64" >&5 +$as_echo_n "checking for DIR64... " >&6; } +if ${tcl_cv_DIR64+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -6891,44 +6899,18 @@ struct dirent64 *p; DIR64 d = opendir64("."); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_DIR64=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -tcl_cv_DIR64=no + tcl_cv_DIR64=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $tcl_cv_DIR64" >&5 -echo "${ECHO_T}$tcl_cv_DIR64" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_DIR64" >&5 +$as_echo "$tcl_cv_DIR64" >&6; } if test "x${tcl_cv_DIR64}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_DIR64 1 -_ACEOF +$as_echo "#define HAVE_DIR64 1" >>confdefs.h fi -- cgit v0.12 From c2e16d9b1f9dea745ffe57948997ba3ded2e58a5 Mon Sep 17 00:00:00 2001 From: sebres Date: Tue, 5 Jun 2018 21:59:09 +0000 Subject: amend to [eeefdb44cf]: fixes missing install path (closes [593aa7c421]) for mingw/*nix --- unix/Makefile.in | 2 +- win/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unix/Makefile.in b/unix/Makefile.in index e1d7d65..f044e41 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -830,7 +830,7 @@ install-libraries: libraries else true; \ fi; \ done; - @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6; \ + @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6 ../tcl8/8.7; \ do \ if [ ! -d "$(SCRIPT_INSTALL_DIR)"/$$i ] ; then \ echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \ diff --git a/win/Makefile.in b/win/Makefile.in index bf9ab8c..4e75b06 100644 --- a/win/Makefile.in +++ b/win/Makefile.in @@ -635,7 +635,7 @@ install-libraries: libraries install-tzdata install-msgs else true; \ fi; \ done; - @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6; \ + @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6 ../tcl8/8.7; \ do \ if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \ echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \ -- cgit v0.12 From 30a0e246b6d5781b3e3ff26b44cac8a38e5aab0b Mon Sep 17 00:00:00 2001 From: pooryorick Date: Thu, 7 Jun 2018 18:19:15 +0000 Subject: Give tests more time to finish since valgrind slows things down considerably. --- tests/async.test | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/async.test b/tests/async.test index 6de814b..fa3aae1 100644 --- a/tests/async.test +++ b/tests/async.test @@ -159,10 +159,12 @@ test async-4.1 {async interrupting bytecode sequence} -constraints { global aresult set aresult {Async event not delivered} testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} { - nothing + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + nothing } return $aresult }} $hm @@ -178,9 +180,12 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints { global aresult set aresult {Async event not delivered} testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} {} + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + } return $aresult }} $hm } -result {test pattern} -cleanup { -- cgit v0.12 From 4755be8f419815dd933db195d13761b2c69ab480 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Thu, 7 Jun 2018 20:59:27 +0000 Subject: Give tests more time to finish since valgrind slows things down considerably. --- tests/async.test | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/async.test b/tests/async.test index 6de814b..fa3aae1 100644 --- a/tests/async.test +++ b/tests/async.test @@ -159,10 +159,12 @@ test async-4.1 {async interrupting bytecode sequence} -constraints { global aresult set aresult {Async event not delivered} testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} { - nothing + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + nothing } return $aresult }} $hm @@ -178,9 +180,12 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints { global aresult set aresult {Async event not delivered} testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} {} + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + } return $aresult }} $hm } -result {test pattern} -cleanup { -- cgit v0.12 From f8b9cb869de274ad68beeac3cd77ad8c857f30ca Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 8 Jun 2018 06:56:33 +0000 Subject: re-generate configure script (where does --runstatedir come from? --- unix/configure | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/unix/configure b/unix/configure index 101c7f4..9eba7f9 100755 --- a/unix/configure +++ b/unix/configure @@ -729,7 +729,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -816,7 +815,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1069,15 +1067,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1215,7 +1204,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1368,7 +1357,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] -- cgit v0.12 From 04d1270786231c4481e3000d2f98d272c63e90db Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 8 Jun 2018 12:50:43 +0000 Subject: resolves some warnings by compiling with new gcc-versions (>= 7.x): - '*' in boolean context, suggest '&&' instead [-Wint-in-bool-context] - passing argument 1 of 'Tcl_CreateExitHandler' from incompatible pointer type [-Wincompatible-pointer-types] --- generic/tclStringObj.c | 2 +- win/tclWinFile.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 67e86c5..996be77 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -113,7 +113,7 @@ typedef struct String { #define STRING_UALLOC(numChars) \ ((numChars) * sizeof(Tcl_UniChar)) #define STRING_SIZE(ualloc) \ - ((unsigned) ((ualloc) \ + ((unsigned) ((ualloc != 0) \ ? (sizeof(String) - sizeof(Tcl_UniChar) + (ualloc)) \ : sizeof(String))) #define stringCheckLimits(numChars) \ diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 3655321..1536bc0 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1394,6 +1394,12 @@ NativeMatchType( return 1; } +static void +FreeLoadLibHandle( + ClientData clientData) +{ + FreeLibrary((HMODULE)clientData); +} /* *---------------------------------------------------------------------- * @@ -1445,13 +1451,13 @@ TclpGetUserHome( GetProcAddress(handle, "NetGetDCName"); netUserGetInfoProc = (NETUSERGETINFOPROC *) GetProcAddress(handle, "NetUserGetInfo"); - Tcl_CreateExitHandler(TclpUnloadFile, handle); + Tcl_CreateExitHandler(FreeLoadLibHandle, handle); } handle = LoadLibraryA("userenv.dll"); if (handle) { getProfilesDirectoryProc = (GETPROFILESDIRECTORYPROC *) GetProcAddress(handle, "GetProfilesDirectoryW"); - Tcl_CreateExitHandler(TclpUnloadFile, handle); + Tcl_CreateExitHandler(FreeLoadLibHandle, handle); } apistubs = -1; -- cgit v0.12 From 400feb302b25831ba4be2781fbd08d22b2df35f7 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 9 Jun 2018 07:41:47 +0000 Subject: Update to latest tzdata (backported from 8.6) --- library/tzdata/Africa/Accra | 94 ++--- library/tzdata/Africa/Bissau | 2 +- library/tzdata/Africa/Sao_Tome | 9 +- library/tzdata/Africa/Windhoek | 95 +++-- library/tzdata/America/Araguaina | 50 +-- library/tzdata/America/Argentina/Buenos_Aires | 58 +-- library/tzdata/America/Argentina/Catamarca | 56 +-- library/tzdata/America/Argentina/Cordoba | 58 +-- library/tzdata/America/Argentina/Jujuy | 52 +-- library/tzdata/America/Argentina/La_Rioja | 56 +-- library/tzdata/America/Argentina/Mendoza | 52 +-- library/tzdata/America/Argentina/Rio_Gallegos | 56 +-- library/tzdata/America/Argentina/Salta | 56 +-- library/tzdata/America/Argentina/San_Juan | 56 +-- library/tzdata/America/Argentina/San_Luis | 50 +-- library/tzdata/America/Argentina/Tucuman | 58 +-- library/tzdata/America/Argentina/Ushuaia | 56 +-- library/tzdata/America/Asuncion | 250 ++++++------- library/tzdata/America/Bahia | 60 +-- library/tzdata/America/Belem | 28 +- library/tzdata/America/Boa_Vista | 32 +- library/tzdata/America/Bogota | 2 +- library/tzdata/America/Campo_Grande | 252 ++++++------- library/tzdata/America/Cuiaba | 250 ++++++------- library/tzdata/America/Eirunepe | 30 +- library/tzdata/America/Fortaleza | 38 +- library/tzdata/America/Grand_Turk | 4 +- library/tzdata/America/Guayaquil | 2 +- library/tzdata/America/Jamaica | 6 +- library/tzdata/America/La_Paz | 2 +- library/tzdata/America/Lima | 6 +- library/tzdata/America/Maceio | 40 +- library/tzdata/America/Manaus | 30 +- library/tzdata/America/Montevideo | 126 +++---- library/tzdata/America/Noronha | 38 +- library/tzdata/America/Porto_Velho | 28 +- library/tzdata/America/Punta_Arenas | 106 +++--- library/tzdata/America/Recife | 38 +- library/tzdata/America/Rio_Branco | 28 +- library/tzdata/America/Santarem | 28 +- library/tzdata/America/Santiago | 272 +++++++------- library/tzdata/America/Sao_Paulo | 250 ++++++------- library/tzdata/Antarctica/Casey | 1 + library/tzdata/Antarctica/Palmer | 78 ++-- library/tzdata/Asia/Almaty | 48 +-- library/tzdata/Asia/Aqtau | 48 +-- library/tzdata/Asia/Aqtobe | 46 +-- library/tzdata/Asia/Ashgabat | 22 +- library/tzdata/Asia/Atyrau | 46 +-- library/tzdata/Asia/Baghdad | 104 +++--- library/tzdata/Asia/Baku | 62 ++-- library/tzdata/Asia/Bishkek | 50 +-- library/tzdata/Asia/Choibalsan | 48 +-- library/tzdata/Asia/Dhaka | 2 +- library/tzdata/Asia/Dushanbe | 20 +- library/tzdata/Asia/Gaza | 72 ++-- library/tzdata/Asia/Hebron | 72 ++-- library/tzdata/Asia/Hovd | 48 +-- library/tzdata/Asia/Kuching | 14 +- library/tzdata/Asia/Macau | 2 +- library/tzdata/Asia/Manila | 6 +- library/tzdata/Asia/Oral | 46 +-- library/tzdata/Asia/Pyongyang | 1 + library/tzdata/Asia/Qyzylorda | 46 +-- library/tzdata/Asia/Samarkand | 20 +- library/tzdata/Asia/Tashkent | 22 +- library/tzdata/Asia/Tbilisi | 50 +-- library/tzdata/Asia/Tehran | 444 +++++++++++----------- library/tzdata/Asia/Tokyo | 16 +- library/tzdata/Asia/Ulaanbaatar | 48 +-- library/tzdata/Asia/Yerevan | 60 +-- library/tzdata/Atlantic/Azores | 2 +- library/tzdata/Atlantic/Cape_Verde | 2 +- library/tzdata/Atlantic/Madeira | 2 +- library/tzdata/Atlantic/Reykjavik | 66 ++-- library/tzdata/Atlantic/Stanley | 66 ++-- library/tzdata/Australia/Lord_Howe | 478 ++++++++++++------------ library/tzdata/Europe/Dublin | 515 +++++++++++++------------- library/tzdata/Europe/Lisbon | 2 +- library/tzdata/Europe/Prague | 9 +- library/tzdata/Indian/Mauritius | 4 +- library/tzdata/Pacific/Apia | 362 +++++++++--------- library/tzdata/Pacific/Chatham | 504 ++++++++++++------------- library/tzdata/Pacific/Easter | 262 ++++++------- library/tzdata/Pacific/Efate | 20 +- library/tzdata/Pacific/Enderbury | 2 +- library/tzdata/Pacific/Fiji | 186 +++++----- library/tzdata/Pacific/Galapagos | 2 +- library/tzdata/Pacific/Kiritimati | 2 +- library/tzdata/Pacific/Noumea | 6 +- library/tzdata/Pacific/Rarotonga | 26 +- library/tzdata/Pacific/Tongatapu | 8 +- 92 files changed, 3467 insertions(+), 3461 deletions(-) diff --git a/library/tzdata/Africa/Accra b/library/tzdata/Africa/Accra index 18f4522..f43f751 100644 --- a/library/tzdata/Africa/Accra +++ b/library/tzdata/Africa/Accra @@ -2,51 +2,51 @@ set TZData(:Africa/Accra) { {-9223372036854775808 -52 0 LMT} - {-1640995148 0 0 +0020} - {-1556841600 1200 1 +0020} - {-1546388400 0 0 +0020} - {-1525305600 1200 1 +0020} - {-1514852400 0 0 +0020} - {-1493769600 1200 1 +0020} - {-1483316400 0 0 +0020} - {-1462233600 1200 1 +0020} - {-1451780400 0 0 +0020} - {-1430611200 1200 1 +0020} - {-1420158000 0 0 +0020} - {-1399075200 1200 1 +0020} - {-1388622000 0 0 +0020} - {-1367539200 1200 1 +0020} - {-1357086000 0 0 +0020} - {-1336003200 1200 1 +0020} - {-1325550000 0 0 +0020} - {-1304380800 1200 1 +0020} - {-1293927600 0 0 +0020} - {-1272844800 1200 1 +0020} - {-1262391600 0 0 +0020} - {-1241308800 1200 1 +0020} - {-1230855600 0 0 +0020} - {-1209772800 1200 1 +0020} - {-1199319600 0 0 +0020} - {-1178150400 1200 1 +0020} - {-1167697200 0 0 +0020} - {-1146614400 1200 1 +0020} - {-1136161200 0 0 +0020} - {-1115078400 1200 1 +0020} - {-1104625200 0 0 +0020} - {-1083542400 1200 1 +0020} - {-1073089200 0 0 +0020} - {-1051920000 1200 1 +0020} - {-1041466800 0 0 +0020} - {-1020384000 1200 1 +0020} - {-1009930800 0 0 +0020} - {-988848000 1200 1 +0020} - {-978394800 0 0 +0020} - {-957312000 1200 1 +0020} - {-946858800 0 0 +0020} - {-925689600 1200 1 +0020} - {-915236400 0 0 +0020} - {-894153600 1200 1 +0020} - {-883700400 0 0 +0020} - {-862617600 1200 1 +0020} - {-852164400 0 0 +0020} + {-1640995148 0 0 GMT} + {-1556841600 1200 1 GMT} + {-1546388400 0 0 GMT} + {-1525305600 1200 1 GMT} + {-1514852400 0 0 GMT} + {-1493769600 1200 1 GMT} + {-1483316400 0 0 GMT} + {-1462233600 1200 1 GMT} + {-1451780400 0 0 GMT} + {-1430611200 1200 1 GMT} + {-1420158000 0 0 GMT} + {-1399075200 1200 1 GMT} + {-1388622000 0 0 GMT} + {-1367539200 1200 1 GMT} + {-1357086000 0 0 GMT} + {-1336003200 1200 1 GMT} + {-1325550000 0 0 GMT} + {-1304380800 1200 1 GMT} + {-1293927600 0 0 GMT} + {-1272844800 1200 1 GMT} + {-1262391600 0 0 GMT} + {-1241308800 1200 1 GMT} + {-1230855600 0 0 GMT} + {-1209772800 1200 1 GMT} + {-1199319600 0 0 GMT} + {-1178150400 1200 1 GMT} + {-1167697200 0 0 GMT} + {-1146614400 1200 1 GMT} + {-1136161200 0 0 GMT} + {-1115078400 1200 1 GMT} + {-1104625200 0 0 GMT} + {-1083542400 1200 1 GMT} + {-1073089200 0 0 GMT} + {-1051920000 1200 1 GMT} + {-1041466800 0 0 GMT} + {-1020384000 1200 1 GMT} + {-1009930800 0 0 GMT} + {-988848000 1200 1 GMT} + {-978394800 0 0 GMT} + {-957312000 1200 1 GMT} + {-946858800 0 0 GMT} + {-925689600 1200 1 GMT} + {-915236400 0 0 GMT} + {-894153600 1200 1 GMT} + {-883700400 0 0 GMT} + {-862617600 1200 1 GMT} + {-852164400 0 0 GMT} } diff --git a/library/tzdata/Africa/Bissau b/library/tzdata/Africa/Bissau index 88d9d03..e0568fb 100644 --- a/library/tzdata/Africa/Bissau +++ b/library/tzdata/Africa/Bissau @@ -2,6 +2,6 @@ set TZData(:Africa/Bissau) { {-9223372036854775808 -3740 0 LMT} - {-1830380260 -3600 0 -01} + {-1830380400 -3600 0 -01} {157770000 0 0 GMT} } diff --git a/library/tzdata/Africa/Sao_Tome b/library/tzdata/Africa/Sao_Tome index 078591d..6a60f5c 100644 --- a/library/tzdata/Africa/Sao_Tome +++ b/library/tzdata/Africa/Sao_Tome @@ -1,5 +1,8 @@ # created by tools/tclZIC.tcl - do not edit -if {![info exists TZData(Africa/Abidjan)]} { - LoadTimeZoneFile Africa/Abidjan + +set TZData(:Africa/Sao_Tome) { + {-9223372036854775808 1616 0 LMT} + {-2713912016 -2205 0 LMT} + {-1830384000 0 0 GMT} + {1514768400 3600 0 WAT} } -set TZData(:Africa/Sao_Tome) $TZData(:Africa/Abidjan) diff --git a/library/tzdata/Africa/Windhoek b/library/tzdata/Africa/Windhoek index 974ebda..d03c8b8 100644 --- a/library/tzdata/Africa/Windhoek +++ b/library/tzdata/Africa/Windhoek @@ -7,53 +7,52 @@ set TZData(:Africa/Windhoek) { {-860976000 10800 1 SAST} {-845254800 7200 0 SAST} {637970400 7200 0 CAT} - {764200800 3600 0 WAT} - {764204400 3600 0 WAT} - {778640400 7200 1 WAST} - {796780800 3600 0 WAT} - {810090000 7200 1 WAST} - {828835200 3600 0 WAT} - {841539600 7200 1 WAST} - {860284800 3600 0 WAT} - {873594000 7200 1 WAST} - {891734400 3600 0 WAT} - {905043600 7200 1 WAST} - {923184000 3600 0 WAT} - {936493200 7200 1 WAST} - {954633600 3600 0 WAT} - {967942800 7200 1 WAST} - {986083200 3600 0 WAT} - {999392400 7200 1 WAST} - {1018137600 3600 0 WAT} - {1030842000 7200 1 WAST} - {1049587200 3600 0 WAT} - {1062896400 7200 1 WAST} - {1081036800 3600 0 WAT} - {1094346000 7200 1 WAST} - {1112486400 3600 0 WAT} - {1125795600 7200 1 WAST} - {1143936000 3600 0 WAT} - {1157245200 7200 1 WAST} - {1175385600 3600 0 WAT} - {1188694800 7200 1 WAST} - {1207440000 3600 0 WAT} - {1220749200 7200 1 WAST} - {1238889600 3600 0 WAT} - {1252198800 7200 1 WAST} - {1270339200 3600 0 WAT} - {1283648400 7200 1 WAST} - {1301788800 3600 0 WAT} - {1315098000 7200 1 WAST} - {1333238400 3600 0 WAT} - {1346547600 7200 1 WAST} - {1365292800 3600 0 WAT} - {1377997200 7200 1 WAST} - {1396742400 3600 0 WAT} - {1410051600 7200 1 WAST} - {1428192000 3600 0 WAT} - {1441501200 7200 1 WAST} - {1459641600 3600 0 WAT} - {1472950800 7200 1 WAST} - {1491091200 3600 0 WAT} + {764200800 3600 1 WAT} + {778640400 7200 0 CAT} + {796780800 3600 1 WAT} + {810090000 7200 0 CAT} + {828835200 3600 1 WAT} + {841539600 7200 0 CAT} + {860284800 3600 1 WAT} + {873594000 7200 0 CAT} + {891734400 3600 1 WAT} + {905043600 7200 0 CAT} + {923184000 3600 1 WAT} + {936493200 7200 0 CAT} + {954633600 3600 1 WAT} + {967942800 7200 0 CAT} + {986083200 3600 1 WAT} + {999392400 7200 0 CAT} + {1018137600 3600 1 WAT} + {1030842000 7200 0 CAT} + {1049587200 3600 1 WAT} + {1062896400 7200 0 CAT} + {1081036800 3600 1 WAT} + {1094346000 7200 0 CAT} + {1112486400 3600 1 WAT} + {1125795600 7200 0 CAT} + {1143936000 3600 1 WAT} + {1157245200 7200 0 CAT} + {1175385600 3600 1 WAT} + {1188694800 7200 0 CAT} + {1207440000 3600 1 WAT} + {1220749200 7200 0 CAT} + {1238889600 3600 1 WAT} + {1252198800 7200 0 CAT} + {1270339200 3600 1 WAT} + {1283648400 7200 0 CAT} + {1301788800 3600 1 WAT} + {1315098000 7200 0 CAT} + {1333238400 3600 1 WAT} + {1346547600 7200 0 CAT} + {1365292800 3600 1 WAT} + {1377997200 7200 0 CAT} + {1396742400 3600 1 WAT} + {1410051600 7200 0 CAT} + {1428192000 3600 1 WAT} + {1441501200 7200 0 CAT} + {1459641600 3600 1 WAT} + {1472950800 7200 0 CAT} + {1491091200 3600 1 WAT} {1504400400 7200 0 CAT} } diff --git a/library/tzdata/America/Araguaina b/library/tzdata/America/Araguaina index b9e2aec..ca64292 100644 --- a/library/tzdata/America/Araguaina +++ b/library/tzdata/America/Araguaina @@ -3,58 +3,58 @@ set TZData(:America/Araguaina) { {-9223372036854775808 -11568 0 LMT} {-1767214032 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {811047600 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} - {844570800 -7200 1 -02} + {844570800 -7200 1 -03} {856058400 -10800 0 -03} - {876106800 -7200 1 -02} + {876106800 -7200 1 -03} {888717600 -10800 0 -03} - {908074800 -7200 1 -02} + {908074800 -7200 1 -03} {919562400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {982461600 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} - {1036292400 -7200 1 -02} + {1036292400 -7200 1 -03} {1045360800 -10800 0 -03} {1064368800 -10800 0 -03} - {1350788400 -7200 0 -02} + {1350788400 -7200 0 -03} {1361066400 -10800 0 -03} {1378000800 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Buenos_Aires b/library/tzdata/America/Argentina/Buenos_Aires index 8be2c45..40f1912 100644 --- a/library/tzdata/America/Argentina/Buenos_Aires +++ b/library/tzdata/America/Argentina/Buenos_Aires @@ -4,64 +4,64 @@ set TZData(:America/Argentina/Buenos_Aires) { {-9223372036854775808 -14028 0 LMT} {-2372097972 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1237082400 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Catamarca b/library/tzdata/America/Argentina/Catamarca index a546bfc..da5b42a 100644 --- a/library/tzdata/America/Argentina/Catamarca +++ b/library/tzdata/America/Argentina/Catamarca @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Catamarca) { {-9223372036854775808 -15788 0 LMT} {-2372096212 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Cordoba b/library/tzdata/America/Argentina/Cordoba index ec6978e..6a1426e 100644 --- a/library/tzdata/America/Argentina/Cordoba +++ b/library/tzdata/America/Argentina/Cordoba @@ -4,64 +4,64 @@ set TZData(:America/Argentina/Cordoba) { {-9223372036854775808 -15408 0 LMT} {-2372096592 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1237082400 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Jujuy b/library/tzdata/America/Argentina/Jujuy index 0e11ba2..72080f5 100644 --- a/library/tzdata/America/Argentina/Jujuy +++ b/library/tzdata/America/Argentina/Jujuy @@ -4,64 +4,64 @@ set TZData(:America/Argentina/Jujuy) { {-9223372036854775808 -15672 0 LMT} {-2372096328 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -14400 0 -04} {657086400 -10800 1 -03} {669178800 -14400 0 -04} {686721600 -7200 1 -02} {694231200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/La_Rioja b/library/tzdata/America/Argentina/La_Rioja index 90e0030..fb7b237 100644 --- a/library/tzdata/America/Argentina/La_Rioja +++ b/library/tzdata/America/Argentina/La_Rioja @@ -4,66 +4,66 @@ set TZData(:America/Argentina/La_Rioja) { {-9223372036854775808 -16044 0 LMT} {-2372095956 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667792800 -14400 0 -04} {673588800 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Mendoza b/library/tzdata/America/Argentina/Mendoza index 8dfcd2b..af7342e 100644 --- a/library/tzdata/America/Argentina/Mendoza +++ b/library/tzdata/America/Argentina/Mendoza @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Mendoza) { {-9223372036854775808 -16516 0 LMT} {-2372095484 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -14400 0 -04} {655963200 -10800 1 -03} {667796400 -14400 0 -04} {687499200 -10800 1 -03} {699418800 -14400 0 -04} - {719380800 -7200 0 -02} + {719380800 -7200 0 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1085281200 -14400 0 -04} {1096171200 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Rio_Gallegos b/library/tzdata/America/Argentina/Rio_Gallegos index 4b2a348..2a197a4 100644 --- a/library/tzdata/America/Argentina/Rio_Gallegos +++ b/library/tzdata/America/Argentina/Rio_Gallegos @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Rio_Gallegos) { {-9223372036854775808 -16612 0 LMT} {-2372095388 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Salta b/library/tzdata/America/Argentina/Salta index 4f9ccf9..d49e82f 100644 --- a/library/tzdata/America/Argentina/Salta +++ b/library/tzdata/America/Argentina/Salta @@ -4,63 +4,63 @@ set TZData(:America/Argentina/Salta) { {-9223372036854775808 -15700 0 LMT} {-2372096300 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/San_Juan b/library/tzdata/America/Argentina/San_Juan index 1f0530a..d67f688 100644 --- a/library/tzdata/America/Argentina/San_Juan +++ b/library/tzdata/America/Argentina/San_Juan @@ -4,66 +4,66 @@ set TZData(:America/Argentina/San_Juan) { {-9223372036854775808 -16444 0 LMT} {-2372095556 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667792800 -14400 0 -04} {673588800 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1085972400 -14400 0 -04} {1090728000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/San_Luis b/library/tzdata/America/Argentina/San_Luis index 3583a39..4d27c32 100644 --- a/library/tzdata/America/Argentina/San_Luis +++ b/library/tzdata/America/Argentina/San_Luis @@ -4,52 +4,52 @@ set TZData(:America/Argentina/San_Luis) { {-9223372036854775808 -15924 0 LMT} {-2372096076 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {631159200 -7200 1 -02} {637380000 -14400 0 -04} {655963200 -10800 1 -03} @@ -59,10 +59,10 @@ set TZData(:America/Argentina/San_Luis) { {952052400 -10800 0 -03} {1085972400 -14400 0 -04} {1090728000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1200880800 -10800 0 -04} {1205031600 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1236481200 -14400 0 -04} {1255233600 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Tucuman b/library/tzdata/America/Argentina/Tucuman index 15c5c63..6809800 100644 --- a/library/tzdata/America/Argentina/Tucuman +++ b/library/tzdata/America/Argentina/Tucuman @@ -4,66 +4,66 @@ set TZData(:America/Argentina/Tucuman) { {-9223372036854775808 -15652 0 LMT} {-2372096348 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087099200 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1237082400 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Ushuaia b/library/tzdata/America/Argentina/Ushuaia index 4214c1d..c62ca0d 100644 --- a/library/tzdata/America/Argentina/Ushuaia +++ b/library/tzdata/America/Argentina/Ushuaia @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Ushuaia) { {-9223372036854775808 -16392 0 LMT} {-2372095608 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1085886000 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Asuncion b/library/tzdata/America/Asuncion index 606db57..8e6c1b0 100644 --- a/library/tzdata/America/Asuncion +++ b/library/tzdata/America/Asuncion @@ -7,253 +7,253 @@ set TZData(:America/Asuncion) { {86760000 -10800 0 -03} {134017200 -14400 0 -04} {162878400 -14400 0 -04} - {181368000 -10800 1 -03} + {181368000 -10800 1 -04} {194497200 -14400 0 -04} - {212990400 -10800 1 -03} + {212990400 -10800 1 -04} {226033200 -14400 0 -04} - {244526400 -10800 1 -03} + {244526400 -10800 1 -04} {257569200 -14400 0 -04} - {276062400 -10800 1 -03} + {276062400 -10800 1 -04} {291783600 -14400 0 -04} - {307598400 -10800 1 -03} + {307598400 -10800 1 -04} {323406000 -14400 0 -04} - {339220800 -10800 1 -03} + {339220800 -10800 1 -04} {354942000 -14400 0 -04} - {370756800 -10800 1 -03} + {370756800 -10800 1 -04} {386478000 -14400 0 -04} - {402292800 -10800 1 -03} + {402292800 -10800 1 -04} {418014000 -14400 0 -04} - {433828800 -10800 1 -03} + {433828800 -10800 1 -04} {449636400 -14400 0 -04} - {465451200 -10800 1 -03} + {465451200 -10800 1 -04} {481172400 -14400 0 -04} - {496987200 -10800 1 -03} + {496987200 -10800 1 -04} {512708400 -14400 0 -04} - {528523200 -10800 1 -03} + {528523200 -10800 1 -04} {544244400 -14400 0 -04} - {560059200 -10800 1 -03} + {560059200 -10800 1 -04} {575866800 -14400 0 -04} - {591681600 -10800 1 -03} + {591681600 -10800 1 -04} {607402800 -14400 0 -04} - {625032000 -10800 1 -03} + {625032000 -10800 1 -04} {638938800 -14400 0 -04} - {654753600 -10800 1 -03} + {654753600 -10800 1 -04} {670474800 -14400 0 -04} - {686721600 -10800 1 -03} + {686721600 -10800 1 -04} {699418800 -14400 0 -04} - {718257600 -10800 1 -03} + {718257600 -10800 1 -04} {733546800 -14400 0 -04} - {749448000 -10800 1 -03} + {749448000 -10800 1 -04} {762318000 -14400 0 -04} - {780984000 -10800 1 -03} + {780984000 -10800 1 -04} {793767600 -14400 0 -04} - {812520000 -10800 1 -03} + {812520000 -10800 1 -04} {825649200 -14400 0 -04} - {844574400 -10800 1 -03} + {844574400 -10800 1 -04} {856666800 -14400 0 -04} - {876024000 -10800 1 -03} + {876024000 -10800 1 -04} {888721200 -14400 0 -04} - {907473600 -10800 1 -03} + {907473600 -10800 1 -04} {920775600 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {952225200 -14400 0 -04} - {970372800 -10800 1 -03} + {970372800 -10800 1 -04} {983674800 -14400 0 -04} - {1002427200 -10800 1 -03} + {1002427200 -10800 1 -04} {1018148400 -14400 0 -04} - {1030852800 -10800 1 -03} + {1030852800 -10800 1 -04} {1049598000 -14400 0 -04} - {1062907200 -10800 1 -03} + {1062907200 -10800 1 -04} {1081047600 -14400 0 -04} - {1097985600 -10800 1 -03} + {1097985600 -10800 1 -04} {1110682800 -14400 0 -04} - {1129435200 -10800 1 -03} + {1129435200 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192939200 -10800 1 -03} + {1192939200 -10800 1 -04} {1205031600 -14400 0 -04} - {1224388800 -10800 1 -03} + {1224388800 -10800 1 -04} {1236481200 -14400 0 -04} - {1255838400 -10800 1 -03} + {1255838400 -10800 1 -04} {1270954800 -14400 0 -04} - {1286078400 -10800 1 -03} + {1286078400 -10800 1 -04} {1302404400 -14400 0 -04} - {1317528000 -10800 1 -03} + {1317528000 -10800 1 -04} {1333854000 -14400 0 -04} - {1349582400 -10800 1 -03} + {1349582400 -10800 1 -04} {1364094000 -14400 0 -04} - {1381032000 -10800 1 -03} + {1381032000 -10800 1 -04} {1395543600 -14400 0 -04} - {1412481600 -10800 1 -03} + {1412481600 -10800 1 -04} {1426993200 -14400 0 -04} - {1443931200 -10800 1 -03} + {1443931200 -10800 1 -04} {1459047600 -14400 0 -04} - {1475380800 -10800 1 -03} + {1475380800 -10800 1 -04} {1490497200 -14400 0 -04} - {1506830400 -10800 1 -03} + {1506830400 -10800 1 -04} {1521946800 -14400 0 -04} - {1538884800 -10800 1 -03} + {1538884800 -10800 1 -04} {1553396400 -14400 0 -04} - {1570334400 -10800 1 -03} + {1570334400 -10800 1 -04} {1584846000 -14400 0 -04} - {1601784000 -10800 1 -03} + {1601784000 -10800 1 -04} {1616900400 -14400 0 -04} - {1633233600 -10800 1 -03} + {1633233600 -10800 1 -04} {1648350000 -14400 0 -04} - {1664683200 -10800 1 -03} + {1664683200 -10800 1 -04} {1679799600 -14400 0 -04} - {1696132800 -10800 1 -03} + {1696132800 -10800 1 -04} {1711249200 -14400 0 -04} - {1728187200 -10800 1 -03} + {1728187200 -10800 1 -04} {1742698800 -14400 0 -04} - {1759636800 -10800 1 -03} + {1759636800 -10800 1 -04} {1774148400 -14400 0 -04} - {1791086400 -10800 1 -03} + {1791086400 -10800 1 -04} {1806202800 -14400 0 -04} - {1822536000 -10800 1 -03} + {1822536000 -10800 1 -04} {1837652400 -14400 0 -04} - {1853985600 -10800 1 -03} + {1853985600 -10800 1 -04} {1869102000 -14400 0 -04} - {1886040000 -10800 1 -03} + {1886040000 -10800 1 -04} {1900551600 -14400 0 -04} - {1917489600 -10800 1 -03} + {1917489600 -10800 1 -04} {1932001200 -14400 0 -04} - {1948939200 -10800 1 -03} + {1948939200 -10800 1 -04} {1964055600 -14400 0 -04} - {1980388800 -10800 1 -03} + {1980388800 -10800 1 -04} {1995505200 -14400 0 -04} - {2011838400 -10800 1 -03} + {2011838400 -10800 1 -04} {2026954800 -14400 0 -04} - {2043288000 -10800 1 -03} + {2043288000 -10800 1 -04} {2058404400 -14400 0 -04} - {2075342400 -10800 1 -03} + {2075342400 -10800 1 -04} {2089854000 -14400 0 -04} - {2106792000 -10800 1 -03} + {2106792000 -10800 1 -04} {2121303600 -14400 0 -04} - {2138241600 -10800 1 -03} + {2138241600 -10800 1 -04} {2153358000 -14400 0 -04} - {2169691200 -10800 1 -03} + {2169691200 -10800 1 -04} {2184807600 -14400 0 -04} - {2201140800 -10800 1 -03} + {2201140800 -10800 1 -04} {2216257200 -14400 0 -04} - {2233195200 -10800 1 -03} + {2233195200 -10800 1 -04} {2247706800 -14400 0 -04} - {2264644800 -10800 1 -03} + {2264644800 -10800 1 -04} {2279156400 -14400 0 -04} - {2296094400 -10800 1 -03} + {2296094400 -10800 1 -04} {2310606000 -14400 0 -04} - {2327544000 -10800 1 -03} + {2327544000 -10800 1 -04} {2342660400 -14400 0 -04} - {2358993600 -10800 1 -03} + {2358993600 -10800 1 -04} {2374110000 -14400 0 -04} - {2390443200 -10800 1 -03} + {2390443200 -10800 1 -04} {2405559600 -14400 0 -04} - {2422497600 -10800 1 -03} + {2422497600 -10800 1 -04} {2437009200 -14400 0 -04} - {2453947200 -10800 1 -03} + {2453947200 -10800 1 -04} {2468458800 -14400 0 -04} - {2485396800 -10800 1 -03} + {2485396800 -10800 1 -04} {2500513200 -14400 0 -04} - {2516846400 -10800 1 -03} + {2516846400 -10800 1 -04} {2531962800 -14400 0 -04} - {2548296000 -10800 1 -03} + {2548296000 -10800 1 -04} {2563412400 -14400 0 -04} - {2579745600 -10800 1 -03} + {2579745600 -10800 1 -04} {2594862000 -14400 0 -04} - {2611800000 -10800 1 -03} + {2611800000 -10800 1 -04} {2626311600 -14400 0 -04} - {2643249600 -10800 1 -03} + {2643249600 -10800 1 -04} {2657761200 -14400 0 -04} - {2674699200 -10800 1 -03} + {2674699200 -10800 1 -04} {2689815600 -14400 0 -04} - {2706148800 -10800 1 -03} + {2706148800 -10800 1 -04} {2721265200 -14400 0 -04} - {2737598400 -10800 1 -03} + {2737598400 -10800 1 -04} {2752714800 -14400 0 -04} - {2769652800 -10800 1 -03} + {2769652800 -10800 1 -04} {2784164400 -14400 0 -04} - {2801102400 -10800 1 -03} + {2801102400 -10800 1 -04} {2815614000 -14400 0 -04} - {2832552000 -10800 1 -03} + {2832552000 -10800 1 -04} {2847668400 -14400 0 -04} - {2864001600 -10800 1 -03} + {2864001600 -10800 1 -04} {2879118000 -14400 0 -04} - {2895451200 -10800 1 -03} + {2895451200 -10800 1 -04} {2910567600 -14400 0 -04} - {2926900800 -10800 1 -03} + {2926900800 -10800 1 -04} {2942017200 -14400 0 -04} - {2958955200 -10800 1 -03} + {2958955200 -10800 1 -04} {2973466800 -14400 0 -04} - {2990404800 -10800 1 -03} + {2990404800 -10800 1 -04} {3004916400 -14400 0 -04} - {3021854400 -10800 1 -03} + {3021854400 -10800 1 -04} {3036970800 -14400 0 -04} - {3053304000 -10800 1 -03} + {3053304000 -10800 1 -04} {3068420400 -14400 0 -04} - {3084753600 -10800 1 -03} + {3084753600 -10800 1 -04} {3099870000 -14400 0 -04} - {3116808000 -10800 1 -03} + {3116808000 -10800 1 -04} {3131319600 -14400 0 -04} - {3148257600 -10800 1 -03} + {3148257600 -10800 1 -04} {3162769200 -14400 0 -04} - {3179707200 -10800 1 -03} + {3179707200 -10800 1 -04} {3194218800 -14400 0 -04} - {3211156800 -10800 1 -03} + {3211156800 -10800 1 -04} {3226273200 -14400 0 -04} - {3242606400 -10800 1 -03} + {3242606400 -10800 1 -04} {3257722800 -14400 0 -04} - {3274056000 -10800 1 -03} + {3274056000 -10800 1 -04} {3289172400 -14400 0 -04} - {3306110400 -10800 1 -03} + {3306110400 -10800 1 -04} {3320622000 -14400 0 -04} - {3337560000 -10800 1 -03} + {3337560000 -10800 1 -04} {3352071600 -14400 0 -04} - {3369009600 -10800 1 -03} + {3369009600 -10800 1 -04} {3384126000 -14400 0 -04} - {3400459200 -10800 1 -03} + {3400459200 -10800 1 -04} {3415575600 -14400 0 -04} - {3431908800 -10800 1 -03} + {3431908800 -10800 1 -04} {3447025200 -14400 0 -04} - {3463358400 -10800 1 -03} + {3463358400 -10800 1 -04} {3478474800 -14400 0 -04} - {3495412800 -10800 1 -03} + {3495412800 -10800 1 -04} {3509924400 -14400 0 -04} - {3526862400 -10800 1 -03} + {3526862400 -10800 1 -04} {3541374000 -14400 0 -04} - {3558312000 -10800 1 -03} + {3558312000 -10800 1 -04} {3573428400 -14400 0 -04} - {3589761600 -10800 1 -03} + {3589761600 -10800 1 -04} {3604878000 -14400 0 -04} - {3621211200 -10800 1 -03} + {3621211200 -10800 1 -04} {3636327600 -14400 0 -04} - {3653265600 -10800 1 -03} + {3653265600 -10800 1 -04} {3667777200 -14400 0 -04} - {3684715200 -10800 1 -03} + {3684715200 -10800 1 -04} {3699226800 -14400 0 -04} - {3716164800 -10800 1 -03} + {3716164800 -10800 1 -04} {3731281200 -14400 0 -04} - {3747614400 -10800 1 -03} + {3747614400 -10800 1 -04} {3762730800 -14400 0 -04} - {3779064000 -10800 1 -03} + {3779064000 -10800 1 -04} {3794180400 -14400 0 -04} - {3810513600 -10800 1 -03} + {3810513600 -10800 1 -04} {3825630000 -14400 0 -04} - {3842568000 -10800 1 -03} + {3842568000 -10800 1 -04} {3857079600 -14400 0 -04} - {3874017600 -10800 1 -03} + {3874017600 -10800 1 -04} {3888529200 -14400 0 -04} - {3905467200 -10800 1 -03} + {3905467200 -10800 1 -04} {3920583600 -14400 0 -04} - {3936916800 -10800 1 -03} + {3936916800 -10800 1 -04} {3952033200 -14400 0 -04} - {3968366400 -10800 1 -03} + {3968366400 -10800 1 -04} {3983482800 -14400 0 -04} - {4000420800 -10800 1 -03} + {4000420800 -10800 1 -04} {4014932400 -14400 0 -04} - {4031870400 -10800 1 -03} + {4031870400 -10800 1 -04} {4046382000 -14400 0 -04} - {4063320000 -10800 1 -03} + {4063320000 -10800 1 -04} {4077831600 -14400 0 -04} - {4094769600 -10800 1 -03} + {4094769600 -10800 1 -04} } diff --git a/library/tzdata/America/Bahia b/library/tzdata/America/Bahia index 7dbcb90..7aaf834 100644 --- a/library/tzdata/America/Bahia +++ b/library/tzdata/America/Bahia @@ -3,66 +3,66 @@ set TZData(:America/Bahia) { {-9223372036854775808 -9244 0 LMT} {-1767216356 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {666756000 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {697600800 -10800 0 -03} - {719982000 -7200 1 -02} + {719982000 -7200 1 -03} {728445600 -10800 0 -03} - {750826800 -7200 1 -02} + {750826800 -7200 1 -03} {761709600 -10800 0 -03} - {782276400 -7200 1 -02} + {782276400 -7200 1 -03} {793159200 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} - {844570800 -7200 1 -02} + {844570800 -7200 1 -03} {856058400 -10800 0 -03} - {876106800 -7200 1 -02} + {876106800 -7200 1 -03} {888717600 -10800 0 -03} - {908074800 -7200 1 -02} + {908074800 -7200 1 -03} {919562400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {982461600 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} - {1036292400 -7200 1 -02} + {1036292400 -7200 1 -03} {1045360800 -10800 0 -03} {1064368800 -10800 0 -03} - {1318734000 -7200 0 -02} + {1318734000 -7200 0 -03} {1330221600 -10800 0 -03} {1350784800 -10800 0 -03} } diff --git a/library/tzdata/America/Belem b/library/tzdata/America/Belem index b2bf3a6..42a3ec5 100644 --- a/library/tzdata/America/Belem +++ b/library/tzdata/America/Belem @@ -3,33 +3,33 @@ set TZData(:America/Belem) { {-9223372036854775808 -11636 0 LMT} {-1767213964 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} {590032800 -10800 0 -03} } diff --git a/library/tzdata/America/Boa_Vista b/library/tzdata/America/Boa_Vista index 982249b..0af989e 100644 --- a/library/tzdata/America/Boa_Vista +++ b/library/tzdata/America/Boa_Vista @@ -3,38 +3,38 @@ set TZData(:America/Boa_Vista) { {-9223372036854775808 -14560 0 LMT} {-1767211040 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} {938664000 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {951620400 -14400 0 -04} - {970977600 -10800 1 -03} + {970977600 -10800 1 -04} {971578800 -14400 0 -04} } diff --git a/library/tzdata/America/Bogota b/library/tzdata/America/Bogota index 69e4557..8ca39ba 100644 --- a/library/tzdata/America/Bogota +++ b/library/tzdata/America/Bogota @@ -4,6 +4,6 @@ set TZData(:America/Bogota) { {-9223372036854775808 -17776 0 LMT} {-2707671824 -17776 0 BMT} {-1739041424 -18000 0 -05} - {704869200 -14400 1 -04} + {704869200 -14400 1 -05} {733896000 -18000 0 -05} } diff --git a/library/tzdata/America/Campo_Grande b/library/tzdata/America/Campo_Grande index 77cb4d1..5ec7112 100644 --- a/library/tzdata/America/Campo_Grande +++ b/library/tzdata/America/Campo_Grande @@ -3,255 +3,255 @@ set TZData(:America/Campo_Grande) { {-9223372036854775808 -13108 0 LMT} {-1767212492 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} - {592977600 -10800 1 -03} + {592977600 -10800 1 -04} {602046000 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {634705200 -14400 0 -04} - {656481600 -10800 1 -03} + {656481600 -10800 1 -04} {666759600 -14400 0 -04} - {687931200 -10800 1 -03} + {687931200 -10800 1 -04} {697604400 -14400 0 -04} - {719985600 -10800 1 -03} + {719985600 -10800 1 -04} {728449200 -14400 0 -04} - {750830400 -10800 1 -03} + {750830400 -10800 1 -04} {761713200 -14400 0 -04} - {782280000 -10800 1 -03} + {782280000 -10800 1 -04} {793162800 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {824007600 -14400 0 -04} - {844574400 -10800 1 -03} + {844574400 -10800 1 -04} {856062000 -14400 0 -04} - {876110400 -10800 1 -03} + {876110400 -10800 1 -04} {888721200 -14400 0 -04} - {908078400 -10800 1 -03} + {908078400 -10800 1 -04} {919566000 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {951620400 -14400 0 -04} - {970977600 -10800 1 -03} + {970977600 -10800 1 -04} {982465200 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1013914800 -14400 0 -04} - {1036296000 -10800 1 -03} + {1036296000 -10800 1 -04} {1045364400 -14400 0 -04} - {1066536000 -10800 1 -03} + {1066536000 -10800 1 -04} {1076814000 -14400 0 -04} - {1099368000 -10800 1 -03} + {1099368000 -10800 1 -04} {1108868400 -14400 0 -04} - {1129435200 -10800 1 -03} + {1129435200 -10800 1 -04} {1140318000 -14400 0 -04} - {1162699200 -10800 1 -03} + {1162699200 -10800 1 -04} {1172372400 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1203217200 -14400 0 -04} - {1224388800 -10800 1 -03} + {1224388800 -10800 1 -04} {1234666800 -14400 0 -04} - {1255838400 -10800 1 -03} + {1255838400 -10800 1 -04} {1266721200 -14400 0 -04} - {1287288000 -10800 1 -03} + {1287288000 -10800 1 -04} {1298170800 -14400 0 -04} - {1318737600 -10800 1 -03} + {1318737600 -10800 1 -04} {1330225200 -14400 0 -04} - {1350792000 -10800 1 -03} + {1350792000 -10800 1 -04} {1361070000 -14400 0 -04} - {1382241600 -10800 1 -03} + {1382241600 -10800 1 -04} {1392519600 -14400 0 -04} - {1413691200 -10800 1 -03} + {1413691200 -10800 1 -04} {1424574000 -14400 0 -04} - {1445140800 -10800 1 -03} + {1445140800 -10800 1 -04} {1456023600 -14400 0 -04} - {1476590400 -10800 1 -03} + {1476590400 -10800 1 -04} {1487473200 -14400 0 -04} - {1508040000 -10800 1 -03} + {1508040000 -10800 1 -04} {1518922800 -14400 0 -04} - {1540094400 -10800 1 -03} + {1541304000 -10800 1 -04} {1550372400 -14400 0 -04} - {1571544000 -10800 1 -03} + {1572753600 -10800 1 -04} {1581822000 -14400 0 -04} - {1602993600 -10800 1 -03} + {1604203200 -10800 1 -04} {1613876400 -14400 0 -04} - {1634443200 -10800 1 -03} + {1636257600 -10800 1 -04} {1645326000 -14400 0 -04} - {1665892800 -10800 1 -03} + {1667707200 -10800 1 -04} {1677380400 -14400 0 -04} - {1697342400 -10800 1 -03} + {1699156800 -10800 1 -04} {1708225200 -14400 0 -04} - {1729396800 -10800 1 -03} + {1730606400 -10800 1 -04} {1739674800 -14400 0 -04} - {1760846400 -10800 1 -03} + {1762056000 -10800 1 -04} {1771729200 -14400 0 -04} - {1792296000 -10800 1 -03} + {1793505600 -10800 1 -04} {1803178800 -14400 0 -04} - {1823745600 -10800 1 -03} + {1825560000 -10800 1 -04} {1834628400 -14400 0 -04} - {1855195200 -10800 1 -03} + {1857009600 -10800 1 -04} {1866078000 -14400 0 -04} - {1887249600 -10800 1 -03} + {1888459200 -10800 1 -04} {1897527600 -14400 0 -04} - {1918699200 -10800 1 -03} + {1919908800 -10800 1 -04} {1928977200 -14400 0 -04} - {1950148800 -10800 1 -03} + {1951358400 -10800 1 -04} {1960426800 -14400 0 -04} - {1981598400 -10800 1 -03} + {1983412800 -10800 1 -04} {1992481200 -14400 0 -04} - {2013048000 -10800 1 -03} + {2014862400 -10800 1 -04} {2024535600 -14400 0 -04} - {2044497600 -10800 1 -03} + {2046312000 -10800 1 -04} {2055380400 -14400 0 -04} - {2076552000 -10800 1 -03} + {2077761600 -10800 1 -04} {2086830000 -14400 0 -04} - {2108001600 -10800 1 -03} + {2109211200 -10800 1 -04} {2118884400 -14400 0 -04} - {2139451200 -10800 1 -03} + {2140660800 -10800 1 -04} {2150334000 -14400 0 -04} - {2170900800 -10800 1 -03} + {2172715200 -10800 1 -04} {2181783600 -14400 0 -04} - {2202350400 -10800 1 -03} + {2204164800 -10800 1 -04} {2213233200 -14400 0 -04} - {2234404800 -10800 1 -03} + {2235614400 -10800 1 -04} {2244682800 -14400 0 -04} - {2265854400 -10800 1 -03} + {2267064000 -10800 1 -04} {2276132400 -14400 0 -04} - {2297304000 -10800 1 -03} + {2298513600 -10800 1 -04} {2307582000 -14400 0 -04} - {2328753600 -10800 1 -03} + {2329963200 -10800 1 -04} {2339636400 -14400 0 -04} - {2360203200 -10800 1 -03} + {2362017600 -10800 1 -04} {2371086000 -14400 0 -04} - {2391652800 -10800 1 -03} + {2393467200 -10800 1 -04} {2402535600 -14400 0 -04} - {2423707200 -10800 1 -03} + {2424916800 -10800 1 -04} {2433985200 -14400 0 -04} - {2455156800 -10800 1 -03} + {2456366400 -10800 1 -04} {2465434800 -14400 0 -04} - {2486606400 -10800 1 -03} + {2487816000 -10800 1 -04} {2497489200 -14400 0 -04} - {2518056000 -10800 1 -03} + {2519870400 -10800 1 -04} {2528938800 -14400 0 -04} - {2549505600 -10800 1 -03} + {2551320000 -10800 1 -04} {2560388400 -14400 0 -04} - {2580955200 -10800 1 -03} + {2582769600 -10800 1 -04} {2591838000 -14400 0 -04} - {2613009600 -10800 1 -03} + {2614219200 -10800 1 -04} {2623287600 -14400 0 -04} - {2644459200 -10800 1 -03} + {2645668800 -10800 1 -04} {2654737200 -14400 0 -04} - {2675908800 -10800 1 -03} + {2677118400 -10800 1 -04} {2686791600 -14400 0 -04} - {2707358400 -10800 1 -03} + {2709172800 -10800 1 -04} {2718241200 -14400 0 -04} - {2738808000 -10800 1 -03} + {2740622400 -10800 1 -04} {2749690800 -14400 0 -04} - {2770862400 -10800 1 -03} + {2772072000 -10800 1 -04} {2781140400 -14400 0 -04} - {2802312000 -10800 1 -03} + {2803521600 -10800 1 -04} {2812590000 -14400 0 -04} - {2833761600 -10800 1 -03} + {2834971200 -10800 1 -04} {2844039600 -14400 0 -04} - {2865211200 -10800 1 -03} + {2867025600 -10800 1 -04} {2876094000 -14400 0 -04} - {2896660800 -10800 1 -03} + {2898475200 -10800 1 -04} {2907543600 -14400 0 -04} - {2928110400 -10800 1 -03} + {2929924800 -10800 1 -04} {2938993200 -14400 0 -04} - {2960164800 -10800 1 -03} + {2961374400 -10800 1 -04} {2970442800 -14400 0 -04} - {2991614400 -10800 1 -03} + {2992824000 -10800 1 -04} {3001892400 -14400 0 -04} - {3023064000 -10800 1 -03} + {3024273600 -10800 1 -04} {3033946800 -14400 0 -04} - {3054513600 -10800 1 -03} + {3056328000 -10800 1 -04} {3065396400 -14400 0 -04} - {3085963200 -10800 1 -03} + {3087777600 -10800 1 -04} {3096846000 -14400 0 -04} - {3118017600 -10800 1 -03} + {3119227200 -10800 1 -04} {3128295600 -14400 0 -04} - {3149467200 -10800 1 -03} + {3150676800 -10800 1 -04} {3159745200 -14400 0 -04} - {3180916800 -10800 1 -03} + {3182126400 -10800 1 -04} {3191194800 -14400 0 -04} - {3212366400 -10800 1 -03} + {3213576000 -10800 1 -04} {3223249200 -14400 0 -04} - {3243816000 -10800 1 -03} + {3245630400 -10800 1 -04} {3254698800 -14400 0 -04} - {3275265600 -10800 1 -03} + {3277080000 -10800 1 -04} {3286148400 -14400 0 -04} - {3307320000 -10800 1 -03} + {3308529600 -10800 1 -04} {3317598000 -14400 0 -04} - {3338769600 -10800 1 -03} + {3339979200 -10800 1 -04} {3349047600 -14400 0 -04} - {3370219200 -10800 1 -03} + {3371428800 -10800 1 -04} {3381102000 -14400 0 -04} - {3401668800 -10800 1 -03} + {3403483200 -10800 1 -04} {3412551600 -14400 0 -04} - {3433118400 -10800 1 -03} + {3434932800 -10800 1 -04} {3444001200 -14400 0 -04} - {3464568000 -10800 1 -03} + {3466382400 -10800 1 -04} {3475450800 -14400 0 -04} - {3496622400 -10800 1 -03} + {3497832000 -10800 1 -04} {3506900400 -14400 0 -04} - {3528072000 -10800 1 -03} + {3529281600 -10800 1 -04} {3538350000 -14400 0 -04} - {3559521600 -10800 1 -03} + {3560731200 -10800 1 -04} {3570404400 -14400 0 -04} - {3590971200 -10800 1 -03} + {3592785600 -10800 1 -04} {3601854000 -14400 0 -04} - {3622420800 -10800 1 -03} + {3624235200 -10800 1 -04} {3633303600 -14400 0 -04} - {3654475200 -10800 1 -03} + {3655684800 -10800 1 -04} {3664753200 -14400 0 -04} - {3685924800 -10800 1 -03} + {3687134400 -10800 1 -04} {3696202800 -14400 0 -04} - {3717374400 -10800 1 -03} + {3718584000 -10800 1 -04} {3727652400 -14400 0 -04} - {3748824000 -10800 1 -03} + {3750638400 -10800 1 -04} {3759706800 -14400 0 -04} - {3780273600 -10800 1 -03} + {3782088000 -10800 1 -04} {3791156400 -14400 0 -04} - {3811723200 -10800 1 -03} + {3813537600 -10800 1 -04} {3822606000 -14400 0 -04} - {3843777600 -10800 1 -03} + {3844987200 -10800 1 -04} {3854055600 -14400 0 -04} - {3875227200 -10800 1 -03} + {3876436800 -10800 1 -04} {3885505200 -14400 0 -04} - {3906676800 -10800 1 -03} + {3907886400 -10800 1 -04} {3917559600 -14400 0 -04} - {3938126400 -10800 1 -03} + {3939940800 -10800 1 -04} {3949009200 -14400 0 -04} - {3969576000 -10800 1 -03} + {3971390400 -10800 1 -04} {3980458800 -14400 0 -04} - {4001630400 -10800 1 -03} + {4002840000 -10800 1 -04} {4011908400 -14400 0 -04} - {4033080000 -10800 1 -03} + {4034289600 -10800 1 -04} {4043358000 -14400 0 -04} - {4064529600 -10800 1 -03} + {4065739200 -10800 1 -04} {4074807600 -14400 0 -04} - {4095979200 -10800 1 -03} + {4097188800 -10800 1 -04} } diff --git a/library/tzdata/America/Cuiaba b/library/tzdata/America/Cuiaba index 57cd38c..09f5b1f 100644 --- a/library/tzdata/America/Cuiaba +++ b/library/tzdata/America/Cuiaba @@ -3,255 +3,255 @@ set TZData(:America/Cuiaba) { {-9223372036854775808 -13460 0 LMT} {-1767212140 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} - {592977600 -10800 1 -03} + {592977600 -10800 1 -04} {602046000 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {634705200 -14400 0 -04} - {656481600 -10800 1 -03} + {656481600 -10800 1 -04} {666759600 -14400 0 -04} - {687931200 -10800 1 -03} + {687931200 -10800 1 -04} {697604400 -14400 0 -04} - {719985600 -10800 1 -03} + {719985600 -10800 1 -04} {728449200 -14400 0 -04} - {750830400 -10800 1 -03} + {750830400 -10800 1 -04} {761713200 -14400 0 -04} - {782280000 -10800 1 -03} + {782280000 -10800 1 -04} {793162800 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {824007600 -14400 0 -04} - {844574400 -10800 1 -03} + {844574400 -10800 1 -04} {856062000 -14400 0 -04} - {876110400 -10800 1 -03} + {876110400 -10800 1 -04} {888721200 -14400 0 -04} - {908078400 -10800 1 -03} + {908078400 -10800 1 -04} {919566000 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {951620400 -14400 0 -04} - {970977600 -10800 1 -03} + {970977600 -10800 1 -04} {982465200 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1013914800 -14400 0 -04} - {1036296000 -10800 1 -03} + {1036296000 -10800 1 -04} {1045364400 -14400 0 -04} {1064372400 -14400 0 -04} {1096603200 -14400 0 -04} - {1099368000 -10800 1 -03} + {1099368000 -10800 1 -04} {1108868400 -14400 0 -04} - {1129435200 -10800 1 -03} + {1129435200 -10800 1 -04} {1140318000 -14400 0 -04} - {1162699200 -10800 1 -03} + {1162699200 -10800 1 -04} {1172372400 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1203217200 -14400 0 -04} - {1224388800 -10800 1 -03} + {1224388800 -10800 1 -04} {1234666800 -14400 0 -04} - {1255838400 -10800 1 -03} + {1255838400 -10800 1 -04} {1266721200 -14400 0 -04} - {1287288000 -10800 1 -03} + {1287288000 -10800 1 -04} {1298170800 -14400 0 -04} - {1318737600 -10800 1 -03} + {1318737600 -10800 1 -04} {1330225200 -14400 0 -04} - {1350792000 -10800 1 -03} + {1350792000 -10800 1 -04} {1361070000 -14400 0 -04} - {1382241600 -10800 1 -03} + {1382241600 -10800 1 -04} {1392519600 -14400 0 -04} - {1413691200 -10800 1 -03} + {1413691200 -10800 1 -04} {1424574000 -14400 0 -04} - {1445140800 -10800 1 -03} + {1445140800 -10800 1 -04} {1456023600 -14400 0 -04} - {1476590400 -10800 1 -03} + {1476590400 -10800 1 -04} {1487473200 -14400 0 -04} - {1508040000 -10800 1 -03} + {1508040000 -10800 1 -04} {1518922800 -14400 0 -04} - {1540094400 -10800 1 -03} + {1541304000 -10800 1 -04} {1550372400 -14400 0 -04} - {1571544000 -10800 1 -03} + {1572753600 -10800 1 -04} {1581822000 -14400 0 -04} - {1602993600 -10800 1 -03} + {1604203200 -10800 1 -04} {1613876400 -14400 0 -04} - {1634443200 -10800 1 -03} + {1636257600 -10800 1 -04} {1645326000 -14400 0 -04} - {1665892800 -10800 1 -03} + {1667707200 -10800 1 -04} {1677380400 -14400 0 -04} - {1697342400 -10800 1 -03} + {1699156800 -10800 1 -04} {1708225200 -14400 0 -04} - {1729396800 -10800 1 -03} + {1730606400 -10800 1 -04} {1739674800 -14400 0 -04} - {1760846400 -10800 1 -03} + {1762056000 -10800 1 -04} {1771729200 -14400 0 -04} - {1792296000 -10800 1 -03} + {1793505600 -10800 1 -04} {1803178800 -14400 0 -04} - {1823745600 -10800 1 -03} + {1825560000 -10800 1 -04} {1834628400 -14400 0 -04} - {1855195200 -10800 1 -03} + {1857009600 -10800 1 -04} {1866078000 -14400 0 -04} - {1887249600 -10800 1 -03} + {1888459200 -10800 1 -04} {1897527600 -14400 0 -04} - {1918699200 -10800 1 -03} + {1919908800 -10800 1 -04} {1928977200 -14400 0 -04} - {1950148800 -10800 1 -03} + {1951358400 -10800 1 -04} {1960426800 -14400 0 -04} - {1981598400 -10800 1 -03} + {1983412800 -10800 1 -04} {1992481200 -14400 0 -04} - {2013048000 -10800 1 -03} + {2014862400 -10800 1 -04} {2024535600 -14400 0 -04} - {2044497600 -10800 1 -03} + {2046312000 -10800 1 -04} {2055380400 -14400 0 -04} - {2076552000 -10800 1 -03} + {2077761600 -10800 1 -04} {2086830000 -14400 0 -04} - {2108001600 -10800 1 -03} + {2109211200 -10800 1 -04} {2118884400 -14400 0 -04} - {2139451200 -10800 1 -03} + {2140660800 -10800 1 -04} {2150334000 -14400 0 -04} - {2170900800 -10800 1 -03} + {2172715200 -10800 1 -04} {2181783600 -14400 0 -04} - {2202350400 -10800 1 -03} + {2204164800 -10800 1 -04} {2213233200 -14400 0 -04} - {2234404800 -10800 1 -03} + {2235614400 -10800 1 -04} {2244682800 -14400 0 -04} - {2265854400 -10800 1 -03} + {2267064000 -10800 1 -04} {2276132400 -14400 0 -04} - {2297304000 -10800 1 -03} + {2298513600 -10800 1 -04} {2307582000 -14400 0 -04} - {2328753600 -10800 1 -03} + {2329963200 -10800 1 -04} {2339636400 -14400 0 -04} - {2360203200 -10800 1 -03} + {2362017600 -10800 1 -04} {2371086000 -14400 0 -04} - {2391652800 -10800 1 -03} + {2393467200 -10800 1 -04} {2402535600 -14400 0 -04} - {2423707200 -10800 1 -03} + {2424916800 -10800 1 -04} {2433985200 -14400 0 -04} - {2455156800 -10800 1 -03} + {2456366400 -10800 1 -04} {2465434800 -14400 0 -04} - {2486606400 -10800 1 -03} + {2487816000 -10800 1 -04} {2497489200 -14400 0 -04} - {2518056000 -10800 1 -03} + {2519870400 -10800 1 -04} {2528938800 -14400 0 -04} - {2549505600 -10800 1 -03} + {2551320000 -10800 1 -04} {2560388400 -14400 0 -04} - {2580955200 -10800 1 -03} + {2582769600 -10800 1 -04} {2591838000 -14400 0 -04} - {2613009600 -10800 1 -03} + {2614219200 -10800 1 -04} {2623287600 -14400 0 -04} - {2644459200 -10800 1 -03} + {2645668800 -10800 1 -04} {2654737200 -14400 0 -04} - {2675908800 -10800 1 -03} + {2677118400 -10800 1 -04} {2686791600 -14400 0 -04} - {2707358400 -10800 1 -03} + {2709172800 -10800 1 -04} {2718241200 -14400 0 -04} - {2738808000 -10800 1 -03} + {2740622400 -10800 1 -04} {2749690800 -14400 0 -04} - {2770862400 -10800 1 -03} + {2772072000 -10800 1 -04} {2781140400 -14400 0 -04} - {2802312000 -10800 1 -03} + {2803521600 -10800 1 -04} {2812590000 -14400 0 -04} - {2833761600 -10800 1 -03} + {2834971200 -10800 1 -04} {2844039600 -14400 0 -04} - {2865211200 -10800 1 -03} + {2867025600 -10800 1 -04} {2876094000 -14400 0 -04} - {2896660800 -10800 1 -03} + {2898475200 -10800 1 -04} {2907543600 -14400 0 -04} - {2928110400 -10800 1 -03} + {2929924800 -10800 1 -04} {2938993200 -14400 0 -04} - {2960164800 -10800 1 -03} + {2961374400 -10800 1 -04} {2970442800 -14400 0 -04} - {2991614400 -10800 1 -03} + {2992824000 -10800 1 -04} {3001892400 -14400 0 -04} - {3023064000 -10800 1 -03} + {3024273600 -10800 1 -04} {3033946800 -14400 0 -04} - {3054513600 -10800 1 -03} + {3056328000 -10800 1 -04} {3065396400 -14400 0 -04} - {3085963200 -10800 1 -03} + {3087777600 -10800 1 -04} {3096846000 -14400 0 -04} - {3118017600 -10800 1 -03} + {3119227200 -10800 1 -04} {3128295600 -14400 0 -04} - {3149467200 -10800 1 -03} + {3150676800 -10800 1 -04} {3159745200 -14400 0 -04} - {3180916800 -10800 1 -03} + {3182126400 -10800 1 -04} {3191194800 -14400 0 -04} - {3212366400 -10800 1 -03} + {3213576000 -10800 1 -04} {3223249200 -14400 0 -04} - {3243816000 -10800 1 -03} + {3245630400 -10800 1 -04} {3254698800 -14400 0 -04} - {3275265600 -10800 1 -03} + {3277080000 -10800 1 -04} {3286148400 -14400 0 -04} - {3307320000 -10800 1 -03} + {3308529600 -10800 1 -04} {3317598000 -14400 0 -04} - {3338769600 -10800 1 -03} + {3339979200 -10800 1 -04} {3349047600 -14400 0 -04} - {3370219200 -10800 1 -03} + {3371428800 -10800 1 -04} {3381102000 -14400 0 -04} - {3401668800 -10800 1 -03} + {3403483200 -10800 1 -04} {3412551600 -14400 0 -04} - {3433118400 -10800 1 -03} + {3434932800 -10800 1 -04} {3444001200 -14400 0 -04} - {3464568000 -10800 1 -03} + {3466382400 -10800 1 -04} {3475450800 -14400 0 -04} - {3496622400 -10800 1 -03} + {3497832000 -10800 1 -04} {3506900400 -14400 0 -04} - {3528072000 -10800 1 -03} + {3529281600 -10800 1 -04} {3538350000 -14400 0 -04} - {3559521600 -10800 1 -03} + {3560731200 -10800 1 -04} {3570404400 -14400 0 -04} - {3590971200 -10800 1 -03} + {3592785600 -10800 1 -04} {3601854000 -14400 0 -04} - {3622420800 -10800 1 -03} + {3624235200 -10800 1 -04} {3633303600 -14400 0 -04} - {3654475200 -10800 1 -03} + {3655684800 -10800 1 -04} {3664753200 -14400 0 -04} - {3685924800 -10800 1 -03} + {3687134400 -10800 1 -04} {3696202800 -14400 0 -04} - {3717374400 -10800 1 -03} + {3718584000 -10800 1 -04} {3727652400 -14400 0 -04} - {3748824000 -10800 1 -03} + {3750638400 -10800 1 -04} {3759706800 -14400 0 -04} - {3780273600 -10800 1 -03} + {3782088000 -10800 1 -04} {3791156400 -14400 0 -04} - {3811723200 -10800 1 -03} + {3813537600 -10800 1 -04} {3822606000 -14400 0 -04} - {3843777600 -10800 1 -03} + {3844987200 -10800 1 -04} {3854055600 -14400 0 -04} - {3875227200 -10800 1 -03} + {3876436800 -10800 1 -04} {3885505200 -14400 0 -04} - {3906676800 -10800 1 -03} + {3907886400 -10800 1 -04} {3917559600 -14400 0 -04} - {3938126400 -10800 1 -03} + {3939940800 -10800 1 -04} {3949009200 -14400 0 -04} - {3969576000 -10800 1 -03} + {3971390400 -10800 1 -04} {3980458800 -14400 0 -04} - {4001630400 -10800 1 -03} + {4002840000 -10800 1 -04} {4011908400 -14400 0 -04} - {4033080000 -10800 1 -03} + {4034289600 -10800 1 -04} {4043358000 -14400 0 -04} - {4064529600 -10800 1 -03} + {4065739200 -10800 1 -04} {4074807600 -14400 0 -04} - {4095979200 -10800 1 -03} + {4097188800 -10800 1 -04} } diff --git a/library/tzdata/America/Eirunepe b/library/tzdata/America/Eirunepe index 41b4cc9..a81b09e 100644 --- a/library/tzdata/America/Eirunepe +++ b/library/tzdata/America/Eirunepe @@ -3,37 +3,37 @@ set TZData(:America/Eirunepe) { {-9223372036854775808 -16768 0 LMT} {-1767208832 -18000 0 -05} - {-1206950400 -14400 1 -04} + {-1206950400 -14400 1 -05} {-1191355200 -18000 0 -05} - {-1175367600 -14400 1 -04} + {-1175367600 -14400 1 -05} {-1159819200 -18000 0 -05} - {-633812400 -14400 1 -04} + {-633812400 -14400 1 -05} {-622062000 -18000 0 -05} - {-602276400 -14400 1 -04} + {-602276400 -14400 1 -05} {-591825600 -18000 0 -05} - {-570740400 -14400 1 -04} + {-570740400 -14400 1 -05} {-560203200 -18000 0 -05} - {-539118000 -14400 1 -04} + {-539118000 -14400 1 -05} {-531345600 -18000 0 -05} - {-191358000 -14400 1 -04} + {-191358000 -14400 1 -05} {-184190400 -18000 0 -05} - {-155156400 -14400 1 -04} + {-155156400 -14400 1 -05} {-150062400 -18000 0 -05} - {-128890800 -14400 1 -04} + {-128890800 -14400 1 -05} {-121118400 -18000 0 -05} - {-99946800 -14400 1 -04} + {-99946800 -14400 1 -05} {-89582400 -18000 0 -05} - {-68410800 -14400 1 -04} + {-68410800 -14400 1 -05} {-57960000 -18000 0 -05} - {499755600 -14400 1 -04} + {499755600 -14400 1 -05} {511243200 -18000 0 -05} - {530600400 -14400 1 -04} + {530600400 -14400 1 -05} {540273600 -18000 0 -05} - {562136400 -14400 1 -04} + {562136400 -14400 1 -05} {571204800 -18000 0 -05} {590040000 -18000 0 -05} {749192400 -18000 0 -05} - {750834000 -14400 1 -04} + {750834000 -14400 1 -05} {761716800 -18000 0 -05} {780206400 -18000 0 -05} {1214283600 -14400 0 -04} diff --git a/library/tzdata/America/Fortaleza b/library/tzdata/America/Fortaleza index 06c7b84..bd806f1 100644 --- a/library/tzdata/America/Fortaleza +++ b/library/tzdata/America/Fortaleza @@ -3,46 +3,46 @@ set TZData(:America/Fortaleza) { {-9223372036854775808 -9240 0 LMT} {-1767216360 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {938660400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {972180000 -10800 0 -03} {1000350000 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} {1033437600 -10800 0 -03} } diff --git a/library/tzdata/America/Grand_Turk b/library/tzdata/America/Grand_Turk index c963adc..da5f09b 100644 --- a/library/tzdata/America/Grand_Turk +++ b/library/tzdata/America/Grand_Turk @@ -2,8 +2,8 @@ set TZData(:America/Grand_Turk) { {-9223372036854775808 -17072 0 LMT} - {-2524504528 -18431 0 KMT} - {-1827687169 -18000 0 EST} + {-2524504528 -18430 0 KMT} + {-1827687170 -18000 0 EST} {284014800 -18000 0 EST} {294217200 -14400 1 EDT} {309938400 -18000 0 EST} diff --git a/library/tzdata/America/Guayaquil b/library/tzdata/America/Guayaquil index 353eb69..6ba7b93 100644 --- a/library/tzdata/America/Guayaquil +++ b/library/tzdata/America/Guayaquil @@ -4,6 +4,6 @@ set TZData(:America/Guayaquil) { {-9223372036854775808 -19160 0 LMT} {-2524502440 -18840 0 QMT} {-1230749160 -18000 0 -05} - {722926800 -14400 1 -04} + {722926800 -14400 1 -05} {728884800 -18000 0 -05} } diff --git a/library/tzdata/America/Jamaica b/library/tzdata/America/Jamaica index f752842..0f758bd 100644 --- a/library/tzdata/America/Jamaica +++ b/library/tzdata/America/Jamaica @@ -1,9 +1,9 @@ # created by tools/tclZIC.tcl - do not edit set TZData(:America/Jamaica) { - {-9223372036854775808 -18431 0 LMT} - {-2524503169 -18431 0 KMT} - {-1827687169 -18000 0 EST} + {-9223372036854775808 -18430 0 LMT} + {-2524503170 -18430 0 KMT} + {-1827687170 -18000 0 EST} {126248400 -18000 0 EST} {126687600 -14400 1 EDT} {152085600 -18000 0 EST} diff --git a/library/tzdata/America/La_Paz b/library/tzdata/America/La_Paz index a245afd..ea2f711 100644 --- a/library/tzdata/America/La_Paz +++ b/library/tzdata/America/La_Paz @@ -3,6 +3,6 @@ set TZData(:America/La_Paz) { {-9223372036854775808 -16356 0 LMT} {-2524505244 -16356 0 CMT} - {-1205954844 -12756 1 BOST} + {-1205954844 -12756 1 BST} {-1192307244 -14400 0 -04} } diff --git a/library/tzdata/America/Lima b/library/tzdata/America/Lima index b224a64..e8b69d6 100644 --- a/library/tzdata/America/Lima +++ b/library/tzdata/America/Lima @@ -3,11 +3,11 @@ set TZData(:America/Lima) { {-9223372036854775808 -18492 0 LMT} {-2524503108 -18516 0 LMT} - {-1938538284 -14400 0 -04} + {-1938538284 -14400 0 -05} {-1002052800 -18000 0 -05} - {-986756400 -14400 1 -04} + {-986756400 -14400 1 -05} {-971035200 -18000 0 -05} - {-955306800 -14400 1 -04} + {-955306800 -14400 1 -05} {-939585600 -18000 0 -05} {512712000 -18000 0 -05} {544248000 -18000 0 -05} diff --git a/library/tzdata/America/Maceio b/library/tzdata/America/Maceio index e6ed548..eab534e 100644 --- a/library/tzdata/America/Maceio +++ b/library/tzdata/America/Maceio @@ -3,50 +3,50 @@ set TZData(:America/Maceio) { {-9223372036854775808 -8572 0 LMT} {-1767217028 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {813553200 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} {841802400 -10800 0 -03} {938660400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {972180000 -10800 0 -03} {1000350000 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} {1033437600 -10800 0 -03} } diff --git a/library/tzdata/America/Manaus b/library/tzdata/America/Manaus index f17023c..a855062 100644 --- a/library/tzdata/America/Manaus +++ b/library/tzdata/America/Manaus @@ -3,37 +3,37 @@ set TZData(:America/Manaus) { {-9223372036854775808 -14404 0 LMT} {-1767211196 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} {749188800 -14400 0 -04} - {750830400 -10800 1 -03} + {750830400 -10800 1 -04} {761713200 -14400 0 -04} {780202800 -14400 0 -04} } diff --git a/library/tzdata/America/Montevideo b/library/tzdata/America/Montevideo index ff85fb3..27fb76e 100644 --- a/library/tzdata/America/Montevideo +++ b/library/tzdata/America/Montevideo @@ -1,96 +1,96 @@ # created by tools/tclZIC.tcl - do not edit set TZData(:America/Montevideo) { - {-9223372036854775808 -13484 0 LMT} - {-2256668116 -13484 0 MMT} - {-1567455316 -12600 0 -0330} - {-1459542600 -10800 1 -03} + {-9223372036854775808 -13491 0 LMT} + {-1942690509 -13491 0 MMT} + {-1567455309 -14400 0 -04} + {-1459627200 -10800 0 -0330} {-1443819600 -12600 0 -0330} - {-1428006600 -10800 1 -03} + {-1428006600 -10800 1 -0330} {-1412283600 -12600 0 -0330} - {-1396470600 -10800 1 -03} + {-1396470600 -10800 1 -0330} {-1380747600 -12600 0 -0330} - {-1141590600 -10800 1 -03} + {-1141590600 -10800 1 -0330} {-1128286800 -12600 0 -0330} - {-1110141000 -10800 1 -03} + {-1110141000 -10800 1 -0330} {-1096837200 -12600 0 -0330} - {-1078691400 -10800 1 -03} + {-1078691400 -10800 1 -0330} {-1065387600 -12600 0 -0330} - {-1046637000 -10800 1 -03} + {-1047241800 -10800 1 -0330} {-1033938000 -12600 0 -0330} - {-1015187400 -10800 1 -03} + {-1015187400 -10800 1 -0330} {-1002488400 -12600 0 -0330} - {-983737800 -10800 1 -03} + {-983737800 -10800 1 -0330} {-971038800 -12600 0 -0330} - {-952288200 -10800 1 -03} + {-954707400 -10800 1 -0330} {-938984400 -12600 0 -0330} - {-920838600 -10800 1 -03} + {-920838600 -10800 1 -0330} {-907534800 -12600 0 -0330} - {-896819400 -10800 1 -03} - {-853623000 -10800 0 -03} - {-853621200 -7200 1 -02} - {-845848800 -10800 0 -03} - {-334789200 -7200 1 -02} - {-319672800 -10800 0 -03} - {-314226000 -7200 1 -02} + {-896819400 -10800 1 -0330} + {-853621200 -9000 0 -03} + {-845847000 -10800 0 -03} + {-334789200 -9000 1 -03} + {-319671000 -10800 0 -03} + {-315608400 -10800 0 -03} + {-314226000 -7200 1 -03} {-309996000 -10800 0 -03} - {-149720400 -7200 1 -02} + {-149720400 -7200 1 -03} {-134604000 -10800 0 -03} - {-118270800 -7200 1 -02} - {-100044000 -10800 0 -03} - {-86821200 -7200 1 -02} - {-68508000 -10800 0 -03} {-63147600 -10800 0 -03} - {-50446800 -9000 1 -0230} - {-34119000 -10800 0 -03} - {-18910800 -9000 1 -0230} - {-2583000 -10800 0 -03} - {12625200 -9000 1 -0230} - {28953000 -10800 0 -03} - {31546800 -10800 0 -03} - {72932400 -7200 1 -02} - {82692000 -10800 0 -03} + {-50446800 -9000 1 -03} + {-34205400 -10800 0 -03} + {10800 -10800 0 -03} + {9860400 -7200 1 -03} + {14176800 -10800 0 -03} + {72846000 -7200 1 -03} + {80100000 -10800 0 -03} {126241200 -10800 0 -03} - {132116400 -9000 1 -0230} - {156909600 -9000 0 -02} - {156911400 -7200 1 -02} - {212983200 -10800 0 -03} - {250052400 -7200 1 -02} - {260244000 -10800 0 -03} - {307594800 -7200 1 -02} - {325994400 -10800 0 -03} - {566449200 -7200 1 -02} - {574308000 -10800 0 -03} - {597812400 -7200 1 -02} - {605671200 -10800 0 -03} - {625633200 -7200 1 -02} - {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {127278000 -5400 1 -03} + {132112800 -9000 0 -03} + {147234600 -10800 0 -03} + {156909600 -10800 0 -03} + {156913200 -7200 1 -03} + {165376800 -10800 0 -03} + {219812400 -7200 1 -03} + {226461600 -10800 0 -03} + {250052400 -7200 1 -03} + {257911200 -10800 0 -03} + {282711600 -7200 1 -03} + {289360800 -10800 0 -03} + {294202800 -7200 1 -03} + {322020000 -10800 0 -03} + {566449200 -7200 1 -03} + {573012000 -10800 0 -03} + {597812400 -7200 1 -03} + {605066400 -10800 0 -03} + {625633200 -7200 1 -03} + {635911200 -10800 0 -03} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {688532400 -7200 1 -02} + {688532400 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {730864800 -10800 0 -03} - {1095562800 -7200 1 -02} + {1095562800 -7200 1 -03} {1111896000 -10800 0 -03} - {1128834000 -7200 1 -02} + {1128834000 -7200 1 -03} {1142136000 -10800 0 -03} - {1159678800 -7200 1 -02} + {1159678800 -7200 1 -03} {1173585600 -10800 0 -03} - {1191733200 -7200 1 -02} + {1191733200 -7200 1 -03} {1205035200 -10800 0 -03} - {1223182800 -7200 1 -02} + {1223182800 -7200 1 -03} {1236484800 -10800 0 -03} - {1254632400 -7200 1 -02} + {1254632400 -7200 1 -03} {1268539200 -10800 0 -03} - {1286082000 -7200 1 -02} + {1286082000 -7200 1 -03} {1299988800 -10800 0 -03} - {1317531600 -7200 1 -02} + {1317531600 -7200 1 -03} {1331438400 -10800 0 -03} - {1349586000 -7200 1 -02} + {1349586000 -7200 1 -03} {1362888000 -10800 0 -03} - {1381035600 -7200 1 -02} + {1381035600 -7200 1 -03} {1394337600 -10800 0 -03} - {1412485200 -7200 1 -02} + {1412485200 -7200 1 -03} {1425787200 -10800 0 -03} } diff --git a/library/tzdata/America/Noronha b/library/tzdata/America/Noronha index f24b412..01fb745 100644 --- a/library/tzdata/America/Noronha +++ b/library/tzdata/America/Noronha @@ -3,46 +3,46 @@ set TZData(:America/Noronha) { {-9223372036854775808 -7780 0 LMT} {-1767217820 -7200 0 -02} - {-1206961200 -3600 1 -01} + {-1206961200 -3600 1 -02} {-1191366000 -7200 0 -02} - {-1175378400 -3600 1 -01} + {-1175378400 -3600 1 -02} {-1159830000 -7200 0 -02} - {-633823200 -3600 1 -01} + {-633823200 -3600 1 -02} {-622072800 -7200 0 -02} - {-602287200 -3600 1 -01} + {-602287200 -3600 1 -02} {-591836400 -7200 0 -02} - {-570751200 -3600 1 -01} + {-570751200 -3600 1 -02} {-560214000 -7200 0 -02} - {-539128800 -3600 1 -01} + {-539128800 -3600 1 -02} {-531356400 -7200 0 -02} - {-191368800 -3600 1 -01} + {-191368800 -3600 1 -02} {-184201200 -7200 0 -02} - {-155167200 -3600 1 -01} + {-155167200 -3600 1 -02} {-150073200 -7200 0 -02} - {-128901600 -3600 1 -01} + {-128901600 -3600 1 -02} {-121129200 -7200 0 -02} - {-99957600 -3600 1 -01} + {-99957600 -3600 1 -02} {-89593200 -7200 0 -02} - {-68421600 -3600 1 -01} + {-68421600 -3600 1 -02} {-57970800 -7200 0 -02} - {499744800 -3600 1 -01} + {499744800 -3600 1 -02} {511232400 -7200 0 -02} - {530589600 -3600 1 -01} + {530589600 -3600 1 -02} {540262800 -7200 0 -02} - {562125600 -3600 1 -01} + {562125600 -3600 1 -02} {571194000 -7200 0 -02} - {592970400 -3600 1 -01} + {592970400 -3600 1 -02} {602038800 -7200 0 -02} - {624420000 -3600 1 -01} + {624420000 -3600 1 -02} {634698000 -7200 0 -02} {653533200 -7200 0 -02} {938656800 -7200 0 -02} - {938916000 -3600 1 -01} + {938916000 -3600 1 -02} {951613200 -7200 0 -02} - {970970400 -3600 1 -01} + {970970400 -3600 1 -02} {971571600 -7200 0 -02} {1000346400 -7200 0 -02} - {1003024800 -3600 1 -01} + {1003024800 -3600 1 -02} {1013907600 -7200 0 -02} {1033434000 -7200 0 -02} } diff --git a/library/tzdata/America/Porto_Velho b/library/tzdata/America/Porto_Velho index 42566ad..8d7c8fd 100644 --- a/library/tzdata/America/Porto_Velho +++ b/library/tzdata/America/Porto_Velho @@ -3,33 +3,33 @@ set TZData(:America/Porto_Velho) { {-9223372036854775808 -15336 0 LMT} {-1767210264 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} } diff --git a/library/tzdata/America/Punta_Arenas b/library/tzdata/America/Punta_Arenas index 75487e7..5e8202a 100644 --- a/library/tzdata/America/Punta_Arenas +++ b/library/tzdata/America/Punta_Arenas @@ -8,115 +8,115 @@ set TZData(:America/Punta_Arenas) { {-1619205434 -14400 0 -04} {-1593806400 -16966 0 SMT} {-1335986234 -18000 0 -05} - {-1335985200 -14400 1 -04} + {-1335985200 -14400 1 -05} {-1317585600 -18000 0 -05} - {-1304362800 -14400 1 -04} + {-1304362800 -14400 1 -05} {-1286049600 -18000 0 -05} - {-1272826800 -14400 1 -04} + {-1272826800 -14400 1 -05} {-1254513600 -18000 0 -05} - {-1241290800 -14400 1 -04} + {-1241290800 -14400 1 -05} {-1222977600 -18000 0 -05} - {-1209754800 -14400 1 -04} + {-1209754800 -14400 1 -05} {-1191355200 -18000 0 -05} {-1178132400 -14400 0 -04} {-870552000 -18000 0 -05} {-865278000 -14400 0 -04} {-718056000 -18000 0 -05} {-713649600 -14400 0 -04} - {-36619200 -10800 1 -03} + {-36619200 -10800 1 -04} {-23922000 -14400 0 -04} - {-3355200 -10800 1 -03} + {-3355200 -10800 1 -04} {7527600 -14400 0 -04} - {24465600 -10800 1 -03} + {24465600 -10800 1 -04} {37767600 -14400 0 -04} - {55915200 -10800 1 -03} + {55915200 -10800 1 -04} {69217200 -14400 0 -04} - {87969600 -10800 1 -03} + {87969600 -10800 1 -04} {100666800 -14400 0 -04} - {118209600 -10800 1 -03} + {118209600 -10800 1 -04} {132116400 -14400 0 -04} - {150868800 -10800 1 -03} + {150868800 -10800 1 -04} {163566000 -14400 0 -04} - {182318400 -10800 1 -03} + {182318400 -10800 1 -04} {195620400 -14400 0 -04} - {213768000 -10800 1 -03} + {213768000 -10800 1 -04} {227070000 -14400 0 -04} - {245217600 -10800 1 -03} + {245217600 -10800 1 -04} {258519600 -14400 0 -04} - {277272000 -10800 1 -03} + {277272000 -10800 1 -04} {289969200 -14400 0 -04} - {308721600 -10800 1 -03} + {308721600 -10800 1 -04} {321418800 -14400 0 -04} - {340171200 -10800 1 -03} + {340171200 -10800 1 -04} {353473200 -14400 0 -04} - {371620800 -10800 1 -03} + {371620800 -10800 1 -04} {384922800 -14400 0 -04} - {403070400 -10800 1 -03} + {403070400 -10800 1 -04} {416372400 -14400 0 -04} - {434520000 -10800 1 -03} + {434520000 -10800 1 -04} {447822000 -14400 0 -04} - {466574400 -10800 1 -03} + {466574400 -10800 1 -04} {479271600 -14400 0 -04} - {498024000 -10800 1 -03} + {498024000 -10800 1 -04} {510721200 -14400 0 -04} - {529473600 -10800 1 -03} + {529473600 -10800 1 -04} {545194800 -14400 0 -04} - {560923200 -10800 1 -03} + {560923200 -10800 1 -04} {574225200 -14400 0 -04} - {592372800 -10800 1 -03} + {592372800 -10800 1 -04} {605674800 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {637124400 -14400 0 -04} - {653457600 -10800 1 -03} + {653457600 -10800 1 -04} {668574000 -14400 0 -04} - {687326400 -10800 1 -03} + {687326400 -10800 1 -04} {700628400 -14400 0 -04} - {718776000 -10800 1 -03} + {718776000 -10800 1 -04} {732078000 -14400 0 -04} - {750225600 -10800 1 -03} + {750225600 -10800 1 -04} {763527600 -14400 0 -04} - {781675200 -10800 1 -03} + {781675200 -10800 1 -04} {794977200 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {826426800 -14400 0 -04} - {845179200 -10800 1 -03} + {845179200 -10800 1 -04} {859690800 -14400 0 -04} - {876628800 -10800 1 -03} + {876628800 -10800 1 -04} {889930800 -14400 0 -04} - {906868800 -10800 1 -03} + {906868800 -10800 1 -04} {923194800 -14400 0 -04} - {939528000 -10800 1 -03} + {939528000 -10800 1 -04} {952830000 -14400 0 -04} - {971582400 -10800 1 -03} + {971582400 -10800 1 -04} {984279600 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1015729200 -14400 0 -04} - {1034481600 -10800 1 -03} + {1034481600 -10800 1 -04} {1047178800 -14400 0 -04} - {1065931200 -10800 1 -03} + {1065931200 -10800 1 -04} {1079233200 -14400 0 -04} - {1097380800 -10800 1 -03} + {1097380800 -10800 1 -04} {1110682800 -14400 0 -04} - {1128830400 -10800 1 -03} + {1128830400 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1206846000 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1237086000 -14400 0 -04} - {1255233600 -10800 1 -03} + {1255233600 -10800 1 -04} {1270350000 -14400 0 -04} - {1286683200 -10800 1 -03} + {1286683200 -10800 1 -04} {1304823600 -14400 0 -04} - {1313899200 -10800 1 -03} + {1313899200 -10800 1 -04} {1335668400 -14400 0 -04} - {1346558400 -10800 1 -03} + {1346558400 -10800 1 -04} {1367118000 -14400 0 -04} - {1378612800 -10800 1 -03} + {1378612800 -10800 1 -04} {1398567600 -14400 0 -04} - {1410062400 -10800 1 -03} + {1410062400 -10800 1 -04} {1463281200 -14400 0 -04} - {1471147200 -10800 1 -03} + {1471147200 -10800 1 -04} {1480820400 -10800 0 -03} } diff --git a/library/tzdata/America/Recife b/library/tzdata/America/Recife index 8eae571..db0a445 100644 --- a/library/tzdata/America/Recife +++ b/library/tzdata/America/Recife @@ -3,46 +3,46 @@ set TZData(:America/Recife) { {-9223372036854775808 -8376 0 LMT} {-1767217224 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {938660400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {971575200 -10800 0 -03} {1000350000 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} {1033437600 -10800 0 -03} } diff --git a/library/tzdata/America/Rio_Branco b/library/tzdata/America/Rio_Branco index e3c2f31..088800b 100644 --- a/library/tzdata/America/Rio_Branco +++ b/library/tzdata/America/Rio_Branco @@ -3,33 +3,33 @@ set TZData(:America/Rio_Branco) { {-9223372036854775808 -16272 0 LMT} {-1767209328 -18000 0 -05} - {-1206950400 -14400 1 -04} + {-1206950400 -14400 1 -05} {-1191355200 -18000 0 -05} - {-1175367600 -14400 1 -04} + {-1175367600 -14400 1 -05} {-1159819200 -18000 0 -05} - {-633812400 -14400 1 -04} + {-633812400 -14400 1 -05} {-622062000 -18000 0 -05} - {-602276400 -14400 1 -04} + {-602276400 -14400 1 -05} {-591825600 -18000 0 -05} - {-570740400 -14400 1 -04} + {-570740400 -14400 1 -05} {-560203200 -18000 0 -05} - {-539118000 -14400 1 -04} + {-539118000 -14400 1 -05} {-531345600 -18000 0 -05} - {-191358000 -14400 1 -04} + {-191358000 -14400 1 -05} {-184190400 -18000 0 -05} - {-155156400 -14400 1 -04} + {-155156400 -14400 1 -05} {-150062400 -18000 0 -05} - {-128890800 -14400 1 -04} + {-128890800 -14400 1 -05} {-121118400 -18000 0 -05} - {-99946800 -14400 1 -04} + {-99946800 -14400 1 -05} {-89582400 -18000 0 -05} - {-68410800 -14400 1 -04} + {-68410800 -14400 1 -05} {-57960000 -18000 0 -05} - {499755600 -14400 1 -04} + {499755600 -14400 1 -05} {511243200 -18000 0 -05} - {530600400 -14400 1 -04} + {530600400 -14400 1 -05} {540273600 -18000 0 -05} - {562136400 -14400 1 -04} + {562136400 -14400 1 -05} {571204800 -18000 0 -05} {590040000 -18000 0 -05} {1214283600 -14400 0 -04} diff --git a/library/tzdata/America/Santarem b/library/tzdata/America/Santarem index f81e9b6..5fa3551 100644 --- a/library/tzdata/America/Santarem +++ b/library/tzdata/America/Santarem @@ -3,33 +3,33 @@ set TZData(:America/Santarem) { {-9223372036854775808 -13128 0 LMT} {-1767212472 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} {1214280000 -10800 0 -03} diff --git a/library/tzdata/America/Santiago b/library/tzdata/America/Santiago index 95e920d..67d5b5c 100644 --- a/library/tzdata/America/Santiago +++ b/library/tzdata/America/Santiago @@ -8,15 +8,15 @@ set TZData(:America/Santiago) { {-1619205434 -14400 0 -04} {-1593806400 -16966 0 SMT} {-1335986234 -18000 0 -05} - {-1335985200 -14400 1 -04} + {-1335985200 -14400 1 -05} {-1317585600 -18000 0 -05} - {-1304362800 -14400 1 -04} + {-1304362800 -14400 1 -05} {-1286049600 -18000 0 -05} - {-1272826800 -14400 1 -04} + {-1272826800 -14400 1 -05} {-1254513600 -18000 0 -05} - {-1241290800 -14400 1 -04} + {-1241290800 -14400 1 -05} {-1222977600 -18000 0 -05} - {-1209754800 -14400 1 -04} + {-1209754800 -14400 1 -05} {-1191355200 -18000 0 -05} {-1178132400 -14400 0 -04} {-870552000 -18000 0 -05} @@ -25,265 +25,265 @@ set TZData(:America/Santiago) { {-736376400 -14400 0 -04} {-718056000 -18000 0 -05} {-713649600 -14400 0 -04} - {-36619200 -10800 1 -03} + {-36619200 -10800 1 -04} {-23922000 -14400 0 -04} - {-3355200 -10800 1 -03} + {-3355200 -10800 1 -04} {7527600 -14400 0 -04} - {24465600 -10800 1 -03} + {24465600 -10800 1 -04} {37767600 -14400 0 -04} - {55915200 -10800 1 -03} + {55915200 -10800 1 -04} {69217200 -14400 0 -04} - {87969600 -10800 1 -03} + {87969600 -10800 1 -04} {100666800 -14400 0 -04} - {118209600 -10800 1 -03} + {118209600 -10800 1 -04} {132116400 -14400 0 -04} - {150868800 -10800 1 -03} + {150868800 -10800 1 -04} {163566000 -14400 0 -04} - {182318400 -10800 1 -03} + {182318400 -10800 1 -04} {195620400 -14400 0 -04} - {213768000 -10800 1 -03} + {213768000 -10800 1 -04} {227070000 -14400 0 -04} - {245217600 -10800 1 -03} + {245217600 -10800 1 -04} {258519600 -14400 0 -04} - {277272000 -10800 1 -03} + {277272000 -10800 1 -04} {289969200 -14400 0 -04} - {308721600 -10800 1 -03} + {308721600 -10800 1 -04} {321418800 -14400 0 -04} - {340171200 -10800 1 -03} + {340171200 -10800 1 -04} {353473200 -14400 0 -04} - {371620800 -10800 1 -03} + {371620800 -10800 1 -04} {384922800 -14400 0 -04} - {403070400 -10800 1 -03} + {403070400 -10800 1 -04} {416372400 -14400 0 -04} - {434520000 -10800 1 -03} + {434520000 -10800 1 -04} {447822000 -14400 0 -04} - {466574400 -10800 1 -03} + {466574400 -10800 1 -04} {479271600 -14400 0 -04} - {498024000 -10800 1 -03} + {498024000 -10800 1 -04} {510721200 -14400 0 -04} - {529473600 -10800 1 -03} + {529473600 -10800 1 -04} {545194800 -14400 0 -04} - {560923200 -10800 1 -03} + {560923200 -10800 1 -04} {574225200 -14400 0 -04} - {592372800 -10800 1 -03} + {592372800 -10800 1 -04} {605674800 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {637124400 -14400 0 -04} - {653457600 -10800 1 -03} + {653457600 -10800 1 -04} {668574000 -14400 0 -04} - {687326400 -10800 1 -03} + {687326400 -10800 1 -04} {700628400 -14400 0 -04} - {718776000 -10800 1 -03} + {718776000 -10800 1 -04} {732078000 -14400 0 -04} - {750225600 -10800 1 -03} + {750225600 -10800 1 -04} {763527600 -14400 0 -04} - {781675200 -10800 1 -03} + {781675200 -10800 1 -04} {794977200 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {826426800 -14400 0 -04} - {845179200 -10800 1 -03} + {845179200 -10800 1 -04} {859690800 -14400 0 -04} - {876628800 -10800 1 -03} + {876628800 -10800 1 -04} {889930800 -14400 0 -04} - {906868800 -10800 1 -03} + {906868800 -10800 1 -04} {923194800 -14400 0 -04} - {939528000 -10800 1 -03} + {939528000 -10800 1 -04} {952830000 -14400 0 -04} - {971582400 -10800 1 -03} + {971582400 -10800 1 -04} {984279600 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1015729200 -14400 0 -04} - {1034481600 -10800 1 -03} + {1034481600 -10800 1 -04} {1047178800 -14400 0 -04} - {1065931200 -10800 1 -03} + {1065931200 -10800 1 -04} {1079233200 -14400 0 -04} - {1097380800 -10800 1 -03} + {1097380800 -10800 1 -04} {1110682800 -14400 0 -04} - {1128830400 -10800 1 -03} + {1128830400 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1206846000 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1237086000 -14400 0 -04} - {1255233600 -10800 1 -03} + {1255233600 -10800 1 -04} {1270350000 -14400 0 -04} - {1286683200 -10800 1 -03} + {1286683200 -10800 1 -04} {1304823600 -14400 0 -04} - {1313899200 -10800 1 -03} + {1313899200 -10800 1 -04} {1335668400 -14400 0 -04} - {1346558400 -10800 1 -03} + {1346558400 -10800 1 -04} {1367118000 -14400 0 -04} - {1378612800 -10800 1 -03} + {1378612800 -10800 1 -04} {1398567600 -14400 0 -04} - {1410062400 -10800 1 -03} + {1410062400 -10800 1 -04} {1463281200 -14400 0 -04} - {1471147200 -10800 1 -03} + {1471147200 -10800 1 -04} {1494730800 -14400 0 -04} - {1502596800 -10800 1 -03} + {1502596800 -10800 1 -04} {1526180400 -14400 0 -04} - {1534046400 -10800 1 -03} + {1534046400 -10800 1 -04} {1557630000 -14400 0 -04} - {1565496000 -10800 1 -03} + {1565496000 -10800 1 -04} {1589079600 -14400 0 -04} - {1596945600 -10800 1 -03} + {1596945600 -10800 1 -04} {1620529200 -14400 0 -04} - {1629000000 -10800 1 -03} + {1629000000 -10800 1 -04} {1652583600 -14400 0 -04} - {1660449600 -10800 1 -03} + {1660449600 -10800 1 -04} {1684033200 -14400 0 -04} - {1691899200 -10800 1 -03} + {1691899200 -10800 1 -04} {1715482800 -14400 0 -04} - {1723348800 -10800 1 -03} + {1723348800 -10800 1 -04} {1746932400 -14400 0 -04} - {1754798400 -10800 1 -03} + {1754798400 -10800 1 -04} {1778382000 -14400 0 -04} - {1786248000 -10800 1 -03} + {1786248000 -10800 1 -04} {1809831600 -14400 0 -04} - {1818302400 -10800 1 -03} + {1818302400 -10800 1 -04} {1841886000 -14400 0 -04} - {1849752000 -10800 1 -03} + {1849752000 -10800 1 -04} {1873335600 -14400 0 -04} - {1881201600 -10800 1 -03} + {1881201600 -10800 1 -04} {1904785200 -14400 0 -04} - {1912651200 -10800 1 -03} + {1912651200 -10800 1 -04} {1936234800 -14400 0 -04} - {1944100800 -10800 1 -03} + {1944100800 -10800 1 -04} {1967684400 -14400 0 -04} - {1976155200 -10800 1 -03} + {1976155200 -10800 1 -04} {1999738800 -14400 0 -04} - {2007604800 -10800 1 -03} + {2007604800 -10800 1 -04} {2031188400 -14400 0 -04} - {2039054400 -10800 1 -03} + {2039054400 -10800 1 -04} {2062638000 -14400 0 -04} - {2070504000 -10800 1 -03} + {2070504000 -10800 1 -04} {2094087600 -14400 0 -04} - {2101953600 -10800 1 -03} + {2101953600 -10800 1 -04} {2125537200 -14400 0 -04} - {2133403200 -10800 1 -03} + {2133403200 -10800 1 -04} {2156986800 -14400 0 -04} - {2165457600 -10800 1 -03} + {2165457600 -10800 1 -04} {2189041200 -14400 0 -04} - {2196907200 -10800 1 -03} + {2196907200 -10800 1 -04} {2220490800 -14400 0 -04} - {2228356800 -10800 1 -03} + {2228356800 -10800 1 -04} {2251940400 -14400 0 -04} - {2259806400 -10800 1 -03} + {2259806400 -10800 1 -04} {2283390000 -14400 0 -04} - {2291256000 -10800 1 -03} + {2291256000 -10800 1 -04} {2314839600 -14400 0 -04} - {2322705600 -10800 1 -03} + {2322705600 -10800 1 -04} {2346894000 -14400 0 -04} - {2354760000 -10800 1 -03} + {2354760000 -10800 1 -04} {2378343600 -14400 0 -04} - {2386209600 -10800 1 -03} + {2386209600 -10800 1 -04} {2409793200 -14400 0 -04} - {2417659200 -10800 1 -03} + {2417659200 -10800 1 -04} {2441242800 -14400 0 -04} - {2449108800 -10800 1 -03} + {2449108800 -10800 1 -04} {2472692400 -14400 0 -04} - {2480558400 -10800 1 -03} + {2480558400 -10800 1 -04} {2504142000 -14400 0 -04} - {2512612800 -10800 1 -03} + {2512612800 -10800 1 -04} {2536196400 -14400 0 -04} - {2544062400 -10800 1 -03} + {2544062400 -10800 1 -04} {2567646000 -14400 0 -04} - {2575512000 -10800 1 -03} + {2575512000 -10800 1 -04} {2599095600 -14400 0 -04} - {2606961600 -10800 1 -03} + {2606961600 -10800 1 -04} {2630545200 -14400 0 -04} - {2638411200 -10800 1 -03} + {2638411200 -10800 1 -04} {2661994800 -14400 0 -04} - {2669860800 -10800 1 -03} + {2669860800 -10800 1 -04} {2693444400 -14400 0 -04} - {2701915200 -10800 1 -03} + {2701915200 -10800 1 -04} {2725498800 -14400 0 -04} - {2733364800 -10800 1 -03} + {2733364800 -10800 1 -04} {2756948400 -14400 0 -04} - {2764814400 -10800 1 -03} + {2764814400 -10800 1 -04} {2788398000 -14400 0 -04} - {2796264000 -10800 1 -03} + {2796264000 -10800 1 -04} {2819847600 -14400 0 -04} - {2827713600 -10800 1 -03} + {2827713600 -10800 1 -04} {2851297200 -14400 0 -04} - {2859768000 -10800 1 -03} + {2859768000 -10800 1 -04} {2883351600 -14400 0 -04} - {2891217600 -10800 1 -03} + {2891217600 -10800 1 -04} {2914801200 -14400 0 -04} - {2922667200 -10800 1 -03} + {2922667200 -10800 1 -04} {2946250800 -14400 0 -04} - {2954116800 -10800 1 -03} + {2954116800 -10800 1 -04} {2977700400 -14400 0 -04} - {2985566400 -10800 1 -03} + {2985566400 -10800 1 -04} {3009150000 -14400 0 -04} - {3017016000 -10800 1 -03} + {3017016000 -10800 1 -04} {3040599600 -14400 0 -04} - {3049070400 -10800 1 -03} + {3049070400 -10800 1 -04} {3072654000 -14400 0 -04} - {3080520000 -10800 1 -03} + {3080520000 -10800 1 -04} {3104103600 -14400 0 -04} - {3111969600 -10800 1 -03} + {3111969600 -10800 1 -04} {3135553200 -14400 0 -04} - {3143419200 -10800 1 -03} + {3143419200 -10800 1 -04} {3167002800 -14400 0 -04} - {3174868800 -10800 1 -03} + {3174868800 -10800 1 -04} {3198452400 -14400 0 -04} - {3206318400 -10800 1 -03} + {3206318400 -10800 1 -04} {3230506800 -14400 0 -04} - {3238372800 -10800 1 -03} + {3238372800 -10800 1 -04} {3261956400 -14400 0 -04} - {3269822400 -10800 1 -03} + {3269822400 -10800 1 -04} {3293406000 -14400 0 -04} - {3301272000 -10800 1 -03} + {3301272000 -10800 1 -04} {3324855600 -14400 0 -04} - {3332721600 -10800 1 -03} + {3332721600 -10800 1 -04} {3356305200 -14400 0 -04} - {3364171200 -10800 1 -03} + {3364171200 -10800 1 -04} {3387754800 -14400 0 -04} - {3396225600 -10800 1 -03} + {3396225600 -10800 1 -04} {3419809200 -14400 0 -04} - {3427675200 -10800 1 -03} + {3427675200 -10800 1 -04} {3451258800 -14400 0 -04} - {3459124800 -10800 1 -03} + {3459124800 -10800 1 -04} {3482708400 -14400 0 -04} - {3490574400 -10800 1 -03} + {3490574400 -10800 1 -04} {3514158000 -14400 0 -04} - {3522024000 -10800 1 -03} + {3522024000 -10800 1 -04} {3545607600 -14400 0 -04} - {3553473600 -10800 1 -03} + {3553473600 -10800 1 -04} {3577057200 -14400 0 -04} - {3585528000 -10800 1 -03} + {3585528000 -10800 1 -04} {3609111600 -14400 0 -04} - {3616977600 -10800 1 -03} + {3616977600 -10800 1 -04} {3640561200 -14400 0 -04} - {3648427200 -10800 1 -03} + {3648427200 -10800 1 -04} {3672010800 -14400 0 -04} - {3679876800 -10800 1 -03} + {3679876800 -10800 1 -04} {3703460400 -14400 0 -04} - {3711326400 -10800 1 -03} + {3711326400 -10800 1 -04} {3734910000 -14400 0 -04} - {3743380800 -10800 1 -03} + {3743380800 -10800 1 -04} {3766964400 -14400 0 -04} - {3774830400 -10800 1 -03} + {3774830400 -10800 1 -04} {3798414000 -14400 0 -04} - {3806280000 -10800 1 -03} + {3806280000 -10800 1 -04} {3829863600 -14400 0 -04} - {3837729600 -10800 1 -03} + {3837729600 -10800 1 -04} {3861313200 -14400 0 -04} - {3869179200 -10800 1 -03} + {3869179200 -10800 1 -04} {3892762800 -14400 0 -04} - {3900628800 -10800 1 -03} + {3900628800 -10800 1 -04} {3924212400 -14400 0 -04} - {3932683200 -10800 1 -03} + {3932683200 -10800 1 -04} {3956266800 -14400 0 -04} - {3964132800 -10800 1 -03} + {3964132800 -10800 1 -04} {3987716400 -14400 0 -04} - {3995582400 -10800 1 -03} + {3995582400 -10800 1 -04} {4019166000 -14400 0 -04} - {4027032000 -10800 1 -03} + {4027032000 -10800 1 -04} {4050615600 -14400 0 -04} - {4058481600 -10800 1 -03} + {4058481600 -10800 1 -04} {4082065200 -14400 0 -04} - {4089931200 -10800 1 -03} + {4089931200 -10800 1 -04} } diff --git a/library/tzdata/America/Sao_Paulo b/library/tzdata/America/Sao_Paulo index a61c638..235f57a 100644 --- a/library/tzdata/America/Sao_Paulo +++ b/library/tzdata/America/Sao_Paulo @@ -3,256 +3,256 @@ set TZData(:America/Sao_Paulo) { {-9223372036854775808 -11188 0 LMT} {-1767214412 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} {-195429600 -7200 1 -02} {-189381600 -7200 0 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {666756000 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {697600800 -10800 0 -03} - {719982000 -7200 1 -02} + {719982000 -7200 1 -03} {728445600 -10800 0 -03} - {750826800 -7200 1 -02} + {750826800 -7200 1 -03} {761709600 -10800 0 -03} - {782276400 -7200 1 -02} + {782276400 -7200 1 -03} {793159200 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} - {844570800 -7200 1 -02} + {844570800 -7200 1 -03} {856058400 -10800 0 -03} - {876106800 -7200 1 -02} + {876106800 -7200 1 -03} {888717600 -10800 0 -03} - {908074800 -7200 1 -02} + {908074800 -7200 1 -03} {919562400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {982461600 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} - {1036292400 -7200 1 -02} + {1036292400 -7200 1 -03} {1045360800 -10800 0 -03} - {1066532400 -7200 1 -02} + {1066532400 -7200 1 -03} {1076810400 -10800 0 -03} - {1099364400 -7200 1 -02} + {1099364400 -7200 1 -03} {1108864800 -10800 0 -03} - {1129431600 -7200 1 -02} + {1129431600 -7200 1 -03} {1140314400 -10800 0 -03} - {1162695600 -7200 1 -02} + {1162695600 -7200 1 -03} {1172368800 -10800 0 -03} - {1192330800 -7200 1 -02} + {1192330800 -7200 1 -03} {1203213600 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1234663200 -10800 0 -03} - {1255834800 -7200 1 -02} + {1255834800 -7200 1 -03} {1266717600 -10800 0 -03} - {1287284400 -7200 1 -02} + {1287284400 -7200 1 -03} {1298167200 -10800 0 -03} - {1318734000 -7200 1 -02} + {1318734000 -7200 1 -03} {1330221600 -10800 0 -03} - {1350788400 -7200 1 -02} + {1350788400 -7200 1 -03} {1361066400 -10800 0 -03} - {1382238000 -7200 1 -02} + {1382238000 -7200 1 -03} {1392516000 -10800 0 -03} - {1413687600 -7200 1 -02} + {1413687600 -7200 1 -03} {1424570400 -10800 0 -03} - {1445137200 -7200 1 -02} + {1445137200 -7200 1 -03} {1456020000 -10800 0 -03} - {1476586800 -7200 1 -02} + {1476586800 -7200 1 -03} {1487469600 -10800 0 -03} - {1508036400 -7200 1 -02} + {1508036400 -7200 1 -03} {1518919200 -10800 0 -03} - {1540090800 -7200 1 -02} + {1541300400 -7200 1 -03} {1550368800 -10800 0 -03} - {1571540400 -7200 1 -02} + {1572750000 -7200 1 -03} {1581818400 -10800 0 -03} - {1602990000 -7200 1 -02} + {1604199600 -7200 1 -03} {1613872800 -10800 0 -03} - {1634439600 -7200 1 -02} + {1636254000 -7200 1 -03} {1645322400 -10800 0 -03} - {1665889200 -7200 1 -02} + {1667703600 -7200 1 -03} {1677376800 -10800 0 -03} - {1697338800 -7200 1 -02} + {1699153200 -7200 1 -03} {1708221600 -10800 0 -03} - {1729393200 -7200 1 -02} + {1730602800 -7200 1 -03} {1739671200 -10800 0 -03} - {1760842800 -7200 1 -02} + {1762052400 -7200 1 -03} {1771725600 -10800 0 -03} - {1792292400 -7200 1 -02} + {1793502000 -7200 1 -03} {1803175200 -10800 0 -03} - {1823742000 -7200 1 -02} + {1825556400 -7200 1 -03} {1834624800 -10800 0 -03} - {1855191600 -7200 1 -02} + {1857006000 -7200 1 -03} {1866074400 -10800 0 -03} - {1887246000 -7200 1 -02} + {1888455600 -7200 1 -03} {1897524000 -10800 0 -03} - {1918695600 -7200 1 -02} + {1919905200 -7200 1 -03} {1928973600 -10800 0 -03} - {1950145200 -7200 1 -02} + {1951354800 -7200 1 -03} {1960423200 -10800 0 -03} - {1981594800 -7200 1 -02} + {1983409200 -7200 1 -03} {1992477600 -10800 0 -03} - {2013044400 -7200 1 -02} + {2014858800 -7200 1 -03} {2024532000 -10800 0 -03} - {2044494000 -7200 1 -02} + {2046308400 -7200 1 -03} {2055376800 -10800 0 -03} - {2076548400 -7200 1 -02} + {2077758000 -7200 1 -03} {2086826400 -10800 0 -03} - {2107998000 -7200 1 -02} + {2109207600 -7200 1 -03} {2118880800 -10800 0 -03} - {2139447600 -7200 1 -02} + {2140657200 -7200 1 -03} {2150330400 -10800 0 -03} - {2170897200 -7200 1 -02} + {2172711600 -7200 1 -03} {2181780000 -10800 0 -03} - {2202346800 -7200 1 -02} + {2204161200 -7200 1 -03} {2213229600 -10800 0 -03} - {2234401200 -7200 1 -02} + {2235610800 -7200 1 -03} {2244679200 -10800 0 -03} - {2265850800 -7200 1 -02} + {2267060400 -7200 1 -03} {2276128800 -10800 0 -03} - {2297300400 -7200 1 -02} + {2298510000 -7200 1 -03} {2307578400 -10800 0 -03} - {2328750000 -7200 1 -02} + {2329959600 -7200 1 -03} {2339632800 -10800 0 -03} - {2360199600 -7200 1 -02} + {2362014000 -7200 1 -03} {2371082400 -10800 0 -03} - {2391649200 -7200 1 -02} + {2393463600 -7200 1 -03} {2402532000 -10800 0 -03} - {2423703600 -7200 1 -02} + {2424913200 -7200 1 -03} {2433981600 -10800 0 -03} - {2455153200 -7200 1 -02} + {2456362800 -7200 1 -03} {2465431200 -10800 0 -03} - {2486602800 -7200 1 -02} + {2487812400 -7200 1 -03} {2497485600 -10800 0 -03} - {2518052400 -7200 1 -02} + {2519866800 -7200 1 -03} {2528935200 -10800 0 -03} - {2549502000 -7200 1 -02} + {2551316400 -7200 1 -03} {2560384800 -10800 0 -03} - {2580951600 -7200 1 -02} + {2582766000 -7200 1 -03} {2591834400 -10800 0 -03} - {2613006000 -7200 1 -02} + {2614215600 -7200 1 -03} {2623284000 -10800 0 -03} - {2644455600 -7200 1 -02} + {2645665200 -7200 1 -03} {2654733600 -10800 0 -03} - {2675905200 -7200 1 -02} + {2677114800 -7200 1 -03} {2686788000 -10800 0 -03} - {2707354800 -7200 1 -02} + {2709169200 -7200 1 -03} {2718237600 -10800 0 -03} - {2738804400 -7200 1 -02} + {2740618800 -7200 1 -03} {2749687200 -10800 0 -03} - {2770858800 -7200 1 -02} + {2772068400 -7200 1 -03} {2781136800 -10800 0 -03} - {2802308400 -7200 1 -02} + {2803518000 -7200 1 -03} {2812586400 -10800 0 -03} - {2833758000 -7200 1 -02} + {2834967600 -7200 1 -03} {2844036000 -10800 0 -03} - {2865207600 -7200 1 -02} + {2867022000 -7200 1 -03} {2876090400 -10800 0 -03} - {2896657200 -7200 1 -02} + {2898471600 -7200 1 -03} {2907540000 -10800 0 -03} - {2928106800 -7200 1 -02} + {2929921200 -7200 1 -03} {2938989600 -10800 0 -03} - {2960161200 -7200 1 -02} + {2961370800 -7200 1 -03} {2970439200 -10800 0 -03} - {2991610800 -7200 1 -02} + {2992820400 -7200 1 -03} {3001888800 -10800 0 -03} - {3023060400 -7200 1 -02} + {3024270000 -7200 1 -03} {3033943200 -10800 0 -03} - {3054510000 -7200 1 -02} + {3056324400 -7200 1 -03} {3065392800 -10800 0 -03} - {3085959600 -7200 1 -02} + {3087774000 -7200 1 -03} {3096842400 -10800 0 -03} - {3118014000 -7200 1 -02} + {3119223600 -7200 1 -03} {3128292000 -10800 0 -03} - {3149463600 -7200 1 -02} + {3150673200 -7200 1 -03} {3159741600 -10800 0 -03} - {3180913200 -7200 1 -02} + {3182122800 -7200 1 -03} {3191191200 -10800 0 -03} - {3212362800 -7200 1 -02} + {3213572400 -7200 1 -03} {3223245600 -10800 0 -03} - {3243812400 -7200 1 -02} + {3245626800 -7200 1 -03} {3254695200 -10800 0 -03} - {3275262000 -7200 1 -02} + {3277076400 -7200 1 -03} {3286144800 -10800 0 -03} - {3307316400 -7200 1 -02} + {3308526000 -7200 1 -03} {3317594400 -10800 0 -03} - {3338766000 -7200 1 -02} + {3339975600 -7200 1 -03} {3349044000 -10800 0 -03} - {3370215600 -7200 1 -02} + {3371425200 -7200 1 -03} {3381098400 -10800 0 -03} - {3401665200 -7200 1 -02} + {3403479600 -7200 1 -03} {3412548000 -10800 0 -03} - {3433114800 -7200 1 -02} + {3434929200 -7200 1 -03} {3443997600 -10800 0 -03} - {3464564400 -7200 1 -02} + {3466378800 -7200 1 -03} {3475447200 -10800 0 -03} - {3496618800 -7200 1 -02} + {3497828400 -7200 1 -03} {3506896800 -10800 0 -03} - {3528068400 -7200 1 -02} + {3529278000 -7200 1 -03} {3538346400 -10800 0 -03} - {3559518000 -7200 1 -02} + {3560727600 -7200 1 -03} {3570400800 -10800 0 -03} - {3590967600 -7200 1 -02} + {3592782000 -7200 1 -03} {3601850400 -10800 0 -03} - {3622417200 -7200 1 -02} + {3624231600 -7200 1 -03} {3633300000 -10800 0 -03} - {3654471600 -7200 1 -02} + {3655681200 -7200 1 -03} {3664749600 -10800 0 -03} - {3685921200 -7200 1 -02} + {3687130800 -7200 1 -03} {3696199200 -10800 0 -03} - {3717370800 -7200 1 -02} + {3718580400 -7200 1 -03} {3727648800 -10800 0 -03} - {3748820400 -7200 1 -02} + {3750634800 -7200 1 -03} {3759703200 -10800 0 -03} - {3780270000 -7200 1 -02} + {3782084400 -7200 1 -03} {3791152800 -10800 0 -03} - {3811719600 -7200 1 -02} + {3813534000 -7200 1 -03} {3822602400 -10800 0 -03} - {3843774000 -7200 1 -02} + {3844983600 -7200 1 -03} {3854052000 -10800 0 -03} - {3875223600 -7200 1 -02} + {3876433200 -7200 1 -03} {3885501600 -10800 0 -03} - {3906673200 -7200 1 -02} + {3907882800 -7200 1 -03} {3917556000 -10800 0 -03} - {3938122800 -7200 1 -02} + {3939937200 -7200 1 -03} {3949005600 -10800 0 -03} - {3969572400 -7200 1 -02} + {3971386800 -7200 1 -03} {3980455200 -10800 0 -03} - {4001626800 -7200 1 -02} + {4002836400 -7200 1 -03} {4011904800 -10800 0 -03} - {4033076400 -7200 1 -02} + {4034286000 -7200 1 -03} {4043354400 -10800 0 -03} - {4064526000 -7200 1 -02} + {4065735600 -7200 1 -03} {4074804000 -10800 0 -03} - {4095975600 -7200 1 -02} + {4097185200 -7200 1 -03} } diff --git a/library/tzdata/Antarctica/Casey b/library/tzdata/Antarctica/Casey index beb0f9e..aa37480 100644 --- a/library/tzdata/Antarctica/Casey +++ b/library/tzdata/Antarctica/Casey @@ -8,4 +8,5 @@ set TZData(:Antarctica/Casey) { {1319738400 39600 0 +11} {1329843600 28800 0 +08} {1477065600 39600 0 +11} + {1520701200 28800 0 +08} } diff --git a/library/tzdata/Antarctica/Palmer b/library/tzdata/Antarctica/Palmer index bb2be4d..f450e3b 100644 --- a/library/tzdata/Antarctica/Palmer +++ b/library/tzdata/Antarctica/Palmer @@ -4,84 +4,84 @@ set TZData(:Antarctica/Palmer) { {-9223372036854775808 0 0 -00} {-157766400 -14400 0 -04} {-152654400 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} {389070000 -14400 0 -04} - {403070400 -10800 1 -03} + {403070400 -10800 1 -04} {416372400 -14400 0 -04} - {434520000 -10800 1 -03} + {434520000 -10800 1 -04} {447822000 -14400 0 -04} - {466574400 -10800 1 -03} + {466574400 -10800 1 -04} {479271600 -14400 0 -04} - {498024000 -10800 1 -03} + {498024000 -10800 1 -04} {510721200 -14400 0 -04} - {529473600 -10800 1 -03} + {529473600 -10800 1 -04} {545194800 -14400 0 -04} - {560923200 -10800 1 -03} + {560923200 -10800 1 -04} {574225200 -14400 0 -04} - {592372800 -10800 1 -03} + {592372800 -10800 1 -04} {605674800 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {637124400 -14400 0 -04} - {653457600 -10800 1 -03} + {653457600 -10800 1 -04} {668574000 -14400 0 -04} - {687326400 -10800 1 -03} + {687326400 -10800 1 -04} {700628400 -14400 0 -04} - {718776000 -10800 1 -03} + {718776000 -10800 1 -04} {732078000 -14400 0 -04} - {750225600 -10800 1 -03} + {750225600 -10800 1 -04} {763527600 -14400 0 -04} - {781675200 -10800 1 -03} + {781675200 -10800 1 -04} {794977200 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {826426800 -14400 0 -04} - {845179200 -10800 1 -03} + {845179200 -10800 1 -04} {859690800 -14400 0 -04} - {876628800 -10800 1 -03} + {876628800 -10800 1 -04} {889930800 -14400 0 -04} - {906868800 -10800 1 -03} + {906868800 -10800 1 -04} {923194800 -14400 0 -04} - {939528000 -10800 1 -03} + {939528000 -10800 1 -04} {952830000 -14400 0 -04} - {971582400 -10800 1 -03} + {971582400 -10800 1 -04} {984279600 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1015729200 -14400 0 -04} - {1034481600 -10800 1 -03} + {1034481600 -10800 1 -04} {1047178800 -14400 0 -04} - {1065931200 -10800 1 -03} + {1065931200 -10800 1 -04} {1079233200 -14400 0 -04} - {1097380800 -10800 1 -03} + {1097380800 -10800 1 -04} {1110682800 -14400 0 -04} - {1128830400 -10800 1 -03} + {1128830400 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1206846000 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1237086000 -14400 0 -04} - {1255233600 -10800 1 -03} + {1255233600 -10800 1 -04} {1270350000 -14400 0 -04} - {1286683200 -10800 1 -03} + {1286683200 -10800 1 -04} {1304823600 -14400 0 -04} - {1313899200 -10800 1 -03} + {1313899200 -10800 1 -04} {1335668400 -14400 0 -04} - {1346558400 -10800 1 -03} + {1346558400 -10800 1 -04} {1367118000 -14400 0 -04} - {1378612800 -10800 1 -03} + {1378612800 -10800 1 -04} {1398567600 -14400 0 -04} - {1410062400 -10800 1 -03} + {1410062400 -10800 1 -04} {1463281200 -14400 0 -04} - {1471147200 -10800 1 -03} + {1471147200 -10800 1 -04} {1480820400 -10800 0 -03} } diff --git a/library/tzdata/Asia/Almaty b/library/tzdata/Asia/Almaty index 2b83197..f42935d 100644 --- a/library/tzdata/Asia/Almaty +++ b/library/tzdata/Asia/Almaty @@ -4,54 +4,54 @@ set TZData(:Asia/Almaty) { {-9223372036854775808 18468 0 LMT} {-1441170468 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {686091600 18000 0 +05} {695768400 21600 0 +06} - {701812800 25200 1 +07} + {701812800 25200 1 +06} {717537600 21600 0 +06} - {733262400 25200 1 +07} + {733262400 25200 1 +06} {748987200 21600 0 +06} - {764712000 25200 1 +07} + {764712000 25200 1 +06} {780436800 21600 0 +06} - {796161600 25200 1 +07} + {796161600 25200 1 +06} {811886400 21600 0 +06} - {828216000 25200 1 +07} + {828216000 25200 1 +06} {846360000 21600 0 +06} - {859665600 25200 1 +07} + {859665600 25200 1 +06} {877809600 21600 0 +06} - {891115200 25200 1 +07} + {891115200 25200 1 +06} {909259200 21600 0 +06} - {922564800 25200 1 +07} + {922564800 25200 1 +06} {941313600 21600 0 +06} - {954014400 25200 1 +07} + {954014400 25200 1 +06} {972763200 21600 0 +06} - {985464000 25200 1 +07} + {985464000 25200 1 +06} {1004212800 21600 0 +06} - {1017518400 25200 1 +07} + {1017518400 25200 1 +06} {1035662400 21600 0 +06} - {1048968000 25200 1 +07} + {1048968000 25200 1 +06} {1067112000 21600 0 +06} - {1080417600 25200 1 +07} + {1080417600 25200 1 +06} {1099166400 21600 0 +06} } diff --git a/library/tzdata/Asia/Aqtau b/library/tzdata/Asia/Aqtau index c128b27..41da2ca 100644 --- a/library/tzdata/Asia/Aqtau +++ b/library/tzdata/Asia/Aqtau @@ -6,53 +6,53 @@ set TZData(:Asia/Aqtau) { {-1247544000 18000 0 +05} {370724400 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} - {780440400 18000 0 +05} + {764715600 21600 1 +05} + {780440400 18000 0 +04} {780444000 14400 0 +04} - {796168800 18000 1 +05} + {796168800 18000 1 +04} {811893600 14400 0 +04} - {828223200 18000 1 +05} + {828223200 18000 1 +04} {846367200 14400 0 +04} - {859672800 18000 1 +05} + {859672800 18000 1 +04} {877816800 14400 0 +04} - {891122400 18000 1 +05} + {891122400 18000 1 +04} {909266400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 18000 0 +05} } diff --git a/library/tzdata/Asia/Aqtobe b/library/tzdata/Asia/Aqtobe index 55ef556..2316e68 100644 --- a/library/tzdata/Asia/Aqtobe +++ b/library/tzdata/Asia/Aqtobe @@ -7,52 +7,52 @@ set TZData(:Asia/Aqtobe) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} + {764715600 21600 1 +05} {780440400 18000 0 +05} - {796165200 21600 1 +06} + {796165200 21600 1 +05} {811890000 18000 0 +05} - {828219600 21600 1 +06} + {828219600 21600 1 +05} {846363600 18000 0 +05} - {859669200 21600 1 +06} + {859669200 21600 1 +05} {877813200 18000 0 +05} - {891118800 21600 1 +06} + {891118800 21600 1 +05} {909262800 18000 0 +05} - {922568400 21600 1 +06} + {922568400 21600 1 +05} {941317200 18000 0 +05} - {954018000 21600 1 +06} + {954018000 21600 1 +05} {972766800 18000 0 +05} - {985467600 21600 1 +06} + {985467600 21600 1 +05} {1004216400 18000 0 +05} - {1017522000 21600 1 +06} + {1017522000 21600 1 +05} {1035666000 18000 0 +05} - {1048971600 21600 1 +06} + {1048971600 21600 1 +05} {1067115600 18000 0 +05} - {1080421200 21600 1 +06} + {1080421200 21600 1 +05} {1099170000 18000 0 +05} } diff --git a/library/tzdata/Asia/Ashgabat b/library/tzdata/Asia/Ashgabat index fa6a619..feb7725 100644 --- a/library/tzdata/Asia/Ashgabat +++ b/library/tzdata/Asia/Ashgabat @@ -4,28 +4,28 @@ set TZData(:Asia/Ashgabat) { {-9223372036854775808 14012 0 LMT} {-1441166012 14400 0 +04} {-1247544000 18000 0 +05} - {354913200 21600 1 +06} + {354913200 21600 1 +05} {370720800 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} } diff --git a/library/tzdata/Asia/Atyrau b/library/tzdata/Asia/Atyrau index c31ff11..b6d8253 100644 --- a/library/tzdata/Asia/Atyrau +++ b/library/tzdata/Asia/Atyrau @@ -6,53 +6,53 @@ set TZData(:Asia/Atyrau) { {-1247540400 18000 0 +05} {370724400 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} + {764715600 21600 1 +05} {780440400 18000 0 +05} - {796165200 21600 1 +06} + {796165200 21600 1 +05} {811890000 18000 0 +05} - {828219600 21600 1 +06} + {828219600 21600 1 +05} {846363600 18000 0 +05} - {859669200 21600 1 +06} + {859669200 21600 1 +05} {877813200 18000 0 +05} - {891118800 21600 1 +06} + {891118800 21600 1 +05} {909262800 18000 0 +05} {922568400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 18000 0 +05} } diff --git a/library/tzdata/Asia/Baghdad b/library/tzdata/Asia/Baghdad index 623e310..c76a6a1 100644 --- a/library/tzdata/Asia/Baghdad +++ b/library/tzdata/Asia/Baghdad @@ -4,56 +4,56 @@ set TZData(:Asia/Baghdad) { {-9223372036854775808 10660 0 LMT} {-2524532260 10656 0 BMT} {-1641005856 10800 0 +03} - {389048400 14400 0 +04} - {402264000 10800 0 +04} - {417906000 14400 1 +04} - {433800000 10800 0 +04} - {449614800 14400 1 +04} - {465422400 10800 0 +04} - {481150800 14400 1 +04} - {496792800 10800 0 +04} - {512517600 14400 1 +04} - {528242400 10800 0 +04} - {543967200 14400 1 +04} - {559692000 10800 0 +04} - {575416800 14400 1 +04} - {591141600 10800 0 +04} - {606866400 14400 1 +04} - {622591200 10800 0 +04} - {638316000 14400 1 +04} - {654645600 10800 0 +04} - {670464000 14400 1 +04} - {686275200 10800 0 +04} - {702086400 14400 1 +04} - {717897600 10800 0 +04} - {733622400 14400 1 +04} - {749433600 10800 0 +04} - {765158400 14400 1 +04} - {780969600 10800 0 +04} - {796694400 14400 1 +04} - {812505600 10800 0 +04} - {828316800 14400 1 +04} - {844128000 10800 0 +04} - {859852800 14400 1 +04} - {875664000 10800 0 +04} - {891388800 14400 1 +04} - {907200000 10800 0 +04} - {922924800 14400 1 +04} - {938736000 10800 0 +04} - {954547200 14400 1 +04} - {970358400 10800 0 +04} - {986083200 14400 1 +04} - {1001894400 10800 0 +04} - {1017619200 14400 1 +04} - {1033430400 10800 0 +04} - {1049155200 14400 1 +04} - {1064966400 10800 0 +04} - {1080777600 14400 1 +04} - {1096588800 10800 0 +04} - {1112313600 14400 1 +04} - {1128124800 10800 0 +04} - {1143849600 14400 1 +04} - {1159660800 10800 0 +04} - {1175385600 14400 1 +04} - {1191196800 10800 0 +04} + {389048400 14400 0 +03} + {402264000 10800 0 +03} + {417906000 14400 1 +03} + {433800000 10800 0 +03} + {449614800 14400 1 +03} + {465422400 10800 0 +03} + {481150800 14400 1 +03} + {496792800 10800 0 +03} + {512517600 14400 1 +03} + {528242400 10800 0 +03} + {543967200 14400 1 +03} + {559692000 10800 0 +03} + {575416800 14400 1 +03} + {591141600 10800 0 +03} + {606866400 14400 1 +03} + {622591200 10800 0 +03} + {638316000 14400 1 +03} + {654645600 10800 0 +03} + {670464000 14400 1 +03} + {686275200 10800 0 +03} + {702086400 14400 1 +03} + {717897600 10800 0 +03} + {733622400 14400 1 +03} + {749433600 10800 0 +03} + {765158400 14400 1 +03} + {780969600 10800 0 +03} + {796694400 14400 1 +03} + {812505600 10800 0 +03} + {828316800 14400 1 +03} + {844128000 10800 0 +03} + {859852800 14400 1 +03} + {875664000 10800 0 +03} + {891388800 14400 1 +03} + {907200000 10800 0 +03} + {922924800 14400 1 +03} + {938736000 10800 0 +03} + {954547200 14400 1 +03} + {970358400 10800 0 +03} + {986083200 14400 1 +03} + {1001894400 10800 0 +03} + {1017619200 14400 1 +03} + {1033430400 10800 0 +03} + {1049155200 14400 1 +03} + {1064966400 10800 0 +03} + {1080777600 14400 1 +03} + {1096588800 10800 0 +03} + {1112313600 14400 1 +03} + {1128124800 10800 0 +03} + {1143849600 14400 1 +03} + {1159660800 10800 0 +03} + {1175385600 14400 1 +03} + {1191196800 10800 0 +03} } diff --git a/library/tzdata/Asia/Baku b/library/tzdata/Asia/Baku index f945b89..03dee19 100644 --- a/library/tzdata/Asia/Baku +++ b/library/tzdata/Asia/Baku @@ -4,71 +4,71 @@ set TZData(:Asia/Baku) { {-9223372036854775808 11964 0 LMT} {-1441163964 10800 0 +03} {-405140400 14400 0 +04} - {354916800 18000 1 +05} + {354916800 18000 1 +04} {370724400 14400 0 +04} - {386452800 18000 1 +05} + {386452800 18000 1 +04} {402260400 14400 0 +04} - {417988800 18000 1 +05} + {417988800 18000 1 +04} {433796400 14400 0 +04} - {449611200 18000 1 +05} + {449611200 18000 1 +04} {465343200 14400 0 +04} - {481068000 18000 1 +05} + {481068000 18000 1 +04} {496792800 14400 0 +04} - {512517600 18000 1 +05} + {512517600 18000 1 +04} {528242400 14400 0 +04} - {543967200 18000 1 +05} + {543967200 18000 1 +04} {559692000 14400 0 +04} - {575416800 18000 1 +05} + {575416800 18000 1 +04} {591141600 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} {670370400 10800 0 +03} - {670374000 14400 1 +04} + {670374000 14400 1 +03} {686098800 10800 0 +03} - {701823600 14400 1 +04} + {701823600 14400 1 +03} {717548400 14400 0 +04} {820440000 14400 0 +04} {828234000 18000 1 +05} {846378000 14400 0 +04} {852062400 14400 0 +04} - {859680000 18000 1 +05} + {859680000 18000 1 +04} {877824000 14400 0 +04} - {891129600 18000 1 +05} + {891129600 18000 1 +04} {909273600 14400 0 +04} - {922579200 18000 1 +05} + {922579200 18000 1 +04} {941328000 14400 0 +04} - {954028800 18000 1 +05} + {954028800 18000 1 +04} {972777600 14400 0 +04} - {985478400 18000 1 +05} + {985478400 18000 1 +04} {1004227200 14400 0 +04} - {1017532800 18000 1 +05} + {1017532800 18000 1 +04} {1035676800 14400 0 +04} - {1048982400 18000 1 +05} + {1048982400 18000 1 +04} {1067126400 14400 0 +04} - {1080432000 18000 1 +05} + {1080432000 18000 1 +04} {1099180800 14400 0 +04} - {1111881600 18000 1 +05} + {1111881600 18000 1 +04} {1130630400 14400 0 +04} - {1143331200 18000 1 +05} + {1143331200 18000 1 +04} {1162080000 14400 0 +04} - {1174780800 18000 1 +05} + {1174780800 18000 1 +04} {1193529600 14400 0 +04} - {1206835200 18000 1 +05} + {1206835200 18000 1 +04} {1224979200 14400 0 +04} - {1238284800 18000 1 +05} + {1238284800 18000 1 +04} {1256428800 14400 0 +04} - {1269734400 18000 1 +05} + {1269734400 18000 1 +04} {1288483200 14400 0 +04} - {1301184000 18000 1 +05} + {1301184000 18000 1 +04} {1319932800 14400 0 +04} - {1332633600 18000 1 +05} + {1332633600 18000 1 +04} {1351382400 14400 0 +04} - {1364688000 18000 1 +05} + {1364688000 18000 1 +04} {1382832000 14400 0 +04} - {1396137600 18000 1 +05} + {1396137600 18000 1 +04} {1414281600 14400 0 +04} - {1427587200 18000 1 +05} + {1427587200 18000 1 +04} {1445731200 14400 0 +04} } diff --git a/library/tzdata/Asia/Bishkek b/library/tzdata/Asia/Bishkek index a02d789..bc4cbdd 100644 --- a/library/tzdata/Asia/Bishkek +++ b/library/tzdata/Asia/Bishkek @@ -4,55 +4,55 @@ set TZData(:Asia/Bishkek) { {-9223372036854775808 17904 0 LMT} {-1441169904 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {683586000 18000 0 +05} - {703018800 21600 1 +06} + {703018800 21600 1 +05} {717530400 18000 0 +05} - {734468400 21600 1 +06} + {734468400 21600 1 +05} {748980000 18000 0 +05} - {765918000 21600 1 +06} + {765918000 21600 1 +05} {780429600 18000 0 +05} - {797367600 21600 1 +06} + {797367600 21600 1 +05} {811879200 18000 0 +05} - {828817200 21600 1 +06} + {828817200 21600 1 +05} {843933600 18000 0 +05} - {859671000 21600 1 +06} + {859671000 21600 1 +05} {877811400 18000 0 +05} - {891120600 21600 1 +06} + {891120600 21600 1 +05} {909261000 18000 0 +05} - {922570200 21600 1 +06} + {922570200 21600 1 +05} {941315400 18000 0 +05} - {954019800 21600 1 +06} + {954019800 21600 1 +05} {972765000 18000 0 +05} - {985469400 21600 1 +06} + {985469400 21600 1 +05} {1004214600 18000 0 +05} - {1017523800 21600 1 +06} + {1017523800 21600 1 +05} {1035664200 18000 0 +05} - {1048973400 21600 1 +06} + {1048973400 21600 1 +05} {1067113800 18000 0 +05} - {1080423000 21600 1 +06} + {1080423000 21600 1 +05} {1099168200 18000 0 +05} - {1111872600 21600 1 +06} + {1111872600 21600 1 +05} {1123783200 21600 0 +06} } diff --git a/library/tzdata/Asia/Choibalsan b/library/tzdata/Asia/Choibalsan index 3db65de..b072c76 100644 --- a/library/tzdata/Asia/Choibalsan +++ b/library/tzdata/Asia/Choibalsan @@ -4,53 +4,53 @@ set TZData(:Asia/Choibalsan) { {-9223372036854775808 27480 0 LMT} {-2032933080 25200 0 +07} {252435600 28800 0 +08} - {417974400 36000 0 +10} + {417974400 36000 0 +09} {433778400 32400 0 +09} - {449593200 36000 1 +10} + {449593200 36000 1 +09} {465314400 32400 0 +09} - {481042800 36000 1 +10} + {481042800 36000 1 +09} {496764000 32400 0 +09} - {512492400 36000 1 +10} + {512492400 36000 1 +09} {528213600 32400 0 +09} - {543942000 36000 1 +10} + {543942000 36000 1 +09} {559663200 32400 0 +09} - {575391600 36000 1 +10} + {575391600 36000 1 +09} {591112800 32400 0 +09} - {606841200 36000 1 +10} + {606841200 36000 1 +09} {622562400 32400 0 +09} - {638290800 36000 1 +10} + {638290800 36000 1 +09} {654616800 32400 0 +09} - {670345200 36000 1 +10} + {670345200 36000 1 +09} {686066400 32400 0 +09} - {701794800 36000 1 +10} + {701794800 36000 1 +09} {717516000 32400 0 +09} - {733244400 36000 1 +10} + {733244400 36000 1 +09} {748965600 32400 0 +09} - {764694000 36000 1 +10} + {764694000 36000 1 +09} {780415200 32400 0 +09} - {796143600 36000 1 +10} + {796143600 36000 1 +09} {811864800 32400 0 +09} - {828198000 36000 1 +10} + {828198000 36000 1 +09} {843919200 32400 0 +09} - {859647600 36000 1 +10} + {859647600 36000 1 +09} {875368800 32400 0 +09} - {891097200 36000 1 +10} + {891097200 36000 1 +09} {906818400 32400 0 +09} - {988390800 36000 1 +10} + {988390800 36000 1 +09} {1001692800 32400 0 +09} - {1017421200 36000 1 +10} + {1017421200 36000 1 +09} {1033142400 32400 0 +09} - {1048870800 36000 1 +10} + {1048870800 36000 1 +09} {1064592000 32400 0 +09} - {1080320400 36000 1 +10} + {1080320400 36000 1 +09} {1096041600 32400 0 +09} - {1111770000 36000 1 +10} + {1111770000 36000 1 +09} {1127491200 32400 0 +09} - {1143219600 36000 1 +10} + {1143219600 36000 1 +09} {1159545600 32400 0 +09} {1206889200 28800 0 +08} - {1427479200 32400 1 +09} + {1427479200 32400 1 +08} {1443193200 28800 0 +08} - {1458928800 32400 1 +09} + {1458928800 32400 1 +08} {1474642800 28800 0 +08} } diff --git a/library/tzdata/Asia/Dhaka b/library/tzdata/Asia/Dhaka index 0dc3987..c044095 100644 --- a/library/tzdata/Asia/Dhaka +++ b/library/tzdata/Asia/Dhaka @@ -8,6 +8,6 @@ set TZData(:Asia/Dhaka) { {-862637400 23400 0 +0630} {-576138600 21600 0 +06} {1230746400 21600 0 +06} - {1245430800 25200 1 +07} + {1245430800 25200 1 +06} {1262278800 21600 0 +06} } diff --git a/library/tzdata/Asia/Dushanbe b/library/tzdata/Asia/Dushanbe index e9ed132..fe82ce7 100644 --- a/library/tzdata/Asia/Dushanbe +++ b/library/tzdata/Asia/Dushanbe @@ -4,25 +4,25 @@ set TZData(:Asia/Dushanbe) { {-9223372036854775808 16512 0 LMT} {-1441168512 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 21600 1 +06} {684363600 18000 0 +05} diff --git a/library/tzdata/Asia/Gaza b/library/tzdata/Asia/Gaza index 1149d51..85b9f67 100644 --- a/library/tzdata/Asia/Gaza +++ b/library/tzdata/Asia/Gaza @@ -111,9 +111,9 @@ set TZData(:Asia/Gaza) { {1477692000 7200 0 EET} {1490396400 10800 1 EEST} {1509141600 7200 0 EET} - {1522450800 10800 1 EEST} + {1521846000 10800 1 EEST} {1540591200 7200 0 EET} - {1553900400 10800 1 EEST} + {1553295600 10800 1 EEST} {1572040800 7200 0 EET} {1585350000 10800 1 EEST} {1604095200 7200 0 EET} @@ -123,9 +123,9 @@ set TZData(:Asia/Gaza) { {1666994400 7200 0 EET} {1679698800 10800 1 EEST} {1698444000 7200 0 EET} - {1711753200 10800 1 EEST} + {1711148400 10800 1 EEST} {1729893600 7200 0 EET} - {1743202800 10800 1 EEST} + {1742598000 10800 1 EEST} {1761343200 7200 0 EET} {1774652400 10800 1 EEST} {1793397600 7200 0 EET} @@ -133,11 +133,11 @@ set TZData(:Asia/Gaza) { {1824847200 7200 0 EET} {1837551600 10800 1 EEST} {1856296800 7200 0 EET} - {1869606000 10800 1 EEST} + {1869001200 10800 1 EEST} {1887746400 7200 0 EET} - {1901055600 10800 1 EEST} + {1900450800 10800 1 EEST} {1919196000 7200 0 EET} - {1932505200 10800 1 EEST} + {1931900400 10800 1 EEST} {1950645600 7200 0 EET} {1963954800 10800 1 EEST} {1982700000 7200 0 EET} @@ -145,9 +145,9 @@ set TZData(:Asia/Gaza) { {2014149600 7200 0 EET} {2026854000 10800 1 EEST} {2045599200 7200 0 EET} - {2058908400 10800 1 EEST} + {2058303600 10800 1 EEST} {2077048800 7200 0 EET} - {2090358000 10800 1 EEST} + {2089753200 10800 1 EEST} {2108498400 7200 0 EET} {2121807600 10800 1 EEST} {2140552800 7200 0 EET} @@ -155,11 +155,11 @@ set TZData(:Asia/Gaza) { {2172002400 7200 0 EET} {2184706800 10800 1 EEST} {2203452000 7200 0 EET} - {2216761200 10800 1 EEST} + {2216156400 10800 1 EEST} {2234901600 7200 0 EET} - {2248210800 10800 1 EEST} + {2247606000 10800 1 EEST} {2266351200 7200 0 EET} - {2279660400 10800 1 EEST} + {2279055600 10800 1 EEST} {2297800800 7200 0 EET} {2311110000 10800 1 EEST} {2329855200 7200 0 EET} @@ -167,9 +167,9 @@ set TZData(:Asia/Gaza) { {2361304800 7200 0 EET} {2374009200 10800 1 EEST} {2392754400 7200 0 EET} - {2406063600 10800 1 EEST} + {2405458800 10800 1 EEST} {2424204000 7200 0 EET} - {2437513200 10800 1 EEST} + {2436908400 10800 1 EEST} {2455653600 7200 0 EET} {2468962800 10800 1 EEST} {2487708000 7200 0 EET} @@ -179,9 +179,9 @@ set TZData(:Asia/Gaza) { {2550607200 7200 0 EET} {2563311600 10800 1 EEST} {2582056800 7200 0 EET} - {2595366000 10800 1 EEST} + {2594761200 10800 1 EEST} {2613506400 7200 0 EET} - {2626815600 10800 1 EEST} + {2626210800 10800 1 EEST} {2644956000 7200 0 EET} {2658265200 10800 1 EEST} {2677010400 7200 0 EET} @@ -189,11 +189,11 @@ set TZData(:Asia/Gaza) { {2708460000 7200 0 EET} {2721164400 10800 1 EEST} {2739909600 7200 0 EET} - {2753218800 10800 1 EEST} + {2752614000 10800 1 EEST} {2771359200 7200 0 EET} - {2784668400 10800 1 EEST} + {2784063600 10800 1 EEST} {2802808800 7200 0 EET} - {2816118000 10800 1 EEST} + {2815513200 10800 1 EEST} {2834258400 7200 0 EET} {2847567600 10800 1 EEST} {2866312800 7200 0 EET} @@ -201,9 +201,9 @@ set TZData(:Asia/Gaza) { {2897762400 7200 0 EET} {2910466800 10800 1 EEST} {2929212000 7200 0 EET} - {2942521200 10800 1 EEST} + {2941916400 10800 1 EEST} {2960661600 7200 0 EET} - {2973970800 10800 1 EEST} + {2973366000 10800 1 EEST} {2992111200 7200 0 EET} {3005420400 10800 1 EEST} {3024165600 7200 0 EET} @@ -211,11 +211,11 @@ set TZData(:Asia/Gaza) { {3055615200 7200 0 EET} {3068319600 10800 1 EEST} {3087064800 7200 0 EET} - {3100374000 10800 1 EEST} + {3099769200 10800 1 EEST} {3118514400 7200 0 EET} - {3131823600 10800 1 EEST} + {3131218800 10800 1 EEST} {3149964000 7200 0 EET} - {3163273200 10800 1 EEST} + {3162668400 10800 1 EEST} {3181413600 7200 0 EET} {3194722800 10800 1 EEST} {3213468000 7200 0 EET} @@ -223,9 +223,9 @@ set TZData(:Asia/Gaza) { {3244917600 7200 0 EET} {3257622000 10800 1 EEST} {3276367200 7200 0 EET} - {3289676400 10800 1 EEST} + {3289071600 10800 1 EEST} {3307816800 7200 0 EET} - {3321126000 10800 1 EEST} + {3320521200 10800 1 EEST} {3339266400 7200 0 EET} {3352575600 10800 1 EEST} {3371320800 7200 0 EET} @@ -235,9 +235,9 @@ set TZData(:Asia/Gaza) { {3434220000 7200 0 EET} {3446924400 10800 1 EEST} {3465669600 7200 0 EET} - {3478978800 10800 1 EEST} + {3478374000 10800 1 EEST} {3497119200 7200 0 EET} - {3510428400 10800 1 EEST} + {3509823600 10800 1 EEST} {3528568800 7200 0 EET} {3541878000 10800 1 EEST} {3560623200 7200 0 EET} @@ -245,11 +245,11 @@ set TZData(:Asia/Gaza) { {3592072800 7200 0 EET} {3604777200 10800 1 EEST} {3623522400 7200 0 EET} - {3636831600 10800 1 EEST} + {3636226800 10800 1 EEST} {3654972000 7200 0 EET} - {3668281200 10800 1 EEST} + {3667676400 10800 1 EEST} {3686421600 7200 0 EET} - {3699730800 10800 1 EEST} + {3699126000 10800 1 EEST} {3717871200 7200 0 EET} {3731180400 10800 1 EEST} {3749925600 7200 0 EET} @@ -257,9 +257,9 @@ set TZData(:Asia/Gaza) { {3781375200 7200 0 EET} {3794079600 10800 1 EEST} {3812824800 7200 0 EET} - {3826134000 10800 1 EEST} + {3825529200 10800 1 EEST} {3844274400 7200 0 EET} - {3857583600 10800 1 EEST} + {3856978800 10800 1 EEST} {3875724000 7200 0 EET} {3889033200 10800 1 EEST} {3907778400 7200 0 EET} @@ -267,11 +267,11 @@ set TZData(:Asia/Gaza) { {3939228000 7200 0 EET} {3951932400 10800 1 EEST} {3970677600 7200 0 EET} - {3983986800 10800 1 EEST} + {3983382000 10800 1 EEST} {4002127200 7200 0 EET} - {4015436400 10800 1 EEST} + {4014831600 10800 1 EEST} {4033576800 7200 0 EET} - {4046886000 10800 1 EEST} + {4046281200 10800 1 EEST} {4065026400 7200 0 EET} {4078335600 10800 1 EEST} {4097080800 7200 0 EET} diff --git a/library/tzdata/Asia/Hebron b/library/tzdata/Asia/Hebron index 5d312b8..c0f5447 100644 --- a/library/tzdata/Asia/Hebron +++ b/library/tzdata/Asia/Hebron @@ -110,9 +110,9 @@ set TZData(:Asia/Hebron) { {1477692000 7200 0 EET} {1490396400 10800 1 EEST} {1509141600 7200 0 EET} - {1522450800 10800 1 EEST} + {1521846000 10800 1 EEST} {1540591200 7200 0 EET} - {1553900400 10800 1 EEST} + {1553295600 10800 1 EEST} {1572040800 7200 0 EET} {1585350000 10800 1 EEST} {1604095200 7200 0 EET} @@ -122,9 +122,9 @@ set TZData(:Asia/Hebron) { {1666994400 7200 0 EET} {1679698800 10800 1 EEST} {1698444000 7200 0 EET} - {1711753200 10800 1 EEST} + {1711148400 10800 1 EEST} {1729893600 7200 0 EET} - {1743202800 10800 1 EEST} + {1742598000 10800 1 EEST} {1761343200 7200 0 EET} {1774652400 10800 1 EEST} {1793397600 7200 0 EET} @@ -132,11 +132,11 @@ set TZData(:Asia/Hebron) { {1824847200 7200 0 EET} {1837551600 10800 1 EEST} {1856296800 7200 0 EET} - {1869606000 10800 1 EEST} + {1869001200 10800 1 EEST} {1887746400 7200 0 EET} - {1901055600 10800 1 EEST} + {1900450800 10800 1 EEST} {1919196000 7200 0 EET} - {1932505200 10800 1 EEST} + {1931900400 10800 1 EEST} {1950645600 7200 0 EET} {1963954800 10800 1 EEST} {1982700000 7200 0 EET} @@ -144,9 +144,9 @@ set TZData(:Asia/Hebron) { {2014149600 7200 0 EET} {2026854000 10800 1 EEST} {2045599200 7200 0 EET} - {2058908400 10800 1 EEST} + {2058303600 10800 1 EEST} {2077048800 7200 0 EET} - {2090358000 10800 1 EEST} + {2089753200 10800 1 EEST} {2108498400 7200 0 EET} {2121807600 10800 1 EEST} {2140552800 7200 0 EET} @@ -154,11 +154,11 @@ set TZData(:Asia/Hebron) { {2172002400 7200 0 EET} {2184706800 10800 1 EEST} {2203452000 7200 0 EET} - {2216761200 10800 1 EEST} + {2216156400 10800 1 EEST} {2234901600 7200 0 EET} - {2248210800 10800 1 EEST} + {2247606000 10800 1 EEST} {2266351200 7200 0 EET} - {2279660400 10800 1 EEST} + {2279055600 10800 1 EEST} {2297800800 7200 0 EET} {2311110000 10800 1 EEST} {2329855200 7200 0 EET} @@ -166,9 +166,9 @@ set TZData(:Asia/Hebron) { {2361304800 7200 0 EET} {2374009200 10800 1 EEST} {2392754400 7200 0 EET} - {2406063600 10800 1 EEST} + {2405458800 10800 1 EEST} {2424204000 7200 0 EET} - {2437513200 10800 1 EEST} + {2436908400 10800 1 EEST} {2455653600 7200 0 EET} {2468962800 10800 1 EEST} {2487708000 7200 0 EET} @@ -178,9 +178,9 @@ set TZData(:Asia/Hebron) { {2550607200 7200 0 EET} {2563311600 10800 1 EEST} {2582056800 7200 0 EET} - {2595366000 10800 1 EEST} + {2594761200 10800 1 EEST} {2613506400 7200 0 EET} - {2626815600 10800 1 EEST} + {2626210800 10800 1 EEST} {2644956000 7200 0 EET} {2658265200 10800 1 EEST} {2677010400 7200 0 EET} @@ -188,11 +188,11 @@ set TZData(:Asia/Hebron) { {2708460000 7200 0 EET} {2721164400 10800 1 EEST} {2739909600 7200 0 EET} - {2753218800 10800 1 EEST} + {2752614000 10800 1 EEST} {2771359200 7200 0 EET} - {2784668400 10800 1 EEST} + {2784063600 10800 1 EEST} {2802808800 7200 0 EET} - {2816118000 10800 1 EEST} + {2815513200 10800 1 EEST} {2834258400 7200 0 EET} {2847567600 10800 1 EEST} {2866312800 7200 0 EET} @@ -200,9 +200,9 @@ set TZData(:Asia/Hebron) { {2897762400 7200 0 EET} {2910466800 10800 1 EEST} {2929212000 7200 0 EET} - {2942521200 10800 1 EEST} + {2941916400 10800 1 EEST} {2960661600 7200 0 EET} - {2973970800 10800 1 EEST} + {2973366000 10800 1 EEST} {2992111200 7200 0 EET} {3005420400 10800 1 EEST} {3024165600 7200 0 EET} @@ -210,11 +210,11 @@ set TZData(:Asia/Hebron) { {3055615200 7200 0 EET} {3068319600 10800 1 EEST} {3087064800 7200 0 EET} - {3100374000 10800 1 EEST} + {3099769200 10800 1 EEST} {3118514400 7200 0 EET} - {3131823600 10800 1 EEST} + {3131218800 10800 1 EEST} {3149964000 7200 0 EET} - {3163273200 10800 1 EEST} + {3162668400 10800 1 EEST} {3181413600 7200 0 EET} {3194722800 10800 1 EEST} {3213468000 7200 0 EET} @@ -222,9 +222,9 @@ set TZData(:Asia/Hebron) { {3244917600 7200 0 EET} {3257622000 10800 1 EEST} {3276367200 7200 0 EET} - {3289676400 10800 1 EEST} + {3289071600 10800 1 EEST} {3307816800 7200 0 EET} - {3321126000 10800 1 EEST} + {3320521200 10800 1 EEST} {3339266400 7200 0 EET} {3352575600 10800 1 EEST} {3371320800 7200 0 EET} @@ -234,9 +234,9 @@ set TZData(:Asia/Hebron) { {3434220000 7200 0 EET} {3446924400 10800 1 EEST} {3465669600 7200 0 EET} - {3478978800 10800 1 EEST} + {3478374000 10800 1 EEST} {3497119200 7200 0 EET} - {3510428400 10800 1 EEST} + {3509823600 10800 1 EEST} {3528568800 7200 0 EET} {3541878000 10800 1 EEST} {3560623200 7200 0 EET} @@ -244,11 +244,11 @@ set TZData(:Asia/Hebron) { {3592072800 7200 0 EET} {3604777200 10800 1 EEST} {3623522400 7200 0 EET} - {3636831600 10800 1 EEST} + {3636226800 10800 1 EEST} {3654972000 7200 0 EET} - {3668281200 10800 1 EEST} + {3667676400 10800 1 EEST} {3686421600 7200 0 EET} - {3699730800 10800 1 EEST} + {3699126000 10800 1 EEST} {3717871200 7200 0 EET} {3731180400 10800 1 EEST} {3749925600 7200 0 EET} @@ -256,9 +256,9 @@ set TZData(:Asia/Hebron) { {3781375200 7200 0 EET} {3794079600 10800 1 EEST} {3812824800 7200 0 EET} - {3826134000 10800 1 EEST} + {3825529200 10800 1 EEST} {3844274400 7200 0 EET} - {3857583600 10800 1 EEST} + {3856978800 10800 1 EEST} {3875724000 7200 0 EET} {3889033200 10800 1 EEST} {3907778400 7200 0 EET} @@ -266,11 +266,11 @@ set TZData(:Asia/Hebron) { {3939228000 7200 0 EET} {3951932400 10800 1 EEST} {3970677600 7200 0 EET} - {3983986800 10800 1 EEST} + {3983382000 10800 1 EEST} {4002127200 7200 0 EET} - {4015436400 10800 1 EEST} + {4014831600 10800 1 EEST} {4033576800 7200 0 EET} - {4046886000 10800 1 EEST} + {4046281200 10800 1 EEST} {4065026400 7200 0 EET} {4078335600 10800 1 EEST} {4097080800 7200 0 EET} diff --git a/library/tzdata/Asia/Hovd b/library/tzdata/Asia/Hovd index a9c995b..9b14d5b 100644 --- a/library/tzdata/Asia/Hovd +++ b/library/tzdata/Asia/Hovd @@ -4,52 +4,52 @@ set TZData(:Asia/Hovd) { {-9223372036854775808 21996 0 LMT} {-2032927596 21600 0 +06} {252439200 25200 0 +07} - {417978000 28800 1 +08} + {417978000 28800 1 +07} {433785600 25200 0 +07} - {449600400 28800 1 +08} + {449600400 28800 1 +07} {465321600 25200 0 +07} - {481050000 28800 1 +08} + {481050000 28800 1 +07} {496771200 25200 0 +07} - {512499600 28800 1 +08} + {512499600 28800 1 +07} {528220800 25200 0 +07} - {543949200 28800 1 +08} + {543949200 28800 1 +07} {559670400 25200 0 +07} - {575398800 28800 1 +08} + {575398800 28800 1 +07} {591120000 25200 0 +07} - {606848400 28800 1 +08} + {606848400 28800 1 +07} {622569600 25200 0 +07} - {638298000 28800 1 +08} + {638298000 28800 1 +07} {654624000 25200 0 +07} - {670352400 28800 1 +08} + {670352400 28800 1 +07} {686073600 25200 0 +07} - {701802000 28800 1 +08} + {701802000 28800 1 +07} {717523200 25200 0 +07} - {733251600 28800 1 +08} + {733251600 28800 1 +07} {748972800 25200 0 +07} - {764701200 28800 1 +08} + {764701200 28800 1 +07} {780422400 25200 0 +07} - {796150800 28800 1 +08} + {796150800 28800 1 +07} {811872000 25200 0 +07} - {828205200 28800 1 +08} + {828205200 28800 1 +07} {843926400 25200 0 +07} - {859654800 28800 1 +08} + {859654800 28800 1 +07} {875376000 25200 0 +07} - {891104400 28800 1 +08} + {891104400 28800 1 +07} {906825600 25200 0 +07} - {988398000 28800 1 +08} + {988398000 28800 1 +07} {1001700000 25200 0 +07} - {1017428400 28800 1 +08} + {1017428400 28800 1 +07} {1033149600 25200 0 +07} - {1048878000 28800 1 +08} + {1048878000 28800 1 +07} {1064599200 25200 0 +07} - {1080327600 28800 1 +08} + {1080327600 28800 1 +07} {1096048800 25200 0 +07} - {1111777200 28800 1 +08} + {1111777200 28800 1 +07} {1127498400 25200 0 +07} - {1143226800 28800 1 +08} + {1143226800 28800 1 +07} {1159552800 25200 0 +07} - {1427482800 28800 1 +08} + {1427482800 28800 1 +07} {1443196800 25200 0 +07} - {1458932400 28800 1 +08} + {1458932400 28800 1 +07} {1474646400 25200 0 +07} } diff --git a/library/tzdata/Asia/Kuching b/library/tzdata/Asia/Kuching index d6f5ad4..e5dc1b7 100644 --- a/library/tzdata/Asia/Kuching +++ b/library/tzdata/Asia/Kuching @@ -4,19 +4,19 @@ set TZData(:Asia/Kuching) { {-9223372036854775808 26480 0 LMT} {-1383463280 27000 0 +0730} {-1167636600 28800 0 +08} - {-1082448000 30000 1 +0820} + {-1082448000 30000 1 +08} {-1074586800 28800 0 +08} - {-1050825600 30000 1 +0820} + {-1050825600 30000 1 +08} {-1042964400 28800 0 +08} - {-1019289600 30000 1 +0820} + {-1019289600 30000 1 +08} {-1011428400 28800 0 +08} - {-987753600 30000 1 +0820} + {-987753600 30000 1 +08} {-979892400 28800 0 +08} - {-956217600 30000 1 +0820} + {-956217600 30000 1 +08} {-948356400 28800 0 +08} - {-924595200 30000 1 +0820} + {-924595200 30000 1 +08} {-916734000 28800 0 +08} - {-893059200 30000 1 +0820} + {-893059200 30000 1 +08} {-885198000 28800 0 +08} {-879667200 32400 0 +09} {-767005200 28800 0 +08} diff --git a/library/tzdata/Asia/Macau b/library/tzdata/Asia/Macau index 8458a8a..76a00aa 100644 --- a/library/tzdata/Asia/Macau +++ b/library/tzdata/Asia/Macau @@ -2,7 +2,7 @@ set TZData(:Asia/Macau) { {-9223372036854775808 27260 0 LMT} - {-1830411260 28800 0 CST} + {-1830412800 28800 0 CST} {-277360200 32400 1 CDT} {-257405400 28800 0 CST} {-245910600 32400 1 CDT} diff --git a/library/tzdata/Asia/Manila b/library/tzdata/Asia/Manila index 987919a..b7ffa7a 100644 --- a/library/tzdata/Asia/Manila +++ b/library/tzdata/Asia/Manila @@ -4,12 +4,12 @@ set TZData(:Asia/Manila) { {-9223372036854775808 -57360 0 LMT} {-3944621040 29040 0 LMT} {-2229321840 28800 0 +08} - {-1046678400 32400 1 +09} + {-1046678400 32400 1 +08} {-1038733200 28800 0 +08} {-873273600 32400 0 +09} {-794221200 28800 0 +08} - {-496224000 32400 1 +09} + {-496224000 32400 1 +08} {-489315600 28800 0 +08} - {259344000 32400 1 +09} + {259344000 32400 1 +08} {275151600 28800 0 +08} } diff --git a/library/tzdata/Asia/Oral b/library/tzdata/Asia/Oral index 624a59d..e781b60 100644 --- a/library/tzdata/Asia/Oral +++ b/library/tzdata/Asia/Oral @@ -7,52 +7,52 @@ set TZData(:Asia/Oral) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} {606862800 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {701816400 14400 0 +04} - {701820000 18000 1 +05} + {701820000 18000 1 +04} {717544800 14400 0 +04} - {733269600 18000 1 +05} + {733269600 18000 1 +04} {748994400 14400 0 +04} - {764719200 18000 1 +05} + {764719200 18000 1 +04} {780444000 14400 0 +04} - {796168800 18000 1 +05} + {796168800 18000 1 +04} {811893600 14400 0 +04} - {828223200 18000 1 +05} + {828223200 18000 1 +04} {846367200 14400 0 +04} - {859672800 18000 1 +05} + {859672800 18000 1 +04} {877816800 14400 0 +04} - {891122400 18000 1 +05} + {891122400 18000 1 +04} {909266400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 18000 0 +05} } diff --git a/library/tzdata/Asia/Pyongyang b/library/tzdata/Asia/Pyongyang index 72e7f23..5746472 100644 --- a/library/tzdata/Asia/Pyongyang +++ b/library/tzdata/Asia/Pyongyang @@ -6,4 +6,5 @@ set TZData(:Asia/Pyongyang) { {-1830414600 32400 0 JST} {-768646800 32400 0 KST} {1439564400 30600 0 KST} + {1525447800 32400 0 KST} } diff --git a/library/tzdata/Asia/Qyzylorda b/library/tzdata/Asia/Qyzylorda index b2e9472..7c6df32 100644 --- a/library/tzdata/Asia/Qyzylorda +++ b/library/tzdata/Asia/Qyzylorda @@ -7,51 +7,51 @@ set TZData(:Asia/Qyzylorda) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {701812800 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} + {764715600 21600 1 +05} {780440400 18000 0 +05} - {796165200 21600 1 +06} + {796165200 21600 1 +05} {811890000 18000 0 +05} - {828219600 21600 1 +06} + {828219600 21600 1 +05} {846363600 18000 0 +05} - {859669200 21600 1 +06} + {859669200 21600 1 +05} {877813200 18000 0 +05} - {891118800 21600 1 +06} + {891118800 21600 1 +05} {909262800 18000 0 +05} - {922568400 21600 1 +06} + {922568400 21600 1 +05} {941317200 18000 0 +05} - {954018000 21600 1 +06} + {954018000 21600 1 +05} {972766800 18000 0 +05} - {985467600 21600 1 +06} + {985467600 21600 1 +05} {1004216400 18000 0 +05} - {1017522000 21600 1 +06} + {1017522000 21600 1 +05} {1035666000 18000 0 +05} - {1048971600 21600 1 +06} + {1048971600 21600 1 +05} {1067115600 18000 0 +05} - {1080421200 21600 1 +06} + {1080421200 21600 1 +05} {1099170000 21600 0 +06} } diff --git a/library/tzdata/Asia/Samarkand b/library/tzdata/Asia/Samarkand index 43ad774..805bab7 100644 --- a/library/tzdata/Asia/Samarkand +++ b/library/tzdata/Asia/Samarkand @@ -7,25 +7,25 @@ set TZData(:Asia/Samarkand) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {686091600 18000 0 +05} {694206000 18000 0 +05} } diff --git a/library/tzdata/Asia/Tashkent b/library/tzdata/Asia/Tashkent index 7b6abe4..bd16c91 100644 --- a/library/tzdata/Asia/Tashkent +++ b/library/tzdata/Asia/Tashkent @@ -4,28 +4,28 @@ set TZData(:Asia/Tashkent) { {-9223372036854775808 16631 0 LMT} {-1441168631 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {686091600 18000 0 +05} {694206000 18000 0 +05} } diff --git a/library/tzdata/Asia/Tbilisi b/library/tzdata/Asia/Tbilisi index 60d253c..71e7695 100644 --- a/library/tzdata/Asia/Tbilisi +++ b/library/tzdata/Asia/Tbilisi @@ -5,56 +5,56 @@ set TZData(:Asia/Tbilisi) { {-2840151551 10751 0 TBMT} {-1441162751 10800 0 +03} {-405140400 14400 0 +04} - {354916800 18000 1 +05} + {354916800 18000 1 +04} {370724400 14400 0 +04} - {386452800 18000 1 +05} + {386452800 18000 1 +04} {402260400 14400 0 +04} - {417988800 18000 1 +05} + {417988800 18000 1 +04} {433796400 14400 0 +04} - {449611200 18000 1 +05} + {449611200 18000 1 +04} {465343200 14400 0 +04} - {481068000 18000 1 +05} + {481068000 18000 1 +04} {496792800 14400 0 +04} - {512517600 18000 1 +05} + {512517600 18000 1 +04} {528242400 14400 0 +04} - {543967200 18000 1 +05} + {543967200 18000 1 +04} {559692000 14400 0 +04} - {575416800 18000 1 +05} + {575416800 18000 1 +04} {591141600 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} {670370400 10800 0 +03} - {670374000 14400 1 +04} + {670374000 14400 1 +03} {686098800 10800 0 +03} {694213200 10800 0 +03} - {701816400 14400 1 +04} + {701816400 14400 1 +03} {717537600 10800 0 +03} - {733266000 14400 1 +04} + {733266000 14400 1 +03} {748987200 10800 0 +03} - {764715600 14400 1 +04} + {764715600 14400 1 +03} {780440400 14400 0 +04} - {796161600 18000 1 +05} + {796161600 18000 1 +04} {811882800 14400 0 +04} - {828216000 18000 1 +05} + {828216000 18000 1 +04} {846360000 18000 1 +05} - {859662000 18000 0 +05} + {859662000 18000 0 +04} {877806000 14400 0 +04} - {891115200 18000 1 +05} + {891115200 18000 1 +04} {909255600 14400 0 +04} - {922564800 18000 1 +05} + {922564800 18000 1 +04} {941310000 14400 0 +04} - {954014400 18000 1 +05} + {954014400 18000 1 +04} {972759600 14400 0 +04} - {985464000 18000 1 +05} + {985464000 18000 1 +04} {1004209200 14400 0 +04} - {1017518400 18000 1 +05} + {1017518400 18000 1 +04} {1035658800 14400 0 +04} - {1048968000 18000 1 +05} + {1048968000 18000 1 +04} {1067108400 14400 0 +04} - {1080417600 18000 1 +05} - {1088280000 14400 0 +04} + {1080417600 18000 1 +04} + {1088280000 14400 0 +03} {1099177200 10800 0 +03} {1111878000 14400 0 +04} } diff --git a/library/tzdata/Asia/Tehran b/library/tzdata/Asia/Tehran index a8912ce..3d44e42 100644 --- a/library/tzdata/Asia/Tehran +++ b/library/tzdata/Asia/Tehran @@ -4,226 +4,226 @@ set TZData(:Asia/Tehran) { {-9223372036854775808 12344 0 LMT} {-1704165944 12344 0 TMT} {-757394744 12600 0 +0330} - {247177800 14400 0 +05} - {259272000 18000 1 +05} - {277758000 14400 0 +05} - {283982400 12600 0 +0430} - {290809800 16200 1 +0430} - {306531000 12600 0 +0430} - {322432200 16200 1 +0430} - {338499000 12600 0 +0430} - {673216200 16200 1 +0430} - {685481400 12600 0 +0430} - {701209800 16200 1 +0430} - {717103800 12600 0 +0430} - {732745800 16200 1 +0430} - {748639800 12600 0 +0430} - {764281800 16200 1 +0430} - {780175800 12600 0 +0430} - {795817800 16200 1 +0430} - {811711800 12600 0 +0430} - {827353800 16200 1 +0430} - {843247800 12600 0 +0430} - {858976200 16200 1 +0430} - {874870200 12600 0 +0430} - {890512200 16200 1 +0430} - {906406200 12600 0 +0430} - {922048200 16200 1 +0430} - {937942200 12600 0 +0430} - {953584200 16200 1 +0430} - {969478200 12600 0 +0430} - {985206600 16200 1 +0430} - {1001100600 12600 0 +0430} - {1016742600 16200 1 +0430} - {1032636600 12600 0 +0430} - {1048278600 16200 1 +0430} - {1064172600 12600 0 +0430} - {1079814600 16200 1 +0430} - {1095708600 12600 0 +0430} - {1111437000 16200 1 +0430} - {1127331000 12600 0 +0430} - {1206045000 16200 1 +0430} - {1221939000 12600 0 +0430} - {1237667400 16200 1 +0430} - {1253561400 12600 0 +0430} - {1269203400 16200 1 +0430} - {1285097400 12600 0 +0430} - {1300739400 16200 1 +0430} - {1316633400 12600 0 +0430} - {1332275400 16200 1 +0430} - {1348169400 12600 0 +0430} - {1363897800 16200 1 +0430} - {1379791800 12600 0 +0430} - {1395433800 16200 1 +0430} - {1411327800 12600 0 +0430} - {1426969800 16200 1 +0430} - {1442863800 12600 0 +0430} - {1458505800 16200 1 +0430} - {1474399800 12600 0 +0430} - {1490128200 16200 1 +0430} - {1506022200 12600 0 +0430} - {1521664200 16200 1 +0430} - {1537558200 12600 0 +0430} - {1553200200 16200 1 +0430} - {1569094200 12600 0 +0430} - {1584736200 16200 1 +0430} - {1600630200 12600 0 +0430} - {1616358600 16200 1 +0430} - {1632252600 12600 0 +0430} - {1647894600 16200 1 +0430} - {1663788600 12600 0 +0430} - {1679430600 16200 1 +0430} - {1695324600 12600 0 +0430} - {1710966600 16200 1 +0430} - {1726860600 12600 0 +0430} - {1742589000 16200 1 +0430} - {1758483000 12600 0 +0430} - {1774125000 16200 1 +0430} - {1790019000 12600 0 +0430} - {1805661000 16200 1 +0430} - {1821555000 12600 0 +0430} - {1837197000 16200 1 +0430} - {1853091000 12600 0 +0430} - {1868733000 16200 1 +0430} - {1884627000 12600 0 +0430} - {1900355400 16200 1 +0430} - {1916249400 12600 0 +0430} - {1931891400 16200 1 +0430} - {1947785400 12600 0 +0430} - {1963427400 16200 1 +0430} - {1979321400 12600 0 +0430} - {1994963400 16200 1 +0430} - {2010857400 12600 0 +0430} - {2026585800 16200 1 +0430} - {2042479800 12600 0 +0430} - {2058121800 16200 1 +0430} - {2074015800 12600 0 +0430} - {2089657800 16200 1 +0430} - {2105551800 12600 0 +0430} - {2121193800 16200 1 +0430} - {2137087800 12600 0 +0430} - {2152729800 16200 1 +0430} - {2168623800 12600 0 +0430} - {2184265800 16200 1 +0430} - {2200159800 12600 0 +0430} - {2215888200 16200 1 +0430} - {2231782200 12600 0 +0430} - {2247424200 16200 1 +0430} - {2263318200 12600 0 +0430} - {2278960200 16200 1 +0430} - {2294854200 12600 0 +0430} - {2310496200 16200 1 +0430} - {2326390200 12600 0 +0430} - {2342118600 16200 1 +0430} - {2358012600 12600 0 +0430} - {2373654600 16200 1 +0430} - {2389548600 12600 0 +0430} - {2405190600 16200 1 +0430} - {2421084600 12600 0 +0430} - {2436726600 16200 1 +0430} - {2452620600 12600 0 +0430} - {2468349000 16200 1 +0430} - {2484243000 12600 0 +0430} - {2499885000 16200 1 +0430} - {2515779000 12600 0 +0430} - {2531421000 16200 1 +0430} - {2547315000 12600 0 +0430} - {2562957000 16200 1 +0430} - {2578851000 12600 0 +0430} - {2594579400 16200 1 +0430} - {2610473400 12600 0 +0430} - {2626115400 16200 1 +0430} - {2642009400 12600 0 +0430} - {2657651400 16200 1 +0430} - {2673545400 12600 0 +0430} - {2689187400 16200 1 +0430} - {2705081400 12600 0 +0430} - {2720809800 16200 1 +0430} - {2736703800 12600 0 +0430} - {2752345800 16200 1 +0430} - {2768239800 12600 0 +0430} - {2783881800 16200 1 +0430} - {2799775800 12600 0 +0430} - {2815417800 16200 1 +0430} - {2831311800 12600 0 +0430} - {2847040200 16200 1 +0430} - {2862934200 12600 0 +0430} - {2878576200 16200 1 +0430} - {2894470200 12600 0 +0430} - {2910112200 16200 1 +0430} - {2926006200 12600 0 +0430} - {2941648200 16200 1 +0430} - {2957542200 12600 0 +0430} - {2973270600 16200 1 +0430} - {2989164600 12600 0 +0430} - {3004806600 16200 1 +0430} - {3020700600 12600 0 +0430} - {3036342600 16200 1 +0430} - {3052236600 12600 0 +0430} - {3067878600 16200 1 +0430} - {3083772600 12600 0 +0430} - {3099501000 16200 1 +0430} - {3115395000 12600 0 +0430} - {3131037000 16200 1 +0430} - {3146931000 12600 0 +0430} - {3162573000 16200 1 +0430} - {3178467000 12600 0 +0430} - {3194109000 16200 1 +0430} - {3210003000 12600 0 +0430} - {3225731400 16200 1 +0430} - {3241625400 12600 0 +0430} - {3257267400 16200 1 +0430} - {3273161400 12600 0 +0430} - {3288803400 16200 1 +0430} - {3304697400 12600 0 +0430} - {3320339400 16200 1 +0430} - {3336233400 12600 0 +0430} - {3351961800 16200 1 +0430} - {3367855800 12600 0 +0430} - {3383497800 16200 1 +0430} - {3399391800 12600 0 +0430} - {3415033800 16200 1 +0430} - {3430927800 12600 0 +0430} - {3446569800 16200 1 +0430} - {3462463800 12600 0 +0430} - {3478192200 16200 1 +0430} - {3494086200 12600 0 +0430} - {3509728200 16200 1 +0430} - {3525622200 12600 0 +0430} - {3541264200 16200 1 +0430} - {3557158200 12600 0 +0430} - {3572800200 16200 1 +0430} - {3588694200 12600 0 +0430} - {3604422600 16200 1 +0430} - {3620316600 12600 0 +0430} - {3635958600 16200 1 +0430} - {3651852600 12600 0 +0430} - {3667494600 16200 1 +0430} - {3683388600 12600 0 +0430} - {3699030600 16200 1 +0430} - {3714924600 12600 0 +0430} - {3730653000 16200 1 +0430} - {3746547000 12600 0 +0430} - {3762189000 16200 1 +0430} - {3778083000 12600 0 +0430} - {3793725000 16200 1 +0430} - {3809619000 12600 0 +0430} - {3825261000 16200 1 +0430} - {3841155000 12600 0 +0430} - {3856883400 16200 1 +0430} - {3872777400 12600 0 +0430} - {3888419400 16200 1 +0430} - {3904313400 12600 0 +0430} - {3919955400 16200 1 +0430} - {3935849400 12600 0 +0430} - {3951491400 16200 1 +0430} - {3967385400 12600 0 +0430} - {3983113800 16200 1 +0430} - {3999007800 12600 0 +0430} - {4014649800 16200 1 +0430} - {4030543800 12600 0 +0430} - {4046185800 16200 1 +0430} - {4062079800 12600 0 +0430} - {4077721800 16200 1 +0430} - {4093615800 12600 0 +0430} + {247177800 14400 0 +04} + {259272000 18000 1 +04} + {277758000 14400 0 +04} + {283982400 12600 0 +0330} + {290809800 16200 1 +0330} + {306531000 12600 0 +0330} + {322432200 16200 1 +0330} + {338499000 12600 0 +0330} + {673216200 16200 1 +0330} + {685481400 12600 0 +0330} + {701209800 16200 1 +0330} + {717103800 12600 0 +0330} + {732745800 16200 1 +0330} + {748639800 12600 0 +0330} + {764281800 16200 1 +0330} + {780175800 12600 0 +0330} + {795817800 16200 1 +0330} + {811711800 12600 0 +0330} + {827353800 16200 1 +0330} + {843247800 12600 0 +0330} + {858976200 16200 1 +0330} + {874870200 12600 0 +0330} + {890512200 16200 1 +0330} + {906406200 12600 0 +0330} + {922048200 16200 1 +0330} + {937942200 12600 0 +0330} + {953584200 16200 1 +0330} + {969478200 12600 0 +0330} + {985206600 16200 1 +0330} + {1001100600 12600 0 +0330} + {1016742600 16200 1 +0330} + {1032636600 12600 0 +0330} + {1048278600 16200 1 +0330} + {1064172600 12600 0 +0330} + {1079814600 16200 1 +0330} + {1095708600 12600 0 +0330} + {1111437000 16200 1 +0330} + {1127331000 12600 0 +0330} + {1206045000 16200 1 +0330} + {1221939000 12600 0 +0330} + {1237667400 16200 1 +0330} + {1253561400 12600 0 +0330} + {1269203400 16200 1 +0330} + {1285097400 12600 0 +0330} + {1300739400 16200 1 +0330} + {1316633400 12600 0 +0330} + {1332275400 16200 1 +0330} + {1348169400 12600 0 +0330} + {1363897800 16200 1 +0330} + {1379791800 12600 0 +0330} + {1395433800 16200 1 +0330} + {1411327800 12600 0 +0330} + {1426969800 16200 1 +0330} + {1442863800 12600 0 +0330} + {1458505800 16200 1 +0330} + {1474399800 12600 0 +0330} + {1490128200 16200 1 +0330} + {1506022200 12600 0 +0330} + {1521664200 16200 1 +0330} + {1537558200 12600 0 +0330} + {1553200200 16200 1 +0330} + {1569094200 12600 0 +0330} + {1584736200 16200 1 +0330} + {1600630200 12600 0 +0330} + {1616358600 16200 1 +0330} + {1632252600 12600 0 +0330} + {1647894600 16200 1 +0330} + {1663788600 12600 0 +0330} + {1679430600 16200 1 +0330} + {1695324600 12600 0 +0330} + {1710966600 16200 1 +0330} + {1726860600 12600 0 +0330} + {1742589000 16200 1 +0330} + {1758483000 12600 0 +0330} + {1774125000 16200 1 +0330} + {1790019000 12600 0 +0330} + {1805661000 16200 1 +0330} + {1821555000 12600 0 +0330} + {1837197000 16200 1 +0330} + {1853091000 12600 0 +0330} + {1868733000 16200 1 +0330} + {1884627000 12600 0 +0330} + {1900355400 16200 1 +0330} + {1916249400 12600 0 +0330} + {1931891400 16200 1 +0330} + {1947785400 12600 0 +0330} + {1963427400 16200 1 +0330} + {1979321400 12600 0 +0330} + {1994963400 16200 1 +0330} + {2010857400 12600 0 +0330} + {2026585800 16200 1 +0330} + {2042479800 12600 0 +0330} + {2058121800 16200 1 +0330} + {2074015800 12600 0 +0330} + {2089657800 16200 1 +0330} + {2105551800 12600 0 +0330} + {2121193800 16200 1 +0330} + {2137087800 12600 0 +0330} + {2152729800 16200 1 +0330} + {2168623800 12600 0 +0330} + {2184265800 16200 1 +0330} + {2200159800 12600 0 +0330} + {2215888200 16200 1 +0330} + {2231782200 12600 0 +0330} + {2247424200 16200 1 +0330} + {2263318200 12600 0 +0330} + {2278960200 16200 1 +0330} + {2294854200 12600 0 +0330} + {2310496200 16200 1 +0330} + {2326390200 12600 0 +0330} + {2342118600 16200 1 +0330} + {2358012600 12600 0 +0330} + {2373654600 16200 1 +0330} + {2389548600 12600 0 +0330} + {2405190600 16200 1 +0330} + {2421084600 12600 0 +0330} + {2436726600 16200 1 +0330} + {2452620600 12600 0 +0330} + {2468349000 16200 1 +0330} + {2484243000 12600 0 +0330} + {2499885000 16200 1 +0330} + {2515779000 12600 0 +0330} + {2531421000 16200 1 +0330} + {2547315000 12600 0 +0330} + {2562957000 16200 1 +0330} + {2578851000 12600 0 +0330} + {2594579400 16200 1 +0330} + {2610473400 12600 0 +0330} + {2626115400 16200 1 +0330} + {2642009400 12600 0 +0330} + {2657651400 16200 1 +0330} + {2673545400 12600 0 +0330} + {2689187400 16200 1 +0330} + {2705081400 12600 0 +0330} + {2720809800 16200 1 +0330} + {2736703800 12600 0 +0330} + {2752345800 16200 1 +0330} + {2768239800 12600 0 +0330} + {2783881800 16200 1 +0330} + {2799775800 12600 0 +0330} + {2815417800 16200 1 +0330} + {2831311800 12600 0 +0330} + {2847040200 16200 1 +0330} + {2862934200 12600 0 +0330} + {2878576200 16200 1 +0330} + {2894470200 12600 0 +0330} + {2910112200 16200 1 +0330} + {2926006200 12600 0 +0330} + {2941648200 16200 1 +0330} + {2957542200 12600 0 +0330} + {2973270600 16200 1 +0330} + {2989164600 12600 0 +0330} + {3004806600 16200 1 +0330} + {3020700600 12600 0 +0330} + {3036342600 16200 1 +0330} + {3052236600 12600 0 +0330} + {3067878600 16200 1 +0330} + {3083772600 12600 0 +0330} + {3099501000 16200 1 +0330} + {3115395000 12600 0 +0330} + {3131037000 16200 1 +0330} + {3146931000 12600 0 +0330} + {3162573000 16200 1 +0330} + {3178467000 12600 0 +0330} + {3194109000 16200 1 +0330} + {3210003000 12600 0 +0330} + {3225731400 16200 1 +0330} + {3241625400 12600 0 +0330} + {3257267400 16200 1 +0330} + {3273161400 12600 0 +0330} + {3288803400 16200 1 +0330} + {3304697400 12600 0 +0330} + {3320339400 16200 1 +0330} + {3336233400 12600 0 +0330} + {3351961800 16200 1 +0330} + {3367855800 12600 0 +0330} + {3383497800 16200 1 +0330} + {3399391800 12600 0 +0330} + {3415033800 16200 1 +0330} + {3430927800 12600 0 +0330} + {3446569800 16200 1 +0330} + {3462463800 12600 0 +0330} + {3478192200 16200 1 +0330} + {3494086200 12600 0 +0330} + {3509728200 16200 1 +0330} + {3525622200 12600 0 +0330} + {3541264200 16200 1 +0330} + {3557158200 12600 0 +0330} + {3572800200 16200 1 +0330} + {3588694200 12600 0 +0330} + {3604422600 16200 1 +0330} + {3620316600 12600 0 +0330} + {3635958600 16200 1 +0330} + {3651852600 12600 0 +0330} + {3667494600 16200 1 +0330} + {3683388600 12600 0 +0330} + {3699030600 16200 1 +0330} + {3714924600 12600 0 +0330} + {3730653000 16200 1 +0330} + {3746547000 12600 0 +0330} + {3762189000 16200 1 +0330} + {3778083000 12600 0 +0330} + {3793725000 16200 1 +0330} + {3809619000 12600 0 +0330} + {3825261000 16200 1 +0330} + {3841155000 12600 0 +0330} + {3856883400 16200 1 +0330} + {3872777400 12600 0 +0330} + {3888419400 16200 1 +0330} + {3904313400 12600 0 +0330} + {3919955400 16200 1 +0330} + {3935849400 12600 0 +0330} + {3951491400 16200 1 +0330} + {3967385400 12600 0 +0330} + {3983113800 16200 1 +0330} + {3999007800 12600 0 +0330} + {4014649800 16200 1 +0330} + {4030543800 12600 0 +0330} + {4046185800 16200 1 +0330} + {4062079800 12600 0 +0330} + {4077721800 16200 1 +0330} + {4093615800 12600 0 +0330} } diff --git a/library/tzdata/Asia/Tokyo b/library/tzdata/Asia/Tokyo index 10add1c..790df0a 100644 --- a/library/tzdata/Asia/Tokyo +++ b/library/tzdata/Asia/Tokyo @@ -3,12 +3,12 @@ set TZData(:Asia/Tokyo) { {-9223372036854775808 33539 0 LMT} {-2587712400 32400 0 JST} - {-683794800 36000 1 JDT} - {-672393600 32400 0 JST} - {-654764400 36000 1 JDT} - {-640944000 32400 0 JST} - {-620290800 36000 1 JDT} - {-609494400 32400 0 JST} - {-588841200 36000 1 JDT} - {-578044800 32400 0 JST} + {-683802000 36000 1 JDT} + {-672314400 32400 0 JST} + {-654771600 36000 1 JDT} + {-640864800 32400 0 JST} + {-620298000 36000 1 JDT} + {-609415200 32400 0 JST} + {-588848400 36000 1 JDT} + {-577965600 32400 0 JST} } diff --git a/library/tzdata/Asia/Ulaanbaatar b/library/tzdata/Asia/Ulaanbaatar index e0ba7ab..3a33ef9 100644 --- a/library/tzdata/Asia/Ulaanbaatar +++ b/library/tzdata/Asia/Ulaanbaatar @@ -4,52 +4,52 @@ set TZData(:Asia/Ulaanbaatar) { {-9223372036854775808 25652 0 LMT} {-2032931252 25200 0 +07} {252435600 28800 0 +08} - {417974400 32400 1 +09} + {417974400 32400 1 +08} {433782000 28800 0 +08} - {449596800 32400 1 +09} + {449596800 32400 1 +08} {465318000 28800 0 +08} - {481046400 32400 1 +09} + {481046400 32400 1 +08} {496767600 28800 0 +08} - {512496000 32400 1 +09} + {512496000 32400 1 +08} {528217200 28800 0 +08} - {543945600 32400 1 +09} + {543945600 32400 1 +08} {559666800 28800 0 +08} - {575395200 32400 1 +09} + {575395200 32400 1 +08} {591116400 28800 0 +08} - {606844800 32400 1 +09} + {606844800 32400 1 +08} {622566000 28800 0 +08} - {638294400 32400 1 +09} + {638294400 32400 1 +08} {654620400 28800 0 +08} - {670348800 32400 1 +09} + {670348800 32400 1 +08} {686070000 28800 0 +08} - {701798400 32400 1 +09} + {701798400 32400 1 +08} {717519600 28800 0 +08} - {733248000 32400 1 +09} + {733248000 32400 1 +08} {748969200 28800 0 +08} - {764697600 32400 1 +09} + {764697600 32400 1 +08} {780418800 28800 0 +08} - {796147200 32400 1 +09} + {796147200 32400 1 +08} {811868400 28800 0 +08} - {828201600 32400 1 +09} + {828201600 32400 1 +08} {843922800 28800 0 +08} - {859651200 32400 1 +09} + {859651200 32400 1 +08} {875372400 28800 0 +08} - {891100800 32400 1 +09} + {891100800 32400 1 +08} {906822000 28800 0 +08} - {988394400 32400 1 +09} + {988394400 32400 1 +08} {1001696400 28800 0 +08} - {1017424800 32400 1 +09} + {1017424800 32400 1 +08} {1033146000 28800 0 +08} - {1048874400 32400 1 +09} + {1048874400 32400 1 +08} {1064595600 28800 0 +08} - {1080324000 32400 1 +09} + {1080324000 32400 1 +08} {1096045200 28800 0 +08} - {1111773600 32400 1 +09} + {1111773600 32400 1 +08} {1127494800 28800 0 +08} - {1143223200 32400 1 +09} + {1143223200 32400 1 +08} {1159549200 28800 0 +08} - {1427479200 32400 1 +09} + {1427479200 32400 1 +08} {1443193200 28800 0 +08} - {1458928800 32400 1 +09} + {1458928800 32400 1 +08} {1474642800 28800 0 +08} } diff --git a/library/tzdata/Asia/Yerevan b/library/tzdata/Asia/Yerevan index 25a349a..463bed0 100644 --- a/library/tzdata/Asia/Yerevan +++ b/library/tzdata/Asia/Yerevan @@ -4,67 +4,67 @@ set TZData(:Asia/Yerevan) { {-9223372036854775808 10680 0 LMT} {-1441162680 10800 0 +03} {-405140400 14400 0 +04} - {354916800 18000 1 +05} + {354916800 18000 1 +04} {370724400 14400 0 +04} - {386452800 18000 1 +05} + {386452800 18000 1 +04} {402260400 14400 0 +04} - {417988800 18000 1 +05} + {417988800 18000 1 +04} {433796400 14400 0 +04} - {449611200 18000 1 +05} + {449611200 18000 1 +04} {465343200 14400 0 +04} - {481068000 18000 1 +05} + {481068000 18000 1 +04} {496792800 14400 0 +04} - {512517600 18000 1 +05} + {512517600 18000 1 +04} {528242400 14400 0 +04} - {543967200 18000 1 +05} + {543967200 18000 1 +04} {559692000 14400 0 +04} - {575416800 18000 1 +05} + {575416800 18000 1 +04} {591141600 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} {670370400 10800 0 +03} - {670374000 14400 1 +04} + {670374000 14400 1 +03} {686098800 10800 0 +03} - {701823600 14400 1 +04} + {701823600 14400 1 +03} {717548400 10800 0 +03} - {733273200 14400 1 +04} + {733273200 14400 1 +03} {748998000 10800 0 +03} - {764722800 14400 1 +04} + {764722800 14400 1 +03} {780447600 10800 0 +03} - {796172400 14400 1 +04} + {796172400 14400 1 +03} {811897200 14400 0 +04} {852062400 14400 0 +04} - {859672800 18000 1 +05} + {859672800 18000 1 +04} {877816800 14400 0 +04} - {891122400 18000 1 +05} + {891122400 18000 1 +04} {909266400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 14400 0 +04} - {1111874400 18000 1 +05} + {1111874400 18000 1 +04} {1130623200 14400 0 +04} - {1143324000 18000 1 +05} + {1143324000 18000 1 +04} {1162072800 14400 0 +04} - {1174773600 18000 1 +05} + {1174773600 18000 1 +04} {1193522400 14400 0 +04} - {1206828000 18000 1 +05} + {1206828000 18000 1 +04} {1224972000 14400 0 +04} - {1238277600 18000 1 +05} + {1238277600 18000 1 +04} {1256421600 14400 0 +04} - {1269727200 18000 1 +05} + {1269727200 18000 1 +04} {1288476000 14400 0 +04} {1293825600 14400 0 +04} - {1301176800 18000 1 +05} + {1301176800 18000 1 +04} {1319925600 14400 0 +04} } diff --git a/library/tzdata/Atlantic/Azores b/library/tzdata/Atlantic/Azores index a9bec94..088dd9a 100644 --- a/library/tzdata/Atlantic/Azores +++ b/library/tzdata/Atlantic/Azores @@ -3,7 +3,7 @@ set TZData(:Atlantic/Azores) { {-9223372036854775808 -6160 0 LMT} {-2713904240 -6872 0 HMT} - {-1830377128 -7200 0 -02} + {-1830376800 -7200 0 -02} {-1689548400 -3600 1 -01} {-1677794400 -7200 0 -02} {-1667430000 -3600 1 -01} diff --git a/library/tzdata/Atlantic/Cape_Verde b/library/tzdata/Atlantic/Cape_Verde index 6fc94eb..595db0b 100644 --- a/library/tzdata/Atlantic/Cape_Verde +++ b/library/tzdata/Atlantic/Cape_Verde @@ -2,7 +2,7 @@ set TZData(:Atlantic/Cape_Verde) { {-9223372036854775808 -5644 0 LMT} - {-1988144756 -7200 0 -02} + {-1830376800 -7200 0 -02} {-862610400 -3600 1 -01} {-764118000 -7200 0 -02} {186120000 -3600 0 -01} diff --git a/library/tzdata/Atlantic/Madeira b/library/tzdata/Atlantic/Madeira index cc5e5f8..fed9c19 100644 --- a/library/tzdata/Atlantic/Madeira +++ b/library/tzdata/Atlantic/Madeira @@ -3,7 +3,7 @@ set TZData(:Atlantic/Madeira) { {-9223372036854775808 -4056 0 LMT} {-2713906344 -4056 0 FMT} - {-1830379944 -3600 0 -01} + {-1830380400 -3600 0 -01} {-1689552000 0 1 +00} {-1677798000 -3600 0 -01} {-1667433600 0 1 +00} diff --git a/library/tzdata/Atlantic/Reykjavik b/library/tzdata/Atlantic/Reykjavik index 5555460..6270572 100644 --- a/library/tzdata/Atlantic/Reykjavik +++ b/library/tzdata/Atlantic/Reykjavik @@ -3,71 +3,71 @@ set TZData(:Atlantic/Reykjavik) { {-9223372036854775808 -5280 0 LMT} {-1956609120 -3600 0 -01} - {-1668211200 0 1 +00} + {-1668211200 0 1 -01} {-1647212400 -3600 0 -01} - {-1636675200 0 1 +00} + {-1636675200 0 1 -01} {-1613430000 -3600 0 -01} - {-1605139200 0 1 +00} + {-1605139200 0 1 -01} {-1581894000 -3600 0 -01} - {-1539561600 0 1 +00} + {-1539561600 0 1 -01} {-1531350000 -3600 0 -01} - {-968025600 0 1 +00} + {-968025600 0 1 -01} {-952293600 -3600 0 -01} - {-942008400 0 1 +00} + {-942008400 0 1 -01} {-920239200 -3600 0 -01} - {-909957600 0 1 +00} + {-909957600 0 1 -01} {-888789600 -3600 0 -01} - {-877903200 0 1 +00} + {-877903200 0 1 -01} {-857944800 -3600 0 -01} - {-846453600 0 1 +00} + {-846453600 0 1 -01} {-826495200 -3600 0 -01} - {-815004000 0 1 +00} + {-815004000 0 1 -01} {-795045600 -3600 0 -01} - {-783554400 0 1 +00} + {-783554400 0 1 -01} {-762991200 -3600 0 -01} - {-752104800 0 1 +00} + {-752104800 0 1 -01} {-731541600 -3600 0 -01} - {-717631200 0 1 +00} + {-717631200 0 1 -01} {-700092000 -3600 0 -01} - {-686181600 0 1 +00} + {-686181600 0 1 -01} {-668642400 -3600 0 -01} - {-654732000 0 1 +00} + {-654732000 0 1 -01} {-636588000 -3600 0 -01} - {-623282400 0 1 +00} + {-623282400 0 1 -01} {-605743200 -3600 0 -01} - {-591832800 0 1 +00} + {-591832800 0 1 -01} {-573688800 -3600 0 -01} - {-559778400 0 1 +00} + {-559778400 0 1 -01} {-542239200 -3600 0 -01} - {-528328800 0 1 +00} + {-528328800 0 1 -01} {-510789600 -3600 0 -01} - {-496879200 0 1 +00} + {-496879200 0 1 -01} {-479340000 -3600 0 -01} - {-465429600 0 1 +00} + {-465429600 0 1 -01} {-447890400 -3600 0 -01} - {-433980000 0 1 +00} + {-433980000 0 1 -01} {-415836000 -3600 0 -01} - {-401925600 0 1 +00} + {-401925600 0 1 -01} {-384386400 -3600 0 -01} - {-370476000 0 1 +00} + {-370476000 0 1 -01} {-352936800 -3600 0 -01} - {-339026400 0 1 +00} + {-339026400 0 1 -01} {-321487200 -3600 0 -01} - {-307576800 0 1 +00} + {-307576800 0 1 -01} {-290037600 -3600 0 -01} - {-276127200 0 1 +00} + {-276127200 0 1 -01} {-258588000 -3600 0 -01} - {-244677600 0 1 +00} + {-244677600 0 1 -01} {-226533600 -3600 0 -01} - {-212623200 0 1 +00} + {-212623200 0 1 -01} {-195084000 -3600 0 -01} - {-181173600 0 1 +00} + {-181173600 0 1 -01} {-163634400 -3600 0 -01} - {-149724000 0 1 +00} + {-149724000 0 1 -01} {-132184800 -3600 0 -01} - {-118274400 0 1 +00} + {-118274400 0 1 -01} {-100735200 -3600 0 -01} - {-86824800 0 1 +00} + {-86824800 0 1 -01} {-68680800 -3600 0 -01} {-54770400 0 0 GMT} } diff --git a/library/tzdata/Atlantic/Stanley b/library/tzdata/Atlantic/Stanley index 5210832..48473ca 100644 --- a/library/tzdata/Atlantic/Stanley +++ b/library/tzdata/Atlantic/Stanley @@ -4,72 +4,72 @@ set TZData(:Atlantic/Stanley) { {-9223372036854775808 -13884 0 LMT} {-2524507716 -13884 0 SMT} {-1824235716 -14400 0 -04} - {-1018209600 -10800 1 -03} + {-1018209600 -10800 1 -04} {-1003093200 -14400 0 -04} - {-986760000 -10800 1 -03} + {-986760000 -10800 1 -04} {-971643600 -14400 0 -04} - {-954705600 -10800 1 -03} + {-954705600 -10800 1 -04} {-939589200 -14400 0 -04} - {-923256000 -10800 1 -03} + {-923256000 -10800 1 -04} {-908139600 -14400 0 -04} - {-891806400 -10800 1 -03} + {-891806400 -10800 1 -04} {-876690000 -14400 0 -04} - {-860356800 -10800 1 -03} + {-860356800 -10800 1 -04} {420606000 -7200 0 -03} - {433303200 -7200 1 -02} + {433303200 -7200 1 -03} {452052000 -10800 0 -03} - {464151600 -7200 1 -02} + {464151600 -7200 1 -03} {483501600 -10800 0 -03} {495597600 -14400 0 -04} - {495604800 -10800 1 -03} + {495604800 -10800 1 -04} {514350000 -14400 0 -04} - {527054400 -10800 1 -03} + {527054400 -10800 1 -04} {545799600 -14400 0 -04} - {558504000 -10800 1 -03} + {558504000 -10800 1 -04} {577249200 -14400 0 -04} - {589953600 -10800 1 -03} + {589953600 -10800 1 -04} {608698800 -14400 0 -04} - {621403200 -10800 1 -03} + {621403200 -10800 1 -04} {640753200 -14400 0 -04} - {652852800 -10800 1 -03} + {652852800 -10800 1 -04} {672202800 -14400 0 -04} - {684907200 -10800 1 -03} + {684907200 -10800 1 -04} {703652400 -14400 0 -04} - {716356800 -10800 1 -03} + {716356800 -10800 1 -04} {735102000 -14400 0 -04} - {747806400 -10800 1 -03} + {747806400 -10800 1 -04} {766551600 -14400 0 -04} - {779256000 -10800 1 -03} + {779256000 -10800 1 -04} {798001200 -14400 0 -04} - {810705600 -10800 1 -03} + {810705600 -10800 1 -04} {830055600 -14400 0 -04} - {842760000 -10800 1 -03} + {842760000 -10800 1 -04} {861505200 -14400 0 -04} - {874209600 -10800 1 -03} + {874209600 -10800 1 -04} {892954800 -14400 0 -04} - {905659200 -10800 1 -03} + {905659200 -10800 1 -04} {924404400 -14400 0 -04} - {937108800 -10800 1 -03} + {937108800 -10800 1 -04} {955854000 -14400 0 -04} - {968558400 -10800 1 -03} + {968558400 -10800 1 -04} {987310800 -14400 0 -04} - {999410400 -10800 1 -03} + {999410400 -10800 1 -04} {1019365200 -14400 0 -04} - {1030860000 -10800 1 -03} + {1030860000 -10800 1 -04} {1050814800 -14400 0 -04} - {1062914400 -10800 1 -03} + {1062914400 -10800 1 -04} {1082264400 -14400 0 -04} - {1094364000 -10800 1 -03} + {1094364000 -10800 1 -04} {1113714000 -14400 0 -04} - {1125813600 -10800 1 -03} + {1125813600 -10800 1 -04} {1145163600 -14400 0 -04} - {1157263200 -10800 1 -03} + {1157263200 -10800 1 -04} {1176613200 -14400 0 -04} - {1188712800 -10800 1 -03} + {1188712800 -10800 1 -04} {1208667600 -14400 0 -04} - {1220767200 -10800 1 -03} + {1220767200 -10800 1 -04} {1240117200 -14400 0 -04} - {1252216800 -10800 1 -03} + {1252216800 -10800 1 -04} {1271566800 -14400 0 -04} {1283662800 -10800 0 -03} } diff --git a/library/tzdata/Australia/Lord_Howe b/library/tzdata/Australia/Lord_Howe index 0e2405e..c595967 100644 --- a/library/tzdata/Australia/Lord_Howe +++ b/library/tzdata/Australia/Lord_Howe @@ -3,243 +3,243 @@ set TZData(:Australia/Lord_Howe) { {-9223372036854775808 38180 0 LMT} {-2364114980 36000 0 AEST} - {352216800 37800 0 +1130} - {372785400 41400 1 +1130} - {384273000 37800 0 +1130} - {404839800 41400 1 +1130} - {415722600 37800 0 +1130} - {436289400 41400 1 +1130} - {447172200 37800 0 +1130} - {467739000 41400 1 +1130} - {478621800 37800 0 +1130} - {488984400 37800 0 +11} - {499188600 39600 1 +11} - {511282800 37800 0 +11} - {530033400 39600 1 +11} - {542732400 37800 0 +11} - {562087800 39600 1 +11} - {574786800 37800 0 +11} - {594142200 39600 1 +11} - {606236400 37800 0 +11} - {625591800 39600 1 +11} - {636476400 37800 0 +11} - {657041400 39600 1 +11} - {667926000 37800 0 +11} - {688491000 39600 1 +11} - {699375600 37800 0 +11} - {719940600 39600 1 +11} - {731430000 37800 0 +11} - {751995000 39600 1 +11} - {762879600 37800 0 +11} - {783444600 39600 1 +11} - {794329200 37800 0 +11} - {814894200 39600 1 +11} - {828198000 37800 0 +11} - {846343800 39600 1 +11} - {859647600 37800 0 +11} - {877793400 39600 1 +11} - {891097200 37800 0 +11} - {909243000 39600 1 +11} - {922546800 37800 0 +11} - {941297400 39600 1 +11} - {953996400 37800 0 +11} - {967303800 39600 1 +11} - {985446000 37800 0 +11} - {1004196600 39600 1 +11} - {1017500400 37800 0 +11} - {1035646200 39600 1 +11} - {1048950000 37800 0 +11} - {1067095800 39600 1 +11} - {1080399600 37800 0 +11} - {1099150200 39600 1 +11} - {1111849200 37800 0 +11} - {1130599800 39600 1 +11} - {1143903600 37800 0 +11} - {1162049400 39600 1 +11} - {1174748400 37800 0 +11} - {1193499000 39600 1 +11} - {1207407600 37800 0 +11} - {1223134200 39600 1 +11} - {1238857200 37800 0 +11} - {1254583800 39600 1 +11} - {1270306800 37800 0 +11} - {1286033400 39600 1 +11} - {1301756400 37800 0 +11} - {1317483000 39600 1 +11} - {1333206000 37800 0 +11} - {1349537400 39600 1 +11} - {1365260400 37800 0 +11} - {1380987000 39600 1 +11} - {1396710000 37800 0 +11} - {1412436600 39600 1 +11} - {1428159600 37800 0 +11} - {1443886200 39600 1 +11} - {1459609200 37800 0 +11} - {1475335800 39600 1 +11} - {1491058800 37800 0 +11} - {1506785400 39600 1 +11} - {1522508400 37800 0 +11} - {1538839800 39600 1 +11} - {1554562800 37800 0 +11} - {1570289400 39600 1 +11} - {1586012400 37800 0 +11} - {1601739000 39600 1 +11} - {1617462000 37800 0 +11} - {1633188600 39600 1 +11} - {1648911600 37800 0 +11} - {1664638200 39600 1 +11} - {1680361200 37800 0 +11} - {1696087800 39600 1 +11} - {1712415600 37800 0 +11} - {1728142200 39600 1 +11} - {1743865200 37800 0 +11} - {1759591800 39600 1 +11} - {1775314800 37800 0 +11} - {1791041400 39600 1 +11} - {1806764400 37800 0 +11} - {1822491000 39600 1 +11} - {1838214000 37800 0 +11} - {1853940600 39600 1 +11} - {1869663600 37800 0 +11} - {1885995000 39600 1 +11} - {1901718000 37800 0 +11} - {1917444600 39600 1 +11} - {1933167600 37800 0 +11} - {1948894200 39600 1 +11} - {1964617200 37800 0 +11} - {1980343800 39600 1 +11} - {1996066800 37800 0 +11} - {2011793400 39600 1 +11} - {2027516400 37800 0 +11} - {2043243000 39600 1 +11} - {2058966000 37800 0 +11} - {2075297400 39600 1 +11} - {2091020400 37800 0 +11} - {2106747000 39600 1 +11} - {2122470000 37800 0 +11} - {2138196600 39600 1 +11} - {2153919600 37800 0 +11} - {2169646200 39600 1 +11} - {2185369200 37800 0 +11} - {2201095800 39600 1 +11} - {2216818800 37800 0 +11} - {2233150200 39600 1 +11} - {2248873200 37800 0 +11} - {2264599800 39600 1 +11} - {2280322800 37800 0 +11} - {2296049400 39600 1 +11} - {2311772400 37800 0 +11} - {2327499000 39600 1 +11} - {2343222000 37800 0 +11} - {2358948600 39600 1 +11} - {2374671600 37800 0 +11} - {2390398200 39600 1 +11} - {2406121200 37800 0 +11} - {2422452600 39600 1 +11} - {2438175600 37800 0 +11} - {2453902200 39600 1 +11} - {2469625200 37800 0 +11} - {2485351800 39600 1 +11} - {2501074800 37800 0 +11} - {2516801400 39600 1 +11} - {2532524400 37800 0 +11} - {2548251000 39600 1 +11} - {2563974000 37800 0 +11} - {2579700600 39600 1 +11} - {2596028400 37800 0 +11} - {2611755000 39600 1 +11} - {2627478000 37800 0 +11} - {2643204600 39600 1 +11} - {2658927600 37800 0 +11} - {2674654200 39600 1 +11} - {2690377200 37800 0 +11} - {2706103800 39600 1 +11} - {2721826800 37800 0 +11} - {2737553400 39600 1 +11} - {2753276400 37800 0 +11} - {2769607800 39600 1 +11} - {2785330800 37800 0 +11} - {2801057400 39600 1 +11} - {2816780400 37800 0 +11} - {2832507000 39600 1 +11} - {2848230000 37800 0 +11} - {2863956600 39600 1 +11} - {2879679600 37800 0 +11} - {2895406200 39600 1 +11} - {2911129200 37800 0 +11} - {2926855800 39600 1 +11} - {2942578800 37800 0 +11} - {2958910200 39600 1 +11} - {2974633200 37800 0 +11} - {2990359800 39600 1 +11} - {3006082800 37800 0 +11} - {3021809400 39600 1 +11} - {3037532400 37800 0 +11} - {3053259000 39600 1 +11} - {3068982000 37800 0 +11} - {3084708600 39600 1 +11} - {3100431600 37800 0 +11} - {3116763000 39600 1 +11} - {3132486000 37800 0 +11} - {3148212600 39600 1 +11} - {3163935600 37800 0 +11} - {3179662200 39600 1 +11} - {3195385200 37800 0 +11} - {3211111800 39600 1 +11} - {3226834800 37800 0 +11} - {3242561400 39600 1 +11} - {3258284400 37800 0 +11} - {3274011000 39600 1 +11} - {3289734000 37800 0 +11} - {3306065400 39600 1 +11} - {3321788400 37800 0 +11} - {3337515000 39600 1 +11} - {3353238000 37800 0 +11} - {3368964600 39600 1 +11} - {3384687600 37800 0 +11} - {3400414200 39600 1 +11} - {3416137200 37800 0 +11} - {3431863800 39600 1 +11} - {3447586800 37800 0 +11} - {3463313400 39600 1 +11} - {3479641200 37800 0 +11} - {3495367800 39600 1 +11} - {3511090800 37800 0 +11} - {3526817400 39600 1 +11} - {3542540400 37800 0 +11} - {3558267000 39600 1 +11} - {3573990000 37800 0 +11} - {3589716600 39600 1 +11} - {3605439600 37800 0 +11} - {3621166200 39600 1 +11} - {3636889200 37800 0 +11} - {3653220600 39600 1 +11} - {3668943600 37800 0 +11} - {3684670200 39600 1 +11} - {3700393200 37800 0 +11} - {3716119800 39600 1 +11} - {3731842800 37800 0 +11} - {3747569400 39600 1 +11} - {3763292400 37800 0 +11} - {3779019000 39600 1 +11} - {3794742000 37800 0 +11} - {3810468600 39600 1 +11} - {3826191600 37800 0 +11} - {3842523000 39600 1 +11} - {3858246000 37800 0 +11} - {3873972600 39600 1 +11} - {3889695600 37800 0 +11} - {3905422200 39600 1 +11} - {3921145200 37800 0 +11} - {3936871800 39600 1 +11} - {3952594800 37800 0 +11} - {3968321400 39600 1 +11} - {3984044400 37800 0 +11} - {4000375800 39600 1 +11} - {4016098800 37800 0 +11} - {4031825400 39600 1 +11} - {4047548400 37800 0 +11} - {4063275000 39600 1 +11} - {4078998000 37800 0 +11} - {4094724600 39600 1 +11} + {352216800 37800 0 +1030} + {372785400 41400 1 +1030} + {384273000 37800 0 +1030} + {404839800 41400 1 +1030} + {415722600 37800 0 +1030} + {436289400 41400 1 +1030} + {447172200 37800 0 +1030} + {467739000 41400 1 +1030} + {478621800 37800 0 +1030} + {488984400 37800 0 +1030} + {499188600 39600 1 +1030} + {511282800 37800 0 +1030} + {530033400 39600 1 +1030} + {542732400 37800 0 +1030} + {562087800 39600 1 +1030} + {574786800 37800 0 +1030} + {594142200 39600 1 +1030} + {606236400 37800 0 +1030} + {625591800 39600 1 +1030} + {636476400 37800 0 +1030} + {657041400 39600 1 +1030} + {667926000 37800 0 +1030} + {688491000 39600 1 +1030} + {699375600 37800 0 +1030} + {719940600 39600 1 +1030} + {731430000 37800 0 +1030} + {751995000 39600 1 +1030} + {762879600 37800 0 +1030} + {783444600 39600 1 +1030} + {794329200 37800 0 +1030} + {814894200 39600 1 +1030} + {828198000 37800 0 +1030} + {846343800 39600 1 +1030} + {859647600 37800 0 +1030} + {877793400 39600 1 +1030} + {891097200 37800 0 +1030} + {909243000 39600 1 +1030} + {922546800 37800 0 +1030} + {941297400 39600 1 +1030} + {953996400 37800 0 +1030} + {967303800 39600 1 +1030} + {985446000 37800 0 +1030} + {1004196600 39600 1 +1030} + {1017500400 37800 0 +1030} + {1035646200 39600 1 +1030} + {1048950000 37800 0 +1030} + {1067095800 39600 1 +1030} + {1080399600 37800 0 +1030} + {1099150200 39600 1 +1030} + {1111849200 37800 0 +1030} + {1130599800 39600 1 +1030} + {1143903600 37800 0 +1030} + {1162049400 39600 1 +1030} + {1174748400 37800 0 +1030} + {1193499000 39600 1 +1030} + {1207407600 37800 0 +1030} + {1223134200 39600 1 +1030} + {1238857200 37800 0 +1030} + {1254583800 39600 1 +1030} + {1270306800 37800 0 +1030} + {1286033400 39600 1 +1030} + {1301756400 37800 0 +1030} + {1317483000 39600 1 +1030} + {1333206000 37800 0 +1030} + {1349537400 39600 1 +1030} + {1365260400 37800 0 +1030} + {1380987000 39600 1 +1030} + {1396710000 37800 0 +1030} + {1412436600 39600 1 +1030} + {1428159600 37800 0 +1030} + {1443886200 39600 1 +1030} + {1459609200 37800 0 +1030} + {1475335800 39600 1 +1030} + {1491058800 37800 0 +1030} + {1506785400 39600 1 +1030} + {1522508400 37800 0 +1030} + {1538839800 39600 1 +1030} + {1554562800 37800 0 +1030} + {1570289400 39600 1 +1030} + {1586012400 37800 0 +1030} + {1601739000 39600 1 +1030} + {1617462000 37800 0 +1030} + {1633188600 39600 1 +1030} + {1648911600 37800 0 +1030} + {1664638200 39600 1 +1030} + {1680361200 37800 0 +1030} + {1696087800 39600 1 +1030} + {1712415600 37800 0 +1030} + {1728142200 39600 1 +1030} + {1743865200 37800 0 +1030} + {1759591800 39600 1 +1030} + {1775314800 37800 0 +1030} + {1791041400 39600 1 +1030} + {1806764400 37800 0 +1030} + {1822491000 39600 1 +1030} + {1838214000 37800 0 +1030} + {1853940600 39600 1 +1030} + {1869663600 37800 0 +1030} + {1885995000 39600 1 +1030} + {1901718000 37800 0 +1030} + {1917444600 39600 1 +1030} + {1933167600 37800 0 +1030} + {1948894200 39600 1 +1030} + {1964617200 37800 0 +1030} + {1980343800 39600 1 +1030} + {1996066800 37800 0 +1030} + {2011793400 39600 1 +1030} + {2027516400 37800 0 +1030} + {2043243000 39600 1 +1030} + {2058966000 37800 0 +1030} + {2075297400 39600 1 +1030} + {2091020400 37800 0 +1030} + {2106747000 39600 1 +1030} + {2122470000 37800 0 +1030} + {2138196600 39600 1 +1030} + {2153919600 37800 0 +1030} + {2169646200 39600 1 +1030} + {2185369200 37800 0 +1030} + {2201095800 39600 1 +1030} + {2216818800 37800 0 +1030} + {2233150200 39600 1 +1030} + {2248873200 37800 0 +1030} + {2264599800 39600 1 +1030} + {2280322800 37800 0 +1030} + {2296049400 39600 1 +1030} + {2311772400 37800 0 +1030} + {2327499000 39600 1 +1030} + {2343222000 37800 0 +1030} + {2358948600 39600 1 +1030} + {2374671600 37800 0 +1030} + {2390398200 39600 1 +1030} + {2406121200 37800 0 +1030} + {2422452600 39600 1 +1030} + {2438175600 37800 0 +1030} + {2453902200 39600 1 +1030} + {2469625200 37800 0 +1030} + {2485351800 39600 1 +1030} + {2501074800 37800 0 +1030} + {2516801400 39600 1 +1030} + {2532524400 37800 0 +1030} + {2548251000 39600 1 +1030} + {2563974000 37800 0 +1030} + {2579700600 39600 1 +1030} + {2596028400 37800 0 +1030} + {2611755000 39600 1 +1030} + {2627478000 37800 0 +1030} + {2643204600 39600 1 +1030} + {2658927600 37800 0 +1030} + {2674654200 39600 1 +1030} + {2690377200 37800 0 +1030} + {2706103800 39600 1 +1030} + {2721826800 37800 0 +1030} + {2737553400 39600 1 +1030} + {2753276400 37800 0 +1030} + {2769607800 39600 1 +1030} + {2785330800 37800 0 +1030} + {2801057400 39600 1 +1030} + {2816780400 37800 0 +1030} + {2832507000 39600 1 +1030} + {2848230000 37800 0 +1030} + {2863956600 39600 1 +1030} + {2879679600 37800 0 +1030} + {2895406200 39600 1 +1030} + {2911129200 37800 0 +1030} + {2926855800 39600 1 +1030} + {2942578800 37800 0 +1030} + {2958910200 39600 1 +1030} + {2974633200 37800 0 +1030} + {2990359800 39600 1 +1030} + {3006082800 37800 0 +1030} + {3021809400 39600 1 +1030} + {3037532400 37800 0 +1030} + {3053259000 39600 1 +1030} + {3068982000 37800 0 +1030} + {3084708600 39600 1 +1030} + {3100431600 37800 0 +1030} + {3116763000 39600 1 +1030} + {3132486000 37800 0 +1030} + {3148212600 39600 1 +1030} + {3163935600 37800 0 +1030} + {3179662200 39600 1 +1030} + {3195385200 37800 0 +1030} + {3211111800 39600 1 +1030} + {3226834800 37800 0 +1030} + {3242561400 39600 1 +1030} + {3258284400 37800 0 +1030} + {3274011000 39600 1 +1030} + {3289734000 37800 0 +1030} + {3306065400 39600 1 +1030} + {3321788400 37800 0 +1030} + {3337515000 39600 1 +1030} + {3353238000 37800 0 +1030} + {3368964600 39600 1 +1030} + {3384687600 37800 0 +1030} + {3400414200 39600 1 +1030} + {3416137200 37800 0 +1030} + {3431863800 39600 1 +1030} + {3447586800 37800 0 +1030} + {3463313400 39600 1 +1030} + {3479641200 37800 0 +1030} + {3495367800 39600 1 +1030} + {3511090800 37800 0 +1030} + {3526817400 39600 1 +1030} + {3542540400 37800 0 +1030} + {3558267000 39600 1 +1030} + {3573990000 37800 0 +1030} + {3589716600 39600 1 +1030} + {3605439600 37800 0 +1030} + {3621166200 39600 1 +1030} + {3636889200 37800 0 +1030} + {3653220600 39600 1 +1030} + {3668943600 37800 0 +1030} + {3684670200 39600 1 +1030} + {3700393200 37800 0 +1030} + {3716119800 39600 1 +1030} + {3731842800 37800 0 +1030} + {3747569400 39600 1 +1030} + {3763292400 37800 0 +1030} + {3779019000 39600 1 +1030} + {3794742000 37800 0 +1030} + {3810468600 39600 1 +1030} + {3826191600 37800 0 +1030} + {3842523000 39600 1 +1030} + {3858246000 37800 0 +1030} + {3873972600 39600 1 +1030} + {3889695600 37800 0 +1030} + {3905422200 39600 1 +1030} + {3921145200 37800 0 +1030} + {3936871800 39600 1 +1030} + {3952594800 37800 0 +1030} + {3968321400 39600 1 +1030} + {3984044400 37800 0 +1030} + {4000375800 39600 1 +1030} + {4016098800 37800 0 +1030} + {4031825400 39600 1 +1030} + {4047548400 37800 0 +1030} + {4063275000 39600 1 +1030} + {4078998000 37800 0 +1030} + {4094724600 39600 1 +1030} } diff --git a/library/tzdata/Europe/Dublin b/library/tzdata/Europe/Dublin index c3a5c0e..56afc93 100644 --- a/library/tzdata/Europe/Dublin +++ b/library/tzdata/Europe/Dublin @@ -98,262 +98,261 @@ set TZData(:Europe/Dublin) { {-68680800 0 0 IST} {-59004000 3600 1 IST} {-37238400 3600 0 IST} - {57722400 0 0 IST} - {69818400 3600 1 IST} - {89172000 0 0 IST} - {101268000 3600 1 IST} - {120621600 0 0 IST} - {132717600 3600 1 IST} - {152071200 0 0 IST} - {164167200 3600 1 IST} - {183520800 0 0 IST} - {196221600 3600 1 IST} - {214970400 0 0 IST} - {227671200 3600 1 IST} - {246420000 0 0 IST} - {259120800 3600 1 IST} - {278474400 0 0 IST} - {290570400 3600 1 IST} - {309924000 0 0 IST} - {322020000 3600 1 IST} - {341373600 0 0 IST} - {354675600 3600 1 IST} - {372819600 0 0 IST} - {386125200 3600 1 IST} - {404269200 0 0 IST} - {417574800 3600 1 IST} - {435718800 0 0 IST} - {449024400 3600 1 IST} - {467773200 0 0 IST} - {481078800 3600 1 IST} - {499222800 0 0 IST} - {512528400 3600 1 IST} - {530672400 0 0 IST} - {543978000 3600 1 IST} - {562122000 0 0 IST} - {575427600 3600 1 IST} - {593571600 0 0 IST} - {606877200 3600 1 IST} - {625626000 0 0 IST} - {638326800 3600 1 IST} - {657075600 0 0 IST} - {670381200 3600 1 IST} - {688525200 0 0 IST} - {701830800 3600 1 IST} - {719974800 0 0 IST} - {733280400 3600 1 IST} - {751424400 0 0 IST} - {764730000 3600 1 IST} - {782874000 0 0 IST} - {796179600 3600 1 IST} - {814323600 0 0 IST} - {820454400 0 0 GMT} - {828234000 3600 1 IST} - {846378000 0 0 GMT} - {859683600 3600 1 IST} - {877827600 0 0 GMT} - {891133200 3600 1 IST} - {909277200 0 0 GMT} - {922582800 3600 1 IST} - {941331600 0 0 GMT} - {954032400 3600 1 IST} - {972781200 0 0 GMT} - {985482000 3600 1 IST} - {1004230800 0 0 GMT} - {1017536400 3600 1 IST} - {1035680400 0 0 GMT} - {1048986000 3600 1 IST} - {1067130000 0 0 GMT} - {1080435600 3600 1 IST} - {1099184400 0 0 GMT} - {1111885200 3600 1 IST} - {1130634000 0 0 GMT} - {1143334800 3600 1 IST} - {1162083600 0 0 GMT} - {1174784400 3600 1 IST} - {1193533200 0 0 GMT} - {1206838800 3600 1 IST} - {1224982800 0 0 GMT} - {1238288400 3600 1 IST} - {1256432400 0 0 GMT} - {1269738000 3600 1 IST} - {1288486800 0 0 GMT} - {1301187600 3600 1 IST} - {1319936400 0 0 GMT} - {1332637200 3600 1 IST} - {1351386000 0 0 GMT} - {1364691600 3600 1 IST} - {1382835600 0 0 GMT} - {1396141200 3600 1 IST} - {1414285200 0 0 GMT} - {1427590800 3600 1 IST} - {1445734800 0 0 GMT} - {1459040400 3600 1 IST} - {1477789200 0 0 GMT} - {1490490000 3600 1 IST} - {1509238800 0 0 GMT} - {1521939600 3600 1 IST} - {1540688400 0 0 GMT} - {1553994000 3600 1 IST} - {1572138000 0 0 GMT} - {1585443600 3600 1 IST} - {1603587600 0 0 GMT} - {1616893200 3600 1 IST} - {1635642000 0 0 GMT} - {1648342800 3600 1 IST} - {1667091600 0 0 GMT} - {1679792400 3600 1 IST} - {1698541200 0 0 GMT} - {1711846800 3600 1 IST} - {1729990800 0 0 GMT} - {1743296400 3600 1 IST} - {1761440400 0 0 GMT} - {1774746000 3600 1 IST} - {1792890000 0 0 GMT} - {1806195600 3600 1 IST} - {1824944400 0 0 GMT} - {1837645200 3600 1 IST} - {1856394000 0 0 GMT} - {1869094800 3600 1 IST} - {1887843600 0 0 GMT} - {1901149200 3600 1 IST} - {1919293200 0 0 GMT} - {1932598800 3600 1 IST} - {1950742800 0 0 GMT} - {1964048400 3600 1 IST} - {1982797200 0 0 GMT} - {1995498000 3600 1 IST} - {2014246800 0 0 GMT} - {2026947600 3600 1 IST} - {2045696400 0 0 GMT} - {2058397200 3600 1 IST} - {2077146000 0 0 GMT} - {2090451600 3600 1 IST} - {2108595600 0 0 GMT} - {2121901200 3600 1 IST} - {2140045200 0 0 GMT} - {2153350800 3600 1 IST} - {2172099600 0 0 GMT} - {2184800400 3600 1 IST} - {2203549200 0 0 GMT} - {2216250000 3600 1 IST} - {2234998800 0 0 GMT} - {2248304400 3600 1 IST} - {2266448400 0 0 GMT} - {2279754000 3600 1 IST} - {2297898000 0 0 GMT} - {2311203600 3600 1 IST} - {2329347600 0 0 GMT} - {2342653200 3600 1 IST} - {2361402000 0 0 GMT} - {2374102800 3600 1 IST} - {2392851600 0 0 GMT} - {2405552400 3600 1 IST} - {2424301200 0 0 GMT} - {2437606800 3600 1 IST} - {2455750800 0 0 GMT} - {2469056400 3600 1 IST} - {2487200400 0 0 GMT} - {2500506000 3600 1 IST} - {2519254800 0 0 GMT} - {2531955600 3600 1 IST} - {2550704400 0 0 GMT} - {2563405200 3600 1 IST} - {2582154000 0 0 GMT} - {2595459600 3600 1 IST} - {2613603600 0 0 GMT} - {2626909200 3600 1 IST} - {2645053200 0 0 GMT} - {2658358800 3600 1 IST} - {2676502800 0 0 GMT} - {2689808400 3600 1 IST} - {2708557200 0 0 GMT} - {2721258000 3600 1 IST} - {2740006800 0 0 GMT} - {2752707600 3600 1 IST} - {2771456400 0 0 GMT} - {2784762000 3600 1 IST} - {2802906000 0 0 GMT} - {2816211600 3600 1 IST} - {2834355600 0 0 GMT} - {2847661200 3600 1 IST} - {2866410000 0 0 GMT} - {2879110800 3600 1 IST} - {2897859600 0 0 GMT} - {2910560400 3600 1 IST} - {2929309200 0 0 GMT} - {2942010000 3600 1 IST} - {2960758800 0 0 GMT} - {2974064400 3600 1 IST} - {2992208400 0 0 GMT} - {3005514000 3600 1 IST} - {3023658000 0 0 GMT} - {3036963600 3600 1 IST} - {3055712400 0 0 GMT} - {3068413200 3600 1 IST} - {3087162000 0 0 GMT} - {3099862800 3600 1 IST} - {3118611600 0 0 GMT} - {3131917200 3600 1 IST} - {3150061200 0 0 GMT} - {3163366800 3600 1 IST} - {3181510800 0 0 GMT} - {3194816400 3600 1 IST} - {3212960400 0 0 GMT} - {3226266000 3600 1 IST} - {3245014800 0 0 GMT} - {3257715600 3600 1 IST} - {3276464400 0 0 GMT} - {3289165200 3600 1 IST} - {3307914000 0 0 GMT} - {3321219600 3600 1 IST} - {3339363600 0 0 GMT} - {3352669200 3600 1 IST} - {3370813200 0 0 GMT} - {3384118800 3600 1 IST} - {3402867600 0 0 GMT} - {3415568400 3600 1 IST} - {3434317200 0 0 GMT} - {3447018000 3600 1 IST} - {3465766800 0 0 GMT} - {3479072400 3600 1 IST} - {3497216400 0 0 GMT} - {3510522000 3600 1 IST} - {3528666000 0 0 GMT} - {3541971600 3600 1 IST} - {3560115600 0 0 GMT} - {3573421200 3600 1 IST} - {3592170000 0 0 GMT} - {3604870800 3600 1 IST} - {3623619600 0 0 GMT} - {3636320400 3600 1 IST} - {3655069200 0 0 GMT} - {3668374800 3600 1 IST} - {3686518800 0 0 GMT} - {3699824400 3600 1 IST} - {3717968400 0 0 GMT} - {3731274000 3600 1 IST} - {3750022800 0 0 GMT} - {3762723600 3600 1 IST} - {3781472400 0 0 GMT} - {3794173200 3600 1 IST} - {3812922000 0 0 GMT} - {3825622800 3600 1 IST} - {3844371600 0 0 GMT} - {3857677200 3600 1 IST} - {3875821200 0 0 GMT} - {3889126800 3600 1 IST} - {3907270800 0 0 GMT} - {3920576400 3600 1 IST} - {3939325200 0 0 GMT} - {3952026000 3600 1 IST} - {3970774800 0 0 GMT} - {3983475600 3600 1 IST} - {4002224400 0 0 GMT} - {4015530000 3600 1 IST} - {4033674000 0 0 GMT} - {4046979600 3600 1 IST} - {4065123600 0 0 GMT} - {4078429200 3600 1 IST} - {4096573200 0 0 GMT} + {57722400 0 1 IST} + {69818400 3600 0 IST} + {89172000 0 1 IST} + {101268000 3600 0 IST} + {120621600 0 1 IST} + {132717600 3600 0 IST} + {152071200 0 1 IST} + {164167200 3600 0 IST} + {183520800 0 1 IST} + {196221600 3600 0 IST} + {214970400 0 1 IST} + {227671200 3600 0 IST} + {246420000 0 1 IST} + {259120800 3600 0 IST} + {278474400 0 1 IST} + {290570400 3600 0 IST} + {309924000 0 1 IST} + {322020000 3600 0 IST} + {341373600 0 1 IST} + {354675600 3600 0 IST} + {372819600 0 1 IST} + {386125200 3600 0 IST} + {404269200 0 1 IST} + {417574800 3600 0 IST} + {435718800 0 1 IST} + {449024400 3600 0 IST} + {467773200 0 1 IST} + {481078800 3600 0 IST} + {499222800 0 1 IST} + {512528400 3600 0 IST} + {530672400 0 1 IST} + {543978000 3600 0 IST} + {562122000 0 1 IST} + {575427600 3600 0 IST} + {593571600 0 1 IST} + {606877200 3600 0 IST} + {625626000 0 1 IST} + {638326800 3600 0 IST} + {657075600 0 1 IST} + {670381200 3600 0 IST} + {688525200 0 1 IST} + {701830800 3600 0 IST} + {719974800 0 1 IST} + {733280400 3600 0 IST} + {751424400 0 1 IST} + {764730000 3600 0 IST} + {782874000 0 1 IST} + {796179600 3600 0 IST} + {814323600 0 1 IST} + {828234000 3600 0 IST} + {846378000 0 1 IST} + {859683600 3600 0 IST} + {877827600 0 1 IST} + {891133200 3600 0 IST} + {909277200 0 1 IST} + {922582800 3600 0 IST} + {941331600 0 1 IST} + {954032400 3600 0 IST} + {972781200 0 1 IST} + {985482000 3600 0 IST} + {1004230800 0 1 IST} + {1017536400 3600 0 IST} + {1035680400 0 1 IST} + {1048986000 3600 0 IST} + {1067130000 0 1 IST} + {1080435600 3600 0 IST} + {1099184400 0 1 IST} + {1111885200 3600 0 IST} + {1130634000 0 1 IST} + {1143334800 3600 0 IST} + {1162083600 0 1 IST} + {1174784400 3600 0 IST} + {1193533200 0 1 IST} + {1206838800 3600 0 IST} + {1224982800 0 1 IST} + {1238288400 3600 0 IST} + {1256432400 0 1 IST} + {1269738000 3600 0 IST} + {1288486800 0 1 IST} + {1301187600 3600 0 IST} + {1319936400 0 1 IST} + {1332637200 3600 0 IST} + {1351386000 0 1 IST} + {1364691600 3600 0 IST} + {1382835600 0 1 IST} + {1396141200 3600 0 IST} + {1414285200 0 1 IST} + {1427590800 3600 0 IST} + {1445734800 0 1 IST} + {1459040400 3600 0 IST} + {1477789200 0 1 IST} + {1490490000 3600 0 IST} + {1509238800 0 1 IST} + {1521939600 3600 0 IST} + {1540688400 0 1 IST} + {1553994000 3600 0 IST} + {1572138000 0 1 IST} + {1585443600 3600 0 IST} + {1603587600 0 1 IST} + {1616893200 3600 0 IST} + {1635642000 0 1 IST} + {1648342800 3600 0 IST} + {1667091600 0 1 IST} + {1679792400 3600 0 IST} + {1698541200 0 1 IST} + {1711846800 3600 0 IST} + {1729990800 0 1 IST} + {1743296400 3600 0 IST} + {1761440400 0 1 IST} + {1774746000 3600 0 IST} + {1792890000 0 1 IST} + {1806195600 3600 0 IST} + {1824944400 0 1 IST} + {1837645200 3600 0 IST} + {1856394000 0 1 IST} + {1869094800 3600 0 IST} + {1887843600 0 1 IST} + {1901149200 3600 0 IST} + {1919293200 0 1 IST} + {1932598800 3600 0 IST} + {1950742800 0 1 IST} + {1964048400 3600 0 IST} + {1982797200 0 1 IST} + {1995498000 3600 0 IST} + {2014246800 0 1 IST} + {2026947600 3600 0 IST} + {2045696400 0 1 IST} + {2058397200 3600 0 IST} + {2077146000 0 1 IST} + {2090451600 3600 0 IST} + {2108595600 0 1 IST} + {2121901200 3600 0 IST} + {2140045200 0 1 IST} + {2153350800 3600 0 IST} + {2172099600 0 1 IST} + {2184800400 3600 0 IST} + {2203549200 0 1 IST} + {2216250000 3600 0 IST} + {2234998800 0 1 IST} + {2248304400 3600 0 IST} + {2266448400 0 1 IST} + {2279754000 3600 0 IST} + {2297898000 0 1 IST} + {2311203600 3600 0 IST} + {2329347600 0 1 IST} + {2342653200 3600 0 IST} + {2361402000 0 1 IST} + {2374102800 3600 0 IST} + {2392851600 0 1 IST} + {2405552400 3600 0 IST} + {2424301200 0 1 IST} + {2437606800 3600 0 IST} + {2455750800 0 1 IST} + {2469056400 3600 0 IST} + {2487200400 0 1 IST} + {2500506000 3600 0 IST} + {2519254800 0 1 IST} + {2531955600 3600 0 IST} + {2550704400 0 1 IST} + {2563405200 3600 0 IST} + {2582154000 0 1 IST} + {2595459600 3600 0 IST} + {2613603600 0 1 IST} + {2626909200 3600 0 IST} + {2645053200 0 1 IST} + {2658358800 3600 0 IST} + {2676502800 0 1 IST} + {2689808400 3600 0 IST} + {2708557200 0 1 IST} + {2721258000 3600 0 IST} + {2740006800 0 1 IST} + {2752707600 3600 0 IST} + {2771456400 0 1 IST} + {2784762000 3600 0 IST} + {2802906000 0 1 IST} + {2816211600 3600 0 IST} + {2834355600 0 1 IST} + {2847661200 3600 0 IST} + {2866410000 0 1 IST} + {2879110800 3600 0 IST} + {2897859600 0 1 IST} + {2910560400 3600 0 IST} + {2929309200 0 1 IST} + {2942010000 3600 0 IST} + {2960758800 0 1 IST} + {2974064400 3600 0 IST} + {2992208400 0 1 IST} + {3005514000 3600 0 IST} + {3023658000 0 1 IST} + {3036963600 3600 0 IST} + {3055712400 0 1 IST} + {3068413200 3600 0 IST} + {3087162000 0 1 IST} + {3099862800 3600 0 IST} + {3118611600 0 1 IST} + {3131917200 3600 0 IST} + {3150061200 0 1 IST} + {3163366800 3600 0 IST} + {3181510800 0 1 IST} + {3194816400 3600 0 IST} + {3212960400 0 1 IST} + {3226266000 3600 0 IST} + {3245014800 0 1 IST} + {3257715600 3600 0 IST} + {3276464400 0 1 IST} + {3289165200 3600 0 IST} + {3307914000 0 1 IST} + {3321219600 3600 0 IST} + {3339363600 0 1 IST} + {3352669200 3600 0 IST} + {3370813200 0 1 IST} + {3384118800 3600 0 IST} + {3402867600 0 1 IST} + {3415568400 3600 0 IST} + {3434317200 0 1 IST} + {3447018000 3600 0 IST} + {3465766800 0 1 IST} + {3479072400 3600 0 IST} + {3497216400 0 1 IST} + {3510522000 3600 0 IST} + {3528666000 0 1 IST} + {3541971600 3600 0 IST} + {3560115600 0 1 IST} + {3573421200 3600 0 IST} + {3592170000 0 1 IST} + {3604870800 3600 0 IST} + {3623619600 0 1 IST} + {3636320400 3600 0 IST} + {3655069200 0 1 IST} + {3668374800 3600 0 IST} + {3686518800 0 1 IST} + {3699824400 3600 0 IST} + {3717968400 0 1 IST} + {3731274000 3600 0 IST} + {3750022800 0 1 IST} + {3762723600 3600 0 IST} + {3781472400 0 1 IST} + {3794173200 3600 0 IST} + {3812922000 0 1 IST} + {3825622800 3600 0 IST} + {3844371600 0 1 IST} + {3857677200 3600 0 IST} + {3875821200 0 1 IST} + {3889126800 3600 0 IST} + {3907270800 0 1 IST} + {3920576400 3600 0 IST} + {3939325200 0 1 IST} + {3952026000 3600 0 IST} + {3970774800 0 1 IST} + {3983475600 3600 0 IST} + {4002224400 0 1 IST} + {4015530000 3600 0 IST} + {4033674000 0 1 IST} + {4046979600 3600 0 IST} + {4065123600 0 1 IST} + {4078429200 3600 0 IST} + {4096573200 0 1 IST} } diff --git a/library/tzdata/Europe/Lisbon b/library/tzdata/Europe/Lisbon index 7168f96..b566b51 100644 --- a/library/tzdata/Europe/Lisbon +++ b/library/tzdata/Europe/Lisbon @@ -3,7 +3,7 @@ set TZData(:Europe/Lisbon) { {-9223372036854775808 -2205 0 LMT} {-2713908195 -2205 0 LMT} - {-1830381795 0 0 WET} + {-1830384000 0 0 WET} {-1689555600 3600 1 WEST} {-1677801600 0 0 WET} {-1667437200 3600 1 WEST} diff --git a/library/tzdata/Europe/Prague b/library/tzdata/Europe/Prague index 222b1ae..34df8ed 100644 --- a/library/tzdata/Europe/Prague +++ b/library/tzdata/Europe/Prague @@ -15,11 +15,14 @@ set TZData(:Europe/Prague) { {-844556400 7200 1 CEST} {-828226800 3600 0 CET} {-812502000 7200 1 CEST} - {-798073200 3600 0 CET} - {-780534000 7200 1 CEST} - {-761180400 3600 0 CET} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-777862800 7200 0 CEST} + {-765327600 3600 0 CET} {-746578800 7200 1 CEST} {-733359600 3600 0 CET} + {-728517600 0 1 GMT} + {-721260000 0 0 CET} {-716425200 7200 1 CEST} {-701910000 3600 0 CET} {-684975600 7200 1 CEST} diff --git a/library/tzdata/Indian/Mauritius b/library/tzdata/Indian/Mauritius index 2a7a0b1..4c9a051 100644 --- a/library/tzdata/Indian/Mauritius +++ b/library/tzdata/Indian/Mauritius @@ -3,8 +3,8 @@ set TZData(:Indian/Mauritius) { {-9223372036854775808 13800 0 LMT} {-1988164200 14400 0 +04} - {403041600 18000 1 +05} + {403041600 18000 1 +04} {417034800 14400 0 +04} - {1224972000 18000 1 +05} + {1224972000 18000 1 +04} {1238274000 14400 0 +04} } diff --git a/library/tzdata/Pacific/Apia b/library/tzdata/Pacific/Apia index 4c0d84a..4fc91f4 100644 --- a/library/tzdata/Pacific/Apia +++ b/library/tzdata/Pacific/Apia @@ -4,185 +4,185 @@ set TZData(:Pacific/Apia) { {-9223372036854775808 45184 0 LMT} {-2445424384 -41216 0 LMT} {-1861878784 -41400 0 -1130} - {-631110600 -39600 0 -10} - {1285498800 -36000 1 -10} - {1301752800 -39600 0 -10} - {1316872800 -36000 1 -10} - {1325239200 50400 0 +14} - {1333202400 46800 0 +14} - {1348927200 50400 1 +14} - {1365256800 46800 0 +14} - {1380376800 50400 1 +14} - {1396706400 46800 0 +14} - {1411826400 50400 1 +14} - {1428156000 46800 0 +14} - {1443276000 50400 1 +14} - {1459605600 46800 0 +14} - {1474725600 50400 1 +14} - {1491055200 46800 0 +14} - {1506175200 50400 1 +14} - {1522504800 46800 0 +14} - {1538229600 50400 1 +14} - {1554559200 46800 0 +14} - {1569679200 50400 1 +14} - {1586008800 46800 0 +14} - {1601128800 50400 1 +14} - {1617458400 46800 0 +14} - {1632578400 50400 1 +14} - {1648908000 46800 0 +14} - {1664028000 50400 1 +14} - {1680357600 46800 0 +14} - {1695477600 50400 1 +14} - {1712412000 46800 0 +14} - {1727532000 50400 1 +14} - {1743861600 46800 0 +14} - {1758981600 50400 1 +14} - {1775311200 46800 0 +14} - {1790431200 50400 1 +14} - {1806760800 46800 0 +14} - {1821880800 50400 1 +14} - {1838210400 46800 0 +14} - {1853330400 50400 1 +14} - {1869660000 46800 0 +14} - {1885384800 50400 1 +14} - {1901714400 46800 0 +14} - {1916834400 50400 1 +14} - {1933164000 46800 0 +14} - {1948284000 50400 1 +14} - {1964613600 46800 0 +14} - {1979733600 50400 1 +14} - {1996063200 46800 0 +14} - {2011183200 50400 1 +14} - {2027512800 46800 0 +14} - {2042632800 50400 1 +14} - {2058962400 46800 0 +14} - {2074687200 50400 1 +14} - {2091016800 46800 0 +14} - {2106136800 50400 1 +14} - {2122466400 46800 0 +14} - {2137586400 50400 1 +14} - {2153916000 46800 0 +14} - {2169036000 50400 1 +14} - {2185365600 46800 0 +14} - {2200485600 50400 1 +14} - {2216815200 46800 0 +14} - {2232540000 50400 1 +14} - {2248869600 46800 0 +14} - {2263989600 50400 1 +14} - {2280319200 46800 0 +14} - {2295439200 50400 1 +14} - {2311768800 46800 0 +14} - {2326888800 50400 1 +14} - {2343218400 46800 0 +14} - {2358338400 50400 1 +14} - {2374668000 46800 0 +14} - {2389788000 50400 1 +14} - {2406117600 46800 0 +14} - {2421842400 50400 1 +14} - {2438172000 46800 0 +14} - {2453292000 50400 1 +14} - {2469621600 46800 0 +14} - {2484741600 50400 1 +14} - {2501071200 46800 0 +14} - {2516191200 50400 1 +14} - {2532520800 46800 0 +14} - {2547640800 50400 1 +14} - {2563970400 46800 0 +14} - {2579090400 50400 1 +14} - {2596024800 46800 0 +14} - {2611144800 50400 1 +14} - {2627474400 46800 0 +14} - {2642594400 50400 1 +14} - {2658924000 46800 0 +14} - {2674044000 50400 1 +14} - {2690373600 46800 0 +14} - {2705493600 50400 1 +14} - {2721823200 46800 0 +14} - {2736943200 50400 1 +14} - {2753272800 46800 0 +14} - {2768997600 50400 1 +14} - {2785327200 46800 0 +14} - {2800447200 50400 1 +14} - {2816776800 46800 0 +14} - {2831896800 50400 1 +14} - {2848226400 46800 0 +14} - {2863346400 50400 1 +14} - {2879676000 46800 0 +14} - {2894796000 50400 1 +14} - {2911125600 46800 0 +14} - {2926245600 50400 1 +14} - {2942575200 46800 0 +14} - {2958300000 50400 1 +14} - {2974629600 46800 0 +14} - {2989749600 50400 1 +14} - {3006079200 46800 0 +14} - {3021199200 50400 1 +14} - {3037528800 46800 0 +14} - {3052648800 50400 1 +14} - {3068978400 46800 0 +14} - {3084098400 50400 1 +14} - {3100428000 46800 0 +14} - {3116152800 50400 1 +14} - {3132482400 46800 0 +14} - {3147602400 50400 1 +14} - {3163932000 46800 0 +14} - {3179052000 50400 1 +14} - {3195381600 46800 0 +14} - {3210501600 50400 1 +14} - {3226831200 46800 0 +14} - {3241951200 50400 1 +14} - {3258280800 46800 0 +14} - {3273400800 50400 1 +14} - {3289730400 46800 0 +14} - {3305455200 50400 1 +14} - {3321784800 46800 0 +14} - {3336904800 50400 1 +14} - {3353234400 46800 0 +14} - {3368354400 50400 1 +14} - {3384684000 46800 0 +14} - {3399804000 50400 1 +14} - {3416133600 46800 0 +14} - {3431253600 50400 1 +14} - {3447583200 46800 0 +14} - {3462703200 50400 1 +14} - {3479637600 46800 0 +14} - {3494757600 50400 1 +14} - {3511087200 46800 0 +14} - {3526207200 50400 1 +14} - {3542536800 46800 0 +14} - {3557656800 50400 1 +14} - {3573986400 46800 0 +14} - {3589106400 50400 1 +14} - {3605436000 46800 0 +14} - {3620556000 50400 1 +14} - {3636885600 46800 0 +14} - {3652610400 50400 1 +14} - {3668940000 46800 0 +14} - {3684060000 50400 1 +14} - {3700389600 46800 0 +14} - {3715509600 50400 1 +14} - {3731839200 46800 0 +14} - {3746959200 50400 1 +14} - {3763288800 46800 0 +14} - {3778408800 50400 1 +14} - {3794738400 46800 0 +14} - {3809858400 50400 1 +14} - {3826188000 46800 0 +14} - {3841912800 50400 1 +14} - {3858242400 46800 0 +14} - {3873362400 50400 1 +14} - {3889692000 46800 0 +14} - {3904812000 50400 1 +14} - {3921141600 46800 0 +14} - {3936261600 50400 1 +14} - {3952591200 46800 0 +14} - {3967711200 50400 1 +14} - {3984040800 46800 0 +14} - {3999765600 50400 1 +14} - {4016095200 46800 0 +14} - {4031215200 50400 1 +14} - {4047544800 46800 0 +14} - {4062664800 50400 1 +14} - {4078994400 46800 0 +14} - {4094114400 50400 1 +14} + {-631110600 -39600 0 -11} + {1285498800 -36000 1 -11} + {1301752800 -39600 0 -11} + {1316872800 -36000 1 -11} + {1325239200 50400 0 +13} + {1333202400 46800 0 +13} + {1348927200 50400 1 +13} + {1365256800 46800 0 +13} + {1380376800 50400 1 +13} + {1396706400 46800 0 +13} + {1411826400 50400 1 +13} + {1428156000 46800 0 +13} + {1443276000 50400 1 +13} + {1459605600 46800 0 +13} + {1474725600 50400 1 +13} + {1491055200 46800 0 +13} + {1506175200 50400 1 +13} + {1522504800 46800 0 +13} + {1538229600 50400 1 +13} + {1554559200 46800 0 +13} + {1569679200 50400 1 +13} + {1586008800 46800 0 +13} + {1601128800 50400 1 +13} + {1617458400 46800 0 +13} + {1632578400 50400 1 +13} + {1648908000 46800 0 +13} + {1664028000 50400 1 +13} + {1680357600 46800 0 +13} + {1695477600 50400 1 +13} + {1712412000 46800 0 +13} + {1727532000 50400 1 +13} + {1743861600 46800 0 +13} + {1758981600 50400 1 +13} + {1775311200 46800 0 +13} + {1790431200 50400 1 +13} + {1806760800 46800 0 +13} + {1821880800 50400 1 +13} + {1838210400 46800 0 +13} + {1853330400 50400 1 +13} + {1869660000 46800 0 +13} + {1885384800 50400 1 +13} + {1901714400 46800 0 +13} + {1916834400 50400 1 +13} + {1933164000 46800 0 +13} + {1948284000 50400 1 +13} + {1964613600 46800 0 +13} + {1979733600 50400 1 +13} + {1996063200 46800 0 +13} + {2011183200 50400 1 +13} + {2027512800 46800 0 +13} + {2042632800 50400 1 +13} + {2058962400 46800 0 +13} + {2074687200 50400 1 +13} + {2091016800 46800 0 +13} + {2106136800 50400 1 +13} + {2122466400 46800 0 +13} + {2137586400 50400 1 +13} + {2153916000 46800 0 +13} + {2169036000 50400 1 +13} + {2185365600 46800 0 +13} + {2200485600 50400 1 +13} + {2216815200 46800 0 +13} + {2232540000 50400 1 +13} + {2248869600 46800 0 +13} + {2263989600 50400 1 +13} + {2280319200 46800 0 +13} + {2295439200 50400 1 +13} + {2311768800 46800 0 +13} + {2326888800 50400 1 +13} + {2343218400 46800 0 +13} + {2358338400 50400 1 +13} + {2374668000 46800 0 +13} + {2389788000 50400 1 +13} + {2406117600 46800 0 +13} + {2421842400 50400 1 +13} + {2438172000 46800 0 +13} + {2453292000 50400 1 +13} + {2469621600 46800 0 +13} + {2484741600 50400 1 +13} + {2501071200 46800 0 +13} + {2516191200 50400 1 +13} + {2532520800 46800 0 +13} + {2547640800 50400 1 +13} + {2563970400 46800 0 +13} + {2579090400 50400 1 +13} + {2596024800 46800 0 +13} + {2611144800 50400 1 +13} + {2627474400 46800 0 +13} + {2642594400 50400 1 +13} + {2658924000 46800 0 +13} + {2674044000 50400 1 +13} + {2690373600 46800 0 +13} + {2705493600 50400 1 +13} + {2721823200 46800 0 +13} + {2736943200 50400 1 +13} + {2753272800 46800 0 +13} + {2768997600 50400 1 +13} + {2785327200 46800 0 +13} + {2800447200 50400 1 +13} + {2816776800 46800 0 +13} + {2831896800 50400 1 +13} + {2848226400 46800 0 +13} + {2863346400 50400 1 +13} + {2879676000 46800 0 +13} + {2894796000 50400 1 +13} + {2911125600 46800 0 +13} + {2926245600 50400 1 +13} + {2942575200 46800 0 +13} + {2958300000 50400 1 +13} + {2974629600 46800 0 +13} + {2989749600 50400 1 +13} + {3006079200 46800 0 +13} + {3021199200 50400 1 +13} + {3037528800 46800 0 +13} + {3052648800 50400 1 +13} + {3068978400 46800 0 +13} + {3084098400 50400 1 +13} + {3100428000 46800 0 +13} + {3116152800 50400 1 +13} + {3132482400 46800 0 +13} + {3147602400 50400 1 +13} + {3163932000 46800 0 +13} + {3179052000 50400 1 +13} + {3195381600 46800 0 +13} + {3210501600 50400 1 +13} + {3226831200 46800 0 +13} + {3241951200 50400 1 +13} + {3258280800 46800 0 +13} + {3273400800 50400 1 +13} + {3289730400 46800 0 +13} + {3305455200 50400 1 +13} + {3321784800 46800 0 +13} + {3336904800 50400 1 +13} + {3353234400 46800 0 +13} + {3368354400 50400 1 +13} + {3384684000 46800 0 +13} + {3399804000 50400 1 +13} + {3416133600 46800 0 +13} + {3431253600 50400 1 +13} + {3447583200 46800 0 +13} + {3462703200 50400 1 +13} + {3479637600 46800 0 +13} + {3494757600 50400 1 +13} + {3511087200 46800 0 +13} + {3526207200 50400 1 +13} + {3542536800 46800 0 +13} + {3557656800 50400 1 +13} + {3573986400 46800 0 +13} + {3589106400 50400 1 +13} + {3605436000 46800 0 +13} + {3620556000 50400 1 +13} + {3636885600 46800 0 +13} + {3652610400 50400 1 +13} + {3668940000 46800 0 +13} + {3684060000 50400 1 +13} + {3700389600 46800 0 +13} + {3715509600 50400 1 +13} + {3731839200 46800 0 +13} + {3746959200 50400 1 +13} + {3763288800 46800 0 +13} + {3778408800 50400 1 +13} + {3794738400 46800 0 +13} + {3809858400 50400 1 +13} + {3826188000 46800 0 +13} + {3841912800 50400 1 +13} + {3858242400 46800 0 +13} + {3873362400 50400 1 +13} + {3889692000 46800 0 +13} + {3904812000 50400 1 +13} + {3921141600 46800 0 +13} + {3936261600 50400 1 +13} + {3952591200 46800 0 +13} + {3967711200 50400 1 +13} + {3984040800 46800 0 +13} + {3999765600 50400 1 +13} + {4016095200 46800 0 +13} + {4031215200 50400 1 +13} + {4047544800 46800 0 +13} + {4062664800 50400 1 +13} + {4078994400 46800 0 +13} + {4094114400 50400 1 +13} } diff --git a/library/tzdata/Pacific/Chatham b/library/tzdata/Pacific/Chatham index 5d39879..6c1ab19 100644 --- a/library/tzdata/Pacific/Chatham +++ b/library/tzdata/Pacific/Chatham @@ -3,256 +3,256 @@ set TZData(:Pacific/Chatham) { {-9223372036854775808 44028 0 LMT} {-3192437628 44100 0 +1215} - {-757426500 45900 0 +1345} - {152632800 49500 1 +1345} - {162309600 45900 0 +1345} - {183477600 49500 1 +1345} - {194968800 45900 0 +1345} - {215532000 49500 1 +1345} - {226418400 45900 0 +1345} - {246981600 49500 1 +1345} - {257868000 45900 0 +1345} - {278431200 49500 1 +1345} - {289317600 45900 0 +1345} - {309880800 49500 1 +1345} - {320767200 45900 0 +1345} - {341330400 49500 1 +1345} - {352216800 45900 0 +1345} - {372780000 49500 1 +1345} - {384271200 45900 0 +1345} - {404834400 49500 1 +1345} - {415720800 45900 0 +1345} - {436284000 49500 1 +1345} - {447170400 45900 0 +1345} - {467733600 49500 1 +1345} - {478620000 45900 0 +1345} - {499183200 49500 1 +1345} - {510069600 45900 0 +1345} - {530632800 49500 1 +1345} - {541519200 45900 0 +1345} - {562082400 49500 1 +1345} - {573573600 45900 0 +1345} - {594136800 49500 1 +1345} - {605023200 45900 0 +1345} - {623772000 49500 1 +1345} - {637682400 45900 0 +1345} - {655221600 49500 1 +1345} - {669132000 45900 0 +1345} - {686671200 49500 1 +1345} - {700581600 45900 0 +1345} - {718120800 49500 1 +1345} - {732636000 45900 0 +1345} - {749570400 49500 1 +1345} - {764085600 45900 0 +1345} - {781020000 49500 1 +1345} - {795535200 45900 0 +1345} - {812469600 49500 1 +1345} - {826984800 45900 0 +1345} - {844524000 49500 1 +1345} - {858434400 45900 0 +1345} - {875973600 49500 1 +1345} - {889884000 45900 0 +1345} - {907423200 49500 1 +1345} - {921938400 45900 0 +1345} - {938872800 49500 1 +1345} - {953388000 45900 0 +1345} - {970322400 49500 1 +1345} - {984837600 45900 0 +1345} - {1002376800 49500 1 +1345} - {1016287200 45900 0 +1345} - {1033826400 49500 1 +1345} - {1047736800 45900 0 +1345} - {1065276000 49500 1 +1345} - {1079791200 45900 0 +1345} - {1096725600 49500 1 +1345} - {1111240800 45900 0 +1345} - {1128175200 49500 1 +1345} - {1142690400 45900 0 +1345} - {1159624800 49500 1 +1345} - {1174140000 45900 0 +1345} - {1191074400 49500 1 +1345} - {1207404000 45900 0 +1345} - {1222524000 49500 1 +1345} - {1238853600 45900 0 +1345} - {1253973600 49500 1 +1345} - {1270303200 45900 0 +1345} - {1285423200 49500 1 +1345} - {1301752800 45900 0 +1345} - {1316872800 49500 1 +1345} - {1333202400 45900 0 +1345} - {1348927200 49500 1 +1345} - {1365256800 45900 0 +1345} - {1380376800 49500 1 +1345} - {1396706400 45900 0 +1345} - {1411826400 49500 1 +1345} - {1428156000 45900 0 +1345} - {1443276000 49500 1 +1345} - {1459605600 45900 0 +1345} - {1474725600 49500 1 +1345} - {1491055200 45900 0 +1345} - {1506175200 49500 1 +1345} - {1522504800 45900 0 +1345} - {1538229600 49500 1 +1345} - {1554559200 45900 0 +1345} - {1569679200 49500 1 +1345} - {1586008800 45900 0 +1345} - {1601128800 49500 1 +1345} - {1617458400 45900 0 +1345} - {1632578400 49500 1 +1345} - {1648908000 45900 0 +1345} - {1664028000 49500 1 +1345} - {1680357600 45900 0 +1345} - {1695477600 49500 1 +1345} - {1712412000 45900 0 +1345} - {1727532000 49500 1 +1345} - {1743861600 45900 0 +1345} - {1758981600 49500 1 +1345} - {1775311200 45900 0 +1345} - {1790431200 49500 1 +1345} - {1806760800 45900 0 +1345} - {1821880800 49500 1 +1345} - {1838210400 45900 0 +1345} - {1853330400 49500 1 +1345} - {1869660000 45900 0 +1345} - {1885384800 49500 1 +1345} - {1901714400 45900 0 +1345} - {1916834400 49500 1 +1345} - {1933164000 45900 0 +1345} - {1948284000 49500 1 +1345} - {1964613600 45900 0 +1345} - {1979733600 49500 1 +1345} - {1996063200 45900 0 +1345} - {2011183200 49500 1 +1345} - {2027512800 45900 0 +1345} - {2042632800 49500 1 +1345} - {2058962400 45900 0 +1345} - {2074687200 49500 1 +1345} - {2091016800 45900 0 +1345} - {2106136800 49500 1 +1345} - {2122466400 45900 0 +1345} - {2137586400 49500 1 +1345} - {2153916000 45900 0 +1345} - {2169036000 49500 1 +1345} - {2185365600 45900 0 +1345} - {2200485600 49500 1 +1345} - {2216815200 45900 0 +1345} - {2232540000 49500 1 +1345} - {2248869600 45900 0 +1345} - {2263989600 49500 1 +1345} - {2280319200 45900 0 +1345} - {2295439200 49500 1 +1345} - {2311768800 45900 0 +1345} - {2326888800 49500 1 +1345} - {2343218400 45900 0 +1345} - {2358338400 49500 1 +1345} - {2374668000 45900 0 +1345} - {2389788000 49500 1 +1345} - {2406117600 45900 0 +1345} - {2421842400 49500 1 +1345} - {2438172000 45900 0 +1345} - {2453292000 49500 1 +1345} - {2469621600 45900 0 +1345} - {2484741600 49500 1 +1345} - {2501071200 45900 0 +1345} - {2516191200 49500 1 +1345} - {2532520800 45900 0 +1345} - {2547640800 49500 1 +1345} - {2563970400 45900 0 +1345} - {2579090400 49500 1 +1345} - {2596024800 45900 0 +1345} - {2611144800 49500 1 +1345} - {2627474400 45900 0 +1345} - {2642594400 49500 1 +1345} - {2658924000 45900 0 +1345} - {2674044000 49500 1 +1345} - {2690373600 45900 0 +1345} - {2705493600 49500 1 +1345} - {2721823200 45900 0 +1345} - {2736943200 49500 1 +1345} - {2753272800 45900 0 +1345} - {2768997600 49500 1 +1345} - {2785327200 45900 0 +1345} - {2800447200 49500 1 +1345} - {2816776800 45900 0 +1345} - {2831896800 49500 1 +1345} - {2848226400 45900 0 +1345} - {2863346400 49500 1 +1345} - {2879676000 45900 0 +1345} - {2894796000 49500 1 +1345} - {2911125600 45900 0 +1345} - {2926245600 49500 1 +1345} - {2942575200 45900 0 +1345} - {2958300000 49500 1 +1345} - {2974629600 45900 0 +1345} - {2989749600 49500 1 +1345} - {3006079200 45900 0 +1345} - {3021199200 49500 1 +1345} - {3037528800 45900 0 +1345} - {3052648800 49500 1 +1345} - {3068978400 45900 0 +1345} - {3084098400 49500 1 +1345} - {3100428000 45900 0 +1345} - {3116152800 49500 1 +1345} - {3132482400 45900 0 +1345} - {3147602400 49500 1 +1345} - {3163932000 45900 0 +1345} - {3179052000 49500 1 +1345} - {3195381600 45900 0 +1345} - {3210501600 49500 1 +1345} - {3226831200 45900 0 +1345} - {3241951200 49500 1 +1345} - {3258280800 45900 0 +1345} - {3273400800 49500 1 +1345} - {3289730400 45900 0 +1345} - {3305455200 49500 1 +1345} - {3321784800 45900 0 +1345} - {3336904800 49500 1 +1345} - {3353234400 45900 0 +1345} - {3368354400 49500 1 +1345} - {3384684000 45900 0 +1345} - {3399804000 49500 1 +1345} - {3416133600 45900 0 +1345} - {3431253600 49500 1 +1345} - {3447583200 45900 0 +1345} - {3462703200 49500 1 +1345} - {3479637600 45900 0 +1345} - {3494757600 49500 1 +1345} - {3511087200 45900 0 +1345} - {3526207200 49500 1 +1345} - {3542536800 45900 0 +1345} - {3557656800 49500 1 +1345} - {3573986400 45900 0 +1345} - {3589106400 49500 1 +1345} - {3605436000 45900 0 +1345} - {3620556000 49500 1 +1345} - {3636885600 45900 0 +1345} - {3652610400 49500 1 +1345} - {3668940000 45900 0 +1345} - {3684060000 49500 1 +1345} - {3700389600 45900 0 +1345} - {3715509600 49500 1 +1345} - {3731839200 45900 0 +1345} - {3746959200 49500 1 +1345} - {3763288800 45900 0 +1345} - {3778408800 49500 1 +1345} - {3794738400 45900 0 +1345} - {3809858400 49500 1 +1345} - {3826188000 45900 0 +1345} - {3841912800 49500 1 +1345} - {3858242400 45900 0 +1345} - {3873362400 49500 1 +1345} - {3889692000 45900 0 +1345} - {3904812000 49500 1 +1345} - {3921141600 45900 0 +1345} - {3936261600 49500 1 +1345} - {3952591200 45900 0 +1345} - {3967711200 49500 1 +1345} - {3984040800 45900 0 +1345} - {3999765600 49500 1 +1345} - {4016095200 45900 0 +1345} - {4031215200 49500 1 +1345} - {4047544800 45900 0 +1345} - {4062664800 49500 1 +1345} - {4078994400 45900 0 +1345} - {4094114400 49500 1 +1345} + {-757426500 45900 0 +1245} + {152632800 49500 1 +1245} + {162309600 45900 0 +1245} + {183477600 49500 1 +1245} + {194968800 45900 0 +1245} + {215532000 49500 1 +1245} + {226418400 45900 0 +1245} + {246981600 49500 1 +1245} + {257868000 45900 0 +1245} + {278431200 49500 1 +1245} + {289317600 45900 0 +1245} + {309880800 49500 1 +1245} + {320767200 45900 0 +1245} + {341330400 49500 1 +1245} + {352216800 45900 0 +1245} + {372780000 49500 1 +1245} + {384271200 45900 0 +1245} + {404834400 49500 1 +1245} + {415720800 45900 0 +1245} + {436284000 49500 1 +1245} + {447170400 45900 0 +1245} + {467733600 49500 1 +1245} + {478620000 45900 0 +1245} + {499183200 49500 1 +1245} + {510069600 45900 0 +1245} + {530632800 49500 1 +1245} + {541519200 45900 0 +1245} + {562082400 49500 1 +1245} + {573573600 45900 0 +1245} + {594136800 49500 1 +1245} + {605023200 45900 0 +1245} + {623772000 49500 1 +1245} + {637682400 45900 0 +1245} + {655221600 49500 1 +1245} + {669132000 45900 0 +1245} + {686671200 49500 1 +1245} + {700581600 45900 0 +1245} + {718120800 49500 1 +1245} + {732636000 45900 0 +1245} + {749570400 49500 1 +1245} + {764085600 45900 0 +1245} + {781020000 49500 1 +1245} + {795535200 45900 0 +1245} + {812469600 49500 1 +1245} + {826984800 45900 0 +1245} + {844524000 49500 1 +1245} + {858434400 45900 0 +1245} + {875973600 49500 1 +1245} + {889884000 45900 0 +1245} + {907423200 49500 1 +1245} + {921938400 45900 0 +1245} + {938872800 49500 1 +1245} + {953388000 45900 0 +1245} + {970322400 49500 1 +1245} + {984837600 45900 0 +1245} + {1002376800 49500 1 +1245} + {1016287200 45900 0 +1245} + {1033826400 49500 1 +1245} + {1047736800 45900 0 +1245} + {1065276000 49500 1 +1245} + {1079791200 45900 0 +1245} + {1096725600 49500 1 +1245} + {1111240800 45900 0 +1245} + {1128175200 49500 1 +1245} + {1142690400 45900 0 +1245} + {1159624800 49500 1 +1245} + {1174140000 45900 0 +1245} + {1191074400 49500 1 +1245} + {1207404000 45900 0 +1245} + {1222524000 49500 1 +1245} + {1238853600 45900 0 +1245} + {1253973600 49500 1 +1245} + {1270303200 45900 0 +1245} + {1285423200 49500 1 +1245} + {1301752800 45900 0 +1245} + {1316872800 49500 1 +1245} + {1333202400 45900 0 +1245} + {1348927200 49500 1 +1245} + {1365256800 45900 0 +1245} + {1380376800 49500 1 +1245} + {1396706400 45900 0 +1245} + {1411826400 49500 1 +1245} + {1428156000 45900 0 +1245} + {1443276000 49500 1 +1245} + {1459605600 45900 0 +1245} + {1474725600 49500 1 +1245} + {1491055200 45900 0 +1245} + {1506175200 49500 1 +1245} + {1522504800 45900 0 +1245} + {1538229600 49500 1 +1245} + {1554559200 45900 0 +1245} + {1569679200 49500 1 +1245} + {1586008800 45900 0 +1245} + {1601128800 49500 1 +1245} + {1617458400 45900 0 +1245} + {1632578400 49500 1 +1245} + {1648908000 45900 0 +1245} + {1664028000 49500 1 +1245} + {1680357600 45900 0 +1245} + {1695477600 49500 1 +1245} + {1712412000 45900 0 +1245} + {1727532000 49500 1 +1245} + {1743861600 45900 0 +1245} + {1758981600 49500 1 +1245} + {1775311200 45900 0 +1245} + {1790431200 49500 1 +1245} + {1806760800 45900 0 +1245} + {1821880800 49500 1 +1245} + {1838210400 45900 0 +1245} + {1853330400 49500 1 +1245} + {1869660000 45900 0 +1245} + {1885384800 49500 1 +1245} + {1901714400 45900 0 +1245} + {1916834400 49500 1 +1245} + {1933164000 45900 0 +1245} + {1948284000 49500 1 +1245} + {1964613600 45900 0 +1245} + {1979733600 49500 1 +1245} + {1996063200 45900 0 +1245} + {2011183200 49500 1 +1245} + {2027512800 45900 0 +1245} + {2042632800 49500 1 +1245} + {2058962400 45900 0 +1245} + {2074687200 49500 1 +1245} + {2091016800 45900 0 +1245} + {2106136800 49500 1 +1245} + {2122466400 45900 0 +1245} + {2137586400 49500 1 +1245} + {2153916000 45900 0 +1245} + {2169036000 49500 1 +1245} + {2185365600 45900 0 +1245} + {2200485600 49500 1 +1245} + {2216815200 45900 0 +1245} + {2232540000 49500 1 +1245} + {2248869600 45900 0 +1245} + {2263989600 49500 1 +1245} + {2280319200 45900 0 +1245} + {2295439200 49500 1 +1245} + {2311768800 45900 0 +1245} + {2326888800 49500 1 +1245} + {2343218400 45900 0 +1245} + {2358338400 49500 1 +1245} + {2374668000 45900 0 +1245} + {2389788000 49500 1 +1245} + {2406117600 45900 0 +1245} + {2421842400 49500 1 +1245} + {2438172000 45900 0 +1245} + {2453292000 49500 1 +1245} + {2469621600 45900 0 +1245} + {2484741600 49500 1 +1245} + {2501071200 45900 0 +1245} + {2516191200 49500 1 +1245} + {2532520800 45900 0 +1245} + {2547640800 49500 1 +1245} + {2563970400 45900 0 +1245} + {2579090400 49500 1 +1245} + {2596024800 45900 0 +1245} + {2611144800 49500 1 +1245} + {2627474400 45900 0 +1245} + {2642594400 49500 1 +1245} + {2658924000 45900 0 +1245} + {2674044000 49500 1 +1245} + {2690373600 45900 0 +1245} + {2705493600 49500 1 +1245} + {2721823200 45900 0 +1245} + {2736943200 49500 1 +1245} + {2753272800 45900 0 +1245} + {2768997600 49500 1 +1245} + {2785327200 45900 0 +1245} + {2800447200 49500 1 +1245} + {2816776800 45900 0 +1245} + {2831896800 49500 1 +1245} + {2848226400 45900 0 +1245} + {2863346400 49500 1 +1245} + {2879676000 45900 0 +1245} + {2894796000 49500 1 +1245} + {2911125600 45900 0 +1245} + {2926245600 49500 1 +1245} + {2942575200 45900 0 +1245} + {2958300000 49500 1 +1245} + {2974629600 45900 0 +1245} + {2989749600 49500 1 +1245} + {3006079200 45900 0 +1245} + {3021199200 49500 1 +1245} + {3037528800 45900 0 +1245} + {3052648800 49500 1 +1245} + {3068978400 45900 0 +1245} + {3084098400 49500 1 +1245} + {3100428000 45900 0 +1245} + {3116152800 49500 1 +1245} + {3132482400 45900 0 +1245} + {3147602400 49500 1 +1245} + {3163932000 45900 0 +1245} + {3179052000 49500 1 +1245} + {3195381600 45900 0 +1245} + {3210501600 49500 1 +1245} + {3226831200 45900 0 +1245} + {3241951200 49500 1 +1245} + {3258280800 45900 0 +1245} + {3273400800 49500 1 +1245} + {3289730400 45900 0 +1245} + {3305455200 49500 1 +1245} + {3321784800 45900 0 +1245} + {3336904800 49500 1 +1245} + {3353234400 45900 0 +1245} + {3368354400 49500 1 +1245} + {3384684000 45900 0 +1245} + {3399804000 49500 1 +1245} + {3416133600 45900 0 +1245} + {3431253600 49500 1 +1245} + {3447583200 45900 0 +1245} + {3462703200 49500 1 +1245} + {3479637600 45900 0 +1245} + {3494757600 49500 1 +1245} + {3511087200 45900 0 +1245} + {3526207200 49500 1 +1245} + {3542536800 45900 0 +1245} + {3557656800 49500 1 +1245} + {3573986400 45900 0 +1245} + {3589106400 49500 1 +1245} + {3605436000 45900 0 +1245} + {3620556000 49500 1 +1245} + {3636885600 45900 0 +1245} + {3652610400 49500 1 +1245} + {3668940000 45900 0 +1245} + {3684060000 49500 1 +1245} + {3700389600 45900 0 +1245} + {3715509600 49500 1 +1245} + {3731839200 45900 0 +1245} + {3746959200 49500 1 +1245} + {3763288800 45900 0 +1245} + {3778408800 49500 1 +1245} + {3794738400 45900 0 +1245} + {3809858400 49500 1 +1245} + {3826188000 45900 0 +1245} + {3841912800 49500 1 +1245} + {3858242400 45900 0 +1245} + {3873362400 49500 1 +1245} + {3889692000 45900 0 +1245} + {3904812000 49500 1 +1245} + {3921141600 45900 0 +1245} + {3936261600 49500 1 +1245} + {3952591200 45900 0 +1245} + {3967711200 49500 1 +1245} + {3984040800 45900 0 +1245} + {3999765600 49500 1 +1245} + {4016095200 45900 0 +1245} + {4031215200 49500 1 +1245} + {4047544800 45900 0 +1245} + {4062664800 49500 1 +1245} + {4078994400 45900 0 +1245} + {4094114400 49500 1 +1245} } diff --git a/library/tzdata/Pacific/Easter b/library/tzdata/Pacific/Easter index 474a32b..a087cd0 100644 --- a/library/tzdata/Pacific/Easter +++ b/library/tzdata/Pacific/Easter @@ -4,265 +4,265 @@ set TZData(:Pacific/Easter) { {-9223372036854775808 -26248 0 LMT} {-2524495352 -26248 0 EMT} {-1178124152 -25200 0 -07} - {-36619200 -21600 1 -06} + {-36619200 -21600 1 -07} {-23922000 -25200 0 -07} - {-3355200 -21600 1 -06} + {-3355200 -21600 1 -07} {7527600 -25200 0 -07} - {24465600 -21600 1 -06} + {24465600 -21600 1 -07} {37767600 -25200 0 -07} - {55915200 -21600 1 -06} + {55915200 -21600 1 -07} {69217200 -25200 0 -07} - {87969600 -21600 1 -06} + {87969600 -21600 1 -07} {100666800 -25200 0 -07} - {118209600 -21600 1 -06} + {118209600 -21600 1 -07} {132116400 -25200 0 -07} - {150868800 -21600 1 -06} + {150868800 -21600 1 -07} {163566000 -25200 0 -07} - {182318400 -21600 1 -06} + {182318400 -21600 1 -07} {195620400 -25200 0 -07} - {213768000 -21600 1 -06} + {213768000 -21600 1 -07} {227070000 -25200 0 -07} - {245217600 -21600 1 -06} + {245217600 -21600 1 -07} {258519600 -25200 0 -07} - {277272000 -21600 1 -06} + {277272000 -21600 1 -07} {289969200 -25200 0 -07} - {308721600 -21600 1 -06} + {308721600 -21600 1 -07} {321418800 -25200 0 -07} - {340171200 -21600 1 -06} + {340171200 -21600 1 -07} {353473200 -25200 0 -07} - {371620800 -21600 1 -06} + {371620800 -21600 1 -07} {384922800 -21600 0 -06} - {403070400 -18000 1 -05} + {403070400 -18000 1 -06} {416372400 -21600 0 -06} - {434520000 -18000 1 -05} + {434520000 -18000 1 -06} {447822000 -21600 0 -06} - {466574400 -18000 1 -05} + {466574400 -18000 1 -06} {479271600 -21600 0 -06} - {498024000 -18000 1 -05} + {498024000 -18000 1 -06} {510721200 -21600 0 -06} - {529473600 -18000 1 -05} + {529473600 -18000 1 -06} {545194800 -21600 0 -06} - {560923200 -18000 1 -05} + {560923200 -18000 1 -06} {574225200 -21600 0 -06} - {592372800 -18000 1 -05} + {592372800 -18000 1 -06} {605674800 -21600 0 -06} - {624427200 -18000 1 -05} + {624427200 -18000 1 -06} {637124400 -21600 0 -06} - {653457600 -18000 1 -05} + {653457600 -18000 1 -06} {668574000 -21600 0 -06} - {687326400 -18000 1 -05} + {687326400 -18000 1 -06} {700628400 -21600 0 -06} - {718776000 -18000 1 -05} + {718776000 -18000 1 -06} {732078000 -21600 0 -06} - {750225600 -18000 1 -05} + {750225600 -18000 1 -06} {763527600 -21600 0 -06} - {781675200 -18000 1 -05} + {781675200 -18000 1 -06} {794977200 -21600 0 -06} - {813729600 -18000 1 -05} + {813729600 -18000 1 -06} {826426800 -21600 0 -06} - {845179200 -18000 1 -05} + {845179200 -18000 1 -06} {859690800 -21600 0 -06} - {876628800 -18000 1 -05} + {876628800 -18000 1 -06} {889930800 -21600 0 -06} - {906868800 -18000 1 -05} + {906868800 -18000 1 -06} {923194800 -21600 0 -06} - {939528000 -18000 1 -05} + {939528000 -18000 1 -06} {952830000 -21600 0 -06} - {971582400 -18000 1 -05} + {971582400 -18000 1 -06} {984279600 -21600 0 -06} - {1003032000 -18000 1 -05} + {1003032000 -18000 1 -06} {1015729200 -21600 0 -06} - {1034481600 -18000 1 -05} + {1034481600 -18000 1 -06} {1047178800 -21600 0 -06} - {1065931200 -18000 1 -05} + {1065931200 -18000 1 -06} {1079233200 -21600 0 -06} - {1097380800 -18000 1 -05} + {1097380800 -18000 1 -06} {1110682800 -21600 0 -06} - {1128830400 -18000 1 -05} + {1128830400 -18000 1 -06} {1142132400 -21600 0 -06} - {1160884800 -18000 1 -05} + {1160884800 -18000 1 -06} {1173582000 -21600 0 -06} - {1192334400 -18000 1 -05} + {1192334400 -18000 1 -06} {1206846000 -21600 0 -06} - {1223784000 -18000 1 -05} + {1223784000 -18000 1 -06} {1237086000 -21600 0 -06} - {1255233600 -18000 1 -05} + {1255233600 -18000 1 -06} {1270350000 -21600 0 -06} - {1286683200 -18000 1 -05} + {1286683200 -18000 1 -06} {1304823600 -21600 0 -06} - {1313899200 -18000 1 -05} + {1313899200 -18000 1 -06} {1335668400 -21600 0 -06} - {1346558400 -18000 1 -05} + {1346558400 -18000 1 -06} {1367118000 -21600 0 -06} - {1378612800 -18000 1 -05} + {1378612800 -18000 1 -06} {1398567600 -21600 0 -06} - {1410062400 -18000 1 -05} + {1410062400 -18000 1 -06} {1463281200 -21600 0 -06} - {1471147200 -18000 1 -05} + {1471147200 -18000 1 -06} {1494730800 -21600 0 -06} - {1502596800 -18000 1 -05} + {1502596800 -18000 1 -06} {1526180400 -21600 0 -06} - {1534046400 -18000 1 -05} + {1534046400 -18000 1 -06} {1557630000 -21600 0 -06} - {1565496000 -18000 1 -05} + {1565496000 -18000 1 -06} {1589079600 -21600 0 -06} - {1596945600 -18000 1 -05} + {1596945600 -18000 1 -06} {1620529200 -21600 0 -06} - {1629000000 -18000 1 -05} + {1629000000 -18000 1 -06} {1652583600 -21600 0 -06} - {1660449600 -18000 1 -05} + {1660449600 -18000 1 -06} {1684033200 -21600 0 -06} - {1691899200 -18000 1 -05} + {1691899200 -18000 1 -06} {1715482800 -21600 0 -06} - {1723348800 -18000 1 -05} + {1723348800 -18000 1 -06} {1746932400 -21600 0 -06} - {1754798400 -18000 1 -05} + {1754798400 -18000 1 -06} {1778382000 -21600 0 -06} - {1786248000 -18000 1 -05} + {1786248000 -18000 1 -06} {1809831600 -21600 0 -06} - {1818302400 -18000 1 -05} + {1818302400 -18000 1 -06} {1841886000 -21600 0 -06} - {1849752000 -18000 1 -05} + {1849752000 -18000 1 -06} {1873335600 -21600 0 -06} - {1881201600 -18000 1 -05} + {1881201600 -18000 1 -06} {1904785200 -21600 0 -06} - {1912651200 -18000 1 -05} + {1912651200 -18000 1 -06} {1936234800 -21600 0 -06} - {1944100800 -18000 1 -05} + {1944100800 -18000 1 -06} {1967684400 -21600 0 -06} - {1976155200 -18000 1 -05} + {1976155200 -18000 1 -06} {1999738800 -21600 0 -06} - {2007604800 -18000 1 -05} + {2007604800 -18000 1 -06} {2031188400 -21600 0 -06} - {2039054400 -18000 1 -05} + {2039054400 -18000 1 -06} {2062638000 -21600 0 -06} - {2070504000 -18000 1 -05} + {2070504000 -18000 1 -06} {2094087600 -21600 0 -06} - {2101953600 -18000 1 -05} + {2101953600 -18000 1 -06} {2125537200 -21600 0 -06} - {2133403200 -18000 1 -05} + {2133403200 -18000 1 -06} {2156986800 -21600 0 -06} - {2165457600 -18000 1 -05} + {2165457600 -18000 1 -06} {2189041200 -21600 0 -06} - {2196907200 -18000 1 -05} + {2196907200 -18000 1 -06} {2220490800 -21600 0 -06} - {2228356800 -18000 1 -05} + {2228356800 -18000 1 -06} {2251940400 -21600 0 -06} - {2259806400 -18000 1 -05} + {2259806400 -18000 1 -06} {2283390000 -21600 0 -06} - {2291256000 -18000 1 -05} + {2291256000 -18000 1 -06} {2314839600 -21600 0 -06} - {2322705600 -18000 1 -05} + {2322705600 -18000 1 -06} {2346894000 -21600 0 -06} - {2354760000 -18000 1 -05} + {2354760000 -18000 1 -06} {2378343600 -21600 0 -06} - {2386209600 -18000 1 -05} + {2386209600 -18000 1 -06} {2409793200 -21600 0 -06} - {2417659200 -18000 1 -05} + {2417659200 -18000 1 -06} {2441242800 -21600 0 -06} - {2449108800 -18000 1 -05} + {2449108800 -18000 1 -06} {2472692400 -21600 0 -06} - {2480558400 -18000 1 -05} + {2480558400 -18000 1 -06} {2504142000 -21600 0 -06} - {2512612800 -18000 1 -05} + {2512612800 -18000 1 -06} {2536196400 -21600 0 -06} - {2544062400 -18000 1 -05} + {2544062400 -18000 1 -06} {2567646000 -21600 0 -06} - {2575512000 -18000 1 -05} + {2575512000 -18000 1 -06} {2599095600 -21600 0 -06} - {2606961600 -18000 1 -05} + {2606961600 -18000 1 -06} {2630545200 -21600 0 -06} - {2638411200 -18000 1 -05} + {2638411200 -18000 1 -06} {2661994800 -21600 0 -06} - {2669860800 -18000 1 -05} + {2669860800 -18000 1 -06} {2693444400 -21600 0 -06} - {2701915200 -18000 1 -05} + {2701915200 -18000 1 -06} {2725498800 -21600 0 -06} - {2733364800 -18000 1 -05} + {2733364800 -18000 1 -06} {2756948400 -21600 0 -06} - {2764814400 -18000 1 -05} + {2764814400 -18000 1 -06} {2788398000 -21600 0 -06} - {2796264000 -18000 1 -05} + {2796264000 -18000 1 -06} {2819847600 -21600 0 -06} - {2827713600 -18000 1 -05} + {2827713600 -18000 1 -06} {2851297200 -21600 0 -06} - {2859768000 -18000 1 -05} + {2859768000 -18000 1 -06} {2883351600 -21600 0 -06} - {2891217600 -18000 1 -05} + {2891217600 -18000 1 -06} {2914801200 -21600 0 -06} - {2922667200 -18000 1 -05} + {2922667200 -18000 1 -06} {2946250800 -21600 0 -06} - {2954116800 -18000 1 -05} + {2954116800 -18000 1 -06} {2977700400 -21600 0 -06} - {2985566400 -18000 1 -05} + {2985566400 -18000 1 -06} {3009150000 -21600 0 -06} - {3017016000 -18000 1 -05} + {3017016000 -18000 1 -06} {3040599600 -21600 0 -06} - {3049070400 -18000 1 -05} + {3049070400 -18000 1 -06} {3072654000 -21600 0 -06} - {3080520000 -18000 1 -05} + {3080520000 -18000 1 -06} {3104103600 -21600 0 -06} - {3111969600 -18000 1 -05} + {3111969600 -18000 1 -06} {3135553200 -21600 0 -06} - {3143419200 -18000 1 -05} + {3143419200 -18000 1 -06} {3167002800 -21600 0 -06} - {3174868800 -18000 1 -05} + {3174868800 -18000 1 -06} {3198452400 -21600 0 -06} - {3206318400 -18000 1 -05} + {3206318400 -18000 1 -06} {3230506800 -21600 0 -06} - {3238372800 -18000 1 -05} + {3238372800 -18000 1 -06} {3261956400 -21600 0 -06} - {3269822400 -18000 1 -05} + {3269822400 -18000 1 -06} {3293406000 -21600 0 -06} - {3301272000 -18000 1 -05} + {3301272000 -18000 1 -06} {3324855600 -21600 0 -06} - {3332721600 -18000 1 -05} + {3332721600 -18000 1 -06} {3356305200 -21600 0 -06} - {3364171200 -18000 1 -05} + {3364171200 -18000 1 -06} {3387754800 -21600 0 -06} - {3396225600 -18000 1 -05} + {3396225600 -18000 1 -06} {3419809200 -21600 0 -06} - {3427675200 -18000 1 -05} + {3427675200 -18000 1 -06} {3451258800 -21600 0 -06} - {3459124800 -18000 1 -05} + {3459124800 -18000 1 -06} {3482708400 -21600 0 -06} - {3490574400 -18000 1 -05} + {3490574400 -18000 1 -06} {3514158000 -21600 0 -06} - {3522024000 -18000 1 -05} + {3522024000 -18000 1 -06} {3545607600 -21600 0 -06} - {3553473600 -18000 1 -05} + {3553473600 -18000 1 -06} {3577057200 -21600 0 -06} - {3585528000 -18000 1 -05} + {3585528000 -18000 1 -06} {3609111600 -21600 0 -06} - {3616977600 -18000 1 -05} + {3616977600 -18000 1 -06} {3640561200 -21600 0 -06} - {3648427200 -18000 1 -05} + {3648427200 -18000 1 -06} {3672010800 -21600 0 -06} - {3679876800 -18000 1 -05} + {3679876800 -18000 1 -06} {3703460400 -21600 0 -06} - {3711326400 -18000 1 -05} + {3711326400 -18000 1 -06} {3734910000 -21600 0 -06} - {3743380800 -18000 1 -05} + {3743380800 -18000 1 -06} {3766964400 -21600 0 -06} - {3774830400 -18000 1 -05} + {3774830400 -18000 1 -06} {3798414000 -21600 0 -06} - {3806280000 -18000 1 -05} + {3806280000 -18000 1 -06} {3829863600 -21600 0 -06} - {3837729600 -18000 1 -05} + {3837729600 -18000 1 -06} {3861313200 -21600 0 -06} - {3869179200 -18000 1 -05} + {3869179200 -18000 1 -06} {3892762800 -21600 0 -06} - {3900628800 -18000 1 -05} + {3900628800 -18000 1 -06} {3924212400 -21600 0 -06} - {3932683200 -18000 1 -05} + {3932683200 -18000 1 -06} {3956266800 -21600 0 -06} - {3964132800 -18000 1 -05} + {3964132800 -18000 1 -06} {3987716400 -21600 0 -06} - {3995582400 -18000 1 -05} + {3995582400 -18000 1 -06} {4019166000 -21600 0 -06} - {4027032000 -18000 1 -05} + {4027032000 -18000 1 -06} {4050615600 -21600 0 -06} - {4058481600 -18000 1 -05} + {4058481600 -18000 1 -06} {4082065200 -21600 0 -06} - {4089931200 -18000 1 -05} + {4089931200 -18000 1 -06} } diff --git a/library/tzdata/Pacific/Efate b/library/tzdata/Pacific/Efate index a43852e..a026ee1 100644 --- a/library/tzdata/Pacific/Efate +++ b/library/tzdata/Pacific/Efate @@ -3,24 +3,24 @@ set TZData(:Pacific/Efate) { {-9223372036854775808 40396 0 LMT} {-1829387596 39600 0 +11} - {433256400 43200 1 +12} + {433256400 43200 1 +11} {448977600 39600 0 +11} - {467298000 43200 1 +12} + {467298000 43200 1 +11} {480427200 39600 0 +11} - {496760400 43200 1 +12} + {496760400 43200 1 +11} {511876800 39600 0 +11} - {528210000 43200 1 +12} + {528210000 43200 1 +11} {543931200 39600 0 +11} - {559659600 43200 1 +12} + {559659600 43200 1 +11} {575380800 39600 0 +11} - {591109200 43200 1 +12} + {591109200 43200 1 +11} {606830400 39600 0 +11} - {622558800 43200 1 +12} + {622558800 43200 1 +11} {638280000 39600 0 +11} - {654008400 43200 1 +12} + {654008400 43200 1 +11} {669729600 39600 0 +11} - {686062800 43200 1 +12} + {686062800 43200 1 +11} {696340800 39600 0 +11} - {719931600 43200 1 +12} + {719931600 43200 1 +11} {727790400 39600 0 +11} } diff --git a/library/tzdata/Pacific/Enderbury b/library/tzdata/Pacific/Enderbury index 6abd57e..48eaafe 100644 --- a/library/tzdata/Pacific/Enderbury +++ b/library/tzdata/Pacific/Enderbury @@ -4,5 +4,5 @@ set TZData(:Pacific/Enderbury) { {-9223372036854775808 -41060 0 LMT} {-2177411740 -43200 0 -12} {307627200 -39600 0 -11} - {788958000 46800 0 +13} + {788871600 46800 0 +13} } diff --git a/library/tzdata/Pacific/Fiji b/library/tzdata/Pacific/Fiji index f9d393c..610c191 100644 --- a/library/tzdata/Pacific/Fiji +++ b/library/tzdata/Pacific/Fiji @@ -3,189 +3,189 @@ set TZData(:Pacific/Fiji) { {-9223372036854775808 42944 0 LMT} {-1709985344 43200 0 +12} - {909842400 46800 1 +13} + {909842400 46800 1 +12} {920124000 43200 0 +12} - {941896800 46800 1 +13} + {941896800 46800 1 +12} {951573600 43200 0 +12} - {1259416800 46800 1 +13} + {1259416800 46800 1 +12} {1269698400 43200 0 +12} - {1287842400 46800 1 +13} + {1287842400 46800 1 +12} {1299333600 43200 0 +12} - {1319292000 46800 1 +13} + {1319292000 46800 1 +12} {1327154400 43200 0 +12} - {1350741600 46800 1 +13} + {1350741600 46800 1 +12} {1358604000 43200 0 +12} - {1382796000 46800 1 +13} + {1382796000 46800 1 +12} {1390050000 43200 0 +12} - {1414850400 46800 1 +13} + {1414850400 46800 1 +12} {1421503200 43200 0 +12} - {1446300000 46800 1 +13} + {1446300000 46800 1 +12} {1452952800 43200 0 +12} - {1478354400 46800 1 +13} + {1478354400 46800 1 +12} {1484402400 43200 0 +12} - {1509804000 46800 1 +13} + {1509804000 46800 1 +12} {1515852000 43200 0 +12} - {1541253600 46800 1 +13} + {1541253600 46800 1 +12} {1547906400 43200 0 +12} - {1572703200 46800 1 +13} + {1572703200 46800 1 +12} {1579356000 43200 0 +12} - {1604152800 46800 1 +13} + {1604152800 46800 1 +12} {1610805600 43200 0 +12} - {1636207200 46800 1 +13} + {1636207200 46800 1 +12} {1642255200 43200 0 +12} - {1667656800 46800 1 +13} + {1667656800 46800 1 +12} {1673704800 43200 0 +12} - {1699106400 46800 1 +13} + {1699106400 46800 1 +12} {1705154400 43200 0 +12} - {1730556000 46800 1 +13} + {1730556000 46800 1 +12} {1737208800 43200 0 +12} - {1762005600 46800 1 +13} + {1762005600 46800 1 +12} {1768658400 43200 0 +12} - {1793455200 46800 1 +13} + {1793455200 46800 1 +12} {1800108000 43200 0 +12} - {1825509600 46800 1 +13} + {1825509600 46800 1 +12} {1831557600 43200 0 +12} - {1856959200 46800 1 +13} + {1856959200 46800 1 +12} {1863007200 43200 0 +12} - {1888408800 46800 1 +13} + {1888408800 46800 1 +12} {1895061600 43200 0 +12} - {1919858400 46800 1 +13} + {1919858400 46800 1 +12} {1926511200 43200 0 +12} - {1951308000 46800 1 +13} + {1951308000 46800 1 +12} {1957960800 43200 0 +12} - {1983362400 46800 1 +13} + {1983362400 46800 1 +12} {1989410400 43200 0 +12} - {2014812000 46800 1 +13} + {2014812000 46800 1 +12} {2020860000 43200 0 +12} - {2046261600 46800 1 +13} + {2046261600 46800 1 +12} {2052309600 43200 0 +12} - {2077711200 46800 1 +13} + {2077711200 46800 1 +12} {2084364000 43200 0 +12} - {2109160800 46800 1 +13} + {2109160800 46800 1 +12} {2115813600 43200 0 +12} - {2140610400 46800 1 +13} + {2140610400 46800 1 +12} {2147263200 43200 0 +12} - {2172664800 46800 1 +13} + {2172664800 46800 1 +12} {2178712800 43200 0 +12} - {2204114400 46800 1 +13} + {2204114400 46800 1 +12} {2210162400 43200 0 +12} - {2235564000 46800 1 +13} + {2235564000 46800 1 +12} {2242216800 43200 0 +12} - {2267013600 46800 1 +13} + {2267013600 46800 1 +12} {2273666400 43200 0 +12} - {2298463200 46800 1 +13} + {2298463200 46800 1 +12} {2305116000 43200 0 +12} - {2329912800 46800 1 +13} + {2329912800 46800 1 +12} {2336565600 43200 0 +12} - {2361967200 46800 1 +13} + {2361967200 46800 1 +12} {2368015200 43200 0 +12} - {2393416800 46800 1 +13} + {2393416800 46800 1 +12} {2399464800 43200 0 +12} - {2424866400 46800 1 +13} + {2424866400 46800 1 +12} {2431519200 43200 0 +12} - {2456316000 46800 1 +13} + {2456316000 46800 1 +12} {2462968800 43200 0 +12} - {2487765600 46800 1 +13} + {2487765600 46800 1 +12} {2494418400 43200 0 +12} - {2519820000 46800 1 +13} + {2519820000 46800 1 +12} {2525868000 43200 0 +12} - {2551269600 46800 1 +13} + {2551269600 46800 1 +12} {2557317600 43200 0 +12} - {2582719200 46800 1 +13} + {2582719200 46800 1 +12} {2588767200 43200 0 +12} - {2614168800 46800 1 +13} + {2614168800 46800 1 +12} {2620821600 43200 0 +12} - {2645618400 46800 1 +13} + {2645618400 46800 1 +12} {2652271200 43200 0 +12} - {2677068000 46800 1 +13} + {2677068000 46800 1 +12} {2683720800 43200 0 +12} - {2709122400 46800 1 +13} + {2709122400 46800 1 +12} {2715170400 43200 0 +12} - {2740572000 46800 1 +13} + {2740572000 46800 1 +12} {2746620000 43200 0 +12} - {2772021600 46800 1 +13} + {2772021600 46800 1 +12} {2778674400 43200 0 +12} - {2803471200 46800 1 +13} + {2803471200 46800 1 +12} {2810124000 43200 0 +12} - {2834920800 46800 1 +13} + {2834920800 46800 1 +12} {2841573600 43200 0 +12} - {2866975200 46800 1 +13} + {2866975200 46800 1 +12} {2873023200 43200 0 +12} - {2898424800 46800 1 +13} + {2898424800 46800 1 +12} {2904472800 43200 0 +12} - {2929874400 46800 1 +13} + {2929874400 46800 1 +12} {2935922400 43200 0 +12} - {2961324000 46800 1 +13} + {2961324000 46800 1 +12} {2967976800 43200 0 +12} - {2992773600 46800 1 +13} + {2992773600 46800 1 +12} {2999426400 43200 0 +12} - {3024223200 46800 1 +13} + {3024223200 46800 1 +12} {3030876000 43200 0 +12} - {3056277600 46800 1 +13} + {3056277600 46800 1 +12} {3062325600 43200 0 +12} - {3087727200 46800 1 +13} + {3087727200 46800 1 +12} {3093775200 43200 0 +12} - {3119176800 46800 1 +13} + {3119176800 46800 1 +12} {3125829600 43200 0 +12} - {3150626400 46800 1 +13} + {3150626400 46800 1 +12} {3157279200 43200 0 +12} - {3182076000 46800 1 +13} + {3182076000 46800 1 +12} {3188728800 43200 0 +12} - {3213525600 46800 1 +13} + {3213525600 46800 1 +12} {3220178400 43200 0 +12} - {3245580000 46800 1 +13} + {3245580000 46800 1 +12} {3251628000 43200 0 +12} - {3277029600 46800 1 +13} + {3277029600 46800 1 +12} {3283077600 43200 0 +12} - {3308479200 46800 1 +13} + {3308479200 46800 1 +12} {3315132000 43200 0 +12} - {3339928800 46800 1 +13} + {3339928800 46800 1 +12} {3346581600 43200 0 +12} - {3371378400 46800 1 +13} + {3371378400 46800 1 +12} {3378031200 43200 0 +12} - {3403432800 46800 1 +13} + {3403432800 46800 1 +12} {3409480800 43200 0 +12} - {3434882400 46800 1 +13} + {3434882400 46800 1 +12} {3440930400 43200 0 +12} - {3466332000 46800 1 +13} + {3466332000 46800 1 +12} {3472380000 43200 0 +12} - {3497781600 46800 1 +13} + {3497781600 46800 1 +12} {3504434400 43200 0 +12} - {3529231200 46800 1 +13} + {3529231200 46800 1 +12} {3535884000 43200 0 +12} - {3560680800 46800 1 +13} + {3560680800 46800 1 +12} {3567333600 43200 0 +12} - {3592735200 46800 1 +13} + {3592735200 46800 1 +12} {3598783200 43200 0 +12} - {3624184800 46800 1 +13} + {3624184800 46800 1 +12} {3630232800 43200 0 +12} - {3655634400 46800 1 +13} + {3655634400 46800 1 +12} {3662287200 43200 0 +12} - {3687084000 46800 1 +13} + {3687084000 46800 1 +12} {3693736800 43200 0 +12} - {3718533600 46800 1 +13} + {3718533600 46800 1 +12} {3725186400 43200 0 +12} - {3750588000 46800 1 +13} + {3750588000 46800 1 +12} {3756636000 43200 0 +12} - {3782037600 46800 1 +13} + {3782037600 46800 1 +12} {3788085600 43200 0 +12} - {3813487200 46800 1 +13} + {3813487200 46800 1 +12} {3819535200 43200 0 +12} - {3844936800 46800 1 +13} + {3844936800 46800 1 +12} {3851589600 43200 0 +12} - {3876386400 46800 1 +13} + {3876386400 46800 1 +12} {3883039200 43200 0 +12} - {3907836000 46800 1 +13} + {3907836000 46800 1 +12} {3914488800 43200 0 +12} - {3939890400 46800 1 +13} + {3939890400 46800 1 +12} {3945938400 43200 0 +12} - {3971340000 46800 1 +13} + {3971340000 46800 1 +12} {3977388000 43200 0 +12} - {4002789600 46800 1 +13} + {4002789600 46800 1 +12} {4009442400 43200 0 +12} - {4034239200 46800 1 +13} + {4034239200 46800 1 +12} {4040892000 43200 0 +12} - {4065688800 46800 1 +13} + {4065688800 46800 1 +12} {4072341600 43200 0 +12} - {4097138400 46800 1 +13} + {4097138400 46800 1 +12} } diff --git a/library/tzdata/Pacific/Galapagos b/library/tzdata/Pacific/Galapagos index f276f73..180ce6a 100644 --- a/library/tzdata/Pacific/Galapagos +++ b/library/tzdata/Pacific/Galapagos @@ -4,6 +4,6 @@ set TZData(:Pacific/Galapagos) { {-9223372036854775808 -21504 0 LMT} {-1230746496 -18000 0 -05} {504939600 -21600 0 -06} - {722930400 -18000 1 -05} + {722930400 -18000 1 -06} {728888400 -21600 0 -06} } diff --git a/library/tzdata/Pacific/Kiritimati b/library/tzdata/Pacific/Kiritimati index b703f19..7d600f3 100644 --- a/library/tzdata/Pacific/Kiritimati +++ b/library/tzdata/Pacific/Kiritimati @@ -4,5 +4,5 @@ set TZData(:Pacific/Kiritimati) { {-9223372036854775808 -37760 0 LMT} {-2177415040 -38400 0 -1040} {307622400 -36000 0 -10} - {788954400 50400 0 +14} + {788868000 50400 0 +14} } diff --git a/library/tzdata/Pacific/Noumea b/library/tzdata/Pacific/Noumea index 36b570d..c9da825 100644 --- a/library/tzdata/Pacific/Noumea +++ b/library/tzdata/Pacific/Noumea @@ -3,10 +3,10 @@ set TZData(:Pacific/Noumea) { {-9223372036854775808 39948 0 LMT} {-1829387148 39600 0 +11} - {250002000 43200 1 +12} + {250002000 43200 1 +11} {257342400 39600 0 +11} - {281451600 43200 1 +12} + {281451600 43200 1 +11} {288878400 39600 0 +11} - {849366000 43200 1 +12} + {849366000 43200 1 +11} {857228400 39600 0 +11} } diff --git a/library/tzdata/Pacific/Rarotonga b/library/tzdata/Pacific/Rarotonga index 9a70318..2913d68 100644 --- a/library/tzdata/Pacific/Rarotonga +++ b/library/tzdata/Pacific/Rarotonga @@ -3,30 +3,30 @@ set TZData(:Pacific/Rarotonga) { {-9223372036854775808 -38344 0 LMT} {-2177414456 -37800 0 -1030} - {279714600 -34200 0 -0930} + {279714600 -34200 0 -10} {289387800 -36000 0 -10} - {309952800 -34200 1 -0930} + {309952800 -34200 1 -10} {320837400 -36000 0 -10} - {341402400 -34200 1 -0930} + {341402400 -34200 1 -10} {352287000 -36000 0 -10} - {372852000 -34200 1 -0930} + {372852000 -34200 1 -10} {384341400 -36000 0 -10} - {404906400 -34200 1 -0930} + {404906400 -34200 1 -10} {415791000 -36000 0 -10} - {436356000 -34200 1 -0930} + {436356000 -34200 1 -10} {447240600 -36000 0 -10} - {467805600 -34200 1 -0930} + {467805600 -34200 1 -10} {478690200 -36000 0 -10} - {499255200 -34200 1 -0930} + {499255200 -34200 1 -10} {510139800 -36000 0 -10} - {530704800 -34200 1 -0930} + {530704800 -34200 1 -10} {541589400 -36000 0 -10} - {562154400 -34200 1 -0930} + {562154400 -34200 1 -10} {573643800 -36000 0 -10} - {594208800 -34200 1 -0930} + {594208800 -34200 1 -10} {605093400 -36000 0 -10} - {625658400 -34200 1 -0930} + {625658400 -34200 1 -10} {636543000 -36000 0 -10} - {657108000 -34200 1 -0930} + {657108000 -34200 1 -10} {667992600 -36000 0 -10} } diff --git a/library/tzdata/Pacific/Tongatapu b/library/tzdata/Pacific/Tongatapu index 3cfaaaa..104888a 100644 --- a/library/tzdata/Pacific/Tongatapu +++ b/library/tzdata/Pacific/Tongatapu @@ -5,12 +5,12 @@ set TZData(:Pacific/Tongatapu) { {-2177497160 44400 0 +1220} {-915193200 46800 0 +13} {915102000 46800 0 +13} - {939214800 50400 1 +14} + {939214800 50400 1 +13} {953384400 46800 0 +13} - {973342800 50400 1 +14} + {973342800 50400 1 +13} {980596800 46800 0 +13} - {1004792400 50400 1 +14} + {1004792400 50400 1 +13} {1012046400 46800 0 +13} - {1478350800 50400 1 +14} + {1478350800 50400 1 +13} {1484398800 46800 0 +13} } -- cgit v0.12 From ac47e6953d5c9a8916296ab9f382bf914a56324b Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 9 Jun 2018 07:42:42 +0000 Subject: Update all Unicode tables to Unicode version 11.0 --- generic/regc_locale.c | 491 +++++++++-------- generic/tclUniData.c | 1447 +++++++++++++++++++++++++------------------------ 2 files changed, 984 insertions(+), 954 deletions(-) diff --git a/generic/regc_locale.c b/generic/regc_locale.c index 4435557..81aeb82 100644 --- a/generic/regc_locale.c +++ b/generic/regc_locale.c @@ -137,8 +137,8 @@ static const crange alphaRangeTable[] = { {0x41, 0x5a}, {0x61, 0x7a}, {0xc0, 0xd6}, {0xd8, 0xf6}, {0xf8, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, {0x370, 0x374}, {0x37a, 0x37d}, {0x388, 0x38a}, {0x38e, 0x3a1}, {0x3a3, 0x3f5}, - {0x3f7, 0x481}, {0x48a, 0x52f}, {0x531, 0x556}, {0x561, 0x587}, - {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x620, 0x64a}, {0x671, 0x6d3}, + {0x3f7, 0x481}, {0x48a, 0x52f}, {0x531, 0x556}, {0x560, 0x588}, + {0x5d0, 0x5ea}, {0x5ef, 0x5f2}, {0x620, 0x64a}, {0x671, 0x6d3}, {0x6fa, 0x6fc}, {0x712, 0x72f}, {0x74d, 0x7a5}, {0x7ca, 0x7ea}, {0x800, 0x815}, {0x840, 0x858}, {0x860, 0x86a}, {0x8a0, 0x8b4}, {0x8b6, 0x8bd}, {0x904, 0x939}, {0x958, 0x961}, {0x971, 0x980}, @@ -165,40 +165,41 @@ static const crange alphaRangeTable[] = { {0x1401, 0x166c}, {0x166f, 0x167f}, {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x16f1, 0x16f8}, {0x1700, 0x170c}, {0x170e, 0x1711}, {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1780, 0x17b3}, - {0x1820, 0x1877}, {0x1880, 0x1884}, {0x1887, 0x18a8}, {0x18b0, 0x18f5}, + {0x1820, 0x1878}, {0x1880, 0x1884}, {0x1887, 0x18a8}, {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1950, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9}, {0x1a00, 0x1a16}, {0x1a20, 0x1a54}, {0x1b05, 0x1b33}, {0x1b45, 0x1b4b}, {0x1b83, 0x1ba0}, {0x1bba, 0x1be5}, {0x1c00, 0x1c23}, - {0x1c4d, 0x1c4f}, {0x1c5a, 0x1c7d}, {0x1c80, 0x1c88}, {0x1ce9, 0x1cec}, - {0x1cee, 0x1cf1}, {0x1d00, 0x1dbf}, {0x1e00, 0x1f15}, {0x1f18, 0x1f1d}, - {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, - {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, - {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, - {0x1ff6, 0x1ffc}, {0x2090, 0x209c}, {0x210a, 0x2113}, {0x2119, 0x211d}, - {0x212a, 0x212d}, {0x212f, 0x2139}, {0x213c, 0x213f}, {0x2145, 0x2149}, - {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, {0x2c60, 0x2ce4}, {0x2ceb, 0x2cee}, - {0x2d00, 0x2d25}, {0x2d30, 0x2d67}, {0x2d80, 0x2d96}, {0x2da0, 0x2da6}, - {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, - {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x3031, 0x3035}, - {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, - {0x3105, 0x312e}, {0x3131, 0x318e}, {0x31a0, 0x31ba}, {0x31f0, 0x31ff}, - {0x3400, 0x4db5}, {0x4e00, 0x9fea}, {0xa000, 0xa48c}, {0xa4d0, 0xa4fd}, - {0xa500, 0xa60c}, {0xa610, 0xa61f}, {0xa640, 0xa66e}, {0xa67f, 0xa69d}, - {0xa6a0, 0xa6e5}, {0xa717, 0xa71f}, {0xa722, 0xa788}, {0xa78b, 0xa7ae}, - {0xa7b0, 0xa7b7}, {0xa7f7, 0xa801}, {0xa803, 0xa805}, {0xa807, 0xa80a}, - {0xa80c, 0xa822}, {0xa840, 0xa873}, {0xa882, 0xa8b3}, {0xa8f2, 0xa8f7}, - {0xa90a, 0xa925}, {0xa930, 0xa946}, {0xa960, 0xa97c}, {0xa984, 0xa9b2}, - {0xa9e0, 0xa9e4}, {0xa9e6, 0xa9ef}, {0xa9fa, 0xa9fe}, {0xaa00, 0xaa28}, - {0xaa40, 0xaa42}, {0xaa44, 0xaa4b}, {0xaa60, 0xaa76}, {0xaa7e, 0xaaaf}, - {0xaab9, 0xaabd}, {0xaadb, 0xaadd}, {0xaae0, 0xaaea}, {0xaaf2, 0xaaf4}, - {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, - {0xab28, 0xab2e}, {0xab30, 0xab5a}, {0xab5c, 0xab65}, {0xab70, 0xabe2}, - {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xf900, 0xfa6d}, - {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1f, 0xfb28}, - {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, - {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74}, - {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe}, - {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc} + {0x1c4d, 0x1c4f}, {0x1c5a, 0x1c7d}, {0x1c80, 0x1c88}, {0x1c90, 0x1cba}, + {0x1cbd, 0x1cbf}, {0x1ce9, 0x1cec}, {0x1cee, 0x1cf1}, {0x1d00, 0x1dbf}, + {0x1e00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, + {0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, + {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, + {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2090, 0x209c}, + {0x210a, 0x2113}, {0x2119, 0x211d}, {0x212a, 0x212d}, {0x212f, 0x2139}, + {0x213c, 0x213f}, {0x2145, 0x2149}, {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, + {0x2c60, 0x2ce4}, {0x2ceb, 0x2cee}, {0x2d00, 0x2d25}, {0x2d30, 0x2d67}, + {0x2d80, 0x2d96}, {0x2da0, 0x2da6}, {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, + {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, + {0x2dd8, 0x2dde}, {0x3031, 0x3035}, {0x3041, 0x3096}, {0x309d, 0x309f}, + {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, {0x3105, 0x312f}, {0x3131, 0x318e}, + {0x31a0, 0x31ba}, {0x31f0, 0x31ff}, {0x3400, 0x4db5}, {0x4e00, 0x9fef}, + {0xa000, 0xa48c}, {0xa4d0, 0xa4fd}, {0xa500, 0xa60c}, {0xa610, 0xa61f}, + {0xa640, 0xa66e}, {0xa67f, 0xa69d}, {0xa6a0, 0xa6e5}, {0xa717, 0xa71f}, + {0xa722, 0xa788}, {0xa78b, 0xa7b9}, {0xa7f7, 0xa801}, {0xa803, 0xa805}, + {0xa807, 0xa80a}, {0xa80c, 0xa822}, {0xa840, 0xa873}, {0xa882, 0xa8b3}, + {0xa8f2, 0xa8f7}, {0xa90a, 0xa925}, {0xa930, 0xa946}, {0xa960, 0xa97c}, + {0xa984, 0xa9b2}, {0xa9e0, 0xa9e4}, {0xa9e6, 0xa9ef}, {0xa9fa, 0xa9fe}, + {0xaa00, 0xaa28}, {0xaa40, 0xaa42}, {0xaa44, 0xaa4b}, {0xaa60, 0xaa76}, + {0xaa7e, 0xaaaf}, {0xaab9, 0xaabd}, {0xaadb, 0xaadd}, {0xaae0, 0xaaea}, + {0xaaf2, 0xaaf4}, {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16}, + {0xab20, 0xab26}, {0xab28, 0xab2e}, {0xab30, 0xab5a}, {0xab5c, 0xab65}, + {0xab70, 0xabe2}, {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, + {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, + {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb46, 0xfbb1}, + {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, + {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, + {0xff66, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, + {0xffda, 0xffdc} #if CHRBITS > 16 ,{0x10000, 0x1000b}, {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003f, 0x1004d}, {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10280, 0x1029c}, {0x102a0, 0x102d0}, @@ -208,23 +209,25 @@ static const crange alphaRangeTable[] = { {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10800, 0x10805}, {0x1080a, 0x10835}, {0x1083f, 0x10855}, {0x10860, 0x10876}, {0x10880, 0x1089e}, {0x108e0, 0x108f2}, {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10980, 0x109b7}, - {0x10a10, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a33}, {0x10a60, 0x10a7c}, + {0x10a10, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, {0x10a60, 0x10a7c}, {0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae4}, {0x10b00, 0x10b35}, {0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, {0x10c00, 0x10c48}, - {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x11003, 0x11037}, {0x11083, 0x110af}, - {0x110d0, 0x110e8}, {0x11103, 0x11126}, {0x11150, 0x11172}, {0x11183, 0x111b2}, - {0x111c1, 0x111c4}, {0x11200, 0x11211}, {0x11213, 0x1122b}, {0x11280, 0x11286}, - {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, {0x112b0, 0x112de}, - {0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339}, - {0x1135d, 0x11361}, {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x11480, 0x114af}, - {0x11580, 0x115ae}, {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11680, 0x116aa}, - {0x11700, 0x11719}, {0x118a0, 0x118df}, {0x11a0b, 0x11a32}, {0x11a5c, 0x11a83}, + {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10d00, 0x10d23}, {0x10f00, 0x10f1c}, + {0x10f30, 0x10f45}, {0x11003, 0x11037}, {0x11083, 0x110af}, {0x110d0, 0x110e8}, + {0x11103, 0x11126}, {0x11150, 0x11172}, {0x11183, 0x111b2}, {0x111c1, 0x111c4}, + {0x11200, 0x11211}, {0x11213, 0x1122b}, {0x11280, 0x11286}, {0x1128a, 0x1128d}, + {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, {0x112b0, 0x112de}, {0x11305, 0x1130c}, + {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339}, {0x1135d, 0x11361}, + {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x11480, 0x114af}, {0x11580, 0x115ae}, + {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11680, 0x116aa}, {0x11700, 0x1171a}, + {0x11800, 0x1182b}, {0x118a0, 0x118df}, {0x11a0b, 0x11a32}, {0x11a5c, 0x11a83}, {0x11a86, 0x11a89}, {0x11ac0, 0x11af8}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c2e}, - {0x11c72, 0x11c8f}, {0x11d00, 0x11d06}, {0x11d0b, 0x11d30}, {0x12000, 0x12399}, - {0x12480, 0x12543}, {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, - {0x16a40, 0x16a5e}, {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43}, - {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, {0x16f00, 0x16f44}, {0x16f93, 0x16f9f}, - {0x17000, 0x187ec}, {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, + {0x11c72, 0x11c8f}, {0x11d00, 0x11d06}, {0x11d0b, 0x11d30}, {0x11d60, 0x11d65}, + {0x11d6a, 0x11d89}, {0x11ee0, 0x11ef2}, {0x12000, 0x12399}, {0x12480, 0x12543}, + {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e}, + {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43}, {0x16b63, 0x16b77}, + {0x16b7d, 0x16b8f}, {0x16e40, 0x16e7f}, {0x16f00, 0x16f44}, {0x16f93, 0x16f9f}, + {0x17000, 0x187f1}, {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, @@ -260,17 +263,18 @@ static const chr alphaCharTable[] = { 0x1baf, 0x1cf5, 0x1cf6, 0x1f59, 0x1f5b, 0x1f5d, 0x1fbe, 0x2071, 0x207f, 0x2102, 0x2107, 0x2115, 0x2124, 0x2126, 0x2128, 0x214e, 0x2183, 0x2184, 0x2cf2, 0x2cf3, 0x2d27, 0x2d2d, 0x2d6f, 0x2e2f, 0x3005, 0x3006, 0x303b, - 0x303c, 0xa62a, 0xa62b, 0xa8fb, 0xa8fd, 0xa9cf, 0xaa7a, 0xaab1, 0xaab5, - 0xaab6, 0xaac0, 0xaac2, 0xfb1d, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44 + 0x303c, 0xa62a, 0xa62b, 0xa8fb, 0xa8fd, 0xa8fe, 0xa9cf, 0xaa7a, 0xaab1, + 0xaab5, 0xaab6, 0xaac0, 0xaac2, 0xfb1d, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, + 0xfb44 #if CHRBITS > 16 ,0x1003c, 0x1003d, 0x10808, 0x10837, 0x10838, 0x1083c, 0x108f4, 0x108f5, 0x109be, - 0x109bf, 0x10a00, 0x11176, 0x111da, 0x111dc, 0x11288, 0x1130f, 0x11310, 0x11332, - 0x11333, 0x1133d, 0x11350, 0x114c4, 0x114c5, 0x114c7, 0x11644, 0x118ff, 0x11a00, - 0x11a3a, 0x11a50, 0x11c40, 0x11d08, 0x11d09, 0x11d46, 0x16f50, 0x16fe0, 0x16fe1, - 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546, 0x1ee21, 0x1ee22, - 0x1ee24, 0x1ee27, 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, - 0x1ee52, 0x1ee54, 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, - 0x1ee64, 0x1ee7e + 0x109bf, 0x10a00, 0x10f27, 0x11144, 0x11176, 0x111da, 0x111dc, 0x11288, 0x1130f, + 0x11310, 0x11332, 0x11333, 0x1133d, 0x11350, 0x114c4, 0x114c5, 0x114c7, 0x11644, + 0x118ff, 0x11a00, 0x11a3a, 0x11a50, 0x11a9d, 0x11c40, 0x11d08, 0x11d09, 0x11d46, + 0x11d67, 0x11d68, 0x11d98, 0x16f50, 0x16fe0, 0x16fe1, 0x1d49e, 0x1d49f, 0x1d4a2, + 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546, 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, 0x1ee39, + 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, 0x1ee57, + 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e #endif }; @@ -295,7 +299,7 @@ static const crange controlRangeTable[] = { static const chr controlCharTable[] = { 0xad, 0x61c, 0x6dd, 0x70f, 0x8e2, 0x180e, 0xfeff #if CHRBITS > 16 - ,0x110bd, 0xe0001 + ,0x110bd, 0x110cd, 0xe0001 #endif }; @@ -317,11 +321,11 @@ static const crange digitRangeTable[] = { {0xa9d0, 0xa9d9}, {0xa9f0, 0xa9f9}, {0xaa50, 0xaa59}, {0xabf0, 0xabf9}, {0xff10, 0xff19} #if CHRBITS > 16 - ,{0x104a0, 0x104a9}, {0x11066, 0x1106f}, {0x110f0, 0x110f9}, {0x11136, 0x1113f}, - {0x111d0, 0x111d9}, {0x112f0, 0x112f9}, {0x11450, 0x11459}, {0x114d0, 0x114d9}, - {0x11650, 0x11659}, {0x116c0, 0x116c9}, {0x11730, 0x11739}, {0x118e0, 0x118e9}, - {0x11c50, 0x11c59}, {0x11d50, 0x11d59}, {0x16a60, 0x16a69}, {0x16b50, 0x16b59}, - {0x1d7ce, 0x1d7ff}, {0x1e950, 0x1e959} + ,{0x104a0, 0x104a9}, {0x10d30, 0x10d39}, {0x11066, 0x1106f}, {0x110f0, 0x110f9}, + {0x11136, 0x1113f}, {0x111d0, 0x111d9}, {0x112f0, 0x112f9}, {0x11450, 0x11459}, + {0x114d0, 0x114d9}, {0x11650, 0x11659}, {0x116c0, 0x116c9}, {0x11730, 0x11739}, + {0x118e0, 0x118e9}, {0x11c50, 0x11c59}, {0x11d50, 0x11d59}, {0x11da0, 0x11da9}, + {0x16a60, 0x16a69}, {0x16b50, 0x16b59}, {0x1d7ce, 0x1d7ff}, {0x1e950, 0x1e959} #endif }; @@ -344,7 +348,7 @@ static const crange punctRangeTable[] = { {0x1b5a, 0x1b60}, {0x1bfc, 0x1bff}, {0x1c3b, 0x1c3f}, {0x1cc0, 0x1cc7}, {0x2010, 0x2027}, {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x205e}, {0x2308, 0x230b}, {0x2768, 0x2775}, {0x27e6, 0x27ef}, {0x2983, 0x2998}, - {0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e49}, + {0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e4e}, {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, {0xa60d, 0xa60f}, {0xa6f2, 0xa6f7}, {0xa874, 0xa877}, {0xa8f8, 0xa8fa}, {0xa9c1, 0xa9cd}, {0xaa5c, 0xaa5f}, {0xfe10, 0xfe19}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, @@ -352,11 +356,12 @@ static const crange punctRangeTable[] = { {0xff5f, 0xff65} #if CHRBITS > 16 ,{0x10100, 0x10102}, {0x10a50, 0x10a58}, {0x10af0, 0x10af6}, {0x10b39, 0x10b3f}, - {0x10b99, 0x10b9c}, {0x11047, 0x1104d}, {0x110be, 0x110c1}, {0x11140, 0x11143}, - {0x111c5, 0x111c9}, {0x111dd, 0x111df}, {0x11238, 0x1123d}, {0x1144b, 0x1144f}, - {0x115c1, 0x115d7}, {0x11641, 0x11643}, {0x11660, 0x1166c}, {0x1173c, 0x1173e}, - {0x11a3f, 0x11a46}, {0x11a9a, 0x11a9c}, {0x11a9e, 0x11aa2}, {0x11c41, 0x11c45}, - {0x12470, 0x12474}, {0x16b37, 0x16b3b}, {0x1da87, 0x1da8b} + {0x10b99, 0x10b9c}, {0x10f55, 0x10f59}, {0x11047, 0x1104d}, {0x110be, 0x110c1}, + {0x11140, 0x11143}, {0x111c5, 0x111c8}, {0x111dd, 0x111df}, {0x11238, 0x1123d}, + {0x1144b, 0x1144f}, {0x115c1, 0x115d7}, {0x11641, 0x11643}, {0x11660, 0x1166c}, + {0x1173c, 0x1173e}, {0x11a3f, 0x11a46}, {0x11a9a, 0x11a9c}, {0x11a9e, 0x11aa2}, + {0x11c41, 0x11c45}, {0x12470, 0x12474}, {0x16b37, 0x16b3b}, {0x16e97, 0x16e9a}, + {0x1da87, 0x1da8b} #endif }; @@ -367,18 +372,20 @@ static const chr punctCharTable[] = { 0xab, 0xb6, 0xb7, 0xbb, 0xbf, 0x37e, 0x387, 0x589, 0x58a, 0x5be, 0x5c0, 0x5c3, 0x5c6, 0x5f3, 0x5f4, 0x609, 0x60a, 0x60c, 0x60d, 0x61b, 0x61e, 0x61f, 0x6d4, 0x85e, 0x964, 0x965, 0x970, - 0x9fd, 0xaf0, 0xdf4, 0xe4f, 0xe5a, 0xe5b, 0xf14, 0xf85, 0xfd9, - 0xfda, 0x10fb, 0x1400, 0x166d, 0x166e, 0x169b, 0x169c, 0x1735, 0x1736, - 0x1944, 0x1945, 0x1a1e, 0x1a1f, 0x1c7e, 0x1c7f, 0x1cd3, 0x207d, 0x207e, - 0x208d, 0x208e, 0x2329, 0x232a, 0x27c5, 0x27c6, 0x29fc, 0x29fd, 0x2cfe, - 0x2cff, 0x2d70, 0x3030, 0x303d, 0x30a0, 0x30fb, 0xa4fe, 0xa4ff, 0xa673, - 0xa67e, 0xa8ce, 0xa8cf, 0xa8fc, 0xa92e, 0xa92f, 0xa95f, 0xa9de, 0xa9df, - 0xaade, 0xaadf, 0xaaf0, 0xaaf1, 0xabeb, 0xfd3e, 0xfd3f, 0xfe63, 0xfe68, - 0xfe6a, 0xfe6b, 0xff1a, 0xff1b, 0xff1f, 0xff20, 0xff3f, 0xff5b, 0xff5d + 0x9fd, 0xa76, 0xaf0, 0xc84, 0xdf4, 0xe4f, 0xe5a, 0xe5b, 0xf14, + 0xf85, 0xfd9, 0xfda, 0x10fb, 0x1400, 0x166d, 0x166e, 0x169b, 0x169c, + 0x1735, 0x1736, 0x1944, 0x1945, 0x1a1e, 0x1a1f, 0x1c7e, 0x1c7f, 0x1cd3, + 0x207d, 0x207e, 0x208d, 0x208e, 0x2329, 0x232a, 0x27c5, 0x27c6, 0x29fc, + 0x29fd, 0x2cfe, 0x2cff, 0x2d70, 0x3030, 0x303d, 0x30a0, 0x30fb, 0xa4fe, + 0xa4ff, 0xa673, 0xa67e, 0xa8ce, 0xa8cf, 0xa8fc, 0xa92e, 0xa92f, 0xa95f, + 0xa9de, 0xa9df, 0xaade, 0xaadf, 0xaaf0, 0xaaf1, 0xabeb, 0xfd3e, 0xfd3f, + 0xfe63, 0xfe68, 0xfe6a, 0xfe6b, 0xff1a, 0xff1b, 0xff1f, 0xff20, 0xff3f, + 0xff5b, 0xff5d #if CHRBITS > 16 ,0x1039f, 0x103d0, 0x1056f, 0x10857, 0x1091f, 0x1093f, 0x10a7f, 0x110bb, 0x110bc, - 0x11174, 0x11175, 0x111cd, 0x111db, 0x112a9, 0x1145b, 0x1145d, 0x114c6, 0x11c70, - 0x11c71, 0x16a6e, 0x16a6f, 0x16af5, 0x16b44, 0x1bc9f, 0x1e95e, 0x1e95f + 0x11174, 0x11175, 0x111cd, 0x111db, 0x112a9, 0x1145b, 0x1145d, 0x114c6, 0x1183b, + 0x11c70, 0x11c71, 0x11ef7, 0x11ef8, 0x16a6e, 0x16a6f, 0x16af5, 0x16b44, 0x1bc9f, + 0x1e95e, 0x1e95f #endif }; @@ -409,25 +416,25 @@ static const crange lowerRangeTable[] = { {0x61, 0x7a}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x17e, 0x180}, {0x199, 0x19b}, {0x1bd, 0x1bf}, {0x233, 0x239}, {0x24f, 0x293}, {0x295, 0x2af}, {0x37b, 0x37d}, {0x3ac, 0x3ce}, {0x3d5, 0x3d7}, - {0x3ef, 0x3f3}, {0x430, 0x45f}, {0x561, 0x587}, {0x13f8, 0x13fd}, - {0x1c80, 0x1c88}, {0x1d00, 0x1d2b}, {0x1d6b, 0x1d77}, {0x1d79, 0x1d9a}, - {0x1e95, 0x1e9d}, {0x1eff, 0x1f07}, {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, - {0x1f30, 0x1f37}, {0x1f40, 0x1f45}, {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, - {0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, - {0x1fb0, 0x1fb4}, {0x1fc2, 0x1fc4}, {0x1fd0, 0x1fd3}, {0x1fe0, 0x1fe7}, - {0x1ff2, 0x1ff4}, {0x2146, 0x2149}, {0x2c30, 0x2c5e}, {0x2c76, 0x2c7b}, - {0x2d00, 0x2d25}, {0xa72f, 0xa731}, {0xa771, 0xa778}, {0xa793, 0xa795}, - {0xab30, 0xab5a}, {0xab60, 0xab65}, {0xab70, 0xabbf}, {0xfb00, 0xfb06}, - {0xfb13, 0xfb17}, {0xff41, 0xff5a} + {0x3ef, 0x3f3}, {0x430, 0x45f}, {0x560, 0x588}, {0x10d0, 0x10fa}, + {0x10fd, 0x10ff}, {0x13f8, 0x13fd}, {0x1c80, 0x1c88}, {0x1d00, 0x1d2b}, + {0x1d6b, 0x1d77}, {0x1d79, 0x1d9a}, {0x1e95, 0x1e9d}, {0x1eff, 0x1f07}, + {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45}, + {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, + {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fc2, 0x1fc4}, + {0x1fd0, 0x1fd3}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x2146, 0x2149}, + {0x2c30, 0x2c5e}, {0x2c76, 0x2c7b}, {0x2d00, 0x2d25}, {0xa72f, 0xa731}, + {0xa771, 0xa778}, {0xa793, 0xa795}, {0xab30, 0xab5a}, {0xab60, 0xab65}, + {0xab70, 0xabbf}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xff41, 0xff5a} #if CHRBITS > 16 ,{0x10428, 0x1044f}, {0x104d8, 0x104fb}, {0x10cc0, 0x10cf2}, {0x118c0, 0x118df}, - {0x1d41a, 0x1d433}, {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b}, - {0x1d4b6, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, - {0x1d51e, 0x1d537}, {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3}, - {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, {0x1d68a, 0x1d6a5}, - {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, - {0x1d736, 0x1d74e}, {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f}, - {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, {0x1e922, 0x1e943} + {0x16e60, 0x16e7f}, {0x1d41a, 0x1d433}, {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, + {0x1d482, 0x1d49b}, {0x1d4b6, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d4cf}, + {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537}, {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, + {0x1d5ba, 0x1d5d3}, {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, + {0x1d68a, 0x1d6a5}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, {0x1d6fc, 0x1d714}, + {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e}, {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, + {0x1d78a, 0x1d78f}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, {0x1e922, 0x1e943} #endif }; @@ -497,7 +504,7 @@ static const chr lowerCharTable[] = { 0xa763, 0xa765, 0xa767, 0xa769, 0xa76b, 0xa76d, 0xa76f, 0xa77a, 0xa77c, 0xa77f, 0xa781, 0xa783, 0xa785, 0xa787, 0xa78c, 0xa78e, 0xa791, 0xa797, 0xa799, 0xa79b, 0xa79d, 0xa79f, 0xa7a1, 0xa7a3, 0xa7a5, 0xa7a7, 0xa7a9, - 0xa7b5, 0xa7b7, 0xa7fa + 0xa7af, 0xa7b5, 0xa7b7, 0xa7b9, 0xa7fa #if CHRBITS > 16 ,0x1d4bb, 0x1d7cb #endif @@ -514,20 +521,22 @@ static const crange upperRangeTable[] = { {0x18e, 0x191}, {0x196, 0x198}, {0x1b1, 0x1b3}, {0x1f6, 0x1f8}, {0x243, 0x246}, {0x388, 0x38a}, {0x391, 0x3a1}, {0x3a3, 0x3ab}, {0x3d2, 0x3d4}, {0x3fd, 0x42f}, {0x531, 0x556}, {0x10a0, 0x10c5}, - {0x13a0, 0x13f5}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d}, {0x1f28, 0x1f2f}, - {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f68, 0x1f6f}, {0x1fb8, 0x1fbb}, - {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec}, {0x1ff8, 0x1ffb}, - {0x210b, 0x210d}, {0x2110, 0x2112}, {0x2119, 0x211d}, {0x212a, 0x212d}, - {0x2130, 0x2133}, {0x2c00, 0x2c2e}, {0x2c62, 0x2c64}, {0x2c6d, 0x2c70}, - {0x2c7e, 0x2c80}, {0xa7aa, 0xa7ae}, {0xa7b0, 0xa7b4}, {0xff21, 0xff3a} + {0x13a0, 0x13f5}, {0x1c90, 0x1cba}, {0x1cbd, 0x1cbf}, {0x1f08, 0x1f0f}, + {0x1f18, 0x1f1d}, {0x1f28, 0x1f2f}, {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, + {0x1f68, 0x1f6f}, {0x1fb8, 0x1fbb}, {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, + {0x1fe8, 0x1fec}, {0x1ff8, 0x1ffb}, {0x210b, 0x210d}, {0x2110, 0x2112}, + {0x2119, 0x211d}, {0x212a, 0x212d}, {0x2130, 0x2133}, {0x2c00, 0x2c2e}, + {0x2c62, 0x2c64}, {0x2c6d, 0x2c70}, {0x2c7e, 0x2c80}, {0xa7aa, 0xa7ae}, + {0xa7b0, 0xa7b4}, {0xff21, 0xff3a} #if CHRBITS > 16 ,{0x10400, 0x10427}, {0x104b0, 0x104d3}, {0x10c80, 0x10cb2}, {0x118a0, 0x118bf}, - {0x1d400, 0x1d419}, {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d4a9, 0x1d4ac}, - {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, - {0x1d516, 0x1d51c}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, - {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, {0x1d608, 0x1d621}, - {0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, - {0x1d71c, 0x1d734}, {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8}, {0x1e900, 0x1e921} + {0x16e40, 0x16e5f}, {0x1d400, 0x1d419}, {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, + {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, {0x1d507, 0x1d50a}, + {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, + {0x1d54a, 0x1d550}, {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, + {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, {0x1d6a8, 0x1d6c0}, + {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734}, {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8}, + {0x1e900, 0x1e921} #endif }; @@ -596,7 +605,8 @@ static const chr upperCharTable[] = { 0xa756, 0xa758, 0xa75a, 0xa75c, 0xa75e, 0xa760, 0xa762, 0xa764, 0xa766, 0xa768, 0xa76a, 0xa76c, 0xa76e, 0xa779, 0xa77b, 0xa77d, 0xa77e, 0xa780, 0xa782, 0xa784, 0xa786, 0xa78b, 0xa78d, 0xa790, 0xa792, 0xa796, 0xa798, - 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b6 + 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b6, + 0xa7b8 #if CHRBITS > 16 ,0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d504, 0x1d505, 0x1d538, 0x1d539, 0x1d546, 0x1d7ca @@ -612,80 +622,79 @@ static const chr upperCharTable[] = { static const crange graphRangeTable[] = { {0x21, 0x7e}, {0xa1, 0xac}, {0xae, 0x377}, {0x37a, 0x37f}, {0x384, 0x38a}, {0x38e, 0x3a1}, {0x3a3, 0x52f}, {0x531, 0x556}, - {0x559, 0x55f}, {0x561, 0x587}, {0x58d, 0x58f}, {0x591, 0x5c7}, - {0x5d0, 0x5ea}, {0x5f0, 0x5f4}, {0x606, 0x61b}, {0x61e, 0x6dc}, - {0x6de, 0x70d}, {0x710, 0x74a}, {0x74d, 0x7b1}, {0x7c0, 0x7fa}, - {0x800, 0x82d}, {0x830, 0x83e}, {0x840, 0x85b}, {0x860, 0x86a}, - {0x8a0, 0x8b4}, {0x8b6, 0x8bd}, {0x8d4, 0x8e1}, {0x8e3, 0x983}, - {0x985, 0x98c}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b6, 0x9b9}, - {0x9bc, 0x9c4}, {0x9cb, 0x9ce}, {0x9df, 0x9e3}, {0x9e6, 0x9fd}, - {0xa01, 0xa03}, {0xa05, 0xa0a}, {0xa13, 0xa28}, {0xa2a, 0xa30}, - {0xa3e, 0xa42}, {0xa4b, 0xa4d}, {0xa59, 0xa5c}, {0xa66, 0xa75}, - {0xa81, 0xa83}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, - {0xaaa, 0xab0}, {0xab5, 0xab9}, {0xabc, 0xac5}, {0xac7, 0xac9}, - {0xacb, 0xacd}, {0xae0, 0xae3}, {0xae6, 0xaf1}, {0xaf9, 0xaff}, - {0xb01, 0xb03}, {0xb05, 0xb0c}, {0xb13, 0xb28}, {0xb2a, 0xb30}, - {0xb35, 0xb39}, {0xb3c, 0xb44}, {0xb4b, 0xb4d}, {0xb5f, 0xb63}, - {0xb66, 0xb77}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, - {0xba8, 0xbaa}, {0xbae, 0xbb9}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, - {0xbca, 0xbcd}, {0xbe6, 0xbfa}, {0xc00, 0xc03}, {0xc05, 0xc0c}, - {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc39}, {0xc3d, 0xc44}, - {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc58, 0xc5a}, {0xc60, 0xc63}, - {0xc66, 0xc6f}, {0xc78, 0xc83}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, - {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbc, 0xcc4}, - {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xce0, 0xce3}, {0xce6, 0xcef}, - {0xd00, 0xd03}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd44}, - {0xd46, 0xd48}, {0xd4a, 0xd4f}, {0xd54, 0xd63}, {0xd66, 0xd7f}, - {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdc0, 0xdc6}, - {0xdcf, 0xdd4}, {0xdd8, 0xddf}, {0xde6, 0xdef}, {0xdf2, 0xdf4}, - {0xe01, 0xe3a}, {0xe3f, 0xe5b}, {0xe94, 0xe97}, {0xe99, 0xe9f}, - {0xea1, 0xea3}, {0xead, 0xeb9}, {0xebb, 0xebd}, {0xec0, 0xec4}, - {0xec8, 0xecd}, {0xed0, 0xed9}, {0xedc, 0xedf}, {0xf00, 0xf47}, - {0xf49, 0xf6c}, {0xf71, 0xf97}, {0xf99, 0xfbc}, {0xfbe, 0xfcc}, - {0xfce, 0xfda}, {0x1000, 0x10c5}, {0x10d0, 0x1248}, {0x124a, 0x124d}, - {0x1250, 0x1256}, {0x125a, 0x125d}, {0x1260, 0x1288}, {0x128a, 0x128d}, - {0x1290, 0x12b0}, {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c2, 0x12c5}, - {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135a}, - {0x135d, 0x137c}, {0x1380, 0x1399}, {0x13a0, 0x13f5}, {0x13f8, 0x13fd}, - {0x1400, 0x167f}, {0x1681, 0x169c}, {0x16a0, 0x16f8}, {0x1700, 0x170c}, - {0x170e, 0x1714}, {0x1720, 0x1736}, {0x1740, 0x1753}, {0x1760, 0x176c}, - {0x176e, 0x1770}, {0x1780, 0x17dd}, {0x17e0, 0x17e9}, {0x17f0, 0x17f9}, - {0x1800, 0x180d}, {0x1810, 0x1819}, {0x1820, 0x1877}, {0x1880, 0x18aa}, - {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1920, 0x192b}, {0x1930, 0x193b}, - {0x1944, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9}, - {0x19d0, 0x19da}, {0x19de, 0x1a1b}, {0x1a1e, 0x1a5e}, {0x1a60, 0x1a7c}, - {0x1a7f, 0x1a89}, {0x1a90, 0x1a99}, {0x1aa0, 0x1aad}, {0x1ab0, 0x1abe}, - {0x1b00, 0x1b4b}, {0x1b50, 0x1b7c}, {0x1b80, 0x1bf3}, {0x1bfc, 0x1c37}, - {0x1c3b, 0x1c49}, {0x1c4d, 0x1c88}, {0x1cc0, 0x1cc7}, {0x1cd0, 0x1cf9}, - {0x1d00, 0x1df9}, {0x1dfb, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, - {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, - {0x1fb6, 0x1fc4}, {0x1fc6, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fdd, 0x1fef}, - {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffe}, {0x2010, 0x2027}, {0x2030, 0x205e}, - {0x2074, 0x208e}, {0x2090, 0x209c}, {0x20a0, 0x20bf}, {0x20d0, 0x20f0}, - {0x2100, 0x218b}, {0x2190, 0x2426}, {0x2440, 0x244a}, {0x2460, 0x2b73}, - {0x2b76, 0x2b95}, {0x2b98, 0x2bb9}, {0x2bbd, 0x2bc8}, {0x2bca, 0x2bd2}, - {0x2bec, 0x2bef}, {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, {0x2c60, 0x2cf3}, + {0x559, 0x58a}, {0x58d, 0x58f}, {0x591, 0x5c7}, {0x5d0, 0x5ea}, + {0x5ef, 0x5f4}, {0x606, 0x61b}, {0x61e, 0x6dc}, {0x6de, 0x70d}, + {0x710, 0x74a}, {0x74d, 0x7b1}, {0x7c0, 0x7fa}, {0x7fd, 0x82d}, + {0x830, 0x83e}, {0x840, 0x85b}, {0x860, 0x86a}, {0x8a0, 0x8b4}, + {0x8b6, 0x8bd}, {0x8d3, 0x8e1}, {0x8e3, 0x983}, {0x985, 0x98c}, + {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b6, 0x9b9}, {0x9bc, 0x9c4}, + {0x9cb, 0x9ce}, {0x9df, 0x9e3}, {0x9e6, 0x9fe}, {0xa01, 0xa03}, + {0xa05, 0xa0a}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa3e, 0xa42}, + {0xa4b, 0xa4d}, {0xa59, 0xa5c}, {0xa66, 0xa76}, {0xa81, 0xa83}, + {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, + {0xab5, 0xab9}, {0xabc, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, + {0xae0, 0xae3}, {0xae6, 0xaf1}, {0xaf9, 0xaff}, {0xb01, 0xb03}, + {0xb05, 0xb0c}, {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb35, 0xb39}, + {0xb3c, 0xb44}, {0xb4b, 0xb4d}, {0xb5f, 0xb63}, {0xb66, 0xb77}, + {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xba8, 0xbaa}, + {0xbae, 0xbb9}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd}, + {0xbe6, 0xbfa}, {0xc00, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, + {0xc2a, 0xc39}, {0xc3d, 0xc44}, {0xc46, 0xc48}, {0xc4a, 0xc4d}, + {0xc58, 0xc5a}, {0xc60, 0xc63}, {0xc66, 0xc6f}, {0xc78, 0xc8c}, + {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, + {0xcbc, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xce0, 0xce3}, + {0xce6, 0xcef}, {0xd00, 0xd03}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, + {0xd12, 0xd44}, {0xd46, 0xd48}, {0xd4a, 0xd4f}, {0xd54, 0xd63}, + {0xd66, 0xd7f}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, + {0xdc0, 0xdc6}, {0xdcf, 0xdd4}, {0xdd8, 0xddf}, {0xde6, 0xdef}, + {0xdf2, 0xdf4}, {0xe01, 0xe3a}, {0xe3f, 0xe5b}, {0xe94, 0xe97}, + {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xead, 0xeb9}, {0xebb, 0xebd}, + {0xec0, 0xec4}, {0xec8, 0xecd}, {0xed0, 0xed9}, {0xedc, 0xedf}, + {0xf00, 0xf47}, {0xf49, 0xf6c}, {0xf71, 0xf97}, {0xf99, 0xfbc}, + {0xfbe, 0xfcc}, {0xfce, 0xfda}, {0x1000, 0x10c5}, {0x10d0, 0x1248}, + {0x124a, 0x124d}, {0x1250, 0x1256}, {0x125a, 0x125d}, {0x1260, 0x1288}, + {0x128a, 0x128d}, {0x1290, 0x12b0}, {0x12b2, 0x12b5}, {0x12b8, 0x12be}, + {0x12c2, 0x12c5}, {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, + {0x1318, 0x135a}, {0x135d, 0x137c}, {0x1380, 0x1399}, {0x13a0, 0x13f5}, + {0x13f8, 0x13fd}, {0x1400, 0x167f}, {0x1681, 0x169c}, {0x16a0, 0x16f8}, + {0x1700, 0x170c}, {0x170e, 0x1714}, {0x1720, 0x1736}, {0x1740, 0x1753}, + {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1780, 0x17dd}, {0x17e0, 0x17e9}, + {0x17f0, 0x17f9}, {0x1800, 0x180d}, {0x1810, 0x1819}, {0x1820, 0x1878}, + {0x1880, 0x18aa}, {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1920, 0x192b}, + {0x1930, 0x193b}, {0x1944, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, + {0x19b0, 0x19c9}, {0x19d0, 0x19da}, {0x19de, 0x1a1b}, {0x1a1e, 0x1a5e}, + {0x1a60, 0x1a7c}, {0x1a7f, 0x1a89}, {0x1a90, 0x1a99}, {0x1aa0, 0x1aad}, + {0x1ab0, 0x1abe}, {0x1b00, 0x1b4b}, {0x1b50, 0x1b7c}, {0x1b80, 0x1bf3}, + {0x1bfc, 0x1c37}, {0x1c3b, 0x1c49}, {0x1c4d, 0x1c88}, {0x1c90, 0x1cba}, + {0x1cbd, 0x1cc7}, {0x1cd0, 0x1cf9}, {0x1d00, 0x1df9}, {0x1dfb, 0x1f15}, + {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, + {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fc4}, {0x1fc6, 0x1fd3}, + {0x1fd6, 0x1fdb}, {0x1fdd, 0x1fef}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffe}, + {0x2010, 0x2027}, {0x2030, 0x205e}, {0x2074, 0x208e}, {0x2090, 0x209c}, + {0x20a0, 0x20bf}, {0x20d0, 0x20f0}, {0x2100, 0x218b}, {0x2190, 0x2426}, + {0x2440, 0x244a}, {0x2460, 0x2b73}, {0x2b76, 0x2b95}, {0x2b98, 0x2bc8}, + {0x2bca, 0x2bfe}, {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, {0x2c60, 0x2cf3}, {0x2cf9, 0x2d25}, {0x2d30, 0x2d67}, {0x2d7f, 0x2d96}, {0x2da0, 0x2da6}, {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, - {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2e49}, + {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2e4e}, {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, - {0x3001, 0x303f}, {0x3041, 0x3096}, {0x3099, 0x30ff}, {0x3105, 0x312e}, + {0x3001, 0x303f}, {0x3041, 0x3096}, {0x3099, 0x30ff}, {0x3105, 0x312f}, {0x3131, 0x318e}, {0x3190, 0x31ba}, {0x31c0, 0x31e3}, {0x31f0, 0x321e}, - {0x3220, 0x32fe}, {0x3300, 0x4db5}, {0x4dc0, 0x9fea}, {0xa000, 0xa48c}, - {0xa490, 0xa4c6}, {0xa4d0, 0xa62b}, {0xa640, 0xa6f7}, {0xa700, 0xa7ae}, - {0xa7b0, 0xa7b7}, {0xa7f7, 0xa82b}, {0xa830, 0xa839}, {0xa840, 0xa877}, - {0xa880, 0xa8c5}, {0xa8ce, 0xa8d9}, {0xa8e0, 0xa8fd}, {0xa900, 0xa953}, - {0xa95f, 0xa97c}, {0xa980, 0xa9cd}, {0xa9cf, 0xa9d9}, {0xa9de, 0xa9fe}, - {0xaa00, 0xaa36}, {0xaa40, 0xaa4d}, {0xaa50, 0xaa59}, {0xaa5c, 0xaac2}, - {0xaadb, 0xaaf6}, {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16}, - {0xab20, 0xab26}, {0xab28, 0xab2e}, {0xab30, 0xab65}, {0xab70, 0xabed}, - {0xabf0, 0xabf9}, {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, - {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, - {0xfb1d, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb46, 0xfbc1}, {0xfbd3, 0xfd3f}, - {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfd}, {0xfe00, 0xfe19}, - {0xfe20, 0xfe52}, {0xfe54, 0xfe66}, {0xfe68, 0xfe6b}, {0xfe70, 0xfe74}, - {0xfe76, 0xfefc}, {0xff01, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, - {0xffd2, 0xffd7}, {0xffda, 0xffdc}, {0xffe0, 0xffe6}, {0xffe8, 0xffee} + {0x3220, 0x32fe}, {0x3300, 0x4db5}, {0x4dc0, 0x9fef}, {0xa000, 0xa48c}, + {0xa490, 0xa4c6}, {0xa4d0, 0xa62b}, {0xa640, 0xa6f7}, {0xa700, 0xa7b9}, + {0xa7f7, 0xa82b}, {0xa830, 0xa839}, {0xa840, 0xa877}, {0xa880, 0xa8c5}, + {0xa8ce, 0xa8d9}, {0xa8e0, 0xa953}, {0xa95f, 0xa97c}, {0xa980, 0xa9cd}, + {0xa9cf, 0xa9d9}, {0xa9de, 0xa9fe}, {0xaa00, 0xaa36}, {0xaa40, 0xaa4d}, + {0xaa50, 0xaa59}, {0xaa5c, 0xaac2}, {0xaadb, 0xaaf6}, {0xab01, 0xab06}, + {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, {0xab28, 0xab2e}, + {0xab30, 0xab65}, {0xab70, 0xabed}, {0xabf0, 0xabf9}, {0xac00, 0xd7a3}, + {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, + {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb36}, {0xfb38, 0xfb3c}, + {0xfb46, 0xfbc1}, {0xfbd3, 0xfd3f}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, + {0xfdf0, 0xfdfd}, {0xfe00, 0xfe19}, {0xfe20, 0xfe52}, {0xfe54, 0xfe66}, + {0xfe68, 0xfe6b}, {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff01, 0xffbe}, + {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc}, + {0xffe0, 0xffe6}, {0xffe8, 0xffee} #if CHRBITS > 16 ,{0x10000, 0x1000b}, {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003f, 0x1004d}, {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10100, 0x10102}, {0x10107, 0x10133}, @@ -697,81 +706,85 @@ static const crange graphRangeTable[] = { {0x10760, 0x10767}, {0x10800, 0x10805}, {0x1080a, 0x10835}, {0x1083f, 0x10855}, {0x10857, 0x1089e}, {0x108a7, 0x108af}, {0x108e0, 0x108f2}, {0x108fb, 0x1091b}, {0x1091f, 0x10939}, {0x10980, 0x109b7}, {0x109bc, 0x109cf}, {0x109d2, 0x10a03}, - {0x10a0c, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a33}, {0x10a38, 0x10a3a}, - {0x10a3f, 0x10a47}, {0x10a50, 0x10a58}, {0x10a60, 0x10a9f}, {0x10ac0, 0x10ae6}, + {0x10a0c, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, {0x10a38, 0x10a3a}, + {0x10a3f, 0x10a48}, {0x10a50, 0x10a58}, {0x10a60, 0x10a9f}, {0x10ac0, 0x10ae6}, {0x10aeb, 0x10af6}, {0x10b00, 0x10b35}, {0x10b39, 0x10b55}, {0x10b58, 0x10b72}, {0x10b78, 0x10b91}, {0x10b99, 0x10b9c}, {0x10ba9, 0x10baf}, {0x10c00, 0x10c48}, - {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10cfa, 0x10cff}, {0x10e60, 0x10e7e}, - {0x11000, 0x1104d}, {0x11052, 0x1106f}, {0x1107f, 0x110bc}, {0x110be, 0x110c1}, - {0x110d0, 0x110e8}, {0x110f0, 0x110f9}, {0x11100, 0x11134}, {0x11136, 0x11143}, - {0x11150, 0x11176}, {0x11180, 0x111cd}, {0x111d0, 0x111df}, {0x111e1, 0x111f4}, - {0x11200, 0x11211}, {0x11213, 0x1123e}, {0x11280, 0x11286}, {0x1128a, 0x1128d}, - {0x1128f, 0x1129d}, {0x1129f, 0x112a9}, {0x112b0, 0x112ea}, {0x112f0, 0x112f9}, - {0x11300, 0x11303}, {0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330}, - {0x11335, 0x11339}, {0x1133c, 0x11344}, {0x1134b, 0x1134d}, {0x1135d, 0x11363}, - {0x11366, 0x1136c}, {0x11370, 0x11374}, {0x11400, 0x11459}, {0x11480, 0x114c7}, - {0x114d0, 0x114d9}, {0x11580, 0x115b5}, {0x115b8, 0x115dd}, {0x11600, 0x11644}, - {0x11650, 0x11659}, {0x11660, 0x1166c}, {0x11680, 0x116b7}, {0x116c0, 0x116c9}, - {0x11700, 0x11719}, {0x1171d, 0x1172b}, {0x11730, 0x1173f}, {0x118a0, 0x118f2}, - {0x11a00, 0x11a47}, {0x11a50, 0x11a83}, {0x11a86, 0x11a9c}, {0x11a9e, 0x11aa2}, - {0x11ac0, 0x11af8}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c36}, {0x11c38, 0x11c45}, - {0x11c50, 0x11c6c}, {0x11c70, 0x11c8f}, {0x11c92, 0x11ca7}, {0x11ca9, 0x11cb6}, - {0x11d00, 0x11d06}, {0x11d0b, 0x11d36}, {0x11d3f, 0x11d47}, {0x11d50, 0x11d59}, + {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10cfa, 0x10d27}, {0x10d30, 0x10d39}, + {0x10e60, 0x10e7e}, {0x10f00, 0x10f27}, {0x10f30, 0x10f59}, {0x11000, 0x1104d}, + {0x11052, 0x1106f}, {0x1107f, 0x110bc}, {0x110be, 0x110c1}, {0x110d0, 0x110e8}, + {0x110f0, 0x110f9}, {0x11100, 0x11134}, {0x11136, 0x11146}, {0x11150, 0x11176}, + {0x11180, 0x111cd}, {0x111d0, 0x111df}, {0x111e1, 0x111f4}, {0x11200, 0x11211}, + {0x11213, 0x1123e}, {0x11280, 0x11286}, {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, + {0x1129f, 0x112a9}, {0x112b0, 0x112ea}, {0x112f0, 0x112f9}, {0x11300, 0x11303}, + {0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339}, + {0x1133b, 0x11344}, {0x1134b, 0x1134d}, {0x1135d, 0x11363}, {0x11366, 0x1136c}, + {0x11370, 0x11374}, {0x11400, 0x11459}, {0x11480, 0x114c7}, {0x114d0, 0x114d9}, + {0x11580, 0x115b5}, {0x115b8, 0x115dd}, {0x11600, 0x11644}, {0x11650, 0x11659}, + {0x11660, 0x1166c}, {0x11680, 0x116b7}, {0x116c0, 0x116c9}, {0x11700, 0x1171a}, + {0x1171d, 0x1172b}, {0x11730, 0x1173f}, {0x11800, 0x1183b}, {0x118a0, 0x118f2}, + {0x11a00, 0x11a47}, {0x11a50, 0x11a83}, {0x11a86, 0x11aa2}, {0x11ac0, 0x11af8}, + {0x11c00, 0x11c08}, {0x11c0a, 0x11c36}, {0x11c38, 0x11c45}, {0x11c50, 0x11c6c}, + {0x11c70, 0x11c8f}, {0x11c92, 0x11ca7}, {0x11ca9, 0x11cb6}, {0x11d00, 0x11d06}, + {0x11d0b, 0x11d36}, {0x11d3f, 0x11d47}, {0x11d50, 0x11d59}, {0x11d60, 0x11d65}, + {0x11d6a, 0x11d8e}, {0x11d93, 0x11d98}, {0x11da0, 0x11da9}, {0x11ee0, 0x11ef8}, {0x12000, 0x12399}, {0x12400, 0x1246e}, {0x12470, 0x12474}, {0x12480, 0x12543}, {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e}, {0x16a60, 0x16a69}, {0x16ad0, 0x16aed}, {0x16af0, 0x16af5}, {0x16b00, 0x16b45}, {0x16b50, 0x16b59}, {0x16b5b, 0x16b61}, {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, - {0x16f00, 0x16f44}, {0x16f50, 0x16f7e}, {0x16f8f, 0x16f9f}, {0x17000, 0x187ec}, - {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, {0x1bc00, 0x1bc6a}, - {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, {0x1bc9c, 0x1bc9f}, - {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d129, 0x1d172}, {0x1d17b, 0x1d1e8}, - {0x1d200, 0x1d245}, {0x1d300, 0x1d356}, {0x1d360, 0x1d371}, {0x1d400, 0x1d454}, - {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, - {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, - {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, - {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d7cb}, {0x1d7ce, 0x1da8b}, {0x1da9b, 0x1da9f}, - {0x1daa1, 0x1daaf}, {0x1e000, 0x1e006}, {0x1e008, 0x1e018}, {0x1e01b, 0x1e021}, - {0x1e026, 0x1e02a}, {0x1e800, 0x1e8c4}, {0x1e8c7, 0x1e8d6}, {0x1e900, 0x1e94a}, - {0x1e950, 0x1e959}, {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee29, 0x1ee32}, - {0x1ee34, 0x1ee37}, {0x1ee4d, 0x1ee4f}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, - {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c}, {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, - {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x1f000, 0x1f02b}, - {0x1f030, 0x1f093}, {0x1f0a0, 0x1f0ae}, {0x1f0b1, 0x1f0bf}, {0x1f0c1, 0x1f0cf}, - {0x1f0d1, 0x1f0f5}, {0x1f100, 0x1f10c}, {0x1f110, 0x1f12e}, {0x1f130, 0x1f16b}, - {0x1f170, 0x1f1ac}, {0x1f1e6, 0x1f202}, {0x1f210, 0x1f23b}, {0x1f240, 0x1f248}, - {0x1f260, 0x1f265}, {0x1f300, 0x1f6d4}, {0x1f6e0, 0x1f6ec}, {0x1f6f0, 0x1f6f9}, - {0x1f700, 0x1f773}, {0x1f780, 0x1f7d4}, {0x1f800, 0x1f80b}, {0x1f810, 0x1f847}, - {0x1f850, 0x1f859}, {0x1f860, 0x1f887}, {0x1f890, 0x1f8ad}, {0x1f900, 0x1f90b}, - {0x1f910, 0x1f93e}, {0x1f940, 0x1f970}, {0x1f973, 0x1f976}, {0x1f97c, 0x1f9a2}, - {0x1f9b0, 0x1f9b9}, {0x1f9c0, 0x1f9c2}, {0x1f9d0, 0x1f9ff}, {0x1fa60, 0x1fa6d}, - {0x20000, 0x2a6d6}, {0x2a700, 0x2b734}, {0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, - {0x2ceb0, 0x2ebe0}, {0x2f800, 0x2fa1d}, {0xe0100, 0xe01ef} + {0x16e40, 0x16e9a}, {0x16f00, 0x16f44}, {0x16f50, 0x16f7e}, {0x16f8f, 0x16f9f}, + {0x17000, 0x187f1}, {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, + {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, + {0x1bc9c, 0x1bc9f}, {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d129, 0x1d172}, + {0x1d17b, 0x1d1e8}, {0x1d200, 0x1d245}, {0x1d2e0, 0x1d2f3}, {0x1d300, 0x1d356}, + {0x1d360, 0x1d378}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, + {0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, + {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, + {0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d7cb}, + {0x1d7ce, 0x1da8b}, {0x1da9b, 0x1da9f}, {0x1daa1, 0x1daaf}, {0x1e000, 0x1e006}, + {0x1e008, 0x1e018}, {0x1e01b, 0x1e021}, {0x1e026, 0x1e02a}, {0x1e800, 0x1e8c4}, + {0x1e8c7, 0x1e8d6}, {0x1e900, 0x1e94a}, {0x1e950, 0x1e959}, {0x1ec71, 0x1ecb4}, + {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37}, + {0x1ee4d, 0x1ee4f}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77}, + {0x1ee79, 0x1ee7c}, {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3}, + {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x1f000, 0x1f02b}, {0x1f030, 0x1f093}, + {0x1f0a0, 0x1f0ae}, {0x1f0b1, 0x1f0bf}, {0x1f0c1, 0x1f0cf}, {0x1f0d1, 0x1f0f5}, + {0x1f100, 0x1f10c}, {0x1f110, 0x1f16b}, {0x1f170, 0x1f1ac}, {0x1f1e6, 0x1f202}, + {0x1f210, 0x1f23b}, {0x1f240, 0x1f248}, {0x1f260, 0x1f265}, {0x1f300, 0x1f6d4}, + {0x1f6e0, 0x1f6ec}, {0x1f6f0, 0x1f6f9}, {0x1f700, 0x1f773}, {0x1f780, 0x1f7d8}, + {0x1f800, 0x1f80b}, {0x1f810, 0x1f847}, {0x1f850, 0x1f859}, {0x1f860, 0x1f887}, + {0x1f890, 0x1f8ad}, {0x1f900, 0x1f90b}, {0x1f910, 0x1f93e}, {0x1f940, 0x1f970}, + {0x1f973, 0x1f976}, {0x1f97c, 0x1f9a2}, {0x1f9b0, 0x1f9b9}, {0x1f9c0, 0x1f9c2}, + {0x1f9d0, 0x1f9ff}, {0x1fa60, 0x1fa6d}, {0x20000, 0x2a6d6}, {0x2a700, 0x2b734}, + {0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, {0x2ceb0, 0x2ebe0}, {0x2f800, 0x2fa1d}, + {0xe0100, 0xe01ef} #endif }; #define NUM_GRAPH_RANGE (sizeof(graphRangeTable)/sizeof(crange)) static const chr graphCharTable[] = { - 0x38c, 0x589, 0x58a, 0x85e, 0x98f, 0x990, 0x9b2, 0x9c7, 0x9c8, - 0x9d7, 0x9dc, 0x9dd, 0xa0f, 0xa10, 0xa32, 0xa33, 0xa35, 0xa36, - 0xa38, 0xa39, 0xa3c, 0xa47, 0xa48, 0xa51, 0xa5e, 0xab2, 0xab3, - 0xad0, 0xb0f, 0xb10, 0xb32, 0xb33, 0xb47, 0xb48, 0xb56, 0xb57, - 0xb5c, 0xb5d, 0xb82, 0xb83, 0xb99, 0xb9a, 0xb9c, 0xb9e, 0xb9f, - 0xba3, 0xba4, 0xbd0, 0xbd7, 0xc55, 0xc56, 0xcd5, 0xcd6, 0xcde, - 0xcf1, 0xcf2, 0xd82, 0xd83, 0xdbd, 0xdca, 0xdd6, 0xe81, 0xe82, - 0xe84, 0xe87, 0xe88, 0xe8a, 0xe8d, 0xea5, 0xea7, 0xeaa, 0xeab, - 0xec6, 0x10c7, 0x10cd, 0x1258, 0x12c0, 0x1772, 0x1773, 0x1940, 0x1f59, - 0x1f5b, 0x1f5d, 0x2070, 0x2071, 0x2d27, 0x2d2d, 0x2d6f, 0x2d70, 0xfb3e, - 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfffc, 0xfffd + 0x38c, 0x85e, 0x98f, 0x990, 0x9b2, 0x9c7, 0x9c8, 0x9d7, 0x9dc, + 0x9dd, 0xa0f, 0xa10, 0xa32, 0xa33, 0xa35, 0xa36, 0xa38, 0xa39, + 0xa3c, 0xa47, 0xa48, 0xa51, 0xa5e, 0xab2, 0xab3, 0xad0, 0xb0f, + 0xb10, 0xb32, 0xb33, 0xb47, 0xb48, 0xb56, 0xb57, 0xb5c, 0xb5d, + 0xb82, 0xb83, 0xb99, 0xb9a, 0xb9c, 0xb9e, 0xb9f, 0xba3, 0xba4, + 0xbd0, 0xbd7, 0xc55, 0xc56, 0xcd5, 0xcd6, 0xcde, 0xcf1, 0xcf2, + 0xd82, 0xd83, 0xdbd, 0xdca, 0xdd6, 0xe81, 0xe82, 0xe84, 0xe87, + 0xe88, 0xe8a, 0xe8d, 0xea5, 0xea7, 0xeaa, 0xeab, 0xec6, 0x10c7, + 0x10cd, 0x1258, 0x12c0, 0x1772, 0x1773, 0x1940, 0x1f59, 0x1f5b, 0x1f5d, + 0x2070, 0x2071, 0x2d27, 0x2d2d, 0x2d6f, 0x2d70, 0xfb3e, 0xfb40, 0xfb41, + 0xfb43, 0xfb44, 0xfffc, 0xfffd #if CHRBITS > 16 ,0x1003c, 0x1003d, 0x101a0, 0x1056f, 0x10808, 0x10837, 0x10838, 0x1083c, 0x108f4, 0x108f5, 0x1093f, 0x10a05, 0x10a06, 0x11288, 0x1130f, 0x11310, 0x11332, 0x11333, - 0x11347, 0x11348, 0x11350, 0x11357, 0x1145b, 0x1145d, 0x118ff, 0x11d08, 0x11d09, - 0x11d3a, 0x11d3c, 0x11d3d, 0x16a6e, 0x16a6f, 0x16fe0, 0x16fe1, 0x1d49e, 0x1d49f, - 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546, 0x1e023, 0x1e024, 0x1e95e, 0x1e95f, - 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, - 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, - 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e, 0x1eef0, 0x1eef1, 0x1f250, 0x1f251, 0x1f97a + 0x11347, 0x11348, 0x11350, 0x11357, 0x1145b, 0x1145d, 0x1145e, 0x118ff, 0x11d08, + 0x11d09, 0x11d3a, 0x11d3c, 0x11d3d, 0x11d67, 0x11d68, 0x11d90, 0x11d91, 0x16a6e, + 0x16a6f, 0x16fe0, 0x16fe1, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, + 0x1d546, 0x1e023, 0x1e024, 0x1e95e, 0x1e95f, 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, + 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, + 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e, + 0x1eef0, 0x1eef1, 0x1f250, 0x1f251, 0x1f97a #endif }; diff --git a/generic/tclUniData.c b/generic/tclUniData.c index 834fcc4..faca93d 100644 --- a/generic/tclUniData.c +++ b/generic/tclUniData.c @@ -42,22 +42,22 @@ static const unsigned short pageMap[] = { 4384, 4416, 1344, 4448, 4480, 4512, 4544, 1344, 4576, 4608, 4640, 4672, 1344, 4704, 4736, 4768, 4800, 4832, 1344, 4864, 4896, 4928, 4960, 1344, 4992, 5024, 5056, 5088, 1824, 1824, 5120, 5152, 5184, 5216, 5248, 5280, - 1344, 5312, 1344, 5344, 5376, 5408, 5440, 1824, 5472, 5504, 5536, 5568, - 5600, 5632, 5664, 5600, 704, 5696, 224, 224, 224, 224, 5728, 224, 224, - 224, 5760, 5792, 5824, 5856, 5888, 5920, 5952, 5984, 6016, 6048, 6080, - 6112, 6144, 6176, 6208, 6240, 6272, 6304, 6336, 6368, 6400, 6432, 6464, - 6496, 6528, 6528, 6528, 6528, 6528, 6528, 6528, 6528, 6560, 6592, 4928, - 6624, 6656, 6688, 6720, 6752, 4928, 6784, 6816, 6848, 6880, 6912, 6944, - 6976, 4928, 4928, 4928, 4928, 4928, 7008, 7040, 7072, 4928, 4928, 4928, - 7104, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 7136, 7168, 4928, 7200, - 7232, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 6528, 6528, 6528, - 6528, 7264, 6528, 7296, 7328, 6528, 6528, 6528, 6528, 6528, 6528, 6528, - 6528, 4928, 7360, 7392, 7424, 7456, 7488, 7520, 7552, 7584, 7616, 7648, + 1344, 5312, 1344, 5344, 5376, 5408, 5440, 5472, 5504, 5536, 5568, 5600, + 5632, 5664, 5696, 5632, 704, 5728, 224, 224, 224, 224, 5760, 224, 224, + 224, 5792, 5824, 5856, 5888, 5920, 5952, 5984, 6016, 6048, 6080, 6112, + 6144, 6176, 6208, 6240, 6272, 6304, 6336, 6368, 6400, 6432, 6464, 6496, + 6528, 6560, 6560, 6560, 6560, 6560, 6560, 6560, 6560, 6592, 6624, 4928, + 6656, 6688, 6720, 6752, 6784, 4928, 6816, 6848, 6880, 6912, 6944, 6976, + 7008, 4928, 4928, 4928, 4928, 4928, 7040, 7072, 7104, 4928, 4928, 4928, + 7136, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 7168, 7200, 4928, 7232, + 7264, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 6560, 6560, 6560, + 6560, 7296, 6560, 7328, 7360, 6560, 6560, 6560, 6560, 6560, 6560, 6560, + 6560, 4928, 7392, 7424, 7456, 7488, 4928, 7520, 7552, 7584, 7616, 7648, 7680, 224, 224, 224, 7712, 7744, 7776, 1344, 7808, 7840, 7872, 7872, 704, 7904, 7936, 7968, 1824, 8000, 4928, 4928, 8032, 4928, 4928, 4928, 4928, 4928, 4928, 8064, 8096, 8128, 8160, 3232, 1344, 8192, 4192, 1344, - 8224, 8256, 8288, 1344, 1344, 8320, 8352, 4928, 8384, 8416, 8448, 8480, - 4928, 8448, 8512, 4928, 8416, 4928, 4928, 4928, 4928, 4928, 4928, 4928, + 8224, 8256, 8288, 1344, 1344, 8320, 8352, 4928, 8384, 7552, 8416, 8448, + 4928, 8416, 8480, 4928, 7552, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -130,7 +130,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1792, 8544, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 8512, 8544, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 8576, 4928, 8608, 5408, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -203,37 +203,37 @@ static const unsigned short pageMap[] = { 1344, 11520, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 7840, 4704, 10272, 1824, 1824, 1824, 1824, 11552, 11584, 11616, 11648, 4736, 11680, 1824, 11712, 11744, 11776, - 1824, 1824, 1344, 11808, 11840, 6848, 11872, 11904, 11936, 11968, 12000, + 1824, 1824, 1344, 11808, 11840, 6880, 11872, 11904, 11936, 11968, 12000, 1824, 12032, 12064, 1344, 12096, 12128, 12160, 12192, 12224, 1824, - 1824, 1344, 1344, 12256, 1824, 12288, 12320, 12352, 12384, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 12416, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 12448, - 12480, 12512, 12544, 5248, 12576, 12608, 12640, 12672, 12704, 12736, - 12768, 5248, 12800, 12832, 12864, 12896, 12928, 1824, 1824, 12960, - 12992, 13024, 13056, 13088, 2368, 13120, 13152, 1824, 1824, 1824, 1824, - 1344, 13184, 13216, 1824, 1344, 13248, 13280, 1824, 1824, 1824, 1824, - 1824, 1344, 13312, 13344, 1824, 1344, 13376, 13408, 13440, 1344, 13472, - 13504, 1824, 13536, 13568, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 13600, 13632, 13664, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 13696, 13728, 13760, 1344, 13792, 13824, 1344, - 13856, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 13888, 13920, - 13952, 13984, 14016, 14048, 1824, 1824, 14080, 14112, 14144, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, + 1824, 1344, 1344, 12256, 1824, 12288, 12320, 12352, 12384, 1344, 12416, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 12448, 1824, + 1824, 1824, 1824, 12000, 12480, 12512, 1824, 1824, 1824, 1824, 1824, + 12544, 12576, 12608, 12640, 5248, 12672, 12704, 12736, 12768, 12800, + 12832, 12864, 5248, 12896, 12928, 12960, 12992, 13024, 1824, 1824, + 13056, 13088, 13120, 13152, 13184, 13216, 13248, 13280, 1824, 1824, + 1824, 1824, 1344, 13312, 13344, 1824, 1344, 13376, 13408, 1824, 1824, + 1824, 1824, 1824, 1344, 13440, 13472, 1824, 1344, 13504, 13536, 13568, + 1344, 13600, 13632, 1824, 4032, 13664, 1824, 1824, 1824, 1824, 1824, + 1824, 1344, 13696, 1824, 1824, 1824, 13728, 13760, 13792, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 13824, 13856, 13888, 1344, 13920, + 13952, 1344, 4608, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 13984, 14016, 14048, 14080, 14112, 14144, 1824, 1824, 14176, 14208, + 14240, 14272, 14304, 13632, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 14336, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 9984, 1824, 1824, 1824, 10848, 10848, 10848, 14176, 1344, 1344, 1344, - 1344, 1344, 1344, 14208, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 9984, 1824, 1824, 1824, 10848, 10848, 10848, + 14368, 1344, 1344, 1344, 1344, 1344, 1344, 14400, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 14240, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14432, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -243,10 +243,9 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 14272, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14464, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -268,12 +267,13 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 13856, 4736, 14304, 1824, 1824, 10208, - 14336, 1344, 14368, 14400, 14432, 14464, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, - 14496, 14528, 14560, 1824, 1824, 14592, 1344, 1344, 1344, 1344, 1344, + 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 4608, 4736, 14496, + 1824, 1824, 10208, 14528, 1344, 14560, 14592, 14624, 8512, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 13728, 13760, 14656, 1824, + 1824, 1824, 1344, 1344, 14688, 14720, 14752, 1824, 1824, 14784, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -289,9 +289,9 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 14624, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14816, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14656, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14848, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -316,17 +316,16 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 4736, 1824, 1824, 10208, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 9856, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 4736, 1824, 1824, 10208, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 9856, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 14688, 14720, - 14752, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, + 14880, 14912, 14944, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -338,40 +337,42 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 4928, 4928, 4928, 4928, 4928, 4928, 4928, 8064, 4928, 14784, 4928, - 14816, 14848, 14880, 4928, 14912, 4928, 4928, 14944, 1824, 1824, 1824, - 1824, 1824, 4928, 4928, 14976, 15008, 1824, 1824, 1824, 1824, 15040, - 15072, 15104, 15136, 15168, 15200, 15232, 15264, 15296, 15328, 15360, - 15392, 15424, 15040, 15072, 15456, 15136, 15488, 15520, 15552, 15264, - 15584, 15616, 15648, 15680, 15712, 15744, 15776, 15808, 15840, 15872, - 15904, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, - 4928, 4928, 4928, 4928, 4928, 4928, 704, 15936, 704, 15968, 16000, - 16032, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 8064, 4928, 14976, + 4928, 15008, 15040, 15072, 4928, 15104, 4928, 4928, 15136, 1824, 1824, + 1824, 1824, 15168, 4928, 4928, 15200, 15232, 1824, 1824, 1824, 1824, + 15264, 15296, 15328, 15360, 15392, 15424, 15456, 15488, 15520, 15552, + 15584, 15616, 15648, 15264, 15296, 15680, 15360, 15712, 15744, 15776, + 15488, 15808, 15840, 15872, 15904, 15936, 15968, 16000, 16032, 16064, + 16096, 16128, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, + 4928, 4928, 4928, 4928, 4928, 4928, 4928, 704, 16160, 704, 16192, 16224, + 16256, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 16064, 16096, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 16288, 16320, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1344, 1344, 1344, 1344, 1344, 1344, 16128, 1824, 16160, 16192, - 16224, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1344, 1344, 1344, 1344, 1344, 1344, 16352, 1824, 16384, 16416, + 16448, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 16256, 16288, 16320, 16352, 16384, 16416, 1824, 16448, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 4928, 16480, 4928, - 4928, 8032, 16512, 16544, 8064, 16576, 16608, 4928, 16480, 4928, 16640, - 1824, 16672, 16704, 16736, 16768, 16800, 1824, 1824, 1824, 1824, 4928, - 4928, 4928, 4928, 4928, 4928, 4928, 16832, 4928, 4928, 4928, 4928, + 1824, 1824, 16480, 6880, 16512, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 16544, 16576, 16608, 16640, 16672, 16704, 1824, + 16736, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 4928, 16768, + 4928, 4928, 8032, 16800, 16832, 8064, 16864, 4928, 4928, 16768, 4928, + 16896, 1824, 16928, 16960, 16992, 17024, 17056, 1824, 1824, 1824, 1824, + 4928, 4928, 4928, 4928, 4928, 4928, 4928, 17088, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, - 4928, 4928, 4928, 4928, 4928, 4928, 16864, 16896, 4928, 4928, 4928, - 8032, 4928, 4928, 16864, 1824, 16480, 4928, 16928, 4928, 16960, 16992, - 1824, 1824, 16480, 8416, 4928, 17024, 4928, 17056, 16704, 4928, 1824, - 1824, 1824, 16992, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 4928, 4928, 4928, 4928, 4928, 4928, 4928, 17120, 17152, 4928, 4928, + 4928, 8032, 4928, 4928, 17184, 1824, 16768, 4928, 17216, 4928, 17248, + 17280, 1824, 1824, 16768, 7552, 4928, 17312, 4928, 17344, 16960, 4928, + 1824, 1824, 1824, 17280, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -482,8 +483,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 7840, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 7840, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -494,7 +494,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 17088, 1344, 1344, 1344, 1344, 1344, 1344, 11360, 1344, 1344, + 1344, 1344, 17376, 1344, 1344, 1344, 1344, 1344, 1344, 11360, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -509,7 +509,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 17120, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 17408, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -529,7 +529,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 17152, 1824, 1824, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 1344, 17440, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -539,7 +539,6 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 11360 - #endif /* TCL_UTF_MAX > 3 */ }; @@ -617,100 +616,100 @@ static const unsigned char groupMap[] = { 23, 24, 23, 24, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 0, 0, 91, 3, 3, 3, 3, 3, 3, 0, 123, 123, 123, 123, 123, 123, 123, 123, + 0, 0, 91, 3, 3, 3, 3, 3, 3, 21, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 21, 0, 3, 8, 0, 0, 14, 14, 4, 0, 92, 92, 92, 92, 92, 92, + 123, 123, 123, 21, 21, 3, 8, 0, 0, 14, 14, 4, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 8, 92, 3, 92, 92, 3, 92, 92, 3, 92, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, - 15, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, - 17, 17, 7, 7, 7, 3, 3, 4, 3, 3, 14, 14, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 3, 17, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 15, 92, + 92, 92, 92, 92, 92, 92, 8, 92, 3, 92, 92, 3, 92, 92, 3, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, + 15, 15, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, + 17, 17, 17, 7, 7, 7, 3, 3, 4, 3, 3, 14, 14, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 3, 17, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 15, + 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 3, 15, 92, 92, 92, 92, 92, 92, 92, 17, 14, 92, 92, 92, 92, 92, - 92, 91, 91, 92, 92, 14, 92, 92, 92, 92, 15, 15, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 15, 15, 15, 14, 14, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 0, 17, 15, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 3, 15, 92, 92, 92, 92, 92, 92, 92, 17, 14, 92, 92, 92, 92, + 92, 92, 91, 91, 92, 92, 14, 92, 92, 92, 92, 15, 15, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 15, 15, 15, 14, 14, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 0, 17, 15, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, + 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 91, 91, 14, 3, 3, 3, 91, 0, 0, 0, 0, 0, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 14, 3, 3, 3, 91, 0, 0, + 92, 4, 4, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 91, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 91, 92, 92, 92, 91, 92, 92, 92, 92, 92, 0, 0, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 92, 92, 92, 92, 91, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 91, 92, 92, 92, 91, 92, 92, 92, 92, 92, 0, 0, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, - 92, 92, 0, 0, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 15, 92, 92, 92, 0, 0, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 17, 92, 92, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 17, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, - 124, 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, - 124, 124, 92, 124, 124, 15, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 92, 92, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 3, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 0, 0, - 15, 15, 15, 15, 0, 0, 92, 15, 124, 124, 124, 92, 92, 92, 92, 0, 0, - 124, 124, 0, 0, 124, 124, 92, 15, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, - 0, 0, 15, 15, 0, 15, 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 15, 15, 4, 4, 18, 18, 18, 18, 18, 18, 14, 4, 15, 3, 0, 0, 0, - 92, 92, 124, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 0, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, - 0, 15, 15, 0, 0, 92, 0, 124, 124, 124, 92, 92, 0, 0, 0, 0, 92, 92, - 0, 0, 92, 92, 92, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, 92, 15, - 15, 15, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 124, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 92, 124, 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, + 92, 124, 124, 124, 124, 92, 124, 124, 15, 92, 92, 92, 92, 92, 92, 92, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 3, 3, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 3, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, + 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, + 0, 0, 0, 15, 15, 15, 15, 0, 0, 92, 15, 124, 124, 124, 92, 92, 92, 92, + 0, 0, 124, 124, 0, 0, 124, 124, 92, 15, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 0, 15, 15, 0, 15, 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 15, 15, 4, 4, 18, 18, 18, 18, 18, 18, 14, 4, 15, 3, 92, + 0, 0, 92, 92, 124, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 0, + 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, + 15, 15, 0, 15, 15, 0, 0, 92, 0, 124, 124, 124, 92, 92, 0, 0, 0, 0, + 92, 92, 0, 0, 92, 92, 92, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 15, 15, + 15, 15, 0, 15, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, + 92, 15, 15, 15, 92, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 124, 0, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, + 0, 0, 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 0, 92, 92, 124, 0, + 124, 124, 92, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 4, 0, 0, 0, + 0, 0, 0, 0, 15, 92, 92, 92, 92, 92, 92, 0, 92, 124, 124, 0, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, - 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 0, 92, 92, 124, 0, 124, - 124, 92, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 4, 0, 0, 0, 0, 0, - 0, 0, 15, 92, 92, 92, 92, 92, 92, 0, 92, 124, 124, 0, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 92, 15, - 124, 92, 124, 92, 92, 92, 92, 0, 0, 124, 124, 0, 0, 124, 124, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 92, 124, 0, 0, 0, 0, 15, 15, 0, 15, 15, 15, 92, - 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15, 18, 18, 18, 18, 18, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 0, 15, 15, 15, 15, 15, 15, - 0, 0, 0, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, 15, 0, - 15, 15, 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 0, 0, 0, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 124, 124, 92, 124, + 92, 15, 124, 92, 124, 92, 92, 92, 92, 0, 0, 124, 124, 0, 0, 124, 124, + 92, 0, 0, 0, 0, 0, 0, 0, 0, 92, 124, 0, 0, 0, 0, 15, 15, 0, 15, 15, + 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15, 18, 18, 18, + 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 0, 15, 15, 15, 15, + 15, 15, 0, 0, 0, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, + 15, 0, 15, 15, 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 0, 0, 0, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 124, 124, 92, 124, 124, 0, 0, 0, 124, 124, 124, 0, 124, 124, 124, 92, 0, 0, 15, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 14, 14, 14, 14, 14, 14, 4, 14, 0, - 0, 0, 0, 0, 92, 124, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 0, 0, 0, 92, 124, 124, 124, 92, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 92, 92, 92, 124, 124, 124, 124, 0, 92, 92, 92, 0, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 92, 92, 0, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, - 18, 18, 14, 15, 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 18, 18, 14, 15, 92, 124, 124, 3, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 92, 15, 124, 92, 124, @@ -765,353 +764,355 @@ static const unsigned char groupMap[] = { 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 125, 0, 0, 0, 0, 0, 125, 0, 0, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 91, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, - 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 92, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, - 0, 0, 0, 0, 0, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, 104, 104, 104, 104, 104, - 104, 0, 0, 110, 110, 110, 110, 110, 110, 0, 0, 8, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 5, - 6, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 127, - 127, 127, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, - 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 3, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, - 0, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, - 124, 92, 92, 92, 92, 92, 92, 92, 124, 124, 124, 124, 124, 124, 124, - 124, 92, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, - 3, 91, 3, 3, 3, 4, 15, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, - 0, 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 92, 92, 92, 17, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 91, 15, 15, 15, 15, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 3, 91, 126, 126, 126, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, + 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, + 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, + 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, + 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 15, 0, 0, 0, 0, 0, 15, + 15, 0, 0, 92, 92, 92, 3, 3, 3, 3, 3, 3, 3, 3, 3, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 104, 104, 104, 104, 104, 104, 0, 0, 110, 110, 110, 110, + 110, 110, 0, 0, 8, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 3, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 5, 6, 0, 0, 0, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 128, 128, 128, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 92, 92, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 92, 92, 92, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 92, 92, 92, 124, 124, 124, 124, 92, - 92, 124, 124, 124, 0, 0, 0, 0, 124, 124, 92, 124, 124, 124, 124, 124, - 124, 92, 92, 92, 0, 0, 0, 0, 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, - 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 124, 92, 92, 92, 92, 92, 92, + 92, 124, 124, 124, 124, 124, 124, 124, 124, 92, 124, 124, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, 3, 91, 3, 3, 3, 4, 15, 92, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 8, 3, 3, + 3, 3, 92, 92, 92, 17, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 92, 92, 124, 124, 92, 0, 0, 3, 3, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 124, 92, 124, 92, 92, 92, 92, 92, 92, 92, 0, 92, 124, 92, 124, - 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 124, 124, 124, 124, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 92, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 91, 3, 3, 3, 3, 3, 3, 0, 0, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 119, 0, 92, 92, 92, 92, - 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 92, 15, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 92, - 92, 92, 92, 92, 124, 92, 124, 124, 124, 124, 124, 92, 124, 124, 15, - 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, - 3, 3, 3, 3, 3, 3, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, - 92, 92, 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, - 92, 92, 92, 92, 124, 124, 92, 92, 124, 92, 92, 92, 15, 15, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 124, 92, 92, 124, 124, 124, 92, 124, 92, 92, 92, 124, 124, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 15, 15, 15, 15, 124, 124, 124, 124, 124, - 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 0, - 0, 0, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 15, 15, - 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 91, 91, 91, 91, 91, 91, 3, 3, 128, 129, 130, 131, 131, - 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 92, 92, 3, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 124, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, 15, 92, 15, 15, 15, 15, - 124, 124, 92, 15, 15, 124, 92, 92, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 92, 92, 92, 124, 124, 124, 124, 92, 92, 124, 124, 124, 0, 0, 0, 0, + 124, 124, 92, 124, 124, 124, 124, 124, 124, 92, 92, 92, 0, 0, 0, 0, + 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 92, 92, 124, 124, 92, 0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 92, 124, 92, 92, + 92, 92, 92, 92, 92, 0, 92, 124, 92, 124, 124, 92, 92, 92, 92, 92, 92, + 92, 92, 124, 124, 124, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 0, 0, 92, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 91, + 3, 3, 3, 3, 3, 3, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 119, 0, 92, 92, 92, 92, 124, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 92, 124, 92, 92, 92, 92, 92, 124, 92, 124, + 124, 124, 124, 124, 92, 124, 124, 15, 15, 15, 15, 15, 15, 15, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, 92, 92, 92, 92, 92, 92, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 92, 92, 124, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 92, 92, 92, 92, 124, 124, + 92, 92, 124, 92, 92, 92, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 92, 92, 124, 124, + 124, 92, 124, 92, 92, 92, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, + 3, 15, 15, 15, 15, 124, 124, 124, 124, 124, 124, 124, 124, 92, 92, + 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 0, 0, 0, 3, 3, 3, 3, 3, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, 91, + 91, 91, 91, 91, 3, 3, 129, 130, 131, 132, 132, 133, 134, 135, 136, + 0, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 0, 0, 137, 137, 137, 3, 3, 3, 3, 3, 3, 3, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 3, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, + 15, 92, 15, 15, 15, 15, 124, 124, 92, 15, 15, 124, 92, 92, 0, 0, 0, + 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 91, 136, 21, - 21, 21, 137, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 91, 91, - 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 92, 92, 92, 92, - 92, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, 138, 21, 21, 139, 21, 140, - 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, - 141, 140, 140, 140, 140, 140, 140, 0, 0, 141, 141, 141, 141, 141, 141, - 0, 0, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, - 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, - 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 0, 0, 141, 141, - 141, 141, 141, 141, 0, 0, 21, 140, 21, 140, 21, 140, 21, 140, 0, 141, - 0, 141, 0, 141, 0, 141, 140, 140, 140, 140, 140, 140, 140, 140, 141, - 141, 141, 141, 141, 141, 141, 141, 142, 142, 143, 143, 143, 143, 144, - 144, 145, 145, 146, 146, 147, 147, 0, 0, 140, 140, 140, 140, 140, 140, - 140, 140, 148, 148, 148, 148, 148, 148, 148, 148, 140, 140, 140, 140, - 140, 140, 140, 140, 148, 148, 148, 148, 148, 148, 148, 148, 140, 140, - 140, 140, 140, 140, 140, 140, 148, 148, 148, 148, 148, 148, 148, 148, - 140, 140, 21, 149, 21, 0, 21, 21, 141, 141, 150, 150, 151, 11, 152, - 11, 11, 11, 21, 149, 21, 0, 21, 21, 153, 153, 153, 153, 151, 11, 11, - 11, 140, 140, 21, 21, 0, 0, 21, 21, 141, 141, 154, 154, 0, 11, 11, - 11, 140, 140, 21, 21, 21, 113, 21, 21, 141, 141, 155, 155, 117, 11, - 11, 11, 0, 0, 21, 149, 21, 0, 21, 21, 156, 156, 157, 157, 151, 11, - 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 17, 8, 8, 8, - 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, 5, 16, 3, 3, 3, 3, 3, 3, 3, 3, - 158, 159, 17, 17, 17, 17, 17, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 16, 20, - 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 17, 17, 17, 17, 17, 0, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 91, 0, 0, 18, 18, 18, 18, - 18, 18, 7, 7, 7, 5, 6, 91, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 7, 7, 7, 5, 6, 0, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 119, 119, 119, 119, 92, 119, 119, 119, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 14, 107, 14, 14, 14, 14, 107, 14, 14, 21, 107, 107, 107, 21, 21, 107, - 107, 107, 21, 14, 107, 14, 14, 7, 107, 107, 107, 107, 107, 14, 14, - 14, 14, 14, 14, 107, 14, 160, 14, 107, 14, 161, 162, 107, 107, 14, - 21, 107, 107, 163, 107, 21, 15, 15, 15, 15, 21, 14, 14, 21, 21, 107, - 107, 7, 7, 7, 7, 7, 107, 21, 21, 21, 21, 14, 7, 14, 14, 164, 14, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, - 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 127, 127, 127, 23, 24, 127, 127, 127, 127, 18, 14, 14, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14, 7, - 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, + 91, 91, 91, 91, 91, 91, 91, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 91, 138, 21, 21, 21, 139, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 0, 92, 92, 92, 92, 92, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, + 140, 21, 21, 141, 21, 142, 142, 142, 142, 142, 142, 142, 142, 143, + 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 0, + 0, 143, 143, 143, 143, 143, 143, 0, 0, 142, 142, 142, 142, 142, 142, + 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, + 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, + 142, 142, 142, 142, 0, 0, 143, 143, 143, 143, 143, 143, 0, 0, 21, 142, + 21, 142, 21, 142, 21, 142, 0, 143, 0, 143, 0, 143, 0, 143, 142, 142, + 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, + 144, 144, 145, 145, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, + 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 150, 150, 150, 150, 150, + 150, 150, 150, 142, 142, 142, 142, 142, 142, 142, 142, 150, 150, 150, + 150, 150, 150, 150, 150, 142, 142, 142, 142, 142, 142, 142, 142, 150, + 150, 150, 150, 150, 150, 150, 150, 142, 142, 21, 151, 21, 0, 21, 21, + 143, 143, 152, 152, 153, 11, 154, 11, 11, 11, 21, 151, 21, 0, 21, 21, + 155, 155, 155, 155, 153, 11, 11, 11, 142, 142, 21, 21, 0, 0, 21, 21, + 143, 143, 156, 156, 0, 11, 11, 11, 142, 142, 21, 21, 21, 113, 21, 21, + 143, 143, 157, 157, 117, 11, 11, 11, 0, 0, 21, 151, 21, 0, 21, 21, + 158, 158, 159, 159, 153, 11, 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 17, 17, 17, 17, 17, 8, 8, 8, 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, + 5, 16, 3, 3, 3, 3, 3, 3, 3, 3, 160, 161, 17, 17, 17, 17, 17, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 16, 20, 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, + 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 18, 91, 0, 0, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 91, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 0, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 119, 119, 119, 119, 92, 119, 119, + 119, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 107, 14, 14, 14, 14, 107, 14, + 14, 21, 107, 107, 107, 21, 21, 107, 107, 107, 21, 14, 107, 14, 14, + 7, 107, 107, 107, 107, 107, 14, 14, 14, 14, 14, 14, 107, 14, 162, 14, + 107, 14, 163, 164, 107, 107, 14, 21, 107, 107, 165, 107, 21, 15, 15, + 15, 15, 21, 14, 14, 21, 21, 107, 107, 7, 7, 7, 7, 7, 107, 21, 21, 21, + 21, 14, 7, 14, 14, 166, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 128, 128, 128, 23, 24, + 128, 128, 128, 128, 18, 14, 14, 0, 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, + 14, 14, 14, 7, 7, 14, 14, 14, 14, 7, 14, 14, 7, 14, 14, 7, 14, 14, + 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 7, 14, 7, 14, + 14, 14, 14, 7, 7, 14, 14, 7, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, + 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, - 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14, 14, 14, 14, - 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, + 14, 7, 7, 14, 14, 14, 14, 14, 14, 14, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, + 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 18, 18, + 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, + 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, + 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 5, 6, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 14, 14, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, + 7, 7, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 7, 7, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 7, 7, 7, 7, + 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, + 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, + 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 123, 123, 123, 123, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 0, 23, 24, 169, 170, 171, 172, 173, 23, 24, 23, 24, 23, 24, 174, - 175, 176, 177, 21, 23, 24, 21, 23, 24, 21, 21, 21, 21, 21, 91, 91, - 178, 178, 23, 24, 23, 24, 21, 14, 14, 14, 14, 14, 14, 23, 24, 23, 24, - 92, 92, 92, 23, 24, 0, 0, 0, 0, 0, 3, 3, 3, 3, 18, 3, 3, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 0, 179, 0, 0, 0, 0, 0, 179, - 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 91, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, - 0, 3, 3, 16, 20, 16, 20, 3, 3, 3, 16, 20, 3, 16, 20, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 8, 3, 3, 8, 3, 16, 20, 3, 3, 16, 20, 5, 6, 5, 6, 5, 6, - 5, 6, 3, 3, 3, 3, 3, 91, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 3, 3, - 3, 3, 8, 3, 5, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 123, 123, 123, 123, 123, 0, 23, 24, 171, 172, 173, 174, 175, 23, 24, + 23, 24, 23, 24, 176, 177, 178, 179, 21, 23, 24, 21, 23, 24, 21, 21, + 21, 21, 21, 91, 91, 180, 180, 23, 24, 23, 24, 21, 14, 14, 14, 14, 14, + 14, 23, 24, 23, 24, 92, 92, 92, 23, 24, 0, 0, 0, 0, 0, 3, 3, 3, 3, + 18, 3, 3, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 0, 181, + 0, 0, 0, 0, 0, 181, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, + 0, 0, 91, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, + 15, 15, 15, 15, 15, 15, 15, 0, 3, 3, 16, 20, 16, 20, 3, 3, 3, 16, 20, + 3, 16, 20, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 3, 3, 8, 3, 16, 20, 3, 3, + 16, 20, 5, 6, 5, 6, 5, 6, 5, 6, 3, 3, 3, 3, 3, 91, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 8, 3, 3, 3, 3, 8, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 0, 0, 0, 0, 2, 3, 3, 3, 14, 91, 15, 127, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, 8, 5, 6, 6, 14, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 92, 92, 92, 92, 124, 124, 8, - 91, 91, 91, 91, 91, 14, 14, 127, 127, 127, 91, 15, 3, 14, 14, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 92, 92, 11, 11, 91, 91, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 3, 91, 91, 91, 15, 0, 0, 0, 0, 0, 15, 15, 15, 15, + 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 2, 3, 3, 3, 14, 91, + 15, 128, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 14, 14, 5, 6, 5, 6, 5, 6, 5, + 6, 8, 5, 6, 6, 14, 128, 128, 128, 128, 128, 128, 128, 128, 128, 92, + 92, 92, 92, 124, 124, 8, 91, 91, 91, 91, 91, 14, 14, 128, 128, 128, + 91, 15, 3, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 11, 11, 91, + 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 91, 91, 91, 15, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 14, 14, 18, 18, 18, 18, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 14, 14, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 14, 14, - 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, - 18, 18, 18, 18, 18, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 14, 14, + 15, 15, 15, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, 14, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 91, 3, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 15, 92, 119, 119, 119, - 3, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 91, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 91, 91, 92, 92, 15, 15, 15, 15, 15, 15, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 92, 92, 3, 3, 3, 3, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 11, 11, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 91, 21, 21, 21, 21, 21, 21, 21, 21, 23, 24, 23, 24, 180, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 91, 11, 11, 23, 24, 181, 21, 15, - 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 182, 183, 184, 185, 182, 0, 186, - 187, 188, 189, 23, 24, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 91, 91, - 21, 15, 15, 15, 15, 15, 15, 15, 92, 15, 15, 15, 92, 15, 15, 15, 15, - 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 124, 124, 92, 92, 124, 14, 14, 14, 14, - 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 14, 14, 4, 14, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, 3, 3, 3, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 15, + 92, 119, 119, 119, 3, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 91, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 91, 91, 92, 92, 15, 15, + 15, 15, 15, 15, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 92, + 92, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 11, 11, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 91, 21, 21, 21, 21, 21, 21, 21, 21, 23, 24, + 23, 24, 182, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 91, 11, 11, 23, + 24, 183, 21, 15, 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 184, 185, 186, + 187, 184, 21, 188, 189, 190, 191, 23, 24, 23, 24, 23, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 91, 91, 21, 15, 15, 15, 15, 15, 15, 15, 92, 15, 15, 15, + 92, 15, 15, 15, 15, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 92, 92, 124, + 14, 14, 14, 14, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 14, 14, 4, 14, + 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 92, - 92, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 15, 15, 15, 15, 15, 15, 3, 3, 3, 15, 3, 15, 0, - 0, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, - 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 124, 92, 92, 92, 92, 124, - 124, 92, 124, 124, 124, 124, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 0, 91, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 15, 15, 15, - 15, 15, 92, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 124, 124, 92, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 92, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 124, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 3, 3, 3, 3, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, - 15, 15, 15, 15, 15, 15, 14, 14, 14, 15, 124, 92, 124, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 15, 92, - 92, 92, 15, 15, 92, 92, 15, 15, 15, 15, 15, 92, 92, 15, 92, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 15, 91, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, - 92, 92, 124, 124, 3, 3, 15, 91, 91, 124, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, - 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 21, 21, 21, 21, 21, 21, 21, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, 15, 15, 15, 3, 3, 3, 15, + 3, 15, 15, 92, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, + 92, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 124, 92, 92, + 92, 92, 124, 124, 92, 124, 124, 124, 124, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 0, 91, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, + 15, 15, 15, 15, 15, 92, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 124, 124, + 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 92, 15, 15, 15, 15, + 15, 15, 15, 15, 92, 124, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 3, 3, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 91, 15, 15, 15, 15, 15, 15, 14, 14, 14, 15, 124, 92, 124, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 92, 15, 92, 92, 92, 15, 15, 92, 92, 15, 15, 15, 15, 15, 92, 92, 15, + 92, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 15, 91, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 124, 92, 92, 124, 124, 3, 3, 15, 91, 91, 124, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, + 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 190, 21, 21, 21, 21, 21, - 21, 21, 11, 91, 91, 91, 91, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 15, 15, 15, 124, 124, - 92, 124, 124, 92, 124, 124, 3, 124, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 192, 21, 21, 21, + 21, 21, 21, 21, 11, 91, 91, 91, 91, 21, 21, 21, 21, 21, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 15, 15, 15, 124, + 124, 92, 124, 124, 92, 124, 124, 3, 124, 92, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 194, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, + 194, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 21, @@ -1161,10 +1162,10 @@ static const unsigned char groupMap[] = { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 18, + 14, 14, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1177,29 +1178,29 @@ static const unsigned char groupMap[] = { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 127, 15, 15, 15, 15, 15, 15, - 15, 15, 127, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 128, 15, 15, 15, 15, 15, 15, + 15, 15, 128, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 3, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 3, 127, - 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 3, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 3, 128, + 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 0, 0, 0, 0, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 15, 15, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 0, 0, 0, 0, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, @@ -1223,300 +1224,316 @@ static const unsigned char groupMap[] = { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 15, 92, 92, 92, 0, 92, 92, 0, 0, 0, 0, 0, 92, 92, 92, 92, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 92, 92, 92, 0, 0, 0, - 0, 92, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 92, 0, 0, + 0, 0, 92, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 18, 18, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 18, 18, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 14, 15, 15, + 15, 15, 15, 15, 15, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 0, 0, 0, 0, 18, 18, 18, - 18, 18, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 0, 0, 0, 0, 18, + 18, 18, 18, 18, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 18, 18, + 15, 15, 15, 15, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 0, 18, 18, 18, 18, 18, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, - 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, + 97, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, + 15, 15, 15, 15, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 124, 92, 124, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 18, 18, 18, 18, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 124, 92, + 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, 3, - 3, 3, 3, 3, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, - 92, 124, 124, 92, 92, 3, 3, 17, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, + 92, 92, 92, 92, 124, 124, 92, 92, 3, 3, 17, 3, 3, 3, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, + 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, 92, 92, 92, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 15, 15, 15, 92, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, 92, 92, + 92, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 124, 124, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 92, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 15, + 15, 15, 15, 3, 3, 3, 3, 92, 92, 92, 92, 3, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 15, 3, 15, 3, 3, 3, 0, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 15, 15, 15, 15, 3, 3, - 3, 3, 3, 92, 92, 92, 3, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 3, - 15, 3, 3, 3, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 92, 92, 92, 124, 124, 92, 124, 92, 92, 3, 3, 3, 3, 3, 3, 92, 0, 15, + 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 3, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, 124, 124, - 92, 124, 92, 92, 3, 3, 3, 3, 3, 3, 92, 0, 15, 15, 15, 15, 15, 15, 15, - 0, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 0, - 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, 92, 124, 124, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 124, 124, 124, 0, 0, 124, - 124, 0, 0, 124, 124, 124, 0, 0, 15, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, - 0, 0, 15, 15, 15, 15, 15, 124, 124, 0, 0, 92, 92, 92, 92, 92, 92, 92, - 0, 0, 0, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 92, - 92, 92, 124, 92, 15, 15, 15, 15, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 3, 0, 3, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 124, - 92, 124, 124, 124, 124, 92, 92, 124, 92, 92, 15, 15, 3, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, - 92, 92, 92, 92, 0, 0, 124, 124, 124, 124, 92, 92, 124, 92, 92, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 15, - 15, 15, 15, 92, 92, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 92, 124, 124, 124, 92, 92, 92, 92, 92, 92, + 92, 92, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 92, 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, + 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, + 15, 15, 15, 15, 15, 0, 92, 92, 15, 124, 124, 92, 124, 124, 124, 124, + 0, 0, 124, 124, 0, 0, 124, 124, 124, 0, 0, 15, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 124, 124, 0, 0, 92, 92, 92, 92, + 92, 92, 92, 0, 0, 0, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, - 124, 124, 92, 124, 92, 92, 3, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 92, - 124, 124, 92, 92, 92, 92, 92, 92, 124, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 0, 0, 92, 92, 92, 124, 124, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 3, 3, 3, 14, 10, + 124, 124, 92, 92, 92, 124, 92, 15, 15, 15, 15, 3, 3, 3, 3, 3, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 3, 0, 3, 92, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, + 92, 92, 92, 124, 92, 124, 124, 124, 124, 92, 92, 124, 92, 92, 15, 15, + 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 124, 124, 124, 92, 92, 92, 92, 0, 0, 124, 124, 124, 124, 92, 92, + 124, 92, 92, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 15, 15, 15, 15, 92, 92, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, + 92, 92, 92, 92, 92, 124, 124, 92, 124, 92, 92, 3, 3, 3, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 92, 124, 92, 124, 124, 92, 92, 92, 92, 92, 92, 124, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 92, 92, 92, 92, + 124, 92, 92, 92, 92, 92, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 18, 18, 3, 3, 3, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 92, 92, 3, + 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 124, 15, 92, 92, 92, 92, 3, - 3, 3, 3, 3, 3, 3, 3, 92, 0, 0, 0, 0, 0, 0, 0, 0, 15, 92, 92, 92, 92, - 92, 92, 124, 124, 92, 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, - 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 124, 92, 92, 3, 3, 3, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 124, 92, 92, 92, 92, 92, 92, 92, 0, 92, - 92, 92, 92, 92, 92, 124, 92, 15, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 3, 3, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 0, 124, 92, 92, 92, 92, 92, 92, 92, 124, 92, 92, 124, 92, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 124, 15, 92, + 92, 92, 92, 3, 3, 3, 3, 3, 3, 3, 3, 92, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 92, 15, 15, 15, 15, 15, 15, + 15, 15, 0, 0, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 124, 92, 92, 3, 3, 3, 15, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 92, 92, 92, 92, 92, 92, 0, 0, 0, 92, 0, 92, 92, 0, 92, - 92, 92, 92, 92, 92, 92, 15, 92, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 0, 3, 3, 3, 3, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 0, 92, 92, 92, 92, 92, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 92, 92, 3, 3, 3, 3, 3, 14, 14, 14, 14, 91, 91, - 91, 91, 3, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 18, 18, 18, 18, 18, 18, 18, 0, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 92, 92, 92, + 92, 92, 92, 92, 0, 92, 92, 92, 92, 92, 92, 124, 92, 15, 3, 3, 3, 3, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 0, 0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 0, 124, 92, 92, 92, 92, 92, 92, 92, 124, + 92, 92, 124, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 0, 0, 0, + 92, 0, 92, 92, 0, 92, 92, 92, 92, 92, 92, 92, 15, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 124, 124, 124, 124, 124, 0, 92, 92, 0, 124, 124, 92, + 124, 92, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 124, 124, 3, 3, 0, + 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 0, 92, 92, 92, 92, 92, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, + 92, 92, 92, 3, 3, 3, 3, 3, 14, 14, 14, 14, 91, 91, 91, 91, 3, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 18, 18, + 18, 18, 18, 18, 18, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 3, 3, 3, 3, 0, 0, 0, 0, 0, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 14, 92, 92, 3, 17, - 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 14, 92, 92, 3, 17, 17, 17, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 124, 124, 92, 92, 92, 14, 14, 14, - 124, 124, 124, 124, 124, 124, 17, 17, 17, 17, 17, 17, 17, 17, 92, 92, - 92, 92, 92, 92, 92, 92, 14, 14, 92, 92, 92, 92, 92, 92, 92, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 124, 124, 92, 92, 92, 14, 14, 14, 124, + 124, 124, 124, 124, 124, 17, 17, 17, 17, 17, 17, 17, 17, 92, 92, 92, + 92, 92, 92, 92, 92, 14, 14, 92, 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, 92, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 92, 92, 92, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 92, 92, 92, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, + 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, + 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, - 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 0, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 0, 107, 107, 0, 0, 107, - 0, 0, 107, 107, 0, 0, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, - 107, 107, 107, 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, - 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 107, 0, 107, 107, 0, 0, 107, 0, 0, 107, 107, + 0, 0, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, 0, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, + 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, + 0, 107, 107, 107, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 107, 107, 107, 107, 107, 107, 107, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 107, 107, 0, 107, 107, 107, 107, 0, 0, 107, 107, 107, 107, - 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 0, 21, 21, + 21, 21, 107, 107, 0, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, + 0, 107, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 107, 107, 0, 107, 107, 107, 107, 0, 107, - 107, 107, 107, 107, 0, 107, 0, 0, 0, 107, 107, 107, 107, 107, 107, - 107, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, + 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 0, 0, 107, 107, 107, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, - 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 21, 21, 21, 21, 21, 21, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, + 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, + 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 7, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, + 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, - 21, 21, 21, 21, 21, 21, 107, 21, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, + 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, + 107, 21, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, 92, 92, 92, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 14, 14, 14, 14, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 92, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 14, 14, 3, - 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, - 92, 92, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, - 92, 92, 92, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 0, 0, 92, 92, 92, 92, 92, 92, 92, 0, 92, 92, 0, 92, - 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 92, 92, 92, 92, 92, - 92, 92, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, - 3, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, - 15, 0, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 15, 15, 15, 15, 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 15, - 0, 15, 0, 15, 0, 15, 15, 15, 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 0, - 15, 0, 15, 0, 15, 0, 15, 15, 0, 15, 0, 0, 15, 15, 15, 15, 0, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, - 15, 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, + 92, 14, 14, 14, 14, 14, 14, 14, 14, 92, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 92, 14, 14, 3, 3, 3, 3, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 0, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 0, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 92, 92, + 92, 92, 92, 92, 92, 0, 92, 92, 0, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 92, 92, 92, 92, 92, 92, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, + 18, 18, 18, 4, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, + 0, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, + 15, 15, 15, 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 15, 0, + 15, 0, 15, 0, 15, 15, 15, 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 0, 15, + 0, 15, 0, 15, 0, 15, 15, 0, 15, 0, 0, 15, 15, 15, 15, 0, 15, 15, 15, + 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15, + 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, - 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 14, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, + 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, + 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, + 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, - 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, + 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 0, 0, 0, 14, - 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 15, 15, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 0, 0, 0, 14, 0, 14, + 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 #endif /* TCL_UTF_MAX > 3 */ }; @@ -1552,16 +1569,16 @@ static const int groups[] = { 29761, 9793, 9537, 16449, 16193, 9858, 9602, 8066, 16514, 16258, 2113, 16002, 14722, 1, 12162, 13954, 2178, 22146, 20610, -1662, 29826, -15295, 24706, -1727, 20545, 7, 3905, 3970, 12353, 12418, - 8, 1859649, 9949249, 10, 1601154, 1600898, 1598594, 1598082, 1598338, - 1596546, 1582466, -9027966, -9044862, -976254, 15234, -1949375, - -1918, -1983, -18814, -21886, -25470, -32638, -28542, -32126, - -1981, -2174, -18879, -2237, 1844610, -21951, -25535, -28607, - -32703, -32191, 13, 14, -1924287, -2145983, -2115007, 7233, 7298, - 4170, 4234, 6749, 6813, -2750143, -976319, -2746047, 2763650, - 2762882, -2759615, -2751679, -2760383, -2760127, -2768575, 1859714, - -9044927, -10823615, -10830783, -10833599, -10832575, -10830015, - -10817983, -10824127, -10818751, 237633, 237698, 9949314, 18, - 17, 10305, 10370, 8769, 8834 + 8, 1859649, -769822, 9949249, 10, 1601154, 1600898, 1598594, 1598082, + 1598338, 1596546, 1582466, -9027966, -769983, -9044862, -976254, + 15234, -1949375, -1918, -1983, -18814, -21886, -25470, -32638, + -28542, -32126, -1981, -2174, -18879, -2237, 1844610, -21951, + -25535, -28607, -32703, -32191, 13, 14, -1924287, -2145983, -2115007, + 7233, 7298, 4170, 4234, 6749, 6813, -2750143, -976319, -2746047, + 2763650, 2762882, -2759615, -2751679, -2760383, -2760127, -2768575, + 1859714, -9044927, -10823615, -10830783, -10833599, -10832575, + -10830015, -10817983, -10824127, -10818751, 237633, 237698, 9949314, + 18, 17, 10305, 10370, 8769, 8834 }; #if TCL_UTF_MAX > 3 -- cgit v0.12 From 9c8f784329bdeba62d3712e5cb258bb291cec67f Mon Sep 17 00:00:00 2001 From: dgp Date: Tue, 12 Jun 2018 17:10:03 +0000 Subject: [860a9f1945] Remove test safe-8.8; Mac OS 9 tests are no longer useful. --- tests/safe.test | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/safe.test b/tests/safe.test index 5bed5ff..00a9472 100644 --- a/tests/safe.test +++ b/tests/safe.test @@ -290,14 +290,10 @@ test safe-8.7 {safe source control on file} { [safe::setLogCmd $prevlog; unset log] \ [safe::interpDelete $i] ; } [list 1 {no such file or directory} [list "ERROR for slave a : [file join [info library] xxxxxxxxxxx.tcl]:no such file or directory"] {} {}] -test safe-8.8 {safe source forbids -rsrc} { - set i "a"; - catch {safe::interpDelete $i} - safe::interpCreate $i; - list [catch {$i eval {source -rsrc Init}} msg] \ - $msg \ - [safe::interpDelete $i] ; -} {1 {wrong # args: should be "source ?-encoding E? fileName"} {}} +test safe-8.8 {safe source forbids -rsrc} emptyTest { + # Disabled this test. It was only useful for long unsupported + # Mac OS 9 systems. [Bug 860a9f1945] +} {} test safe-8.9 {safe source and return} -setup { set returnScript [makeFile {return "ok"} return.tcl] catch {safe::interpDelete $i} -- cgit v0.12 From 33b84014364cffbf3c994dc7298164257512d2c4 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Wed, 13 Jun 2018 10:49:25 +0000 Subject: Avoid valgrind "still reachable" reports stemming from early termination of threads. --- tests/async.test | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/tests/async.test b/tests/async.test index fa3aae1..34c2fdc 100644 --- a/tests/async.test +++ b/tests/async.test @@ -156,19 +156,24 @@ test async-4.1 {async interrupting bytecode sequence} -constraints { } } -body { apply {{handle} { - global aresult - set aresult {Async event not delivered} - testasync marklater $handle - # allow plenty of time to pass in case valgrind is running - set start [clock seconds] - while { - [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" - } { - nothing - } + global aresult + set aresult {Async event not delivered} + testasync marklater $handle + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + # be less busy + after 100 + nothing + } return $aresult }} $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } test async-4.2 {async interrupting straight bytecode sequence} -constraints { @@ -185,10 +190,15 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints { while { [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" } { + # be less busy + after 100 } return $aresult }} $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { @@ -205,6 +215,9 @@ test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { return $aresult }]] $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } -- cgit v0.12 From 83d92bd747f9da3b8e3413897e5e36cc63eb938e Mon Sep 17 00:00:00 2001 From: dgp Date: Wed, 13 Jun 2018 15:59:15 +0000 Subject: Stop creating a stray child process. --- tests/main.test | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/main.test b/tests/main.test index 324b594..302f95e 100644 --- a/tests/main.test +++ b/tests/main.test @@ -1218,8 +1218,6 @@ namespace eval ::tcl::test::main { Bug 1775878 } -constraints { exec Tcltest - } -setup { - catch {set f [open "|[list [interpreter]]" w+]} } -body { exec [interpreter] << "testsetmainloop\nputs \\\npwd\ntestexitmainloop" >& result set f [open result] -- cgit v0.12 From eccaf23657cbf949e58c4ef65a12125ec872d306 Mon Sep 17 00:00:00 2001 From: stu Date: Wed, 13 Jun 2018 16:15:27 +0000 Subject: Don't call getsockname(2) in Tcl_MakeFileChannel(3) unless absolutely necessary. Closes RFE [0ac9d06895]. Permits better constraining of Tcl/tclsh via OpenBSD's pledge(2) or similar mechanisms. --- unix/tclUnixChan.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/unix/tclUnixChan.c b/unix/tclUnixChan.c index ced684a..6eed23b 100644 --- a/unix/tclUnixChan.c +++ b/unix/tclUnixChan.c @@ -1503,30 +1503,32 @@ Tcl_MakeFileChannel( char channelName[16 + TCL_INTEGER_SPACE]; int fd = PTR2INT(handle); const Tcl_ChannelType *channelTypePtr; - struct sockaddr sockaddr; - socklen_t sockaddrLen = sizeof(sockaddr); + struct stat buf; if (mode == 0) { return NULL; } - sockaddr.sa_family = AF_UNSPEC; - #ifdef SUPPORTS_TTY if (isatty(fd)) { channelTypePtr = &ttyChannelType; sprintf(channelName, "serial%d", fd); } else #endif /* SUPPORTS_TTY */ - if ((getsockname(fd, (struct sockaddr *)&sockaddr, &sockaddrLen) == 0) - && (sockaddrLen > 0) - && (sockaddr.sa_family == AF_INET || sockaddr.sa_family == AF_INET6)) { - return TclpMakeTcpClientChannelMode(INT2PTR(fd), mode); - } else { - channelTypePtr = &fileChannelType; - sprintf(channelName, "file%d", fd); + if (fstat(fd, &buf) == 0 && S_ISSOCK(buf.st_mode)) { + struct sockaddr sockaddr; + socklen_t sockaddrLen = sizeof(sockaddr); + sockaddr.sa_family = AF_UNSPEC; + if ((getsockname(fd, (struct sockaddr *)&sockaddr, &sockaddrLen) == 0) + && (sockaddrLen > 0) + && (sockaddr.sa_family == AF_INET || sockaddr.sa_family == AF_INET6)) { + return TclpMakeTcpClientChannelMode(INT2PTR(fd), mode); + } } + channelTypePtr = &fileChannelType; + sprintf(channelName, "file%d", fd); + fsPtr = ckalloc(sizeof(FileState)); fsPtr->fd = fd; fsPtr->validMask = mode | TCL_EXCEPTION; -- cgit v0.12