changeset 582:b455b31ce022

work on 2.97 stable
author heinrichsweikamp
date Mon, 26 Feb 2018 16:40:28 +0100
parents f5de1ff88814
children 6636cbe64c6d
files src/aa_wordprocessor.asm src/adc_lightsensor.asm src/calibrate.asm src/calibrate.inc src/changelog.txt src/color_processor.asm src/comm.asm src/compass_ops.asm src/convert.asm src/convert.inc src/customview.asm src/divemenu_tree.asm src/divemode.asm src/divemode.inc src/eeprom_rs232.asm src/eeprom_rs232.inc src/external_flash.asm src/external_flash.inc src/gaslist.asm src/gaslist.inc src/ghostwriter.asm src/ghostwriter.inc src/hwos.inc src/i2c.asm src/isr.asm src/logbook.asm src/menu_processor.asm src/menu_processor.inc src/menu_tree.asm src/option_table.asm src/options.asm src/p2_deco.c src/p2_definitions.h src/rtc.asm src/shared_definitions.h src/simulator.asm src/sleepmode.asm src/start.asm src/start.inc src/surfmode.asm src/surfmode.inc src/text_english.inc src/text_french.inc src/text_german.inc src/text_italian.inc src/tft.asm src/tft_outputs.asm src/tft_outputs.inc src/wait.asm src/wait.inc tools/dev_ostc3_firmware.hex
diffstat 51 files changed, 28564 insertions(+), 28766 deletions(-) [+]
line wrap: on
line diff
--- a/src/aa_wordprocessor.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/aa_wordprocessor.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File aa_wordprocessor.asm
+;   File aa_wordprocessor.asm										## V2.97
 ;
 ;   Anti-aliased word processor
 ;
@@ -8,200 +8,179 @@
 ;=============================================================================
 ; HISTORY
 ;  2010-11-22 : [jDG] Creation.
-;  2010-12-01 : [jDG] Adding 3bits antialiased fonts.
+;  2010-12-01 : [jDG] Adding 3bits anti-aliased fonts.
 ;  2010-12-30 : [jDG] Revised to put temp into ACCESSRAM0
 ;  2012-08-12 : [mH]  Moved font28 into bootloader section 0x1C000
 ;
 ; BUGS :
 ;  * If the three fonts are not in the same half of the PROM memory, TBLPTRU
-;    will be badly set, and font48 or font90 will display giberish...
+;    will be badly set, and font48 or font90 will display gibberish...
 ;=============================================================================
 ;
 ; MEMORY FOOTPRINT:
 ;------------------
 ;
-; wp_wordprocessor : 8KB, including fonts.
-; aa_wordprocessor : 0.5KB code
-;                  + 3.5KB aa_font28 (reduced to 99 chars)
-;                  + 1.6KB aa_font48
-;                  + 2.2KB aa_font90
-;                  = 7.9 KB including fonts...
+; wp_wordprocessor : 8   KB, including fonts
+; aa_wordprocessor : 0.5 KB code
+;                  + 3.5 KB aa_font28 (reduced to 99 chars)
+;                  + 1.6 KB aa_font48
+;                  + 2.2 KB aa_font90
+;                  = 7.9 KB including fonts
 ;
 ; Input registers:
-;	buffer:26				String to print.
-;	win_font				Font size (0=tiny, 1=small, 2=medium, 3=large)
-;	win_color1:2			16bits unpacked color
-;	win_top, win_leftx2		Position on screen
-;	win_inverse				Inverse video mode.
+;  buffer:26            String to print
+;  win_font             Font size (0=tiny, 1=small, 2=medium, 3=large)
+;  win_color1:2         16bits unpacked color
+;  win_top, win_leftx2  Position on screen
+;  win_inverse          Inverse video mode
 ;
 ; Available general purpose registers:
-;   PRODH, PRODL	(needed for array indexing)
-;   FSRx            12bits. Usefull as RAM pointers.
+;  PRODH, PRODL	        needed for array indexing)
+;  FSRx                 12bits. Useful as RAM pointers.
 ;=============================================================================
 
 #include "hwos.inc"
 #include "tft.inc"
 
-        extern  aa_font16_block
-        extern  aa_font28_block
-        extern  aa_font36_block
-        extern  aa_font48_block
-        extern  aa_font90_block
-
-;=============================================================================
-; Temporary variables are overlayed in Bank 1, used also by C-code
-; (p2_deco), MPLAB math and stdlib libraries.
-
-        CBLOCK  tmp                     ; Data overlay in reserved tmp area.
-            aa_flags:1                  ; Various flags for aa_wordprocessor
-            aa_bitlen:1                 ; Count of pixels when decoding bitmaps.
-            aa_start:2                  ; PROM ptr to start of encoded bitmap
-            aa_end:2                    ; and end of it.
-            aa_temp:2                   ; Current color, divided by 2 or 4
-            ; Reserved to tmp+0x08...
-        ENDC
-; Flags allocation:
-#define		aa_antialias	aa_flags,0
-#define		aa_color_quart	aa_flags,1
-#define		aa_color_half	aa_flags,2
+	extern	aa_font16_block
+	extern	aa_font28_block
+	extern	aa_font36_block
+	extern	aa_font48_block
+	extern	aa_font90_block
 
 ;------------------------------------------------------------------------------
 ; Setup pointers for a char:
-; Inputs	WREG = char to draw, win_font
-; Output	aa_start, aa_end, win_height, aa_flags
-; Trashed	PRODH, PRODL, TBLPTR, TABLAT
+; Inputs   WREG = char to draw, win_font
+; Output   aa_start, aa_end, win_height, aa_flags
+; Trashed  PRODH, PRODL, TBLPTR, TABLAT
 ;
-basic   CODE
+basic	CODE
 aa_char_setup:
-		movwf	PRODL				    ; save char into PROD for now.
+	movwf	PRODL					; save char into PROD for now
+	movf	win_font,W,BANKED		; Get font number (updates Z flag)
+	bnz		aa_char_1
 
-		movf	win_font,W,BANKED	    ; Get font number (updates Z flag)
-		bnz		aa_char_1
-
-		; TINY font ---------------------------------------------------------
-		; Font TINY character folding...
+	; TINY font ---------------------------------------------------------
+	; Font TINY character folding...
 aa_char_0:
-		movlw	LOW aa_font16_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font16_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font16_block
-		movwf	TBLPTRU
-		bra		aa_char_99
-
-		; SMALL font ---------------------------------------------------------
-		; Font SMALL character folding...
-aa_char_1:
-		decfsz	WREG				    ; This is small font ???
-		bra		aa_char_2
+	movlw	LOW aa_font16_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font16_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font16_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		movlw	LOW aa_font28_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font28_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font28_block
-		movwf	TBLPTRU
-		bra		aa_char_99
-
-		; STD font -----------------------------------------------------------
-		; Font SMALL character folding...
-aa_char_2:
-		decfsz	WREG				    ; This is small font ???
-		bra		aa_char_3
+	; SMALL font ---------------------------------------------------------
+	; Font SMALL character folding...
+aa_char_1:
+	decfsz	WREG					; This is small font ???
+	bra		aa_char_2
+	movlw	LOW aa_font28_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font28_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font28_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		movlw	LOW aa_font36_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font36_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font36_block
-		movwf	TBLPTRU
-		bra		aa_char_99
+	; STD font -----------------------------------------------------------
+	; Font SMALL character folding...
+aa_char_2:
+	decfsz	WREG					; This is small font ???
+	bra		aa_char_3
+	movlw	LOW aa_font36_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font36_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font36_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		; MEDIUM font --------------------------------------------------------
+	; MEDIUM font --------------------------------------------------------
 aa_char_3:
-		decfsz	WREG				    ; This is medium font ???
-		bra		aa_char_4
+	decfsz	WREG				 	; This is medium font ???
+	bra		aa_char_4
 
-		; Font MEDIUM block:
-		movlw	LOW aa_font48_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font48_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font48_block
-		movwf	TBLPTRU
-		bra		aa_char_99
+	; Font MEDIUM block:
+	movlw	LOW aa_font48_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font48_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font48_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		; LARGE font ---------------------------------------------------------
+	; LARGE font ---------------------------------------------------------
 aa_char_4:
-		; Font LARGE block:
-		movlw	LOW aa_font90_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font90_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font90_block
-		movwf	TBLPTRU
-
-		; Execute font block -------------------------------------------------
-aa_char_99:
-        ; This is safe if the three fonts are in the same code segment
-        ; (and that segment do not span the 64K edge...)
-		movlw	UPPER aa_font16_block
-		movwf	TBLPTRU
+	; Font LARGE block:
+	movlw	LOW aa_font90_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font90_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font90_block
+	movwf	TBLPTRU
 
-        ; Proceed to character substitutions
+	; Execute font block -------------------------------------------------
+aa_char_99:
+	; This is safe if the three fonts are in the same code segment
+	; (and that segment do not span the 64K edge...)
+	movlw	UPPER aa_font16_block
+	movwf	TBLPTRU
+
+	; Proceed to character substitutions
 aa_char_30:
-		tblrd*+						    ; Read FROM char
-		movf	TABLAT,W			    ; Get it, and set Z,N
-		bz		aa_char_32			    ; Break at end of translations
-		
-		tblrd*+						    ; Read TO char
-		cpfseq	PRODL				    ; FROM == current char ? 
-		bra		aa_char_30		    	; Different: loop
-		movff	TABLAT, PRODL		    ; make substitution
-		bra		aa_char_30			    ; Loop.
+	tblrd*+							; Read FROM char
+	movf	TABLAT,W				; Get it, and set Z,N
+	bz		aa_char_32				; Break at end of translations
 
-        ; Make sure char is in the available range
-aa_char_32:
-		tblrd*+						    ; Read first char
-		movf	TABLAT,W			    ; get it.
-		subwf	PRODL,F				    ; (char - first) --> PRODL
+	tblrd*+							; Read TO char
+	cpfseq	PRODL					; FROM == current char ? 
+	bra		aa_char_30				; Different: loop
+	movff	TABLAT, PRODL			; make substitution
+	bra		aa_char_30				; Loop
 
-		tblrd*+						    ; Read nb chars
-		movf	TABLAT,W			    ; nbchars --> WREG
-		tblrd*+						    ; Read default char
-		cpfslt	PRODL				    ; if char > WREG ?
-		movff	TABLAT,PRODL		    ; replace PRODL
+	; Make sure char is in the available range
+aa_char_32:
+	tblrd*+							; Read first char
+	movf	TABLAT,W				; get it
+	subwf	PRODL,F					; (char - first) --> PRODL
+	tblrd*+							; Read nb chars
+	movf	TABLAT,W				; nbchars --> WREG
+	tblrd*+							; Read default char
+	cpfslt	PRODL					; if char > WREG ?
+	movff	TABLAT,PRODL			; replace PRODL
 
-        ; Decode font height and anti-aliasing mode
-		clrf	aa_flags                ; Default to no AA
-		tblrd*+						    ; Read font height + AA flag
-		movf	TABLAT,W			    ; into WREG
-		bnn		aa_char_34			    ; High bit set ?
-		bsf		aa_antialias            ; YES : then the font is AA.
+	; Decode font height and anti-aliasing mode
+	clrf	aa_flags				; Default to no AA
+	tblrd*+							; Read font height + AA flag
+	movf	TABLAT,W				; into WREG
+	bnn		aa_char_34				; High bit set ?
+	bsf		aa_antialias			; YES : then the font is AA
 aa_char_34:
-		andlw	0x7F				    ; Keep just font height,
-		movwf	win_height,BANKED	    ; then save it (its a register)
+	andlw	0x7F					; Keep just font height,
+	movwf	win_height,BANKED		; then save it (its a register)
 
-        ; Set PROM pointer to the char index
-		movf	PRODL,W				    ; Read back char
-		mullw	2					    ; PROD = 2*(char - base), TBLPTR=idx
-		movf	PRODL,W
-		addwf	TBLPTRL,F			    ; Add into TBLPTR (low byte)
-		movf	PRODH,W
-		addwfc	TBLPTRH,F			    ; and high byte.
+	; Set PROM pointer to the char index
+	movf	PRODL,W					; Read back char
+	mullw	2						; PROD = 2*(char - base), TBLPTR=idx
+	movf	PRODL,W
+	addwf	TBLPTRL,F				; Add into TBLPTR (low byte)
+	movf	PRODH,W
+	addwfc	TBLPTRH,F				; and high byte
 
-        ; Read start and stop pointers
-		tblrd*+						    ; aa_start = PROM16(*tblptr++)
-		movff	TABLAT,aa_start+0       ; Read low byte
-		tblrd*+
-		movff	TABLAT,aa_start+1       ; and high byte
+	; Read start and stop pointers
+	tblrd*+							; aa_start = PROM16(*tblptr++)
+	movff	TABLAT,aa_start+0		; Read low byte
+	tblrd*+
+	movff	TABLAT,aa_start+1		; and high byte
 
-		tblrd*+						    ; aa_end = PROM16(*tblptr++)
-		movff	TABLAT,aa_end+0         ; Read low byte
-		tblrd*+
-		movff	TABLAT,aa_end+1         ; and high byte
+	tblrd*+							; aa_end = PROM16(*tblptr++)
+	movff	TABLAT,aa_end+0			; Read low byte
+	tblrd*+
+	movff	TABLAT,aa_end+1			; and high byte
 
-		return
+	return
 
 ;------------------------------------------------------------------------------
 ; Character width
@@ -210,253 +189,254 @@
 ; Trashed	aa_bitlen, TBLPTR, TABLAT
 ;
 aa_char_width:
-		movff	aa_start+0, TBLPTRL     ;	TBLPTR = aa_start
-		movff	aa_start+1, TBLPTRH
-		clrf	aa_bitlen               ; clear reminders...
+	movff	aa_start+0, TBLPTRL		; TBLPTR = aa_start
+	movff	aa_start+1, TBLPTRH
+	clrf	aa_bitlen				; clear reminders...
 
 		; Read bitmap byte, and decode length:
 aa_char_width_1:
-    ifdef AA_BYTE_SWAP
-		btg		TBLPTRL,0  			    ; Toggle low ptr bit.
+
+	ifdef AA_BYTE_SWAP
+		btg		TBLPTRL,0			; Toggle low ptr bit
 		tblrd*
-		movf	TABLAT,W  			    ; Store to WREG
-		btg		TBLPTRL,0  			    ; Get is back
-		tblrd*+						    ; then increment (but trash TABLAT)
-		movwf	TABLAT  			    ; Then restore copy to TABLAT.
-    else
-		tblrd*+						    ; Normal read...
-		movf	TABLAT,W 			    ; Store copy to WREG
-    endif
-		btfss	aa_antialias            ; Antialiased font ?
-		bra		aa_char_width_10	    ; No: always 7 bits count
+		movf	TABLAT,W			; Store to WREG
+		btg		TBLPTRL,0			; Get is back
+		tblrd*+						; then increment (but trash TABLAT)
+		movwf	TABLAT				; Then restore copy to TABLAT
+	else
+		tblrd*+						; Normal read...
+		movf	TABLAT,W			; Store copy to WREG
+	endif
+
+	btfss	aa_antialias			; Anti-aliased font ?
+	bra		aa_char_width_10		; No: always 7 bits count
 
-		bn		aa_char_width_10	    ; Non-white pixels ?
-		andlw	0x1F				    ; Yes : 5 bits count.
+	bn		aa_char_width_10		; Non-white pixels ?
+	andlw	0x1F					; Yes : 5 bits count
 aa_char_width_10:
-		andlw	0x7F				    ; No: 7 bit count.
-		incf	WREG 				    ; WREG = repetition count
-		addwf	aa_bitlen,F             ; Add remaining pixels from last code.
-		
-		movf	win_height,W,BANKED	    ; WREG = - height
-		negf	WREG
+	andlw	0x7F					; No: 7 bit count
+	incf	WREG 					; WREG = repetition count
+	addwf	aa_bitlen,F				; Add remaining pixels from last code
+
+	movf	win_height,W,BANKED		; WREG = - height
+	negf	WREG
 
-		; This is a hand-made division by successive substraction of height
+	; This is a hand-made division by successive subtraction of height
 aa_char_width_2:
-		addwf	aa_bitlen,F             ; Try to substract win_height
-		bn		aa_char_width_3		    ; If neg it was a bad idea...
+	addwf	aa_bitlen,F				; Try to subtract win_height
+	bn		aa_char_width_3			; If neg it was a bad idea...
 
-		infsnz	win_width+0,F           ; Succeded: do a 16bit increment
-		incf	win_width+1,F           ; on the win_width counter.
-		bra		aa_char_width_2		    ; and loop.
+	infsnz	win_width+0,F			; Succeeded: do a 16bit increment
+	incf	win_width+1,F			; on the win_width counter
+	bra		aa_char_width_2			; and loop
 
 aa_char_width_3:
-		negf	WREG 				    ; WREG = +height
-		addwf	aa_bitlen,F             ; Restore true reminder.
+	negf	WREG					; WREG = +height
+	addwf	aa_bitlen,F				; Restore true reminder
 
-		; Are we done ?
-		movf	TBLPTRL,W 			    ; Compare TBLPTR to aa_end
-		cpfseq	aa_end+0  
-		bra		aa_char_width_1		    ; Loop if LOW is different
-		movf	TBLPTRH,W
-		cpfseq	aa_end+1                ; Loop to if HIGH is different
-		bra		aa_char_width_1
-
-		return
+	; Are we done ?
+	movf	TBLPTRL,W				; Compare TBLPTR to aa_end
+	cpfseq	aa_end+0  
+	bra		aa_char_width_1			; Loop if LOW is different
+	movf	TBLPTRH,W
+	cpfseq	aa_end+1				; Loop to if HIGH is different
+	bra		aa_char_width_1
+	return
 
 ;------------------------------------------------------------------------------
 ; String width
-; Inputs	buffer (SHOULD BE NULL TERMINATED)
-; Output	win_width, win_height
-; Trashed	PROD, TBLPTR, FSR2, aa_bitlen, aa_start, aa_end, aa_flags
+; Inputs   buffer (SHOULD BE NULL TERMINATED)
+; Output   win_width, win_height
+; Trashed  PROD, TBLPTR, FSR2, aa_bitlen, aa_start, aa_end, aa_flags
 ;
 aa_string_width:
-		lfsr	FSR2, buffer		    ; FSR2 pointer to start of string.
-
-		clrf	win_width+0             ; Clear width sum.
-		clrf	win_width+1             ; (16 bit counter)
+	lfsr	FSR2, buffer			; FSR2 pointer to start of string
+	clrf	win_width+0				; Clear width sum
+	clrf	win_width+1				; (16 bit counter)
 
 aa_string_width_1:
-		movf	POSTINC2,W  		    ; WREG = *FSR2++
-		bz		aa_string_width99	    ; Exit if null byte encountered.
+	movf	POSTINC2,W  			; WREG = *FSR2++
+	bz		aa_string_width99		; Exit if null byte encountered
 
-		rcall	aa_char_setup		    ; setup aa_start / aa_end
-		rcall	aa_char_width		    ; sum-up width into win_width
-		bra		aa_string_width_1	    ; and loop.
+	rcall	aa_char_setup			; setup aa_start / aa_end
+	rcall	aa_char_width			; sum-up width into win_width
+	bra		aa_string_width_1		; and loop
 
 aa_string_width99:
-		return
+	return
 
 ;------------------------------------------------------------------------------
 ; Decode a compressed char.
-; Inputs	aa_start, aa_end, win_height, win_invert, win_color1, win_color2
-; Output	none
-; Trashed	TBLPTR, TABLAT, PROD, aa_bitlen, aa_flags, aa_colorDir:2
+; Inputs   aa_start, aa_end, win_height, win_invert, win_color1, win_color2
+; Output   none
+; Trashed  TBLPTR, TABLAT, PROD, aa_bitlen, aa_flags, aa_colorDir:2
 ;
 aa_decode_char:
-		movff	aa_start+0, TBLPTRL     ; TBLPTR = aa_start
-		movff	aa_start+1, TBLPTRH
+	movff	aa_start+0, TBLPTRL		; TBLPTR = aa_start
+	movff	aa_start+1, TBLPTRH
 
-		; Read bitmap byte, and decode color & length
+	; Read bitmap byte, and decode color & length
 aa_decode_1:
-    ifdef AA_BYTE_SWAP
-		btg		TBLPTRL,0 			    ; Toggle low ptr bit.
+
+	ifdef AA_BYTE_SWAP
+		btg		TBLPTRL,0			; Toggle low ptr bit
 		tblrd*
-		movf	TABLAT,W 			    ; Store to WREG
-		btg		TBLPTRL,0 			    ; Get is back
-		tblrd*+						    ; then increment (but trash TABLAT)
-		movwf	TABLAT  			    ; Then restore copy to TABLAT.
-    else
-		tblrd*+						    ; Normal read...
-		movf	TABLAT,W			    ; Store copy to WREG
-    endif
-		btfss	aa_antialias            ; Antialiased font ?
-		bra		aa_decode_10		    ; No: always 7 bits count
-		bn		aa_decode_10		    ; Non-white pixels ?
-		andlw	0x1F				    ; Yes : 5 bits count.
-aa_decode_10:
-		andlw	0x7F				    ; No: 7 bit count.
-		incf	WREG				
-		movwf	aa_bitlen               ; repetition count --> aa_bitlen
+		movf	TABLAT,W			; Store to WREG
+		btg		TBLPTRL,0			; Get is back
+		tblrd*+						; then increment (but trash TABLAT)
+		movwf	TABLAT				; Then restore copy to TABLAT
+	else
+		tblrd*+						; Normal read...
+		movf	TABLAT,W			; Store copy to WREG
+	endif
 
-		;---- COLOR DECODING -------------------------------------------------
-		;
-		;   Code    Normal    Inverse
-		;   1xx        0%      100%	: Managed by aa_decode_13
-		;   011       25%       75%
-		;   010       50%       50%
-		;   001       75%       25%
-		;   000      100%        0% : Managed by aa_decode_13 too.
-		;
-		movf	TABLAT,W  			    ; Get back code
-		btfss	aa_antialias            ; Antialiased font ?
-		bra		aa_decode_13		    ; NO: 1bit case
+	btfss	aa_antialias			; Anti-aliased font ?
+	bra		aa_decode_10			; No: always 7 bits count
+	bn		aa_decode_10			; Non-white pixels ?
+	andlw	0x1F					; Yes : 5 bits count
+aa_decode_10:
+	andlw	0x7F					; No: 7 bit count
+	incf	WREG
+	movwf	aa_bitlen				; repetition count --> aa_bitlen
 
-		; Asymetry test: 1xx code is another case for 1bit color.
-		; This have to be done before inverse video, because
-		; of the asymetric processing !
-		bn		aa_decode_13		    ; decode as not-aa
+	;---- COLOR DECODING -------------------------------------------------
+	;
+	;   Code    Normal    Inverse
+	;   1xx        0%      100%	: Managed by aa_decode_13
+	;   011       25%       75%
+	;   010       50%       50%
+	;   001       75%       25%
+	;   000      100%        0% : Managed by aa_decode_13 too
+	;
+	movf	TABLAT,W				; Get back code
+	btfss	aa_antialias			; Anti-aliased font ?
+	bra		aa_decode_13			; NO: 1bit case
 
-		; Manage 000 special case too:
-		andlw	0xE0				    ; Select color bits
-		bz		aa_decode_13		    ; That's a 000 !
+	; Asymmetry test: 1xx code is another case for 1bit color.
+	; This have to be done before inverse video, because
+	; of the asymmetric processing !
+	bn		aa_decode_13			; decode as not-aa
 
-		; Apply reverse video, in a reversed way
-		btfss	win_invert  		    ; Inverse video mode ?
-		sublw	0x80
+	; Manage 000 special case too:
+	andlw	0xE0					; Select color bits
+	bz		aa_decode_13			; That's a 000 !
+
+	; Apply reverse video, in a reversed way
+	btfss	win_invert  			; Inverse video mode ?
+	sublw	0x80
 
-		; Move the two bits to aa_color_half and aa_color_quarter:
-		swapf	WREG				    ; --> 0000.0LL0 byte
-		iorlw	b'001'				    ; We are in AA mode, don't forget it !
-		movwf	aa_flags                ; save that to aa_color_(half/quad)/AA flags.
+	; Move the two bits to aa_color_half and aa_color_quarter:
+	swapf	WREG					; --> 0000.0LL0 byte
+	iorlw	b'001'					; We are in AA mode, don't forget it !
+	movwf	aa_flags				; save that to aa_color_(half/quad)/AA flags
 
-		;---- 2 bit x RGB(16bits) computation --------------------------------
-		clrf	PRODL				    ; We will accumulate result here...
-		clrf	PRODH
+	;---- 2 bit x RGB(16bits) computation --------------------------------
+	clrf	PRODL					; We will accumulate result here...
+	clrf	PRODH
 
-		; Take color div 2 into aa_temp. Max red = 15/31
-		rrcf	win_color1,W,BANKED	    ; xRRRRxGG
-		andlw	b'01111011'			    ; 0RRRR0GG (don't change C)
-		movwf	aa_temp+0
-		rrcf	win_color2,W,BANKED	    ; GGGxBBBB
-		andlw	b'11101111'			    ; GGG0BBBB
-		movwf	aa_temp+1
+	; Take color div 2 into aa_temp. Max red = 15/31
+	rrcf	win_color1,W,BANKED		; xRRRRxGG
+	andlw	b'01111011'				; 0RRRR0GG (don't change C)
+	movwf	aa_temp+0
+	rrcf	win_color2,W,BANKED		; GGGxBBBB
+	andlw	b'11101111'				; GGG0BBBB
+	movwf	aa_temp+1
 
-		btfss	aa_color_half
-		bra		aa_decode_12
+	btfss	aa_color_half
+	bra		aa_decode_12
 
-		movff	aa_temp+0,PRODH         ; Add color/2 if bit set.
-		movff	aa_temp+1,PRODL         ; TFT is big endian, so swap here.
+	movff	aa_temp+0,PRODH			; Add color/2 if bit set
+	movff	aa_temp+1,PRODL			; TFT is big endian, so swap here
 aa_decode_12:
-		btfss	aa_color_quart
-		bra		aa_decode_3
+	btfss	aa_color_quart
+	bra		aa_decode_3
 
-		; Divide it once again by 2. Max red = 7/31.
-		rrcf	aa_temp+0,W             ; xxRRRxxG
-		andlw	b'00111001'             ; 00RRR00G (don't change C)
-		movwf	aa_temp+0
-		rrcf	aa_temp+1,W             ; GGGxxBBB
-		andlw	b'11100111'             ; GGG00BBB
-		movwf	aa_temp+1
+	; Divide it once again by 2. Max red = 7/31.
+	rrcf	aa_temp+0,W				; xxRRRxxG
+	andlw	b'00111001'				; 00RRR00G (don't change C)
+	movwf	aa_temp+0
+	rrcf	aa_temp+1,W				; GGGxxBBB
+	andlw	b'11100111'				; GGG00BBB
+	movwf	aa_temp+1
 
-		movf	aa_temp+1,W             ; Add color/4
-		addwf	PRODL,F				    ; NOTE: 7/31+15/31=22/31,
-		movf	aa_temp+0,W             ; hence composants won't overlap.
-		addwfc	PRODH,F				    ; In right order, to propagate carry.
+	movf	aa_temp+1,W				; Add color/4
+	addwf	PRODL,F					; NOTE: 7/31+15/31=22/31,
+	movf	aa_temp+0,W				; hence components won't overlap
+	addwfc	PRODH,F					; In right order, to propagate carry
 
-		bra		aa_decode_3			    ; Done.
+	bra		aa_decode_3				; Done
 
-		; ---- Simple BLACK and WHITE cases ------------------------------
-aa_decode_13:							; Got a 1xx or a 000 code...
-		btfsc	win_invert  		    ; Inverse video mode ?
-		xorlw	0x80				    ; YES: invert levels.
-		bn		aa_decode_2			    ; Then test high bit.
+	; ---- Simple BLACK and WHITE cases ------------------------------
+aa_decode_13:						; Got a 1xx or a 000 code...
+	btfsc	win_invert  			; Inverse video mode ?
+	xorlw	0x80					; YES: invert levels
+	bn		aa_decode_2				; Then test high bit
 
-		; WHITE pixel (ie. full color)
-        bsf     tft_rs,0    ; RS_H				; Data
-		movff	win_color1,PORTA	    ; current draw color
-		movff	win_color2,PORTH	    ; (rem: TFT is big endian)
-		bra		aa_decode_4
+	; WHITE pixel (i.e. full color)
+	bsf		tft_rs,0				; RS_H Data
+	movff	win_color1,PORTA		; current draw color
+	movff	win_color2,PORTH		; (rem: TFT is big endian)
+	bra		aa_decode_4
 
 aa_decode_2:
-        bsf     tft_rs,0    ; RS_H				; Data
-		clrf	PORTA 				    ; BLACK pixel
-		clrf	PORTH
-        bra		aa_decode_4
+	bsf		tft_rs,0				; RS_H Data
+	clrf	PORTA					; BLACK pixel
+	clrf	PORTH
+	bra		aa_decode_4
 
 aa_decode_3:
-        bsf     tft_rs,0    ; RS_H				; Data
-    	movff	PRODH,PORTA	; Move high byte to PORTA
-        movff	PRODL,PORTH	; Move low byte to PORTH
+	bsf		tft_rs,0				; RS_H Data
+	movff	PRODH,PORTA				; Move high byte to PORTA
+	movff	PRODL,PORTH				; Move low byte to PORTH
 aa_decode_4:
 	bcf	INTCON,GIE
 aa_decode_4a:
-		;---- PIXEL WRITE LOOP -----------------------------------------------
-    	bcf     tft_nwr,0       ; WR_L
-        bsf     tft_nwr,0       ; WR_H                ; Tick
+	;---- PIXEL WRITE LOOP -----------------------------------------------
+	bcf		tft_nwr,0				; WR_L
+	bsf		tft_nwr,0				; WR_H Tick
+
+	decf	aa_bitlen,F
+	bnz		aa_decode_4a
 
-		decf	aa_bitlen,F
-		bnz		aa_decode_4a
-		
-	bsf	INTCON,GIE
-		;---- BYTE-CODE LOOP -------------------------------------------------
-		; Are we done ?
-		movf	TBLPTRL,W 			    ; Compare TBLPTR to aa_end
-		cpfseq	aa_end+0
-		bra		aa_decode_1             ; Loop if LOW is different
-		movf	TBLPTRH,W
-		cpfseq	aa_end+1			; Loop too if HIGH is different
-		bra		aa_decode_1
-		
-		return
+	bsf		INTCON,GIE
+	;---- BYTE-CODE LOOP -------------------------------------------------
+	; Are we done ?
+	movf	TBLPTRL,W				; Compare TBLPTR to aa_end
+	cpfseq	aa_end+0
+	bra		aa_decode_1				; Loop if LOW is different
+	movf	TBLPTRH,W
+	cpfseq	aa_end+1				; Loop too if HIGH is different
+	bra		aa_decode_1
+	return
 
 ;------------------------------------------------------------------------------
 ; Setup pointers for a char:
 ; Inputs : buffer : string to print (SHOULD BE NULL TERMINATED)
 ; Output : TFT commands on port D + clocks.
 ; 
-        global  aa_wordprocessor        ; Callable from C-code.
+	global	aa_wordprocessor		; Callable from C-code
 aa_wordprocessor:
-        banksel win_font                ; Bank1, just to be sure.
-		rcall	aa_string_width		    ; Set win_height, compute win_width:2
-		call	TFT_box_write		    ; Use that for the box.
+	banksel	win_font				; Bank1, just to be sure
+	rcall	aa_string_width			; Set win_height, compute win_width:2
+	call	TFT_box_write			; Use that for the box
 
-		; Restart the loop for each char to print
-		lfsr	FSR2, buffer		    ; FSR2 pointer to start of string.
+	; Restart the loop for each char to print
+	lfsr	FSR2, buffer			; FSR2 pointer to start of string
 
-		; DATA block comand
-		Index_out	0x22
+	; DATA block command
+	Index_out	0x22				; Index_out is a macro defined in tft.inc
 
 aa_wordprocessor_1:
-		movf	POSTINC2,W  		    ; WREG = *FSR2++
-		bz		aa_wordprocessor_99	    ; Exit if null byte encountered.
+	movf	POSTINC2,W  			; WREG = *FSR2++
+	bz		aa_wordprocessor_99		; Exit if null byte encountered
 
-		rcall	aa_char_setup		    ; setup aa_start / aa_end
-		rcall	aa_decode_char		    ; write pixels to screen
-		bra		aa_wordprocessor_1	    ; and loop.
+	rcall	aa_char_setup			; setup aa_start / aa_end
+	rcall	aa_decode_char			; write pixels to screen
+	bra		aa_wordprocessor_1		; and loop
 
 aa_wordprocessor_99:
-		; END of bloc commande
-		Index_out	0x00
+	; END of bloc command
+	Index_out	0x00
+	return
 
-        return
-        END
\ No newline at end of file
+	END
--- a/src/adc_lightsensor.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/adc_lightsensor.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File adc.asm
+;   File adc.asm														V2.98
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -14,126 +14,130 @@
 #include "eeprom_rs232.inc"
 #include "i2c.inc"
 
-sensors CODE
+	extern	reset_battery_internal_only
+
+sensors		CODE
+
+;=============================================================================
 
 wait_adc:
 	movwf	ADCON0
-    nop
-	bsf		ADCON0,1			; start ADC
+	nop
+	bsf		ADCON0,1						; start ADC
 wait_adc2:
-	btfsc	ADCON0,1            ; Wait...
+	btfsc	ADCON0,1						; Wait...
 	bra		wait_adc2
-    return
+	return
 
 	global	get_battery_voltage
-get_battery_voltage:			; starts ADC and waits until fnished
-    btfss   battery_gauge_available
-    bra     get_battery_voltage1     ; Normal ostc3 hardware
+get_battery_voltage:						; starts ADC and waits until finished
+	btfss	battery_gauge_available
+	bra		get_battery_voltage1			; Normal ostc3 hardware
 
-    call    lt2942_get_accumulated_charge
-    call    lt2942_get_voltage
-    
-    tstfsz  batt_voltage+1		; <256mV?
-    bra	    get_battery_voltage_noretry	; No
+	call	lt2942_get_accumulated_charge
+	call	lt2942_get_voltage
+
+	tstfsz	batt_voltage+1					; <256mV?
+	bra		get_battery_voltage_noretry		; No
 
-    ; Retry
-    call    lt2942_get_accumulated_charge
-    call    lt2942_get_voltage
-    
+	; Retry
+	call	lt2942_get_accumulated_charge
+	call	lt2942_get_voltage
+
 get_battery_voltage_noretry:
-    btfsc   divemode
-    return                          ; Not in divemode
+	btfsc	divemode
+	return									; Not in divemode
 
-    bcf     cv_active
-    bcf     cc_active
-    bcf     LEDr
-    bcf     TRISJ,2                 ; Chrg-Out output
-    bsf     CHRG_OUT
+	bcf		cv_active
+	bcf		cc_active
+	bcf		LEDr
+	bcf		TRISJ,2							; Chrg-Out output
+	bsf		CHRG_OUT
 
-    btfss   CHRG_IN
-    bra     charge_cc_active
+	btfss	CHRG_IN
+	bra		charge_cc_active
 
-    bcf     CHRG_OUT
-    bsf     TRISJ,2                 ; Chrg-Out high impedance
+	bcf		CHRG_OUT
+	bsf		TRISJ,2							; Chrg-Out high impedance
 
-    WAITMS  d'1'
+	WAITMS	d'1'
 
-    btfsc   CHRG_IN
-    return
-;cv_active:
-    decfsz  safety_stop_countdown,F
-    return
-    movlw   .15
-    cpfsgt  batt_voltage+1          ; Batt Voltage >= 16*256mV (4,096V)?
-    bra     charge_cc_active        ; No
-    bsf     cc_active
-    bsf     cv_active
-    bsf     LEDr                    ; Indicate charging
-    call    lt2942_charge_done      ; Reset accumulating registers to 0xFFFF
-    WAITMS  d'10'
-    bcf     LEDr                    ; Indicate charging
-    bsf     safety_stop_countdown,0 ; =1
-    return
+	btfsc	CHRG_IN
+	return
+	;cv_active:
+	decfsz	get_bat_volt_counter,F
+	return
+	movlw	.15
+	cpfsgt	batt_voltage+1					; Batt Voltage >= 16*256mV (4,096V)?
+	bra		charge_cc_active				; No
+	bsf		cc_active
+	bsf		cv_active
+	bsf		LEDr							; Indicate charging
+	call	lt2942_charge_done				; Reset accumulating registers to 0xFFFF
+	WAITMS	d'10'
+	bcf		LEDr							; Indicate charging
+	bsf		get_bat_volt_counter,0			; =1
+	return
 
 charge_cc_active:
-    bsf     cc_active
-    bsf     LEDr                    ; Indicate charging
-    bcf     CHRG_OUT
-    bsf     TRISJ,2                 ; Chrg-Out high impedance
-    movlw   .10
-    movwf   safety_stop_countdown
-    return
+	bsf		cc_active
+	bsf		LEDr							; Indicate charging
+	bcf		CHRG_OUT
+	bsf		TRISJ,2							; Chrg-Out high impedance
+	movlw	.10
+	movwf	get_bat_volt_counter
+	return
 
 get_battery_voltage1:
-    bsf     adc_running         ; =1: The ADC is in use
-	movlw	b'00100000'			; 2.048V Vref+ -> 1LSB = 500µV
+	bsf		adc_running						; =1: The ADC is in use
+	movlw	b'00100000'						; 2.048V Vref+ -> 1LSB = 500µV
 	movwf	ADCON1
-	movlw	b'00011001'			; power on ADC, select AN6
-	rcall   wait_adc
+	movlw	b'00011001'						; power on ADC, select AN6
+	rcall	wait_adc
 
-	movff	ADRESH,batt_voltage+1	; store value
-	movff	ADRESL,batt_voltage+0	; store value
-	bcf		ADCON0,0			; power off ADC
+	movff	ADRESH,batt_voltage+1			; store value
+	movff	ADRESL,batt_voltage+0			; store value
+	bcf		ADCON0,0						; power off ADC
 
-; Multiply with 2,006 to be excact here...
+; Multiply with 2,006 to be exact here...
 ;	bcf		STATUS,C
 ;	rlcf	xA+0,F
 ;
-;	rlcf	xA+1,F              ; x2
+;	rlcf	xA+1,F							; x2
 
-;	movff	xA+0,batt_voltage+0	; store value
+;	movff	xA+0,batt_voltage+0				; store value
 ;	movff	xA+1,batt_voltage+1
 
-	movlw	LOW		lithium_36v_low
+	movlw	LOW  lithium_36v_low
 	movwf	sub_a+0
-	movlw	HIGH	lithium_36v_low
+	movlw	HIGH lithium_36v_low
 	movwf	sub_a+1
 	movff	batt_voltage+0,sub_b+0
 	movff	batt_voltage+1,sub_b+1
-	call	subU16				; sub_c = sub_a - sub_b
-; Battery is 3,6V (>lithium_36v_low?)
+	call	subU16							; sub_c = sub_a - sub_b
+	; Battery is 3,6V (>lithium_36v_low?)
 	btfss	neg_flag
-    bra     get_battery_voltage4    ; No, use 1,5V
+	bra		get_battery_voltage4			; No, use 1,5V
 
-	bsf		battery_is_36v	; Yes, set flag (Cleared in power-on reset only!)
+	bsf		battery_is_36v					; Yes, set flag (Cleared in power-on reset only!)
 
-; Check if the battery is near-dead already
-	movlw	LOW		lithium_36v_empty
+	; Check if the battery is near-dead already
+	movlw	LOW  lithium_36v_empty
 	movwf	sub_a+0
-	movlw	HIGH	lithium_36v_empty
+	movlw	HIGH lithium_36v_empty
 	movwf	sub_a+1
-	call	subU16				; sub_c = sub_a - sub_b
-; Battery is not dead yet (>lithium_36v_empty?)
+	call	subU16							; sub_c = sub_a - sub_b
+	; Battery is not dead yet (>lithium_36v_empty?)
 	btfsc	neg_flag
-    bra     get_battery_voltage2    ; Yes, battery is still ok
+	bra		get_battery_voltage2			; Yes, battery is still ok
 
-    ; Battery is probably dead very soon
-    ; Set ">=24Ah used" into battery gauge registers
-    movlw   .128
-    movff   WREG,battery_gauge+5
+	; Battery is probably dead very soon
+	; Set ">=24Ah used" into battery gauge registers
+	movlw	.128
+	movff	WREG,battery_gauge+5
 
 get_battery_voltage2:
-    ; Use 3,6V battery gauging mode
+	; Use 3,6V battery gauging mode
 	movff	battery_gauge+5,xC+3
 	movff	battery_gauge+4,xC+2
 	movff	battery_gauge+3,xC+1
@@ -144,12 +148,12 @@
 	; Result is in percent
 	movff	internal_battery_capacity+0,xB+0
 	movff	internal_battery_capacity+1,xB+1
-	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,lo
-    ; Limit to 100
-    movlw   .100
-    cpfslt  lo
-    movwf   lo
+	; Limit to 100
+	movlw	.100
+	cpfslt	lo
+	movwf	lo
 	; lo will be between 0 (Full) and 100 (empty)
 	movf	lo,W
 	sublw	.100
@@ -160,117 +164,118 @@
 	movwf	lo
 	; lo will be between 100 (Full) and 0 (empty)
 
-; use 3,6V battery sensing based on 50mA load
-; 75%
+	; use 3,6V battery sensing based on 50mA load
+	; 75%
 	movff	batt_voltage+0,sub_b+0
 	movff	batt_voltage+1,sub_b+1
-	movlw	LOW		lithium_36v_75
+	movlw	LOW  lithium_36v_75
 	movwf	sub_a+0
-	movlw	HIGH	lithium_36v_75
+	movlw	HIGH lithium_36v_75
 	movwf	sub_a+1
-	call	subU16				; sub_c = sub_a - sub_b
+	call	subU16							; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-    bra     get_battery_voltage3a
-    movlw   .75
-    movwf   lo
+	bra		get_battery_voltage3a
+	movlw	.75
+	movwf	lo
 get_battery_voltage3a:
 ; 50%
-	movlw	LOW		lithium_36v_50
+	movlw	LOW  lithium_36v_50
 	movwf	sub_a+0
-	movlw	HIGH	lithium_36v_50
+	movlw	HIGH lithium_36v_50
 	movwf	sub_a+1
-	call	subU16				; sub_c = sub_a - sub_b
+	call	subU16							; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-    bra     get_battery_voltage3b
-    movlw   .50
-    movwf   lo
+	bra		get_battery_voltage3b
+	movlw	.50
+	movwf	lo
 get_battery_voltage3b:
-    ; 25%
-	movlw	LOW		lithium_36v_25
+	; 25%
+	movlw	LOW  lithium_36v_25
 	movwf	sub_a+0
-	movlw	HIGH	lithium_36v_25
+	movlw	HIGH lithium_36v_25
 	movwf	sub_a+1
-	call	subU16				; sub_c = sub_a - sub_b
+	call	subU16							; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-    bra     get_battery_voltage3c
-    movlw   .25
-    movwf   lo
+	bra		get_battery_voltage3c
+	movlw	.25
+	movwf	lo
 get_battery_voltage3c:
-    ; 10%
-	movlw	LOW		lithium_36v_10
+	; 10%
+	movlw	LOW  lithium_36v_10
 	movwf	sub_a+0
-	movlw	HIGH	lithium_36v_10
+	movlw	HIGH lithium_36v_10
 	movwf	sub_a+1
-	call	subU16				; sub_c = sub_a - sub_b
+	call	subU16							; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-    bra     get_battery_voltage3d
-    movlw   .10
-    movwf   lo
+	bra		get_battery_voltage3d
+	movlw	.10
+	movwf	lo
 get_battery_voltage3d:
 	movlw	.100
 	cpfslt	lo
 	movwf	lo
 	; lo will be between 100 (Full) and 0 (empty)
-    movf    batt_percent,W
-    cpfsgt  lo                      ; keep batt_percent on the lowest value found
-    movff   lo,batt_percent         ; store value
-    btfsc   battery_is_36v          ; but always use computed value for 3,6V battery
-    movff   lo,batt_percent         ; store value
-    bcf     adc_running              ; =1: The ADC is in use
+	movf	batt_percent,W
+	cpfsgt	lo								; keep batt_percent on the lowest value found
+	movff	lo,batt_percent					; store value
+	btfsc	battery_is_36v					; but always use computed value for 3,6V battery
+	movff	lo,batt_percent					; store value
+	bcf		adc_running						; =1: The ADC is in use
 	return
 
 get_battery_voltage4:
-    ; Use 1,5V battery voltage mode
-    ; Use approximation (batt_voltage:2-aa_15v_low)/4 = lo
+	; Use 1,5V battery voltage mode
+	; Use approximation (batt_voltage:2-aa_15v_low)/4 = lo
 	movff	batt_voltage+0,sub_a+0
 	movff	batt_voltage+1,sub_a+1
-   	movlw	LOW		aa_15v_low
-    movwf	sub_b+0
-	movlw	HIGH	aa_15v_low
+	movlw	LOW  aa_15v_low
+	movwf	sub_b+0
+	movlw	HIGH aa_15v_low
 	movwf	sub_b+1
-	call	subU16				; sub_c = sub_a - sub_b
-    bcf     STATUS,C
-    rrcf    sub_c+1
-    rrcf    sub_c+0             ; /2
-    bcf     STATUS,C
-    rrcf    sub_c+1
-    rrcf    sub_c+0             ; /4
-    movff   sub_c+0,lo
-    bra     get_battery_voltage3d    ; Check limits and return
+	call	subU16							; sub_c = sub_a - sub_b
+	bcf		STATUS,C
+	rrcf	sub_c+1
+	rrcf	sub_c+0							; /2
+	bcf		STATUS,C
+	rrcf	sub_c+1
+	rrcf	sub_c+0							; /4
+	movff	sub_c+0,lo
+	bra		get_battery_voltage3d			; Check limits and return
 
 	global	get_ambient_level
-get_ambient_level:              ; starts ADC and waits until finished
-    btfsc   adc_running         ; ADC in use?
-    return                      ; Yes, return
+get_ambient_level:							; starts ADC and waits until finished
+	btfsc	adc_running						; ADC in use?
+	return									; Yes, return
 
-    btfsc   ambient_sensor
-    bra     get_ambient_level1  ; Normal ostc3 hardware
+	btfsc	ambient_sensor
+	bra		get_ambient_level1				; Normal ostc3 hardware
 
-  	banksel isr_backup              ; Back to Bank0 ISR data
+	banksel	isr_backup						; Back to Bank0 ISR data
 	movff	opt_brightness,isr1_temp
-	incf	isr1_temp,F				; adjust 0-2 to 1-3
-	movlw	ambient_light_max_high_cr; cR and 2 hardware brightest setting
+	incf	isr1_temp,F						; adjust 0-2 to 1-3
+	movlw	ambient_light_max_high_cr		; cR and 2 hardware brightest setting
 	dcfsnz	isr1_temp,F
-	movlw	ambient_light_max_eco	; brightest setting
+	movlw	ambient_light_max_eco			; brightest setting
 	dcfsnz	isr1_temp,F
-	movlw	ambient_light_max_medium; brightest setting
+	movlw	ambient_light_max_medium		; brightest setting
 
-	movff	WREG,ambient_light+0		; Set to max.
-	movff	ambient_light+0,max_CCPR1L	; Store value for dimming in TMR7 interrupt
+	movff	WREG,ambient_light+0			; Set to max.
+	movff	ambient_light+0,max_CCPR1L		; Store value for dimming in TMR7 interrupt
 	return
 
 get_ambient_level1:
-	movlw	b'00000000'         ; Vref+ = Vdd
+	movlw	b'00000000'						; Vref+ = Vdd
 	movwf	ADCON1
-	movlw	b'00011101'			; power on ADC, select AN7
-	rcall   wait_adc
+	movlw	b'00011101'						; power on ADC, select AN7
+	rcall	wait_adc
 
 	movff	ADRESH,ambient_light+1
 	movff	ADRESL,ambient_light+0
-	bcf		ADCON0,0			; power off ADC
+	bcf		ADCON0,0						; power off ADC
 
 	; ambient_light:2 is between 4096 (direct sunlight) and about 200 (darkness)
-	; First: Devide through 16
+	; First: Divide by 16
+	banksel	ambient_light
 	bcf		STATUS,C
 	rrcf	ambient_light+1
 	rrcf	ambient_light+0
@@ -286,384 +291,367 @@
 	; Result: ambient_light:2/16
 	; Now, make sure to have value between ambient_light_low and ambient_light_max
 
-    movlw   .254
-    tstfsz  ambient_light+1         ; >255?
-    movwf   ambient_light+0         ; avoid ADC clipping
+	movlw	.254
+	tstfsz	ambient_light+1					; >255?
+	movwf	ambient_light+0					; avoid ADC clipping
 
-    incfsz  ambient_light+0,W       ; =255?
-    bra     get_ambient_level2      ; No, continue
+	incfsz	ambient_light+0,W				; =255?
+	bra		get_ambient_level2				; No, continue
 
-    movlw   .254
-    movwf   ambient_light+0         ; avoid ADC clipping
+	movlw	.254
+	movwf	ambient_light+0					; avoid ADC clipping
 
 get_ambient_level2:
-;    movlw   .10
-;    subwf   ambient_light+0,F       ; Subtract 10 (ADC Offset)
-;    btfsc   STATUS,N
-;    movwf   ambient_light+0         ; avoid clipping
+;	movlw	.10
+;	subwf	ambient_light+0,F				; Subtract 10 (ADC Offset)
+;	btfsc	STATUS,N
+;	movwf	ambient_light+0					; avoid clipping
 
-  	banksel isr_backup              ; Back to Bank0 ISR data
+	banksel	isr_backup						; Back to Bank0 ISR data
 	movff	opt_brightness,isr1_temp
 
-	btfsc	RCSTA1,7				; UART module on?
-	clrf	isr1_temp				; Yes, set temporally to eco mode
+	btfsc	RCSTA1,7						; UART module on?
+	clrf	isr1_temp						; Yes, set temporally to eco mode
 
-	incf	isr1_temp,F				; adjust 0-2 to 1-3
+	incf	isr1_temp,F						; adjust 0-2 to 1-3
 
-    banksel common                  ; flag is in bank1
-	movlw	ambient_light_max_high_cr; cR and 2 hardware brightest setting
-    btfss   battery_gauge_available
-    movlw	ambient_light_max_high_15V; 1,5V battery brightest setting
-    btfsc	battery_is_36v          ; 3,6V battery in use?
-	movlw	ambient_light_max_high_36V	; 3,6V battery brightest setting
-	banksel isr_backup              ; Back to Bank0 ISR data
+	banksel	common							; flag is in bank1
+	movlw	ambient_light_max_high_cr		; cR and 2 hardware brightest setting
+	btfss	battery_gauge_available
+	movlw	ambient_light_max_high_15V		; 1,5V battery brightest setting
+	btfsc	battery_is_36v					; 3,6V battery in use?
+	movlw	ambient_light_max_high_36V		; 3,6V battery brightest setting
+	banksel	isr_backup						; Back to Bank0 ISR data
 
 	dcfsnz	isr1_temp,F
-	movlw	ambient_light_max_eco	; brightest setting	
+	movlw	ambient_light_max_eco			; brightest setting
 	dcfsnz	isr1_temp,F
-	movlw	ambient_light_max_medium; brightest setting		
+	movlw	ambient_light_max_medium		; brightest setting
 
-	banksel common                  ; ambient_light is in Bank1
-    incf    ambient_light+0,F       ; +1
-	cpfslt	ambient_light+0			; smaller then WREG?
-	movwf	ambient_light+0			; No, set to max.
+	banksel	ambient_light
+	incf	ambient_light+0,F				; +1
+	cpfslt	ambient_light+0					; smaller then WREG?
+	movwf	ambient_light+0					; No, set to max.
 
-	banksel isr_backup              ; Back to Bank0 ISR data
+	banksel	isr_backup						; Back to Bank0 ISR data
 	movff	opt_brightness,isr1_temp
-	incf	isr1_temp,F				; adjust 0-2 to 1-3
-	movlw	ambient_light_min_high	; darkest setting
+	incf	isr1_temp,F						; adjust 0-2 to 1-3
+	movlw	ambient_light_min_high			; darkest setting
 
 	dcfsnz	isr1_temp,F
-	movlw	ambient_light_min_eco	; darkest setting
+	movlw	ambient_light_min_eco			; darkest setting
 	dcfsnz	isr1_temp,F
-	movlw	ambient_light_min_medium; darkest setting
+	movlw	ambient_light_min_medium		; darkest setting
 	dcfsnz	isr1_temp,F
-	movlw	ambient_light_min_high	; darkest setting
-	
-	banksel common                  ; ambient_light is in Bank1
-	cpfsgt	ambient_light+0			; bigger then WREG?
-	movwf	ambient_light+0			; No, set to min
-	
-	movff	ambient_light+0,max_CCPR1L	; Store value for dimming in TMR7 interrupt
+	movlw	ambient_light_min_high			; darkest setting
+
+	banksel	ambient_light
+	cpfsgt	ambient_light+0					; bigger then WREG?
+	movwf	ambient_light+0					; No, set to min
+	banksel	common
+
+	movff	ambient_light+0,max_CCPR1L		; Store value for dimming in TMR7 interrupt
 	return
 
 	global	get_analog_inputs
-get_analog_inputs:			; starts ADC and waits until finished
-    bsf     adc_running         ; =1: The ADC is in use
-    btfsc   TFT_PWM
-    bra     get_analog_inputs   ; Wait for PWM low
-    movlw	b'00100000'			; 2.048V Vref+ -> 1LSB = 500µV
+get_analog_inputs:							; starts ADC and waits until finished
+	bsf		adc_running						; =1: The ADC is in use
+	btfsc	TFT_PWM
+	bra		get_analog_inputs				; Wait for PWM low
+	movlw	b'00100000'						; 2.048V Vref+ -> 1LSB = 500µV
 	movwf	ADCON1
-	movlw	b'00100001'			; power on ADC, select AN8
-	rcall   wait_adc
-    bcf     STATUS,C
-    rrcf    ADRESH,F                    ; /2
-    rrcf    ADRESL,W
-    ; add to o2_mv_sensor1:2
-    addwf   o2_mv_sensor1+0,F
-    movf    ADRESH,W
-    addwfc  o2_mv_sensor1+1,F
-    ; Devide by 2
-    bcf     STATUS,C
-    rrcf    o2_mv_sensor1+1,F           ; /2
-    rrcf    o2_mv_sensor1+0,F
+	movlw	b'00100001'						; power on ADC, select AN8
+	rcall	wait_adc
+	bcf		STATUS,C
+	rrcf	ADRESH,F						; /2
+	rrcf	ADRESL,W
+	; add to o2_mv_sensor1:2
+	addwf	o2_mv_sensor1+0,F
+	movf	ADRESH,W
+	addwfc	o2_mv_sensor1+1,F
+	; Devide by 2
+	bcf		STATUS,C
+	rrcf	o2_mv_sensor1+1,F				; /2
+	rrcf	o2_mv_sensor1+0,F
 
-    movlw   HIGH    ignore_mv
-    cpfsgt  o2_mv_sensor1+1     ; >ignore_mv?
-    bra     get_analog_inputs2a ; No
-    ; Yes, ignore this reading
-    clrf    o2_mv_sensor1+1
-    clrf    o2_mv_sensor1+0
+	movlw	HIGH ignore_mv
+	cpfsgt	o2_mv_sensor1+1					; >ignore_mv?
+	bra		get_analog_inputs2a				; No
+	; Yes, ignore this reading
+	clrf	o2_mv_sensor1+1
+	clrf	o2_mv_sensor1+0
 get_analog_inputs2a:
-    ; Ignore 1,9mV noise for not-connected inputs
-    tstfsz  o2_mv_sensor1+1     ; >25,5mV?
-    bra     get_analog_inputs2  ; Yes, skip here
-    movlw   .19
-    cpfsgt  o2_mv_sensor1+0     ; >1,9mV?
-    clrf    o2_mv_sensor1+0     ; no, clear result
+	; Ignore 1,9mV noise for not-connected inputs
+	tstfsz	o2_mv_sensor1+1					; >25,5mV?
+	bra		get_analog_inputs2				; Yes, skip here
+	movlw	.19
+	cpfsgt	o2_mv_sensor1+0					; >1,9mV?
+	clrf	o2_mv_sensor1+0					; no, clear result
 get_analog_inputs2:
-	movlw	b'00100101'			; power on ADC, select AN9
-	rcall   wait_adc
-    bcf     STATUS,C
-    rrcf    ADRESH,F                    ; /2
-    rrcf    ADRESL,W
-    ; add to o2_mv_sensor2:2
-    addwf   o2_mv_sensor2+0,F
-    movf    ADRESH,W
-    addwfc  o2_mv_sensor2+1,F
-    ; Devide by 2
-    bcf     STATUS,C
-    rrcf    o2_mv_sensor2+1,F           ; /2
-    rrcf    o2_mv_sensor2+0,F
+	movlw	b'00100101'						; power on ADC, select AN9
+	rcall	wait_adc
+	bcf		STATUS,C
+	rrcf	ADRESH,F						; /2
+	rrcf	ADRESL,W
+	; add to o2_mv_sensor2:2
+	addwf	o2_mv_sensor2+0,F
+	movf	ADRESH,W
+	addwfc	o2_mv_sensor2+1,F
+	; Devide by 2
+	bcf		STATUS,C
+	rrcf	o2_mv_sensor2+1,F				; /2
+	rrcf	o2_mv_sensor2+0,F
 
-    movlw   HIGH    ignore_mv
-    cpfsgt  o2_mv_sensor2+1     ; >ignore_mv?
-    bra     get_analog_inputs3a ; No
-    ; Yes, ignore this reading
-    clrf    o2_mv_sensor2+1
-    clrf    o2_mv_sensor2+0
+	movlw	HIGH ignore_mv
+	cpfsgt	o2_mv_sensor2+1					; >ignore_mv?
+	bra		get_analog_inputs3a				; No
+	; Yes, ignore this reading
+	clrf	o2_mv_sensor2+1
+	clrf	o2_mv_sensor2+0
 get_analog_inputs3a:
-    ; Ignore 1,9mV noise for not-connected inputs
-    tstfsz  o2_mv_sensor2+1     ; >25,5mV?
-    bra     get_analog_inputs3  ; Yes, skip here
-    movlw   .19
-    cpfsgt  o2_mv_sensor2+0     ; >1,9mV?
-    clrf    o2_mv_sensor2+0     ; no, clear result
+	; Ignore 1,9mV noise for not-connected inputs
+	tstfsz	o2_mv_sensor2+1					; >25,5mV?
+	bra		get_analog_inputs3				; Yes, skip here
+	movlw	.19
+	cpfsgt	o2_mv_sensor2+0					; >1,9mV?
+	clrf	o2_mv_sensor2+0					; no, clear result
 get_analog_inputs3:
-	movlw	b'00101001'			; power on ADC, select AN10
-	rcall   wait_adc
-    bcf     STATUS,C
-    rrcf    ADRESH,F                    ; /2
-    rrcf    ADRESL,W
-    ; add to o2_mv_sensor3:2
-    addwf   o2_mv_sensor3+0,F
-    movf    ADRESH,W
-    addwfc  o2_mv_sensor3+1,F
-    ; Devide by 2
-    bcf     STATUS,C
-    rrcf    o2_mv_sensor3+1,F           ; /2
-    rrcf    o2_mv_sensor3+0,F
+	movlw	b'00101001'						; power on ADC, select AN10
+	rcall	wait_adc
+	bcf		STATUS,C
+	rrcf	ADRESH,F						; /2
+	rrcf	ADRESL,W
+	; add to o2_mv_sensor3:2
+	addwf	o2_mv_sensor3+0,F
+	movf	ADRESH,W
+	addwfc	o2_mv_sensor3+1,F
+	; Devide by 2
+	bcf		STATUS,C
+	rrcf	o2_mv_sensor3+1,F				; /2
+	rrcf	o2_mv_sensor3+0,F
 
-    movlw   HIGH    ignore_mv
-    cpfsgt  o2_mv_sensor3+1     ; >ignore_mv?
-    bra     get_analog_inputs4a ; No
-    ; Yes, ignore this reading
-    clrf    o2_mv_sensor3+1
-    clrf    o2_mv_sensor3+0
+	movlw	HIGH ignore_mv
+	cpfsgt	o2_mv_sensor3+1					; >ignore_mv?
+	bra		get_analog_inputs4a ; No
+	; Yes, ignore this reading
+	clrf	o2_mv_sensor3+1
+	clrf	o2_mv_sensor3+0
 get_analog_inputs4a:
-    ; Ignore 1,9mV noise for not-connected inputs
-    tstfsz  o2_mv_sensor3+1     ; >25,5mV?
-    bra     get_analog_inputs4  ; Yes, skip here
-    movlw   .19
-    cpfsgt  o2_mv_sensor3+0     ; >1,9mV?
-    clrf    o2_mv_sensor3+0     ; no, clear result
+	; Ignore 1,9mV noise for not-connected inputs
+	tstfsz	o2_mv_sensor3+1					; >25,5mV?
+	bra		get_analog_inputs4				; Yes, skip here
+	movlw	.19
+	cpfsgt	o2_mv_sensor3+0					; >1,9mV?
+	clrf	o2_mv_sensor3+0					; no, clear result
 get_analog_inputs4:
-	bcf		ADCON0,0			; power off ADC
-    bcf     adc_running         ; =1: The ADC is in use
-    return
+	bcf		ADCON0,0						; power off ADC
+	bcf		adc_running						; =1: The ADC is in use
+	return
 
-    global  piezo_config            ; Sets up piezo sensitivity of heinrichs weikamp Piezo buttons (~30ms)
-piezo_config:   ; Settings between 20 and 200
-        clrf	TMR5H
-	clrf	TMR5L	    ; ~2sec
-	bcf		PIR5,TMR5IF			; Clear flag
-	bcf	switch_right
-	bcf	switch_left
+	global	piezo_config					; sets up piezo sensitivity of heinrichs weikamp piezo buttons (~30ms)
+piezo_config:								; Settings between 20 and 200
+	clrf	TMR5H
+	clrf	TMR5L							; ~2sec
+	bcf		PIR5,TMR5IF						; Clear flag
+	bcf		switch_right
+	bcf		switch_left
 piezo_config0:
 	btfsc	switch_right
-	bra	piezo_config
+	bra		piezo_config
 	btfsc	switch_left
-	bra	piezo_config		; Restart on button press
-    
+	bra		piezo_config					; Restart on button press
+
 	btfss	PIR5,TMR5IF
-	bra	piezo_config0			; Wait loop
+	bra		piezo_config0					; Wait loop
 
-    bcf	    INTCON,GIE
-    movff   opt_cR_button_right,WREG; right button
-    btfsc   flip_screen             ; 180° rotation ?
-    movff   opt_cR_button_left,WREG ; Yes, left button
-    rcall   piezo_config_tx
+	bcf		INTCON,GIE
+	movff	opt_cR_button_right,WREG		; right button
+	btfsc	flip_screen						; 180° rotation ?
+	movff	opt_cR_button_left,WREG			; Yes, left button
+	rcall	piezo_config_tx
 
-    movff   opt_cR_button_left,WREG ; left button
-    btfsc   flip_screen             ; 180° rotation ?
-    movff   opt_cR_button_right,WREG; Yes, right button
-    rcall   piezo_config_tx
+	movff	opt_cR_button_left,WREG			; left button
+	btfsc	flip_screen						; 180° rotation ?
+	movff	opt_cR_button_right,WREG		; Yes, right button
+	rcall	piezo_config_tx
 
-    movlw   .20                    ; reserved
-    rcall   piezo_config_tx
-    movlw   .20                    ; reserved
-    rcall   piezo_config_tx
-    bsf	    INTCON,GIE
-    return
+	movlw	.20								; reserved
+	rcall	piezo_config_tx
+	movlw	.20								; reserved
+	rcall	piezo_config_tx
+	bsf		INTCON,GIE
+	return
 
-piezo_config_tx:                    ; Send one byte
-    movwf   uart1_temp              ; Store byte
-    movlw   .8
-    movwf   uart2_temp              ; Bit counter
-    bcf     TX3_PIEZO_CFG           ; Startbit
-    rcall   piezo_config_wait_bit
+piezo_config_tx:							; send one byte
+	movwf	lo								; store byte
+	movlw	.8
+	movwf	hi								; bit counter
+	bcf		TX3_PIEZO_CFG					; start bit
+	rcall	piezo_config_wait_bit
 piezo_config_tx_loop:
-    btfss   uart1_temp,0            ; LSB first
-    bcf     TX3_PIEZO_CFG
-    btfsc   uart1_temp,0            ; LSB first
-    bsf     TX3_PIEZO_CFG
-    rcall   piezo_config_wait_bit
-    rrncf   uart1_temp,F
-    decfsz  uart2_temp,F
-    bra     piezo_config_tx_loop
-    bsf     TX3_PIEZO_CFG           ; Stopbit
-    rcall   piezo_config_wait_bit
-    return
+	btfss	lo,0							; LSB first
+	bcf		TX3_PIEZO_CFG
+	btfsc	lo,0							; LSB first
+	bsf		TX3_PIEZO_CFG
+	rcall	piezo_config_wait_bit
+	rrncf	lo,F
+	decfsz	hi,F
+	bra		piezo_config_tx_loop
+	bsf		TX3_PIEZO_CFG					; stop bit
+	rcall	piezo_config_wait_bit
+	return
 
 piezo_config_wait_bit:
-    setf	TMR5H
-	movlw	.255-.26 			;26 x 31,5µs = 819us
+	setf	TMR5H
+	movlw	.255-.26 						; 26 x 31,5µs = 819us
 	movwf	TMR5L
-	bcf		PIR5,TMR5IF			; Clear flag
+	bcf		PIR5,TMR5IF						; Clear flag
 piezo_config_wait_bit3:
-    btfss	PIR5,TMR5IF
+	btfss	PIR5,TMR5IF
 	bra		piezo_config_wait_bit3			; Wait loop
 	return
 
-    global  reset_battery_pointer, reset_battery_internal_only
-reset_battery_pointer:       ; Resets battery pointer 0x07-0x0C and battery_gauge:5
-	extern  lt2942_charge_done
-    btfsc   battery_gauge_available            ; Something to reset?
-    call    lt2942_charge_done      ; Yes, reset accumulating registers to 0xFFFF
-reset_battery_internal_only:
-    clrf	EEADRH
-    clrf	EEDATA					; Delete to zero
-    write_int_eeprom 0x07
-    write_int_eeprom 0x08
-    write_int_eeprom 0x09
-    write_int_eeprom 0x0A
-    write_int_eeprom 0x0B
-    write_int_eeprom 0x0C
-    banksel battery_gauge+0
-    clrf    battery_gauge+0
-    clrf    battery_gauge+1
-    clrf    battery_gauge+2
-    clrf    battery_gauge+3
-    clrf    battery_gauge+4
-    clrf    battery_gauge+5
-    banksel common
-    movlw   .100
-    movwf   batt_percent
-    return
+	global	reset_battery_pointer
+reset_battery_pointer:						; Resets battery pointer 0x07-0x0C and battery_gauge:5
+	extern	lt2942_charge_done
+	btfsc	battery_gauge_available			; Something to reset?
+	call	lt2942_charge_done				; Yes, reset accumulating registers to 0xFFFF
+	goto	reset_battery_internal_only		; and return
+
+
+	global	get_analog_switches
+get_analog_switches:						; starts ADC and waits until finished
+	btfsc	analog_switches
+	bra		get_analog_switches2
+	; no analog switches
+	bcf		analog_sw2_pressed
+	bcf		analog_sw1_pressed
+	return									; Done.
+get_analog_switches2:
+	btfsc	adc_running						; ADC in use?
+	return									; Yes, return
 
-    global	get_analog_switches
-get_analog_switches:              ; starts ADC and waits until finished
-    btfsc   analog_switches
-    bra	    get_analog_switches2
-    ; no analog switches
-    bcf		analog_sw2_pressed
-    bcf		analog_sw1_pressed
-    return	; Done.
-get_analog_switches2:    
-    btfsc   adc_running         ; ADC in use?
-    return                      ; Yes, return
-    
-    movlw	b'00001001'	    ; left justified
-    movwf	ADCON2
-;    movlw	b'00000000'         ; Vref+ = Vdd
-    clrf	ADCON1
-    movlw	b'00100101'	    ; power on ADC, select AN9
-    rcall	wait_adc
-    banksel	analog_counter
-    movff	ADRESH,WREG
-    addwf	analog_sw2_raw+0
-    movlw	.0
-    addwfc	analog_sw2_raw+1
-    decfsz	analog_counter,F    ; continue averaging?
-    bra		get_analog_switches2a	; Yes
-    ; Done. Compute average
-    bcf     STATUS,C
-    rrcf    analog_sw2_raw+1
-    rrcf    analog_sw2_raw+0    ; /2
-    bcf     STATUS,C
-    rrcf    analog_sw2_raw+1
-    rrcf    analog_sw2_raw+0    ; /4
-    bcf     STATUS,C
-    rrcf    analog_sw2_raw+1
-    rrcf    analog_sw2_raw+0    ; /8
-    bcf     STATUS,C
-    rrcf    analog_sw2_raw+1
-    rrcf    analog_sw2_raw+0    ; /16
-    movff   analog_sw2_raw+0, analog_sw2
-    clrf    analog_sw2_raw+1
-    clrf    analog_sw2_raw+0	; Reset average registers
-;    movlw   .16
-;    movwf   analog_counter	; only once...
-get_analog_switches2a:    
-    banksel	common
-    bcf		analog_sw2_pressed
-    movff	opt_cR_button_left,WREG		;20-100
-    bcf		STATUS,C
-    rrcf	WREG		;/2 -> 10-50
-    bcf		STATUS,C
-    rrcf	WREG		;/2 -> 5-25
-    decf	WREG,W	    	;-1
-    decf	WREG,W	    	;-1
-    decf	WREG,W	    	;-1 -> 2-22
-    banksel	analog_sw2
-    btfss	button_polarity,1;(1= normal, 0=inverted)
-    bra		sw2_inverted
-    addwf	analog_sw2,W 	; average (~128)
-    cpfsgt	ADRESH
-    bra		get_analog_sw1
-    banksel	common
-    bsf		analog_sw2_pressed	; Left button normal
-    bra		get_analog_sw1
+	movlw	b'00001001'						; left justified
+	movwf	ADCON2
+;	movlw	b'00000000'						; Vref+ = Vdd
+	clrf	ADCON1
+	movlw	b'00100101'						; power on ADC, select AN9
+	rcall	wait_adc
+	banksel	analog_counter
+	movff	ADRESH,WREG
+	addwf	analog_sw2_raw+0
+	movlw	.0
+	addwfc	analog_sw2_raw+1
+	decfsz	analog_counter,F				; continue averaging?
+	bra		get_analog_switches2a			; Yes
+	; Done. Compute average
+	bcf		STATUS,C
+	rrcf	analog_sw2_raw+1
+	rrcf	analog_sw2_raw+0				; /2
+	bcf		STATUS,C
+	rrcf	analog_sw2_raw+1
+	rrcf	analog_sw2_raw+0				; /4
+	bcf		STATUS,C
+	rrcf	analog_sw2_raw+1
+	rrcf	analog_sw2_raw+0				; /8
+	bcf		STATUS,C
+	rrcf	analog_sw2_raw+1
+	rrcf	analog_sw2_raw+0				; /16
+	movff	analog_sw2_raw+0,analog_sw2
+	clrf	analog_sw2_raw+1
+	clrf	analog_sw2_raw+0				; Reset average registers
+;	movlw	.16
+;	movwf	analog_counter					; only once...
+get_analog_switches2a:
+	banksel	common
+	bcf		analog_sw2_pressed
+	movff	opt_cR_button_left,WREG			;20-100
+	bcf		STATUS,C
+	rrcf	WREG							;/2 -> 10-50
+	bcf		STATUS,C
+	rrcf	WREG							;/2 -> 5-25
+	decf	WREG,W							;-1
+	decf	WREG,W							;-1
+	decf	WREG,W							;-1 -> 2-22
+	banksel	analog_sw2
+	btfss	button_polarity,1				;(1= normal, 0=inverted)
+	bra		sw2_inverted
+	addwf	analog_sw2,W					; average (~128)
+	cpfsgt	ADRESH
+	bra		get_analog_sw1
+	banksel	common
+	bsf		analog_sw2_pressed				; Left button normal
+	bra		get_analog_sw1
 sw2_inverted:
-    subwf	analog_sw2,W 	; average (~128)
-    cpfslt	ADRESH
-    bra		get_analog_sw1
-    banksel	common
-    bsf		analog_sw2_pressed	; Left button inverted
+	subwf	analog_sw2,W					; average (~128)
+	cpfslt	ADRESH
+	bra		get_analog_sw1
+	banksel	common
+	bsf		analog_sw2_pressed				; Left button inverted
 get_analog_sw1:
-    banksel	common
-    movlw	b'00101001'	    ; power on ADC, select AN10
-    rcall	wait_adc
-    banksel	analog_counter
-    movff	ADRESH,WREG
-    addwf	analog_sw1_raw+0
-    movlw	.0
-    addwfc	analog_sw1_raw+1
-    tstfsz	analog_counter    ; continue averaging?
-    bra		get_analog_switches1a	; Yes
-    ; Done. Compute average
-    bcf     STATUS,C
-    rrcf    analog_sw1_raw+1
-    rrcf    analog_sw1_raw+0    ; /2
-    bcf     STATUS,C
-    rrcf    analog_sw1_raw+1
-    rrcf    analog_sw1_raw+0    ; /4
-    bcf     STATUS,C
-    rrcf    analog_sw1_raw+1
-    rrcf    analog_sw1_raw+0    ; /8
-    bcf     STATUS,C
-    rrcf    analog_sw1_raw+1
-    rrcf    analog_sw1_raw+0    ; /16
-    movff   analog_sw1_raw+0, analog_sw1
-    clrf    analog_sw1_raw+1
-    clrf    analog_sw1_raw+0	; Reset average registers
-    movlw   .16
-    movwf   analog_counter	; only once...
-get_analog_switches1a:    
-    banksel	common
-    bcf		analog_sw1_pressed
-    movff	opt_cR_button_right,WREG		;20-100
-    bcf		STATUS,C
-    rrcf	WREG		;/2 -> 10-50
-    bcf		STATUS,C
-    rrcf	WREG		;/2 -> 5-25
-    decf	WREG,W	    	;-1
-    decf	WREG,W	    	;-1
-    decf	WREG,W	    	;-1 -> 2-22
-    banksel	analog_sw1
-    btfss	button_polarity,0;(1= normal, 0=inverted)
-    bra		sw1_inverted
-    addwf	analog_sw1,W 	; average (~128)
-    cpfsgt	ADRESH
-    bra		get_analog_sw_done
-    banksel	common
-    bsf		analog_sw1_pressed	; right button normal
-    bra		get_analog_sw_done
+	banksel	common
+	movlw	b'00101001'						; power on ADC, select AN10
+	rcall	wait_adc
+	banksel	analog_counter
+	movff	ADRESH,WREG
+	addwf	analog_sw1_raw+0
+	movlw	.0
+	addwfc	analog_sw1_raw+1
+	tstfsz	analog_counter					; continue averaging?
+	bra		get_analog_switches1a			; Yes
+	; Done. Compute average
+	bcf		STATUS,C
+	rrcf	analog_sw1_raw+1
+	rrcf	analog_sw1_raw+0				; /2
+	bcf		STATUS,C
+	rrcf	analog_sw1_raw+1
+	rrcf	analog_sw1_raw+0				; /4
+	bcf		STATUS,C
+	rrcf	analog_sw1_raw+1
+	rrcf	analog_sw1_raw+0				; /8
+	bcf		STATUS,C
+	rrcf	analog_sw1_raw+1
+	rrcf	analog_sw1_raw+0				; /16
+	movff	analog_sw1_raw+0,analog_sw1
+	clrf	analog_sw1_raw+1
+	clrf	analog_sw1_raw+0				; Reset average registers
+	movlw	.16
+	movwf	analog_counter					; only once...
+get_analog_switches1a:
+	banksel	common
+	bcf		analog_sw1_pressed
+	movff	opt_cR_button_right,WREG		;20-100
+	bcf		STATUS,C
+	rrcf	WREG							;/2 -> 10-50
+	bcf		STATUS,C
+	rrcf	WREG							;/2 -> 5-25
+	decf	WREG,W							;-1
+	decf	WREG,W							;-1
+	decf	WREG,W							;-1 -> 2-22
+	banksel	analog_sw1
+	btfss	button_polarity,0				;(1= normal, 0=inverted)
+	bra		sw1_inverted
+	addwf	analog_sw1,W					; average (~128)
+	cpfsgt	ADRESH
+	bra		get_analog_sw_done
+	banksel	common
+	bsf		analog_sw1_pressed				; right button normal
+	bra		get_analog_sw_done
 sw1_inverted:
-    subwf	analog_sw1,W 	; average (~128)
-    cpfslt	ADRESH
-    bra		get_analog_sw_done
-    banksel	common
-    bsf		analog_sw1_pressed	; right button inverted
+	subwf	analog_sw1,W					; average (~128)
+	cpfslt	ADRESH
+	bra		get_analog_sw_done
+	banksel	common
+	bsf		analog_sw1_pressed				; right button inverted
 get_analog_sw_done:
-    banksel	common
-    movlw	b'10001101'	    ; Restore to right justified
-    movwf	ADCON2
-    btfsc	analog_sw1_pressed
-    return
-    btfsc	analog_sw2_pressed
-    return
-    setf	TMR1H		; No button pressed, enhance timer1 to overflow quickly
-    return
+	banksel	common
+	movlw	b'10001101'						; Restore to right justified
+	movwf	ADCON2
+	btfsc	analog_sw1_pressed
+	return
+	btfsc	analog_sw2_pressed
+	return
+	setf	TMR1H							; No button pressed, enhance timer1 to overflow quickly
+	return
 
 	END
\ No newline at end of file
--- a/src/calibrate.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/calibrate.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,150 +1,149 @@
 ;=============================================================================
 ;
-;   File calibration.asm							REFACTORED VERSION V2.91
+;   File calibration.asm							REFACTORED VERSION V2.98
 ;
 ;   o2 sensor calibration subroutines
 ;
 ;   Copyright (c) 2014, Heinrichs Weikamp, all right reserved.
 ;=============================================================================
 
-#include    "hwos.inc"
-#include    "shared_definitions.h"		; Mailbox between c and asm
-#include    "math.inc"
-#include    "adc_lightsensor.inc"
-#include    "eeprom_rs232.inc"
+#include "hwos.inc"
+#include "shared_definitions.h"				; Mailbox between c and asm
+#include "math.inc"
+#include "adc_lightsensor.inc"
+#include "eeprom_rs232.inc"
 
-calibrate     CODE
 
-   global  check_sensors           ; Check O2 sensor thresholds for fallback and voting logic
+calibrate	CODE
+
+	global	check_sensors					; Check O2 sensor thresholds for fallback and voting logic
 check_sensors:
 	; Check min_mv
 	movff	o2_mv_sensor1+0, sub_a+0
 	movff	o2_mv_sensor1+1, sub_a+1
-	movlw	LOW		min_mv
+	movlw	LOW  min_mv
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16			;  sub_c = sub_a - sub_b
-    bsf     use_O2_sensor1  ;=1: Use this sensor for deco
+	call	sub16							; sub_c = sub_a - sub_b
+	bsf		use_O2_sensor1					;=1: Use this sensor for deco
 	btfsc	neg_flag
-	bcf     use_O2_sensor1  ;=1: Use this sensor for deco
+	bcf		use_O2_sensor1					;=1: Use this sensor for deco
 
 	movff	o2_mv_sensor2+0, sub_a+0
 	movff	o2_mv_sensor2+1, sub_a+1
-	movlw	LOW		min_mv
+	movlw	LOW  min_mv
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16			;  sub_c = sub_a - sub_b
-	bsf     use_O2_sensor2  ;=1: Use this sensor for deco
+	call	sub16							; sub_c = sub_a - sub_b
+	bsf		use_O2_sensor2					;=1: Use this sensor for deco
 	btfsc	neg_flag
-	bcf     use_O2_sensor2  ;=1: Use this sensor for deco
+	bcf		use_O2_sensor2					;=1: Use this sensor for deco
 
 	movff	o2_mv_sensor3+0, sub_a+0
 	movff	o2_mv_sensor3+1, sub_a+1
-	movlw	LOW		min_mv
+	movlw	LOW  min_mv
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16			;  sub_c = sub_a - sub_b
-	bsf     use_O2_sensor3  ;=1: Use this sensor for deco
+	call	sub16							; sub_c = sub_a - sub_b
+	bsf		use_O2_sensor3					;=1: Use this sensor for deco
 	btfsc	neg_flag
-	bcf     use_O2_sensor3  ;=1: Use this sensor for deco
- 
+	bcf		use_O2_sensor3					;=1: Use this sensor for deco
+
 	; Check max_mv
 	movff	o2_mv_sensor1+0, sub_a+0
 	movff	o2_mv_sensor1+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16			;  sub_c = sub_a - sub_b
+	call	sub16							; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	bcf     use_O2_sensor1  ;=1: Use this sensor for deco
+	bcf		use_O2_sensor1					;=1: Use this sensor for deco
 
 	movff	o2_mv_sensor2+0, sub_a+0
 	movff	o2_mv_sensor2+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16			;  sub_c = sub_a - sub_b
+	call	sub16							; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	bcf     use_O2_sensor2  ;=1: Use this sensor for deco
+	bcf		use_O2_sensor2					;=1: Use this sensor for deco
 
 	movff	o2_mv_sensor3+0, sub_a+0
 	movff	o2_mv_sensor3+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16			;  sub_c = sub_a - sub_b
+	call	sub16							; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	bcf     use_O2_sensor3  ;=1: Use this sensor for deco
+	bcf		use_O2_sensor3					;=1: Use this sensor for deco
 
-    btfss   hud_connection_ok   ;=1: HUD connection ok
-    bra     check_sensor2       ; No HUD/Digital data
+	btfss	hud_connection_ok				;=1: HUD connection ok
+	bra		check_sensor2					; No HUD/Digital data
 
-    ; Copy disable flags from digital input
-    btfss   sensor1_active
-    bcf     use_O2_sensor1
-    btfss   sensor2_active
-    bcf     use_O2_sensor2
-    btfss   sensor3_active
-    bcf     use_O2_sensor3
-    bra     check_sensor3           ; Check for voting logic
+	; Copy disable flags from digital input
+	btfss	sensor1_active
+	bcf		use_O2_sensor1
+	btfss	sensor2_active
+	bcf		use_O2_sensor2
+	btfss	sensor3_active
+	bcf		use_O2_sensor3
+	return
 
 check_sensor2:
 	; Copy disable flags from internal calibration routine
-    btfss   sensor1_calibrated_ok
-    bcf     use_O2_sensor1
-    btfss   sensor2_calibrated_ok
-    bcf     use_O2_sensor2
-    btfss   sensor3_calibrated_ok
-    bcf     use_O2_sensor3
-check_sensor3:                      ; Check for voting logic
-    ; bcf     voting_logic_sensor3    ; Yes, ignore this sensor
-    return
+	btfss	sensor1_calibrated_ok
+	bcf		use_O2_sensor1
+	btfss	sensor2_calibrated_ok
+	bcf		use_O2_sensor2
+	btfss	sensor3_calibrated_ok
+	bcf		use_O2_sensor3
+	return
 
 
 	global	calibrate_mix
 calibrate_mix:
-    ; calibrate S8 HUD
-    btfss   s8_digital          ; S8 Digital?
-    bra     calibrate_mix2      ; No
+	; calibrate S8 HUD
+	btfss	s8_digital						; S8 Digital?
+	bra		calibrate_mix2					; No
 
-    ; Yes, calibrate any S8-connected HUD
-    clrf    temp1               ; Chksum
-    movlw   0xAA                ; Start Byte
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
+	; Yes, calibrate any S8-connected HUD
+	clrf	lo								; Checksum
+	movlw	0xAA							; Start Byte
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
 
-    movlw   0x31                ; Calibrate
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
+	movlw	0x31							; Calibrate
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
 
-    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
+	movff	opt_calibration_O2_ratio,WREG	; Calibration gas %O2
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
 
-    movff   amb_pressure+0,WREG	; Ambient pressure
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
-    movff   amb_pressure+1,WREG
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
+	movff	amb_pressure+0,WREG				; Ambient pressure
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
+	movff	amb_pressure+1,WREG
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
 
-    movff   temp1,TXREG2		; Chksum
-    call    rs232_wait_tx2
+	movff	lo,TXREG2						; Checksum
+	call	rs232_wait_tx2
 
 calibrate_mix2:
-    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
-    mullw   .100
+	movff	opt_calibration_O2_ratio,WREG	; Calibration gas %O2
+	mullw	.100
 	movff	PRODL,xA+0
 	movff	PRODH,xA+1
 	; (%O2*100)*[ambient,mbar]/100 -> xC
@@ -153,13 +152,13 @@
 	rcall	calibrate_mix2_helper
 	movff	o2_mv_sensor1+0,xB+0
 	movff	o2_mv_sensor1+1,xB+1
-	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	; xC= ppO2/mV
 	movff	xC+0,opt_x_s1+0
 	movff	xC+1,opt_x_s1+1					; Factor for Sensor1
 
-    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
-    mullw   .100
+	movff	opt_calibration_O2_ratio,WREG	; Calibration gas %O2
+	mullw	.100
 	movff	PRODL,xA+0
 	movff	PRODH,xA+1
 	; (%O2*100)*[ambient,mbar]/100 -> xC
@@ -168,13 +167,13 @@
 	rcall	calibrate_mix2_helper
 	movff	o2_mv_sensor2+0,xB+0
 	movff	o2_mv_sensor2+1,xB+1
-	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	; xC= ppO2/mV
 	movff	xC+0,opt_x_s2+0
 	movff	xC+1,opt_x_s2+1					; Factor for Sensor2
 
-    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
-    mullw   .100
+	movff	opt_calibration_O2_ratio,WREG	; Calibration gas %O2
+	mullw	.100
 	movff	PRODL,xA+0
 	movff	PRODH,xA+1
 	; (%O2*100)*[ambient,mbar]/100 -> xC
@@ -183,23 +182,23 @@
 	rcall	calibrate_mix2_helper
 	movff	o2_mv_sensor3+0,xB+0
 	movff	o2_mv_sensor3+1,xB+1
-	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	; xC= ppO2/mV
 	movff	xC+0,opt_x_s3+0
 	movff	xC+1,opt_x_s3+1					; Factor for Sensor3
 
-    bsf     sensor1_calibrated_ok
-    bsf     sensor2_calibrated_ok
-    bsf     sensor3_calibrated_ok   ; Set flags prior check
+	bsf		sensor1_calibrated_ok
+	bsf		sensor2_calibrated_ok
+	bsf		sensor3_calibrated_ok			; Set flags prior check
 
-    rcall   check_sensors           ; Check O2 sensor thresholds min_mv and max_mv and set use_02_sensorX flags
-    ; initialise internal calibration flags
-    btfss	use_O2_sensor1          ; Sensor out of range?
-    bcf     sensor1_calibrated_ok   ; Yes, disable this sensor
-    btfss	use_O2_sensor2          ; Sensor out of range?
-    bcf     sensor2_calibrated_ok   ; Yes, disable this sensor
-    btfss	use_O2_sensor3          ; Sensor out of range?
-    bcf     sensor3_calibrated_ok   ; Yes, disable this sensor
+	rcall	check_sensors					; Check O2 sensor thresholds min_mv and max_mv and set use_02_sensorX flags
+	; initialize internal calibration flags
+	btfss	use_O2_sensor1					; Sensor out of range?
+	bcf		sensor1_calibrated_ok			; Yes, disable this sensor
+	btfss	use_O2_sensor2					; Sensor out of range?
+	bcf		sensor2_calibrated_ok			; Yes, disable this sensor
+	btfss	use_O2_sensor3					; Sensor out of range?
+	bcf		sensor3_calibrated_ok			; Yes, disable this sensor
 
 	; When no sensor is found, enable all three to show error state
 	btfsc	use_O2_sensor1
@@ -212,101 +211,100 @@
 	bsf		use_O2_sensor2
 	bsf		use_O2_sensor3
 	; Clear factors
-    banksel opt_x_s1+0
+	banksel opt_x_s1+0
 	clrf	opt_x_s1+0
 	clrf	opt_x_s1+1
 	clrf	opt_x_s2+0
 	clrf	opt_x_s2+1
 	clrf	opt_x_s3+0
 	clrf	opt_x_s3+1
-    banksel common
+	banksel	common
 	return
 
 
-calibrate_mix2_helper:	
-	call	mult16x16		; xA*xB=xC
-	movlw	LOW		.100
+calibrate_mix2_helper:
+	call	mult16x16						; xA*xB=xC
+	movlw	LOW  .100
 	movwf	xB+0
-	movlw	HIGH	.100
+	movlw	HIGH .100
 	movwf	xB+1
-	goto	div32x16		; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder (And return)
+	goto	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder (And return)
 
 
 	global	compute_mvolts_for_all_sensors
-compute_mvolts_for_all_sensors:          ; Compute mV or all sensors (S8 Mode)
+compute_mvolts_for_all_sensors:				; Compute mV or all sensors (S8 Mode)
 ; compute AD results in 100µV steps (16bit/sensor)
 ; 24bit AD result is in 244,1406541nV
-; Devide 24bit value through 409,5999512 -> 410 (0,01% error)
-	#DEFINE	ad2mv_factor	.410
+; Divide 24bit value through 409,5999512 -> 410 (0,01% error)
+	#DEFINE	ad2mv_factor .410
 	; Sensor 1
 	clrf	xC+3
 	movff	s8_rawdata_sensor1+2,xC+2
 	movff	s8_rawdata_sensor1+1,xC+1
 	movff	s8_rawdata_sensor1+0,xC+0
-	movlw	LOW		ad2mv_factor
+	movlw	LOW  ad2mv_factor
 	movwf	xB+0
-	movlw	HIGH	ad2mv_factor
+	movlw	HIGH ad2mv_factor
 	movwf	xB+1
-	call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+1,o2_mv_sensor1+1
-	movff	xC+0,o2_mv_sensor1+0		; in 100uV steps
+	movff	xC+0,o2_mv_sensor1+0			; in 100uV steps
 	; Sensor 2
 	clrf	xC+3
 	movff	s8_rawdata_sensor2+2,xC+2
 	movff	s8_rawdata_sensor2+1,xC+1
 	movff	s8_rawdata_sensor2+0,xC+0
-	movlw	LOW		ad2mv_factor
+	movlw	LOW  ad2mv_factor
 	movwf	xB+0
-	movlw	HIGH	ad2mv_factor
+	movlw	HIGH ad2mv_factor
 	movwf	xB+1
-	call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+1,o2_mv_sensor2+1
-	movff	xC+0,o2_mv_sensor2+0		; in 100uV steps
+	movff	xC+0,o2_mv_sensor2+0			; in 100uV steps
 	; Sensor 3
 	clrf	xC+3
 	movff	s8_rawdata_sensor3+2,xC+2
 	movff	s8_rawdata_sensor3+1,xC+1
 	movff	s8_rawdata_sensor3+0,xC+0
-	movlw	LOW		ad2mv_factor
+	movlw	LOW  ad2mv_factor
 	movwf	xB+0
-	movlw	HIGH	ad2mv_factor
+	movlw	HIGH ad2mv_factor
 	movwf	xB+1
-	call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+1,o2_mv_sensor3+1
-	movff	xC+0,o2_mv_sensor3+0		; in 100uV steps
+	movff	xC+0,o2_mv_sensor3+0			; in 100uV steps
 
-	bcf     new_s8_data_available		; Clear flag
-	return								; Done.
+	bcf		new_s8_data_available			; Clear flag
+	return									; Done.
 
-		
 
-	global	transmit_setpoint	; Transmit current setpoint from WREG (in cbar) to external electronics
+	global	transmit_setpoint				; Transmit current setpoint from WREG (in cbar) to external electronics
 transmit_setpoint:
-    return
-    btfss   s8_digital          ; S8 Digital?
-    return                      ; No, ignore
+	return									; 					!!!! FUNCTION IS CURRENTLY DISABLED !!!!
+	btfss	s8_digital						; S8 Digital?
+	return									; No, ignore
 
-    ; Yes, transmit setpoint from WREG
-    movwf   temp2               ; Store setpoint
-    clrf    temp1               ; Chksum
-    movlw   0xAA                ; Start Byte
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
+	; Yes, transmit setpoint from WREG
+	movwf	hi								; Store setpoint
+	clrf	lo								; Checksum
+	movlw	0xAA							; Start Byte
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
 
-    movlw   0x60                ; New SP
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
+	movlw	0x60							; New SP
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
 
-    movff   temp2,WREG			; SP in cbar
-    addwf   temp1,F
-    movff   WREG,TXREG2
-    call    rs232_wait_tx2
+	movff	hi,WREG							; SP in cbar
+	addwf	lo,F
+	movff	WREG,TXREG2
+	call	rs232_wait_tx2
 
-    movff   temp1,TXREG2		; Chksum
-    call    rs232_wait_tx2
-    return
+	movff	lo,TXREG2						; Checksum
+	call	rs232_wait_tx2
+	return
 
 
 	END
\ No newline at end of file
--- a/src/calibrate.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/calibrate.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,19 +1,9 @@
 ;=============================================================================
 ;
-;   File calibrate.inc								REFACTORED VERSION V2.91
+;   File calibrate.inc								REFACTORED VERSION V2.97
 ;
 ;=============================================================================
 
-; DELETE	## voting logic
-;	extern		compute_ppo2			; compute mv_sensorX and ppo2_sensorX arrays
-
-	extern		calibrate_mix			; Calibrate with any mix
-	
-; DELETE	## voting logic
-;    extern      check_sensors           ; Check O2 sensor thresholds for fallback
-
-; ADD		## voting logic
-	extern		compute_mvolts_for_all_sensors	; compute sensor mv values from digital transmitted data
-
-    extern      transmit_setpoint       ; Transmit current setpoint from WREG (in cbar) to external electronics
-	
\ No newline at end of file
+	extern	calibrate_mix					; Calibrate with any mix
+	extern	compute_mvolts_for_all_sensors	; compute sensor mv values from digital transmitted data
+	extern	transmit_setpoint				; Transmit current setpoint from WREG (in cbar) to external electronics
--- a/src/changelog.txt	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/changelog.txt	Mon Feb 26 16:40:28 2018 +0100
@@ -1,5 +1,12 @@
 [2.97]
 - Stable Version -
+NEW: Internal deco calculator shows deco plan and gas beeds for Bailout case
+NEW: CNS now, CNS in xx minutes, CNS if bailout plan is used and CNS when surfaced (Including all deco stops) is shown
+NEW: Bailout TTS is computed in CCR mode (optionally) with gas needs for all bailout gases and all deco stops
+NEW: Warning if an isobaric counter diffusion occurs (also in internal planner)
+NEW: Warning "X-ZHL16-X" if deco model is used beyond theoretical limits
+NEW: Show "Deco Zone" if we are in deco and at least one tissue is off-gassing
+CHANGE: Internal deco routines heavily optimised for speed and code size
 CHANGE: Limit button sensitivity to 80%
 BUGFIX: Auto-Gain for newer compass versions did not work (Which decreased accuracy of heading)
 CHANGE: Make disabled gases darker in surface mode (Common issue for color-blind divers)
@@ -7,7 +14,6 @@
 NEW: Independent saturation/desaturation multipliers for GF and non-GF Deco modes
 CHANGE: Non-updated values are shown in dark blue (e.g. after a gas change) until values are valid again
 
-
 [2.27]
 - Beta Version -
 BUGFIX: Display of negative (°C) water temperatures
--- a/src/color_processor.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/color_processor.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File File color_processor.asm
+;   File File color_processor.asm									## V2.98
 ;
 ;   Decompress and draw an image.
 ;
@@ -15,7 +15,7 @@
 ;
 ; Inputs: TBLPTR points to the image description block.
 ;         win_top, win_leftx2 the Top/Leftx2 corner here to put the image.
-; Ouputs: None.
+; Outputs: None.
 ; Trashed: TBLPTR, TABLAT, FSR2, PROD, win_width, win_height
 ;
 ; ImageBloc:
@@ -43,135 +43,124 @@
 #include "tft.inc"
 
 ;-----------------------------------------------------------------------------
-; Temporary overlay (in bank 1).
-
-        CBLOCK  tmp                     ; Data overlay in reserved tmp area.
-            img_colors:1
-            img_pixels:3
-            img_count:2
-            ; Reserved to tmp+0x07...
-        ENDC
-
-;-----------------------------------------------------------------------------
 ;
 ; Note: Some variables (win_width, win_height) are in BANK0 !
-basic   CODE
-        global  color_image
+basic	CODE
+	global	color_image
 color_image:
-        banksel win_width               ; Bank1, just to be sure...
+	banksel	common					; Bank1, just to be sure...
 
-        ;---- Get image parameters -------------------------------------------
-        tblrd*+                     
-        movff   TABLAT,win_width
-        tblrd*+
-        movff   TABLAT,win_height
-        tblrd*+
-        movff   TABLAT,img_colors
-        tblrd*+                         ; Skip one byte (future flags ?)
-        ;---- Copy color table -----------------------------------------------
-        movf    img_colors,W
-        lfsr    FSR2,buffer
-get_colors_loop:                    
-        tblrd*+
-        movff   TABLAT,POSTINC2
-        tblrd*+
-        movff   TABLAT,POSTINC2
-        decfsz  WREG
-        bra     get_colors_loop
+	;---- Get image parameters -------------------------------------------
+	tblrd*+
+	movff	TABLAT,win_width
+	tblrd*+
+	movff	TABLAT,win_height
+	tblrd*+
+	movff	TABLAT,lo				; image colors
+	tblrd*+							; Skip one byte (future flags ?)
+	;---- Copy color table -----------------------------------------------
+	movf	lo,W
+	lfsr	FSR2,buffer
+get_colors_loop:
+	tblrd*+
+	movff	TABLAT,POSTINC2
+	tblrd*+
+	movff	TABLAT,POSTINC2
+	decfsz	WREG
+	bra		get_colors_loop
+
+	; Compute width * height * 2 : the number of pixels to write.
+	clrf	img_pixels+2
+	movf	win_width,W				; Compute number of pixels to draw
+	mulwf	win_height				; 0 .. 160x240
+	bcf		STATUS,C				; BEWARE: mulwf does not reset carry flag !
+	rlcf	PRODL					; x2 --> 0 .. 320x240, might be > 0xFFFF
+	rlcf	PRODH
+	movff	PRODL, img_pixels+0
+	movff	PRODH, img_pixels+1
+	rlcf	img_pixels+2			; Get the upper bit in place
 
-        ; Compute width * height * 2 : the number of pixels to write.
-        clrf    img_pixels+2
-        movf    win_width,W             ; Compute number of pixels to draw
-        mulwf   win_height              ; 0 .. 160x240
-        bcf     STATUS,C                ; BEWARE: mulwf does not reset carry flag !
-        rlcf    PRODL                   ; x2 --> 0 .. 320x240, might be > 0xFFFF
-        rlcf    PRODH
-        movff   PRODL, img_pixels+0
-        movff   PRODH, img_pixels+1
-        rlcf    img_pixels+2            ; Get the upper bit in place.
-        
-        clrf    WREG                    ; Decrement count to ease end detection.
-        decf    img_pixels+0,F
-        subwfb  img_pixels+1,F
-        subwfb  img_pixels+2,F
+	clrf	WREG					; Decrement count to ease end detection
+	decf	img_pixels+0,F
+	subwfb	img_pixels+1,F
+	subwfb	img_pixels+2,F
 
-        ;---- Send window command --------------------------------------------
-        clrf    win_width+1             ; x2 on width, for the true box size.
-        rlcf    win_width+0
-        rlcf    win_width+1
-        call    TFT_box_write
-        Index_out 0x22
+	;---- Send window command --------------------------------------------
+	clrf	win_width+1				; x2 on width, for the true box size
+	rlcf	win_width+0
+	rlcf	win_width+1
+	call	TFT_box_write
+	Index_out 0x22
 
-        ;---- Decode pixels --------------------------------------------------
+	;---- Decode pixels --------------------------------------------------
 color_image_loop_xy:
-        ; Get pixel count
-        clrf    img_count+0
-        clrf    img_count+1
+	; Get pixel count
+	clrf	img_count+0
+	clrf	img_count+1
 
-        ;---- Decode repetition count
+	;---- Decode repetition count
 color_image_decode_1:
-        tblrd*+                         ; Get one byte
+	tblrd*+							; Get one byte
 
-        btfss   TABLAT,7                ; High bit cleared ?
-        bra     color_image_decode_2    ; YES: this is a color byte.
-        
-        rlcf    TABLAT,F                ; Drop high bit.
-        movlw   .7                      ; Move 7 bits
+	btfss	TABLAT,7				; High bit cleared ?
+	bra		color_image_decode_2	; YES: this is a color byte
+
+	rlcf	TABLAT,F				; Drop high bit.
+	movlw	.7						; Move 7 bits
 color_image_decode_3:
-        rlcf    TABLAT,F                ; Get bit into carry
-        rlcf    img_count+0,F           ; Push into pixel count
-        rlcf    img_count+1,F
-        decfsz  WREG
-        bra     color_image_decode_3    ; and loop foreach 7 bits.
-        
-        bra     color_image_decode_1    ; Decode next byte.
+	rlcf	TABLAT,F				; Get bit into carry
+	rlcf	img_count+0,F			; Push into pixel count
+	rlcf	img_count+1,F
+	decfsz	WREG
+	bra		color_image_decode_3	; and loop for each 7 bits
+	bra		color_image_decode_1	; Decode next byte
 
 color_image_decode_2:
-        ;---- Get pixel color into PROD
-        movf    TABLAT,W                ; Get color index.
-        addwf   WREG                    ; *2
-        lfsr    FSR2,buffer             ; Reinitialize color table.
-        movff   WREG,FSR2L              ; LOW(buffer) == 0
-        movff   POSTINC2,PRODL
-        movff   POSTINC2,PRODH
-        
-        ; Substract count-1 from the number of pixel we should do.
-        movf    img_count+0,W           ; Make a 24bit substraction.
-        subwf   img_pixels+0,F
-        movf    img_count+1,W
-        subwfb  img_pixels+1,F
-        movlw   0
-        subwfb  img_pixels+2,F
+	;---- Get pixel color into PROD
+	movf	TABLAT,W				; Get color index
+	addwf	WREG					; *2
+	lfsr	FSR2,buffer				; Reinitialize color table
+	movff	WREG,FSR2L				; LOW(buffer) == 0
+	movff	POSTINC2,PRODL
+	movff	POSTINC2,PRODH
+
+	; Subtract count-1 from the number of pixel we should do.
+	movf	img_count+0,W			; Make a 24bit subtraction
+	subwf	img_pixels+0,F
+	movf	img_count+1,W
+	subwfb	img_pixels+1,F
+	movlw	0
+	subwfb	img_pixels+2,F
 
 color_image_not_over:
-        infsnz  img_count+0             ; Increment count.
-        incf    img_count+1
+	infsnz	img_count+0				; Increment count
+	incf	img_count+1
 
-        ; Loop sending pixel color
-        incf    img_count+1             ; Because we decrement first, should add one here !
-        bsf     tft_rs,0    ; RS_H				; Data
-    	movff	PRODH,PORTA	; Move high byte to PORTA
-        movff	PRODL,PORTH	; Move low byte to PORTH
-	bcf	INTCON,GIE
+	; Loop sending pixel color
+	incf	img_count+1				; Because we decrement first, should add one here !
+	bsf		tft_rs,0				; RS_H Data
+	movff	PRODH,PORTA				; Move high byte to PORTA
+	movff	PRODL,PORTH				; Move low byte to PORTH
+	bcf		INTCON,GIE
 color_image_loop_pixel:
-    	bcf     tft_nwr,0       ; WR_L
-        bsf     tft_nwr,0       ; WR_H                ; Tick
-        decfsz  img_count+0
-        bra     color_image_loop_pixel
-        decfsz  img_count+1
-        bra     color_image_loop_pixel
-	bsf	INTCON,GIE
-        
-        ; And count (on a 24bit counter)
-        clrf    WREG                    ; Make a 24bit decrement.
-        decf    img_pixels+0
-        subwfb  img_pixels+1,F
-        subwfb  img_pixels+2,F
+	bcf		tft_nwr,0				; WR_L
+	bsf		tft_nwr,0				; WR_H Tick
+	decfsz	img_count+0
+	bra		color_image_loop_pixel
+	decfsz	img_count+1
+	bra		color_image_loop_pixel
+	bsf		INTCON,GIE
+	
+	; And count (on a 24bit counter)
+	clrf	WREG					; Make a 24bit decrement
+	decf	img_pixels+0
+	subwfb	img_pixels+1,F
+	subwfb	img_pixels+2,F
 
-        bnn     color_image_loop_xy     ; Not finished ? loop...
+	bnn		color_image_loop_xy		; Not finished ? loop...
 
-        ;---- Closeup --------------------------------------------------------        
-        Index_out 0x00
-        return
+	;---- Closeup --------------------------------------------------------	
+	Index_out 0x00
+	return
 
-        end
\ No newline at end of file
+	END
--- a/src/comm.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/comm.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File comm.asm									REFACTORED VERSION 2.94
+;   File comm.asm									REFACTORED VERSION 2.98
 ;
 ;   RS232 via USB
 ;
@@ -23,100 +23,104 @@
 #include "adc_lightsensor.inc"
 #include "shared_definitions.h"
 
-	extern  restart,option_reset_all
-    extern  option_check_all, gaslist_cleanup_list, get_first_gas_to_WREG, get_first_dil_to_WREG
-    extern  vault_decodata_into_eeprom
-
-#DEFINE timeout_comm_pre_mode   .240        ; Pre-loop
-#DEFINE timeout_comm_mode       .120        ; Download mode
-#DEFINE timeout_service_mode    .120        ; Service mode
-
-#DEFINE	comm_title_row		.0
-#DEFINE	comm_title_column_usb	.50
-#DEFINE	comm_title_column_ble	.25
-
-#DEFINE	comm_string_row	.30
-#DEFINE	comm_string_column	.40
+	extern	restart
+	extern	option_reset_all
+	extern	option_check_all
+	extern	gaslist_cleanup_list
+	extern	get_first_gas_to_WREG
+	extern	get_first_dil_to_WREG
+	extern	vault_decodata_into_eeprom
+	extern	color_image
 
 
-#DEFINE	comm_status1_row		.70
-#DEFINE	comm_status1_column	.10
-#DEFINE	comm_status2_row		.100
-#DEFINE	comm_status2_column	comm_status1_column
-#DEFINE	comm_status3_row		.130
-#DEFINE	comm_status3_column	comm_status1_column
+#DEFINE timeout_comm_pre_mode	.240	; Pre-loop
+#DEFINE timeout_comm_mode		.120	; Download mode
+#DEFINE timeout_service_mode	.120	; Service mode
+
+#DEFINE comm_title_row			.0
+#DEFINE comm_title_column_usb	.50
+#DEFINE comm_title_column_ble	.25
 
-#DEFINE	comm_warning_row		.160
-#DEFINE	comm_warning_column     .65
+#DEFINE comm_string_row			.30
+#DEFINE comm_string_column		.40
+
+#DEFINE comm_status1_row		.70
+#DEFINE comm_status1_column		.10
+#DEFINE comm_status2_row		.100
+#DEFINE comm_status2_column		comm_status1_column
+#DEFINE comm_status3_row		.130
+#DEFINE comm_status3_column		comm_status1_column
+
+#DEFINE comm_warning_row		.160
+#DEFINE comm_warning_column		.65
 
 comm code
 
 	; test for comm
 	global	comm_mode, comm_mode0
 comm_mode:
-    WAITMS d'1'
-    btfss   vusb_in                     ; USB plugged in?
-    return                              ; No, it was only a glitch
-    WAITMS d'1'
-    btfss   vusb_in                     ; USB plugged in?
-    return                              ; No, it was only a glitch
+	WAITMS	d'1'
+	btfss	vusb_in						; USB plugged in?
+	return								; No, it was only a glitch
+	WAITMS	d'1'
+	btfss	vusb_in						; USB plugged in?
+	return								; No, it was only a glitch
 comm_mode0:
-    call    TFT_ClearScreen
-    WIN_COLOR   color_greenish
-    btfsc   ble_available               ; ble available
-    bra     comm_mode0_ble
-    WIN_SMALL	comm_title_column_usb, comm_title_row
-	STRCPY_TEXT_PRINT	tUsbTitle		; USB Mode
-    bra     comm_mode0_common
+	call	TFT_ClearScreen
+	WIN_COLOR color_greenish
+	btfsc	ble_available				; ble available
+	bra		comm_mode0_ble
+	WIN_SMALL comm_title_column_usb, comm_title_row
+	STRCPY_TEXT_PRINT tUsbTitle			; USB Mode
+	bra		comm_mode0_common
 comm_mode0_ble:
-    WIN_SMALL	comm_title_column_ble, comm_title_row
-    STRCPY_TEXT_PRINT	tBleTitle		; BLE Mode
+	WIN_SMALL comm_title_column_ble, comm_title_row
+	STRCPY_TEXT_PRINT tBleTitle			; BLE Mode
 comm_mode0_common:
-    call	TFT_standard_color
-    WIN_TOP     .10
-    WIN_LEFT    .1
-    movlw   0xDE
-    movwf   TBLPTRL
-    movlw   0xEE
-    movwf   TBLPTRH
-    movlw   0x01
-    movwf   TBLPTRU
-    extern  color_image
-    call    color_image                 ; Show usb logo
-	WIN_SMALL	comm_status1_column, comm_status1_row
-	STRCPY_TEXT_PRINT	tUsbStarting	; Starting...
-    call	TFT_serial                  ; Show serial and firmware version
-    bcf     enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	call	TFT_standard_color
+	WIN_TOP  .10
+	WIN_LEFT .1
+	movlw	0xDE
+	movwf	TBLPTRL
+	movlw	0xEE
+	movwf	TBLPTRH
+	movlw	0x01
+	movwf	TBLPTRU
+	call	color_image					; Show USB logo
+	WIN_SMALL comm_status1_column,comm_status1_row
+	STRCPY_TEXT_PRINT tUsbStarting		; Starting...
+	call	TFT_serial					; Show serial and firmware version
+	bcf		enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
 	bcf		switch_right
-    bcf     comm_service_enabled
-    bsf     menubit
-    bcf     battery_removed_in_usb      ; =1: The battery has been removed in USB
-    movlw   timeout_comm_pre_mode
-	movwf	timeout_counter
-	WIN_SMALL	comm_status1_column+.80, comm_status1_row
-	STRCPY_TEXT_PRINT	tUsbStartDone	; Done...
+	bcf		comm_service_enabled
+	bsf		menubit
+	bcf		battery_removed_in_usb		; =1: The battery has been removed in USB (properly not used for anything useful)
+	movlw	timeout_comm_pre_mode
+	movwf	comm_timeout
+	WIN_SMALL comm_status1_column+.80,comm_status1_row
+	STRCPY_TEXT_PRINT tUsbStartDone		; Done...
 	call	enable_rs232				; Also sets to speed_normal ...
 comm_mode1:
 	bcf		onesecupdate
 	bcf		LEDr
-	dcfsnz 	timeout_counter,F
-	bra		comm_service_exit           ; Timeout -> Exit
+	dcfsnz	comm_timeout,F
+	bra		comm_service_exit			; Timeout -> Exit
 comm_mode2:
 	rcall	comm_write_get_byte
 
 	movlw	0xAA						; start byte=0xAA?
 	cpfseq	RCREG1
 	bra		comm_mode2a
-	bra		comm_mode2b					; Startbyte for service mode found
+	bra		comm_mode2b					; Start byte for service mode found
 comm_mode2a:
 	movlw	0xBB						; start byte=0xBB?
 	cpfseq	RCREG1
 	bra		comm_mode2c
-	bra		comm_download_mode			; Startbyte for download mode found
+	bra		comm_download_mode			; Start byte for download mode found
 
 comm_mode2c:
-    btfss   vusb_in                     ; USB plugged in?
-    bra     comm_service_exit_nousb_delay   ; Disconnected -> Exit
+	btfss	vusb_in						; USB plugged in?
+	bra		comm_service_exit_nousb_delay	; Disconnected -> Exit
 comm_mode4a:
 	btfsc	switch_right				; Abort with right
 	bra		comm_service_exit
@@ -124,7 +128,7 @@
 	btfsc	onesecupdate
 	bra		comm_mode1
 
-    bra     comm_mode2					; Cycle
+	bra		comm_mode2					; Cycle
 
 comm_mode2b:
 	; Startbyte found
@@ -135,44 +139,44 @@
 
 	rcall	comm_write_get_byte			; first byte
 	rcall	comm_rs232_wait_tx			; Wait for UART
-    movff   RCREG1,TXREG1				; Echo
+	movff	RCREG1,TXREG1				; Echo
 	movlw	UPPER comm_service_key
 	cpfseq	RCREG1
-    bra     comm_mode1					; Wrong -> Restart
+	bra		comm_mode1					; Wrong -> Restart
 	rcall	comm_write_get_byte			; second byte
 	rcall	comm_rs232_wait_tx			; Wait for UART
-    movff   RCREG1,TXREG1				; Echo
+	movff	RCREG1,TXREG1				; Echo
 	movlw	HIGH (comm_service_key & 0xFFFF)
 	cpfseq	RCREG1
-    bra     comm_mode1					; Wrong -> Restart
+	bra		comm_mode1					; Wrong -> Restart
 	rcall	comm_write_get_byte			; third byte
 	rcall	comm_rs232_wait_tx			; Wait for UART
-    movff   RCREG1,TXREG1				; Echo
+	movff	RCREG1,TXREG1				; Echo
 	movlw	LOW comm_service_key
 	cpfseq	RCREG1
-    bra     comm_mode1					; Wrong -> Restart
+	bra		comm_mode1					; Wrong -> Restart
 
 	; Enable comm service mode
-	WIN_SMALL	comm_status2_column, comm_status2_row
-	STRCPY_TEXT_PRINT	tUsbServiceMode	; Service mode enabled
-    bsf     comm_service_enabled        ; Set flag...
-	bra		comm_download_mode0         ; ... but use common routine
+	WIN_SMALL comm_status2_column, comm_status2_row
+	STRCPY_TEXT_PRINT tUsbServiceMode	; Service mode enabled
+	bsf		comm_service_enabled		; Set flag...
+	bra		comm_download_mode0			; ... but use common routine
 
 comm_service_exit_nousb_delay:
-    WAITMS  d'200'
-    btfsc   vusb_in                     ; USB plugged in?
-    bra     comm_mode4a                 ; (Still) connected, return
-comm_service_exit_nousb:                ; Disconnected -> Exit
-	WIN_SMALL	comm_status3_column, comm_status3_row
-	STRCPY_TEXT_PRINT	tUsbClosed      ; Port closed
-    bra     comm_service_exit_common
+	WAITMS	d'200'
+	btfsc	vusb_in						; USB plugged in?
+	bra		comm_mode4a					; (Still) connected, return
+comm_service_exit_nousb:				; Disconnected -> Exit
+	WIN_SMALL comm_status3_column, comm_status3_row
+	STRCPY_TEXT_PRINT tUsbClosed		; Port closed
+	bra		comm_service_exit_common
 
 comm_service_exit:
 	WIN_SMALL	comm_status3_column, comm_status3_row
-	STRCPY_TEXT_PRINT	tUsbExit        ; Exited
+	STRCPY_TEXT_PRINT	tUsbExit		; Exited
 comm_service_exit_common:
 	rcall	comm_rs232_wait_tx			; Wait for UART
-	movlw	0xFF                        ; Reply FF
+	movlw	0xFF						; Reply FF
 	movwf	TXREG1						; Send Answer
 
 	; Wait 1 second
@@ -185,66 +189,66 @@
 	bra		$-2
 
 	call	disable_rs232
-    goto    restart
+	goto	restart
 
 ;-----------------------------------------------------------------------------
 
 comm_service_ll_bootloader:
-    bsf     LEDr
-	WIN_SMALL	comm_status3_column, comm_status3_row
-	STRCPY_TEXT_PRINT	tUsbLlBld               ; Low Level Bootloader started
-    WIN_TOP  	comm_warning_row
-	WIN_LEFT 	comm_warning_column
-    TFT_WRITE_PROM_IMAGE dive_warning2_block 	; Show Warning icon
-    goto    0x1FF0C
+	bsf		LEDr
+	WIN_SMALL comm_status3_column, comm_status3_row
+	STRCPY_TEXT_PRINT tUsbLlBld					; Low Level Bootloader started
+	WIN_TOP  comm_warning_row
+	WIN_LEFT comm_warning_column
+	TFT_WRITE_PROM_IMAGE dive_warning2_block	; Show Warning icon
+	goto	0x1FF0C
 
 ;-----------------------------------------------------------------------------
 ; send firmware to bootloader
 ;
 comm_send_firmware:
-    movlw   0x50							; send echo
-    movwf   TXREG1
-    rcall    comm_rs232_wait_tx				; Wait for UART
+	movlw	0x50							; send echo
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx				; Wait for UART
 
-    ; Read 5 bytes into buffer.
+	; Read 5 bytes into buffer.
 	lfsr	FSR2,buffer
 	movlw	.5								; counter
 	movwf	lo
-	movlw   0x55							; 5'ft byte checksum.
-	movwf   hi
+	movlw	0x55							; 5'ft byte checksum.
+	movwf	hi
 
 comm_send_firmware_loop:
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
+	btfsc	rs232_receive_overflow			; Got byte?
 	bra		comm_send_firmware_abort		; No, abort!
 	movf	RCREG1,W
-	movwf   POSTINC2						; Store checksum byte.
-	xorwf   hi,F							; Also xor into checksum
-	rlncf   hi,F							; And rotate it.
+	movwf	POSTINC2						; Store checksum byte.
+	xorwf	hi,F							; Also xor into checksum
+	rlncf	hi,F							; And rotate it.
 	decfsz	lo,F
 	bra		comm_send_firmware_loop
-	
+
 	; Check that 5ft byte checksum's checksum
-	movf    hi,W
-	bnz     comm_send_firmware_failed
+	movf	hi,W
+	bnz		comm_send_firmware_failed
 
-    movlw   0x4C							; send OK
-    movwf   TXREG1
-    rcall    comm_rs232_wait_tx				; Wait for UART
+	movlw	0x4C							; send OK
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx				; Wait for UART
 
 	; Passed: goto second stage verification.
 	; NOTE: Bootloader is Bank0. With buffer at address 0x200.
-    call    vault_decodata_into_eeprom		; Store last deco data (And Time/Date) into EEPROM
-	goto    0x1FDF0							; And pray...
+	call	vault_decodata_into_eeprom		; Store last deco data (And Time/Date) into EEPROM
+	goto	0x1FDF0							; And pray...
 
 comm_send_firmware_failed:
-	WIN_SMALL	comm_string_column, comm_string_row
-    call    TFT_warnings_color
-	STRCPY_PRINT    "Checksum failed"
+	WIN_SMALL comm_string_column, comm_string_row
+	call	TFT_warnings_color
+	STRCPY_PRINT "Checksum failed"
 
 comm_send_firmware_abort:
 
-    movlw   0xFF							; send ABORTED byte.
+	movlw	0xFF							; send ABORTED byte.
 	movwf	TXREG1
 	bra		comm_download_mode0				; Done.
 
@@ -252,139 +256,116 @@
 ; Reset to Dive 1 in logbook
 
 comm_reset_logbook_pointers:
-	clrf    EEADRH                      ; Make sure to select eeprom bank 0
-	clrf	EEDATA
-	write_int_eeprom	.4
-	write_int_eeprom	.5
-	write_int_eeprom	.6
-	write_int_eeprom	.2				; Also, delete total dive counter
-	write_int_eeprom	.3
-    write_int_eeprom    .16
-    write_int_eeprom    .17             ; And the backup counter, too
-	call	ext_flash_erase_logbook		; And complete logbook (!)
-	bra		comm_download_mode0			; Done.
+	call	eeprom_reset_logbook_pointers	; clear logbook pointers in EEPROM...
+	call	ext_flash_erase_logbook			; ... and complete logbook (!)
+	bra		comm_download_mode0				; done
 
 ;-----------------------------------------------------------------------------
-comm_reset_battery_gauge:           ; Resets battery gauge registers
-    call    reset_battery_pointer   ; Resets battery pointer 0x07-0x0C and battery_gauge:5
-    bra		comm_download_mode0		; Done.
+comm_reset_battery_gauge:					; Resets battery gauge registers
+	call	reset_battery_pointer			; Resets battery pointer 0x07-0x0C and battery_gauge:5
+	bra		comm_download_mode0				; Done.
 
 ;-----------------------------------------------------------------------------
 ; erases range in 4kB steps
 
 comm_erase_range4kb:
-    movlw   0x42						; send echo
-    movwf   TXREG1
-    rcall    comm_rs232_wait_tx			; Wait for UART
-
-    bcf     INTCON,GIE	; All interrups off!
-
-    rcall   comm_get_flash_address		; Get three bytes address or return
-    btfsc   rs232_recieve_overflow      ; Got Data?
-    bra     comm_download_mode0         ; No, Done.
-
-    rcall    comm_write_get_byte
-    btfsc   rs232_recieve_overflow      ; Got byte?
-    bra     comm_download_mode0         ; No, Done.
-    movff   RCREG1,lo
-
-    ; Got 4bytes: 3bytes address and 1 bytes (lo) amount of 4kB blocks
-
-comm_erase_range4kb1:
-    call    ext_flash_erase4kB          ; Erase block!
-
-    movlw   0x10
-    addwf   ext_flash_address+1,F
-    movlw   .0
-    addwfc  ext_flash_address+2,F       ; Increase address by .4096, or 0x1000
-    decfsz  lo,F
-    bra     comm_erase_range4kb1        ; Loop until lo=zero
-
-    bra     comm_download_mode0         ; Done (Sends the 4C OK too).
+	movlw	0x42							; send echo
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx				; Wait for UART
+	bcf		INTCON,GIE						; All interrupts off!
+	rcall	comm_get_flash_address			; Get three bytes address or return
+	btfsc	rs232_receive_overflow			; Got Data?
+	bra		comm_download_mode0				; No, Done.
+	rcall	comm_write_get_byte
+	btfsc	rs232_receive_overflow			; Got byte?
+	bra		comm_download_mode0				; No, Done.
+	movff	RCREG1,lo
+	; Got 4 bytes: 3 bytes address and 1 byte (lo) amount of 4kB blocks
+comm_erase_range4kb_loop:
+	call	ext_flash_erase4kB				; Erase block!
+	movlw	0x10
+	addwf	ext_flash_address+1,F
+	movlw	.0
+	addwfc	ext_flash_address+2,F			; Increase address by .4096, or 0x1000
+	decfsz	lo,F
+	bra		comm_erase_range4kb_loop		; Loop until lo=zero
+	bra		comm_download_mode0				; Done (Sends the 4C OK too).
 
 ;-----------------------------------------------------------------------------
 
-comm_erase_4kb:				; Get 3 bytes start address
-	bcf		INTCON,GIE	; All interrups off!	
+comm_erase_4kb:								; Get 3 bytes start address
+	bcf		INTCON,GIE						; All interrupts off!
 
-	rcall	comm_get_flash_address		; Get three bytes address or return
-	btfsc	rs232_recieve_overflow      ; Got Data?
-	bra		comm_download_mode0         ; No, Done.
+	rcall	comm_get_flash_address			; Get three bytes address or return
+	btfsc	rs232_receive_overflow			; Got Data?
+	bra		comm_download_mode0				; No, Done.
 
-	call	ext_flash_erase4kB          ; Erase one block
-	bra		comm_download_mode0 		; Done.
+	call	ext_flash_erase4kB				; Erase one block
+	bra		comm_download_mode0				; Done.
 
 ;-----------------------------------------------------------------------------
 
-comm_write_range:						; Get 3 bytes start address
-    movlw   0x30                        ; send echo
+comm_write_range:							; Get 3 bytes start address
+	movlw	0x30							; send echo
 	movwf	TXREG1
-	rcall	comm_rs232_wait_tx			; Wait for UART
+	rcall	comm_rs232_wait_tx				; Wait for UART
 
-	bcf		INTCON,GIE                  ; All interrups off!
+	bcf		INTCON,GIE						; All interrupts off!
 
-	rcall	comm_get_flash_address		; Get three bytes address or return
-	btfsc	rs232_recieve_overflow      ; Got Data?
-	bra		comm_download_mode0  		; No, Done.
+	rcall	comm_get_flash_address			; Get three bytes address or return
+	btfsc	rs232_receive_overflow			; Got Data?
+	bra		comm_download_mode0				; No, Done.
 
 comm_write_range_loop:
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow      ; Got byte?
-	bra		comm_download_mode0         ; No, Done (and send OK byte too).
+	btfsc	rs232_receive_overflow			; Got byte?
+	bra		comm_download_mode0				; No, Done (and send OK byte too).
 	movf	RCREG1,W
-;	bsf	NCTS	    ; Hold Bluetooth Chip (Requires PC/Android/iOS side to use flow control...)
-	call	ext_flash_byte_write_comms	; write one byte
-;	bcf	NCTS	    ; Release Bluetooth Chip (Requires PC/Android/iOS side to use flow control...)
-	call	incf_ext_flash_address_p1   ; increase address+1
+;	bsf		NCTS							; Hold Bluetooth Chip (Requires PC/Android/iOS side to use flow control...)
+	call	ext_flash_byte_write_comms		; write one byte
+;	bcf		NCTS							; Release Bluetooth Chip (Requires PC/Android/iOS side to use flow control...)
+	call	incf_ext_flash_address_p1		; increase address+1
 	bra	comm_write_range_loop
 
 ;-----------------------------------------------------------------------------
 
-comm_send_range:						; Get 3 bytes start address and 3 bytes amount
-    movlw   0x20                        ; send echo
-    movwf   TXREG1
-	rcall	comm_rs232_wait_tx			; Wait for UART
-
-	bcf		INTCON,GIE					; All interrups off!	
-
-	rcall	comm_get_flash_address		; Get three bytes address or return
-	btfsc	rs232_recieve_overflow		; Got Data?
-	bra		comm_download_mode0			; No, Done.
-
+comm_send_range:							; Get 3 bytes start address and 3 bytes amount
+	movlw	0x20							; send echo
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx				; Wait for UART
+	bcf		INTCON,GIE						; All interrupts off!
+	rcall	comm_get_flash_address			; Get three bytes address or return
+	btfsc	rs232_receive_overflow			; Got Data?
+	bra		comm_download_mode0				; No, Done.
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow		; Got byte?
-	bra		comm_download_mode0			; No, Done.
-    movff   RCREG1,up
+	btfsc	rs232_receive_overflow			; Got byte?
+	bra		comm_download_mode0				; No, Done.
+	movff	RCREG1,up
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow		; Got byte?
-	bra		comm_download_mode0			; No, Done.
+	btfsc	rs232_receive_overflow			; Got byte?
+	bra		comm_download_mode0				; No, Done.
 	movff	RCREG1,hi
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow		; Got byte?
-	bra		comm_download_mode0			; No, Done.
+	btfsc	rs232_receive_overflow			; Got byte?
+	bra		comm_download_mode0				; No, Done.
 	movff	RCREG1,lo
-
-    ; If lo==0, we must precondition hi because there are to many bytes send !
-    movf    lo,W    
-    bnz     $+4
-    decf    hi,F
-
-    movlw   0x40
-    cpfslt  up                          ; Abort when up > 0x3F
-    bra		comm_download_mode0			; Abort
-
-    ; 6bytes received, send data
-    ; needs ext_flash_address:3 start address and up:hi:lo amount
-
+	; If lo==0, we must precondition hi because there are to many bytes send !
+	movf	lo,W
+	bnz		$+4
+	decf	hi,F
+	movlw	0x40
+	cpfslt	up								; Abort when up > 0x3F
+	bra		comm_download_mode0				; Abort
+	; 6 bytes received, send data
+	; needs ext_flash_address:3 start address and up:hi:lo amount
 	call	ext_flash_read_block_start
 	movwf	TXREG1
-
-	bra		comm_send_range24			; counter 24bit
+	bra		comm_send_range24				; counter 24bit
 comm_send_range24_loop:
-	call	ext_flash_read_block		; Read one byte
-	movwf	TXREG1						; Start new transmit
+	call	ext_flash_read_block			; Read one byte
+	movwf	TXREG1							; Start new transmit
 comm_send_range24:
-	rcall	comm_rs232_wait_tx			; Wait for UART
+	rcall	comm_rs232_wait_tx				; Wait for UART
 	decfsz	lo,F
 	bra		comm_send_range24_loop
 	decf	hi,F
@@ -396,22 +377,21 @@
 	cpfseq	up
 	bra		comm_send_range24_loop
 	call	ext_flash_read_block_stop
-
-	bra		comm_download_mode0			; Done.
+	bra		comm_download_mode0				; Done.
 
 ;-----------------------------------------------------------------------------
 
 comm_get_flash_address:
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
+	btfsc	rs232_receive_overflow			; Got byte?
 	return									; No, return
 	movff	RCREG1,ext_flash_address+2
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
+	btfsc	rs232_receive_overflow			; Got byte?
 	return									; No, return
 	movff	RCREG1,ext_flash_address+1
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
+	btfsc	rs232_receive_overflow			; Got byte?
 	return									; No, return
 	movff	RCREG1,ext_flash_address+0
 	return
@@ -420,37 +400,37 @@
 
 comm_download_mode:
 	; Enable comm download mode
-	WIN_SMALL	comm_status2_column, comm_status2_row
-	STRCPY_TEXT_PRINT	tUsbDownloadMode; Download mode enabled
-	bsf		INTCON,GIE					; All interrups on
+	WIN_SMALL comm_status2_column, comm_status2_row
+	STRCPY_TEXT_PRINT tUsbDownloadMode	; Download mode enabled
+	bsf		INTCON,GIE					; All interrupts on
 	rcall	comm_rs232_wait_tx			; Wait for UART
-	movlw	0xBB                        ; Command Echo
+	movlw	0xBB						; Command Echo
 	movwf	TXREG1						; Send Answer
 comm_download_mode0:
-    bsf		INTCON,GIE					; All interrups on
+	bsf		INTCON,GIE					; All interrupts on
 	rcall	comm_rs232_wait_tx			; Wait for UART
-    movlw   0x4C                        ; 4C in service mode
-    btfss   comm_service_enabled
-	movlw	0x4D                        ; 4D in download mode
+	movlw	0x4C						; 4C in service mode
+	btfss	comm_service_enabled
+	movlw	0x4D						; 4D in download mode
 	movwf	TXREG1						; Send Answer
 	movlw	timeout_service_mode
-	movwf	timeout_counter 			; Timeout
+	movwf	comm_timeout				; Timeout
 	bcf		switch_right
 comm_download_mode1:
 	bcf		onesecupdate
-	dcfsnz 	timeout_counter,F
-	bra		comm_service_exit           ; Timeout -> Exit
+	dcfsnz	comm_timeout,F
+	bra		comm_service_exit			; Timeout -> Exit
 comm_download_mode2:
-	rcall	comm_write_get_byte         ; Check for a byte
-    btfsc   comm_service_enabled
-	btg     LEDr                        ; Blink in Service mode
-    btfss   vusb_in                     ; USB plugged in?
-    bra     comm_service_exit_nousb     ; Disconnected -> Exit
+	rcall	comm_write_get_byte			; Check for a byte
+	btfsc	comm_service_enabled
+	btg		LEDr						; Blink in Service mode
+	btfss	vusb_in						; USB plugged in?
+	bra		comm_service_exit_nousb		; Disconnected -> Exit
 	btfsc	switch_right				; Abort with right
 	bra		comm_service_exit
 	btfsc	onesecupdate
 	bra		comm_download_mode1
-	btfsc	rs232_recieve_overflow
+	btfsc	rs232_receive_overflow
 	bra		comm_download_mode2			; Wait for command byte
 
 	; command received!
@@ -471,22 +451,22 @@
 	cpfseq	RCREG1
 	bra		$+4
 	bra		comm_set_custom_text		; Send a opt_name_length byte string of custom text.
-	movlw	"f" ; 0x66
+	movlw	"f" 						; 0x66
 	cpfseq	RCREG1
 	bra		$+4
 	bra		comm_send_dive				; Send header and profile for one dive
 	movlw	"i"
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_identify               ; Send firmware, serial, etc.
+	bra		comm_identify				; Send firmware, serial, etc.
 	movlw	"j"
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_hardware_descriptor    ; Send hardware descriptor byte
+	bra		comm_hardware_descriptor	; Send hardware descriptor byte
 	movlw	0x60
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_feature_and_hardware   ; Send more detailed informations
+	bra		comm_feature_and_hardware	; Send more detailed informations
 	movlw	"n"
 	cpfseq	RCREG1
 	bra		$+4
@@ -498,28 +478,27 @@
 	movlw	"l"
 	cpfseq	RCREG1
 	bra		$+4
-    call	TFT_dump_screen             ; Dump the screen contents
+	call	TFT_dump_screen				; Dump the screen contents
 	movlw	"r"
 	cpfseq	RCREG1
 	bra		$+4
-    bra     comm_read_setting           ; Read a setting (And send via USB)
+	bra		comm_read_setting			; Read a setting (And send via USB)
 	movlw	"w"
 	cpfseq	RCREG1
 	bra		$+4
-    bra     comm_write_setting          ; Write a setting (Into RAM)
+	bra		comm_write_setting			; Write a setting (Into RAM)
 	movlw	"x"
 	cpfseq	RCREG1
 	bra		$+4
-    bra     comm_option_reset_all       ; Reset all options to factory default.
-
+	bra		comm_option_reset_all		; Reset all options to factory default.
 
-    btfss   comm_service_enabled        ; Done for Download mode
-	bra		comm_download_mode0         ; Loop with timeout reset
+	btfss	comm_service_enabled		; Done for Download mode
+	bra		comm_download_mode0			; Loop with timeout reset
 
 	movlw	0x20
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_send_range             ; send hi:lo:temp1 bytes starting from ext_flash_address:3
+	bra		comm_send_range				; send hi:lo:ext_flash_rw bytes starting from ext_flash_address:3
 	movlw	0x22
 	cpfseq	RCREG1
 	bra		$+4
@@ -527,32 +506,32 @@
 	movlw	0x23
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_reset_battery_gauge    ; Resets battery gauge registers
+	bra		comm_reset_battery_gauge	; Resets battery gauge registers
 	movlw	0x30
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_write_range            ; write bytes starting from ext_flash_address:3 (Stop when timeout)
+	bra		comm_write_range			; write bytes starting from ext_flash_address:3 (Stop when timeout)
 	movlw	0x40
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_erase_4kb              ; erases 4kB block from ext_flash_address:3 (Warning: No confirmation or built-in security here...)
+	bra		comm_erase_4kb				; erases 4kB block from ext_flash_address:3 (Warning: No confirmation or built-in security here...)
 	movlw	0x42
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_erase_range4kb         ; erases range in 4kB steps (Get 3 bytes address and 1byte amount of 4kB blocks)
+	bra		comm_erase_range4kb			; erases range in 4kB steps (Get 3 bytes address and 1byte amount of 4kB blocks)
 	movlw	0x50
 	cpfseq	RCREG1
 	bra		$+4
-	bra		comm_send_firmware          ; send firmware to bootloader
+	bra		comm_send_firmware			; send firmware to bootloader
 ;	movlw	"t"
 ;	cpfseq	RCREG1
 ;	bra		$+4
-;    goto    testloop                   ; Start raw-data testloop
+;	goto	testloop					; Start raw-data testloop
 	movlw	0xC1
 	cpfseq	RCREG1
 	bra		$+4
-	bra 	comm_service_ll_bootloader  ; Start low-level bootloader
-    bra		comm_download_mode0         ; Loop with timeout reset
+	bra		comm_service_ll_bootloader	; Start low-level bootloader
+	bra		comm_download_mode0			; Loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
@@ -585,7 +564,7 @@
 	bra		comm_download_mode0			; Done. Loop with timeout reset
 
 comm_send_compact_headers4:
-    movlw   .13
+	movlw	.13
 	movwf	lo							; Counter
 	rcall	comm_rs232_wait_tx			; Wait for UART
 	call	ext_flash_read_block_start	; 1st byte
@@ -600,23 +579,23 @@
 	bra		comm_send_compact_headers_loop
 	call	ext_flash_read_block_stop
 
-    ; Offset to total dive counter
+	; Offset to total dive counter
 	movlw	.80
 	movwf	ext_flash_address+0
-    call	ext_flash_read_block_start	; 1st byte
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx			; Wait for UART
+	call	ext_flash_read_block_start	; 1st byte
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	call	ext_flash_read_block		; 2nd byte
 	movwf	TXREG1
-    call	ext_flash_read_block_stop
-    rcall	comm_rs232_wait_tx			; Wait for UART
+	call	ext_flash_read_block_stop
+	rcall	comm_rs232_wait_tx			; Wait for UART
 
-    ; Offset to Logbook-Profile version
+	; Offset to Logbook-Profile version
 	movlw	.8
 	movwf	ext_flash_address+0
-    call	ext_flash_byte_read         ; Get byte
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx			; Wait for UART
+	call	ext_flash_byte_read			; Get byte
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	bra		comm_send_compact_headers2	; continue
 
 
@@ -635,7 +614,6 @@
 	movwf	ext_flash_address+2
 	movlw	0xF0
 	movwf	ext_flash_address+1
-
 comm_send_headers2:
 	clrf	ext_flash_address+0
 	; Adjust address for next dive
@@ -643,14 +621,12 @@
 	addwf	ext_flash_address+1
 	movlw	0x00
 	addwfc	ext_flash_address+2
-
 	movlw	0x30
 	cpfseq	ext_flash_address+2			; All 256 dive send?
 	bra		comm_send_headers4			; No, continue
 	bra		comm_download_mode0			; Done. Loop with timeout reset
-
 comm_send_headers4:
-	clrf	lo							; Counter	
+	clrf	lo							; Counter
 	rcall	comm_rs232_wait_tx			; Wait for UART
 	call	ext_flash_read_block_start	; 1st byte
 	movwf	TXREG1
@@ -667,181 +643,181 @@
 
 ;-----------------------------------------------------------------------------
 
-comm_option_reset_all:       			; Reset all options to factory default.
+comm_option_reset_all:					; Reset all options to factory default.
 	movlw	"x"							; send echo
 	movwf	TXREG1
-    call    option_reset_all
-    bra		comm_download_mode0			; Done. back to loop with timeout reset
+	call	option_reset_all
+	bra		comm_download_mode0			; Done. back to loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
 comm_write_get_byte:
-    goto	rs232_get_byte                  ; returns...
+	goto	rs232_get_byte				; returns...
 
 comm_rs232_wait_tx:
-    goto    rs232_wait_tx					; returns...
+	goto	rs232_wait_tx				; returns...
 
 comm_set_time:
-	movlw	"b"								; send echo
+	movlw	"b"							; send echo
 	movwf	TXREG1
 
-	rcall	comm_rs232_wait_tx				; wait for UART
+	rcall	comm_rs232_wait_tx			; wait for UART
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0             ; No, abort
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_download_mode0			; No, abort
 	movff	RCREG1, hours
 	movlw	d'24'
 	cpfslt	hours
 	clrf	hours
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0             ; No, abort
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_download_mode0			; No, abort
 	movff	RCREG1, mins
 	movlw	d'60'
 	cpfslt	mins
 	clrf	mins
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0             ; No, abort
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_download_mode0			; No, abort
 	movff	RCREG1, secs
 	movlw	d'60'
 	cpfslt	secs
 	clrf	secs
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0             ; No, abort
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_download_mode0			; No, abort
 	movff	RCREG1, month
 	movlw	d'13'
 	cpfslt	month
 	movwf	month
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0             ; No, abort
-	call	comm_check_day                  ; Check day
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_download_mode0			; No, abort
+	call	comm_check_day				; Check day
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0             ; No, abort
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_download_mode0			; No, abort
 	movff	RCREG1, year
 	movlw	d'100'
 	cpfslt	year
 	clrf	year
 	; All ok, set RTCC
-	call	rtc_set_rtc                     ; writes mins,sec,hours,day,month and year to rtc module
-    bra		comm_download_mode0             ; Done. back to loop with timeout reset
+	call	rtc_set_rtc					; writes mins,sec,hours,day,month and year to RTC module
+	bra		comm_download_mode0			; Done. back to loop with timeout reset
 
 ;-----------------------------------------------------------------------------
-; Set OSTC3 custom text string (opt_name_length ascii chars).
+; Set OSTC3 custom text string (opt_name_length ASCII chars).
 ;
 
 comm_set_custom_text:
-    movlw	"c"								; send echo
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
-    lfsr	FSR2,opt_name
-    movlw	opt_name_length
-    movwf	lo								; counter
+	movlw	"c"							; send echo
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
+	lfsr	FSR2,opt_name
+	movlw	opt_name_length
+	movwf	lo							; counter
 comm_set_ctext_loop:
-    rcall	comm_write_get_byte
-    btfsc	rs232_recieve_overflow          ; Got byte?
-    bra		comm_set_ctext_loop_done        ; no, abort
-    movff	RCREG1,POSTINC2                 ; Store character
-    decfsz	lo,F
-    bra		comm_set_ctext_loop
+	rcall	comm_write_get_byte
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_set_ctext_loop_done	; no, abort
+	movff	RCREG1,POSTINC2				; Store character
+	decfsz	lo,F
+	bra		comm_set_ctext_loop
 comm_set_ctext_loop_done:
-    tstfsz  lo                              ; Got opt_name_length bytes?
-    bra		comm_set_ctext_loop_done2       ; no, clear remaining chars
-    bra		comm_download_mode0             ; Done. Loop with timeout reset
+	tstfsz	lo							; Got opt_name_length bytes?
+	bra		comm_set_ctext_loop_done2	; no, clear remaining chars
+	bra		comm_download_mode0			; Done. Loop with timeout reset
 comm_set_ctext_loop_done2:
-    clrf    POSTINC2
-    decfsz	lo,F
-    bra		comm_set_ctext_loop_done2
-    bra		comm_download_mode0             ; Done. Loop with timeout reset
+	clrf	POSTINC2
+	decfsz	lo,F
+	bra		comm_set_ctext_loop_done2
+	bra		comm_download_mode0			; Done. Loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 ; Reply Serial (2 bytes low:high), firmware (major.minor) and custom text.
 ;
-  
+
 comm_identify:
-    movlw	"i"								; send echo
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
+	movlw	"i"							; send echo
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
 
-    ;---- Read serial from internal EEPROM address 0000
+	;---- Read serial from internal EEPROM address 0000
 	clrf	EEADRH
-	clrf	EEADR                       ; Get Serial number LOW
-	call	read_eeprom                 ; read byte
+	clrf	EEADR						; Get Serial number LOW
+	call	read_eeprom					; read byte
 	movff	EEDATA,lo
-	incf	EEADR,F                     ; Get Serial number HIGH
-	call	read_eeprom                 ; read byte
+	incf	EEADR,F						; Get Serial number HIGH
+	call	read_eeprom					; read byte
 	movff	EEDATA,hi
 
-    ;---- Emit serial number
-	movff   lo,TXREG1
+	;---- Emit serial number
+	movff	lo,TXREG1
 	rcall	comm_rs232_wait_tx
-	movff   hi,TXREG1
+	movff	hi,TXREG1
 	rcall	comm_rs232_wait_tx
 
-	;---- Emit fiwmware hi.lo
-	movlw   softwareversion_x
-	movwf   TXREG1
+	;---- Emit firmware hi.lo
+	movlw	softwareversion_x
+	movwf	TXREG1
 	rcall	comm_rs232_wait_tx
-	movlw   softwareversion_y
-	movwf   TXREG1
+	movlw	softwareversion_y
+	movwf	TXREG1
 	rcall	comm_rs232_wait_tx
 
 	;---- Emit custom text
-	movlw   opt_name_length
-	movwf   hi
-	lfsr    FSR2,opt_name
+	movlw	opt_name_length
+	movwf	hi
+	lfsr	FSR2,opt_name
 
 common_identify_loop:
-    movff   POSTINC2,TXREG1
+	movff	POSTINC2,TXREG1
 	rcall	comm_rs232_wait_tx
 	decfsz	hi,F
 	bra		common_identify_loop
 
-    bra     comm_download_mode0             ; Done.
+	bra		comm_download_mode0			; Done.
 
 ;-----------------------------------------------------------------------------
 ; Reply hardware descriptor byte
 ;
 
 comm_hardware_descriptor:
-    movlw	"j"								; send echo
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
-    movff   hardware_flag,TXREG1
-    bra     comm_download_mode0             ; Done.
+	movlw	"j"							; send echo
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
+	movff	hardware_flag,TXREG1
+	bra		comm_download_mode0			; Done.
 
 comm_feature_and_hardware:
-    movlw	0x60							; send echo
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
-    movlw	0x00	; Hardware high byte
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
-    movff	hardware_flag,TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
-    movlw	0x00	; Feature high Byte
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
-    movlw	0x00	; Feature low Byte
-    movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; wait for UART
-    movlw	0x00	; Model descriptor byte
-    movwf	TXREG1
-    bra     comm_download_mode0             ; Done.
-   
+	movlw	0x60						; send echo
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
+	movlw	0x00						; Hardware high byte
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
+	movff	hardware_flag,TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
+	movlw	0x00						; Feature high Byte
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
+	movlw	0x00						; Feature low Byte
+	movwf	TXREG1
+	rcall	comm_rs232_wait_tx			; wait for UART
+	movlw	0x00						; Model descriptor byte
+	movwf	TXREG1
+	bra		comm_download_mode0			 ; Done.
+
 ;-----------------------------------------------------------------------------
 
 comm_send_dive:
-	movlw	"f"; 0x66						; send echo
+	movlw	"f"; 0x66					; send echo
 	movwf	TXREG1
-	
+
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0				; No, abort!
-	movff	RCREG1,lo						; Store dive number (0-255)
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_download_mode0			; No, abort!
+	movff	RCREG1,lo					; Store dive number (0-255)
 ; First, send the header (again)
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
@@ -853,56 +829,56 @@
 	movlw	0x20
 	movwf	ext_flash_address+2
 	movlw	.16
-	mulwf	lo								; lo*16 = offset to 0x2000 (up:hi)
+	mulwf	lo							; lo*16 = offset to 0x2000 (up:hi)
 	movf	PRODL,W
 	addwf	ext_flash_address+1,F
 	movf	PRODH,W
 	addwfc	ext_flash_address+2,F
 
-	incf_ext_flash_address	d'2'				; Skip 0xFA, 0xFA
-	call		ext_flash_byte_read_plus		; Read start address of profile
-	movff		temp1,ext_flash_log_pointer+0
-	call		ext_flash_byte_read_plus		; Read start address of profile
-	movff		temp1,ext_flash_log_pointer+1
-	call		ext_flash_byte_read_plus		; Read start address of profile
-	movff		temp1,ext_flash_log_pointer+2
-	call		ext_flash_byte_read_plus		; Read end address of profile
-	movff		temp1,convert_value_temp+0
-	call		ext_flash_byte_read_plus		; Read end address of profile
-	movff		temp1,convert_value_temp+1
-	call		ext_flash_byte_read_plus		; Read end address of profile
-	movff		temp1,convert_value_temp+2
-	decf_ext_flash_address	d'8'				; Back again to first 0xFA in header
+	incf_ext_flash_address d'2'			; Skip 0xFA, 0xFA
+	call	ext_flash_byte_read_plus	; Read start address of profile
+	movff	ext_flash_rw,ext_flash_log_pointer+0
+	call	ext_flash_byte_read_plus	; Read start address of profile
+	movff	ext_flash_rw,ext_flash_log_pointer+1
+	call	ext_flash_byte_read_plus	; Read start address of profile
+	movff	ext_flash_rw,ext_flash_log_pointer+2
+	call	ext_flash_byte_read_plus	; Read end address of profile
+	movff	ext_flash_rw,ext_flash_end_pointer+0
+	call	ext_flash_byte_read_plus	; Read end address of profile
+	movff	ext_flash_rw,ext_flash_end_pointer+1
+	call	ext_flash_byte_read_plus	; Read end address of profile
+	movff	ext_flash_rw,ext_flash_end_pointer+2
+	decf_ext_flash_address	d'8'		; Back again to first 0xFA in header
 
-    movf        ext_flash_log_pointer+0,W
-    cpfseq      convert_value_temp+0            ; Equal?
-    bra         comm_send_dive1                 ; No, Send header
+	movf	ext_flash_log_pointer+0,W
+	cpfseq	ext_flash_end_pointer+0		; Equal?
+	bra		comm_send_dive1				; No, Send header
 
-    movf        ext_flash_log_pointer+1,W
-    cpfseq      convert_value_temp+1            ; Equal?
-    bra         comm_send_dive1                 ; No, Send header
+	movf	ext_flash_log_pointer+1,W
+	cpfseq	ext_flash_end_pointer+1		; Equal?
+	bra		comm_send_dive1				; No, Send header
 
-    movf        ext_flash_log_pointer+2,W
-    cpfseq      convert_value_temp+2            ; Equal?
-    bra         comm_send_dive1                 ; No, Send header
+	movf	ext_flash_log_pointer+2,W
+	cpfseq	ext_flash_end_pointer+2		; Equal?
+	bra		comm_send_dive1				; No, Send header
 
-    ; Start=End -> Not good, abort
-    bra		comm_download_mode0                 ; Done. Loop with timeout reset
+	; Start=End -> Not good, abort
+	bra		comm_download_mode0			; Done. Loop with timeout reset
 
 comm_send_dive1:
 	; Send header
-	clrf	hi									; Counter	
-	rcall	comm_rs232_wait_tx					; Wait for UART
-	call	ext_flash_read_block_start			; 1st byte
+	clrf	hi							; Counter
+	rcall	comm_rs232_wait_tx			; Wait for UART
+	call	ext_flash_read_block_start	; 1st byte
 	movwf	TXREG1
-	bra	comm_send_dive_header
+	bra		comm_send_dive_header
 comm_send_dive_header2:
-	call	ext_flash_read_block				; Read one byte
-	movwf	TXREG1								; Start new transmit
+	call	ext_flash_read_block		; Read one byte
+	movwf	TXREG1						; Start new transmit
 comm_send_dive_header:
-	rcall	comm_rs232_wait_tx					; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	decfsz	hi,F
-	bra	comm_send_dive_header2
+	bra		comm_send_dive_header2
 	call	ext_flash_read_block_stop
 
 	; Set address for profile
@@ -910,642 +886,636 @@
 	movff	ext_flash_log_pointer+1,ext_flash_address+1
 	movff	ext_flash_log_pointer+2,ext_flash_address+2
 
-	movlw	.6									; Skip 6byte short header in profile - only for internal use
-	call	incf_ext_flash_address0_0x20		; increases bytes in ext_flash_address:3 with 0x200000 bank switching
+	movlw	.6								; Skip 6byte short header in profile - only for internal use
+	call	incf_ext_flash_address0_0x20	; increases bytes in ext_flash_address:3 with 0x200000 bank switching
 
 	; Set address for short header/compact header, Byte 0
-	
+
 comm_send_dive_profile:
-	call	ext_flash_byte_read_plus_0x20		; Read one byte into temp1, takes care of banking at 0x200000
-	rcall	comm_rs232_wait_tx					; Wait for UART
-	movff	temp1,TXREG1						; Send a byte
-	
+	call	ext_flash_byte_read_plus_0x20	; Read one byte into ext_flash_rw, takes care of banking at 0x200000
+	rcall	comm_rs232_wait_tx				; Wait for UART
+	movff	ext_flash_rw,TXREG1				; Send a byte
+
 	; 24bit compare with end address
-	movff	convert_value_temp+0,WREG
+	movff	ext_flash_end_pointer+0,WREG
 	cpfseq	ext_flash_address+0
-	bra	comm_send_dive_profile
-	movff	convert_value_temp+1,WREG
+	bra		comm_send_dive_profile
+	movff	ext_flash_end_pointer+1,WREG
 	cpfseq	ext_flash_address+1
-	bra	comm_send_dive_profile
-	movff	convert_value_temp+2,WREG
+	bra		comm_send_dive_profile
+	movff	ext_flash_end_pointer+2,WREG
 	cpfseq	ext_flash_address+2
-	bra	comm_send_dive_profile
-	
-	rcall   comm_read_setting_wait          	; Wait for UART
-	bra	comm_download_mode0						; Done. Loop with timeout reset
+	bra		comm_send_dive_profile
+
+	rcall	comm_read_setting_wait		; Wait for UART
+	bra		comm_download_mode0			; Done. Loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
 comm_read_setting:
-    movlw   "r"
+	movlw	"r"
 	movwf	TXREG1
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_read_abort                 ; No, abort!
-	rcall   comm_read_setting_wait          ; Wait for UART
-    movlw   0x0F
-    cpfsgt  RCREG1                          ; 0x00-0x0F: unused
-    bra		comm_read_abort                 ; abort!
-    subwf   RCREG1,W                        ; Subtract unused commands
-    dcfsnz  WREG
-    bra     comm_read_gas1                  ; RCREG1=0x10
-    dcfsnz  WREG
-    bra     comm_read_gas2                  ; RCREG1=0x11
-    dcfsnz  WREG
-    bra     comm_read_gas3                  ; RCREG1=0x12
-    dcfsnz  WREG
-    bra     comm_read_gas4                  ; RCREG1=0x13
-    dcfsnz  WREG
-    bra     comm_read_gas5                  ; RCREG1=0x14
-    dcfsnz  WREG
-    bra     comm_read_dil1                  ; RCREG1=0x15
-    dcfsnz  WREG
-    bra     comm_read_dil2                  ; RCREG1=0x16
-    dcfsnz  WREG
-    bra     comm_read_dil3                  ; RCREG1=0x17
-    dcfsnz  WREG
-    bra     comm_read_dil4                  ; RCREG1=0x18
-    dcfsnz  WREG
-    bra     comm_read_dil5                  ; RCREG1=0x19
-    dcfsnz  WREG
-    bra     comm_read_sp1                   ; RCREG1=0x1A
-    dcfsnz  WREG
-    bra     comm_read_sp2                   ; RCREG1=0x1B
-    dcfsnz  WREG
-    bra     comm_read_sp3                   ; RCREG1=0x1C
-    dcfsnz  WREG
-    bra     comm_read_sp4                   ; RCREG1=0x1D
-    dcfsnz  WREG
-    bra     comm_read_sp5                   ; RCREG1=0x1E
-    dcfsnz  WREG
-    movff   opt_ccr_mode, TXREG1            ; RCREG1=0x1F
-    dcfsnz  WREG
-    movff   opt_dive_mode, TXREG1           ; RCREG1=0x20
-    dcfsnz  WREG
-    movff   char_I_deco_model, TXREG1       ; RCREG1=0x21
-    dcfsnz  WREG
-    movff   char_I_ppO2_max, TXREG1         ; RCREG1=0x22		MODIFIED ## V2.94
-    dcfsnz  WREG
-    movff   char_I_ppO2_min, TXREG1         ; RCREG1=0x23		MODIFIED ## V2.94
-    dcfsnz  WREG
-    movff   char_I_extra_time, TXREG1       ; RCREG1=0x24
-    dcfsnz  WREG
-    movff   opt_GF_low, TXREG1              ; RCREG1=0x25
-    dcfsnz  WREG
-    movff   opt_GF_high, TXREG1             ; RCREG1=0x26
-    dcfsnz  WREG
-    movff   opt_aGF_low, TXREG1             ; RCREG1=0x27
-    dcfsnz  WREG
-    movff   opt_aGF_high, TXREG1            ; RCREG1=0x28
-    dcfsnz  WREG
-    movff   opt_enable_aGF, TXREG1          ; RCREG1=0x29
-    dcfsnz  WREG
-    movff   opt_sat_multiplier_non_gf, TXREG1; RCREG1=0x2A
-    dcfsnz  WREG
-    movff   opt_desat_multiplier_non_gf, TXREG1; RCREG1=0x2B
-    dcfsnz  WREG
-    movff   opt_last_stop, TXREG1           ; RCREG1=0x2C
-    dcfsnz  WREG
-    movff   opt_brightness, TXREG1          ; RCREG1=0x2D
-    dcfsnz  WREG
-    movff   opt_units, TXREG1               ; RCREG1=0x2E
-    dcfsnz  WREG
-    movff   opt_sampling_rate, TXREG1       ; RCREG1=0x2F
-    dcfsnz  WREG
-    movff   opt_salinity, TXREG1            ; RCREG1=0x30
-    dcfsnz  WREG
-    movff   opt_dive_color_scheme, TXREG1   ; RCREG1=0x31
-    dcfsnz  WREG
-    movff	opt_language, TXREG1            ; RCREG1=0x32
-    dcfsnz  WREG
-    movff   opt_dateformat, TXREG1          ; RCREG1=0x33
-    dcfsnz  WREG
-    movff   opt_compass_gain, TXREG1        ; RCREG1=0x34
-    dcfsnz  WREG
-    movff   opt_pressure_adjust, TXREG1     ; RCREG1=0x35
-    dcfsnz  WREG
-    movff   opt_enable_safetystop, TXREG1   ; RCREG1=0x36
-    dcfsnz  WREG
-    movff   opt_calibration_O2_ratio, TXREG1; RCREG1=0x37
-    dcfsnz  WREG
-    clrf    TXREG1				            ; RCREG1=0x38   NOT USED ANYMORE (opt_sensor_fallback)	## voting logic
-    dcfsnz  WREG
-    movff   opt_flip_screen, TXREG1         ; RCREG1=0x39
-    dcfsnz  WREG
-    movff   opt_cR_button_left, TXREG1      ; RCREG1=0x3A
-    dcfsnz  WREG
-    movff   opt_cR_button_right, TXREG1     ; RCREG1=0x3B
-    dcfsnz  WREG
-    movff   char_I_bottom_usage, TXREG1     ; RCREG1=0x3C
-    dcfsnz  WREG
-    movff   char_I_deco_usage, TXREG1       ; RCREG1=0x3D
-    dcfsnz  WREG
-    movff   opt_modwarning, TXREG1          ; RCREG1=0x3E
-    dcfsnz  WREG
-    movff   opt_vsitextv2, TXREG1           ; RCREG1=0x3F
-    dcfsnz  WREG
-    movff   opt_vsigraph, TXREG1            ; RCREG1=0x40
-    dcfsnz  WREG
-    movff   opt_showppo2, TXREG1            ; RCREG1=0x41
-    dcfsnz  WREG
-    movff   opt_temperature_adjust, TXREG1  ; RCREG1=0x42
-    dcfsnz  WREG
-    movff   opt_safety_stop_length, TXREG1  ; RCREG1=0x43
-    dcfsnz  WREG
-    movff   opt_safety_stop_start, TXREG1   ; RCREG1=0x44
-    dcfsnz  WREG
-    movff   opt_safety_stop_end, TXREG1     ; RCREG1=0x45
-    dcfsnz  WREG
-    movff   opt_safety_stop_reset, TXREG1   ; RCREG1=0x46
-    dcfsnz  WREG
-    clrf    TXREG1			    			; RCREG1=0x47, ignore conservatism for standard hwOS
-    dcfsnz  WREG
-    movff   opt_diveTimeout, TXREG1	    	; RCREG1=0x48
-    dcfsnz  WREG
-    movff   button_polarity, TXREG1	    	; RCREG1=0x49
-    dcfsnz  WREG
-    movff   char_I_PSCR_drop, TXREG1	    ; RCREG1=0x4A
-    dcfsnz  WREG
-    movff   char_I_PSCR_lungratio, TXREG1	; RCREG1=0x4B
-    dcfsnz  WREG
-    movff   char_I_ppO2_max_deco, TXREG1    ; RCREG1=0x4C	MODIFIED ## V2.94
-	
-	; NEW
-    dcfsnz  WREG
-    movff   char_I_ppO2_min_loop, TXREG1	; RCREG1=0x4D	## CCR/pSCR min ppO2	MODIFIED ## V2.94
-    dcfsnz  WREG
-    movff   char_I_tank_size+0, TXREG1		; RCREG1=0x4E	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_size+1, TXREG1		; RCREG1=0x4F	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_size+2, TXREG1		; RCREG1=0x50	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_size+3, TXREG1		; RCREG1=0x51	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_size+4, TXREG1		; RCREG1=0x52	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_pres_fill+0, TXREG1	; RCREG1=0x53	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_pres_fill+1, TXREG1	; RCREG1=0x54	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_pres_fill+2, TXREG1	; RCREG1=0x55	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_pres_fill+3, TXREG1	; RCREG1=0x56	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_tank_pres_fill+4, TXREG1	; RCREG1=0x57	## bailout gas needs
-	dcfsnz  WREG
-    movff   char_I_cc_max_frac_o2, TXREG1	; RCREG1=0x58	## CCR max ppO2 limiter
-	dcfsnz  WREG
-    movff   opt_sim_setpoint_number, TXREG1	; RCREG1=0x59	## deco calculator enhancement
-	dcfsnz  WREG
-    movff   opt_calc_asc_gasvolume, TXREG1	; RCREG1=0x5A	## bailout gas needs 
-	dcfsnz  WREG
-    movff   opt_sim_use_aGF, TXREG1			; RCREG1=0x5B	## deco calculator enhancement
-	dcfsnz  WREG
-    movff   char_I_altitude_wait, TXREG1	; RCREG1=0x5C	## no fly altitude
-	dcfsnz  WREG
-    movff   opt_enable_IBCD, TXREG1			; RCREG1=0x5D	## IBCD
-        dcfsnz  WREG
-    movff   opt_sat_multiplier_gf, TXREG1; RCREG1=0x5E
-        dcfsnz  WREG
-    movff   opt_desat_multiplier_gf, TXREG1; RCREG1=0x5F
+	btfsc	rs232_receive_overflow		; Got byte?
+	bra		comm_read_abort				; No, abort!
+	rcall	comm_read_setting_wait		; Wait for UART
+	movlw	0x0F
+	cpfsgt	RCREG1						; 0x00-0x0F: unused
+	bra		comm_read_abort				; abort!
+	subwf	RCREG1,W					; Subtract unused commands
+	dcfsnz	WREG
+	bra		comm_read_gas1				; RCREG1=0x10
+	dcfsnz	WREG
+	bra		comm_read_gas2				; RCREG1=0x11
+	dcfsnz	WREG
+	bra		comm_read_gas3				; RCREG1=0x12
+	dcfsnz	WREG
+	bra		comm_read_gas4				; RCREG1=0x13
+	dcfsnz	WREG
+	bra		comm_read_gas5				; RCREG1=0x14
+	dcfsnz	WREG
+	bra		comm_read_dil1				; RCREG1=0x15
+	dcfsnz	WREG
+	bra		comm_read_dil2				; RCREG1=0x16
+	dcfsnz	WREG
+	bra		comm_read_dil3				; RCREG1=0x17
+	dcfsnz	WREG
+	bra		comm_read_dil4				; RCREG1=0x18
+	dcfsnz	WREG
+	bra		comm_read_dil5				; RCREG1=0x19
+	dcfsnz	WREG
+	bra		comm_read_sp1				; RCREG1=0x1A
+	dcfsnz	WREG
+	bra		comm_read_sp2				; RCREG1=0x1B
+	dcfsnz	WREG
+	bra		comm_read_sp3				; RCREG1=0x1C
+	dcfsnz	WREG
+	bra		comm_read_sp4				; RCREG1=0x1D
+	dcfsnz	WREG
+	bra		comm_read_sp5				; RCREG1=0x1E
+	dcfsnz	WREG
+	movff	opt_ccr_mode, TXREG1		; RCREG1=0x1F
+	dcfsnz	WREG
+	movff	opt_dive_mode, TXREG1		; RCREG1=0x20
+	dcfsnz	WREG
+	movff	char_I_deco_model, TXREG1	; RCREG1=0x21
+	dcfsnz	WREG
+	movff	char_I_ppO2_max, TXREG1		; RCREG1=0x22
+	dcfsnz	WREG
+	movff	char_I_ppO2_min, TXREG1		; RCREG1=0x23
+	dcfsnz	WREG
+	movff	char_I_extra_time, TXREG1	; RCREG1=0x24
+	dcfsnz	WREG
+	movff	opt_GF_low, TXREG1			; RCREG1=0x25
+	dcfsnz	WREG
+	movff	opt_GF_high, TXREG1			; RCREG1=0x26
+	dcfsnz	WREG
+	movff	opt_aGF_low, TXREG1			; RCREG1=0x27
+	dcfsnz	WREG
+	movff	opt_aGF_high, TXREG1		; RCREG1=0x28
+	dcfsnz	WREG
+	movff	opt_enable_aGF, TXREG1		; RCREG1=0x29
+	dcfsnz	WREG
+	movff	opt_sat_multiplier_non_gf, TXREG1	; RCREG1=0x2A
+	dcfsnz	WREG
+	movff	opt_desat_multiplier_non_gf, TXREG1	; RCREG1=0x2B
+	dcfsnz	WREG
+	movff	opt_last_stop, TXREG1		; RCREG1=0x2C
+	dcfsnz	WREG
+	movff	opt_brightness, TXREG1		; RCREG1=0x2D
+	dcfsnz	WREG
+	movff	opt_units, TXREG1			; RCREG1=0x2E
+	dcfsnz	WREG
+	movff	opt_sampling_rate, TXREG1	; RCREG1=0x2F
+	dcfsnz	WREG
+	movff	opt_salinity, TXREG1		; RCREG1=0x30
+	dcfsnz	WREG
+	movff	opt_dive_color_scheme, TXREG1	; RCREG1=0x31
+	dcfsnz	WREG
+	movff	opt_language, TXREG1		; RCREG1=0x32
+	dcfsnz	WREG
+	movff	opt_dateformat, TXREG1		; RCREG1=0x33
+	dcfsnz	WREG
+	movff	opt_compass_gain, TXREG1	; RCREG1=0x34
+	dcfsnz	WREG
+	movff	opt_pressure_adjust, TXREG1	; RCREG1=0x35
+	dcfsnz	WREG
+	movff	opt_enable_safetystop, TXREG1	; RCREG1=0x36
+	dcfsnz	WREG
+	movff	opt_calibration_O2_ratio, TXREG1; RCREG1=0x37
+	dcfsnz	WREG
+	clrf	TXREG1						; RCREG1=0x38	NOT USED ANYMORE (ex opt_sensor_fallback)
+	dcfsnz	WREG
+	movff	opt_flip_screen, TXREG1		; RCREG1=0x39
+	dcfsnz	WREG
+	movff	opt_cR_button_left, TXREG1	; RCREG1=0x3A
+	dcfsnz	WREG
+	movff	opt_cR_button_right, TXREG1	; RCREG1=0x3B
+	dcfsnz	WREG
+	movff	char_I_bottom_usage, TXREG1	; RCREG1=0x3C
+	dcfsnz	WREG
+	movff	char_I_deco_usage, TXREG1	; RCREG1=0x3D
+	dcfsnz	WREG
+	movff	opt_modwarning, TXREG1		; RCREG1=0x3E
+	dcfsnz	WREG
+	movff	opt_vsitextv2, TXREG1		; RCREG1=0x3F
+	dcfsnz	WREG
+	movff	opt_vsigraph, TXREG1		; RCREG1=0x40
+	dcfsnz	WREG
+	movff	opt_showppo2, TXREG1		; RCREG1=0x41
+	dcfsnz	WREG
+	movff	opt_temperature_adjust, TXREG1	; RCREG1=0x42
+	dcfsnz	WREG
+	movff	opt_safety_stop_length, TXREG1	; RCREG1=0x43
+	dcfsnz	WREG
+	movff	opt_safety_stop_start, TXREG1	; RCREG1=0x44
+	dcfsnz	WREG
+	movff	opt_safety_stop_end, TXREG1		; RCREG1=0x45
+	dcfsnz	WREG
+	movff	opt_safety_stop_reset, TXREG1	; RCREG1=0x46
+	dcfsnz	WREG
+	clrf	TXREG1							; RCREG1=0x47, ignore conservatism for standard hwOS
+	dcfsnz	WREG
+	movff	opt_diveTimeout, TXREG1			; RCREG1=0x48
+	dcfsnz	WREG
+	movff	button_polarity, TXREG1			; RCREG1=0x49
+	dcfsnz	WREG
+	movff	char_I_PSCR_drop, TXREG1		; RCREG1=0x4A
+	dcfsnz	WREG
+	movff	char_I_PSCR_lungratio, TXREG1	; RCREG1=0x4B
+	dcfsnz	WREG
+	movff	char_I_ppO2_max_deco, TXREG1	; RCREG1=0x4C
+	dcfsnz	WREG
+	movff	char_I_ppO2_min_loop, TXREG1	; RCREG1=0x4D
+	dcfsnz	WREG
+	movff	char_I_tank_size+0, TXREG1		; RCREG1=0x4E
+	dcfsnz	WREG
+	movff	char_I_tank_size+1, TXREG1		; RCREG1=0x4F
+	dcfsnz	WREG
+	movff	char_I_tank_size+2, TXREG1		; RCREG1=0x50
+	dcfsnz	WREG
+	movff	char_I_tank_size+3, TXREG1		; RCREG1=0x51
+	dcfsnz	WREG
+	movff	char_I_tank_size+4, TXREG1		; RCREG1=0x52
+	dcfsnz	WREG
+	movff	char_I_tank_pres_fill+0, TXREG1	; RCREG1=0x53
+	dcfsnz	WREG
+	movff	char_I_tank_pres_fill+1, TXREG1	; RCREG1=0x54
+	dcfsnz	WREG
+	movff	char_I_tank_pres_fill+2, TXREG1	; RCREG1=0x55
+	dcfsnz	WREG
+	movff	char_I_tank_pres_fill+3, TXREG1	; RCREG1=0x56
+	dcfsnz	WREG
+	movff	char_I_tank_pres_fill+4, TXREG1	; RCREG1=0x57
+	dcfsnz	WREG
+	movff	char_I_cc_max_frac_o2, TXREG1	; RCREG1=0x58
+	dcfsnz	WREG
+	movff	opt_sim_setpoint_number, TXREG1	; RCREG1=0x59
+	dcfsnz	WREG
+	movff	opt_calc_asc_gasvolume, TXREG1	; RCREG1=0x5A
+	dcfsnz	WREG
+	movff	opt_sim_use_aGF, TXREG1			; RCREG1=0x5B
+	dcfsnz	WREG
+	movff	char_I_altitude_wait, TXREG1	; RCREG1=0x5C
+	dcfsnz	WREG
+	movff	opt_enable_IBCD, TXREG1			; RCREG1=0x5D
+	dcfsnz	WREG
+	movff	opt_sat_multiplier_gf, TXREG1	; RCREG1=0x5E
+	dcfsnz	WREG
+	movff	opt_desat_multiplier_gf, TXREG1; RCREG1=0x5F
 
-	
-    
+
 comm_read_abort:
 comm_read_done:
-    bra		comm_download_mode0             ; Done. Loop with timeout reset
+	bra		comm_download_mode0				; Done. Loop with timeout reset
 
 comm_read_setting_wait:
-    bra    comm_rs232_wait_tx				; Wait for UART (and return!)
+	bra	comm_rs232_wait_tx					; Wait for UART (and return!)
 
 comm_read_gas1:
-    movff   opt_gas_O2_ratio+0, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_He_ratio+0, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_type+0, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_OC_bail_gas_change+0,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_gas_O2_ratio+0, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_He_ratio+0, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_type+0, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_OC_bail_gas_change+0,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_gas2:
-    movff   opt_gas_O2_ratio+1, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_He_ratio+1, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_type+1, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_OC_bail_gas_change+1,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_gas_O2_ratio+1, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_He_ratio+1, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_type+1, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_OC_bail_gas_change+1,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_gas3:
-    movff   opt_gas_O2_ratio+2, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_He_ratio+2, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_type+2, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_OC_bail_gas_change+2,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_gas_O2_ratio+2, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_He_ratio+2, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_type+2, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_OC_bail_gas_change+2,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_gas4:
-    movff   opt_gas_O2_ratio+3, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_He_ratio+3, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_type+3, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_OC_bail_gas_change+3,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_gas_O2_ratio+3, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_He_ratio+3, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_type+3, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_OC_bail_gas_change+3,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_gas5:
-    movff   opt_gas_O2_ratio+4, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_He_ratio+4, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_gas_type+4, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_OC_bail_gas_change+4,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_gas_O2_ratio+4, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_He_ratio+4, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_gas_type+4, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_OC_bail_gas_change+4,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 
 comm_read_dil1:
-    movff   opt_dil_O2_ratio+0, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_He_ratio+0, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_type+0, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_dil_change+0,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_dil_O2_ratio+0, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_He_ratio+0, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_type+0, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_dil_change+0,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_dil2:
-    movff   opt_dil_O2_ratio+1, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_He_ratio+1, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_type+1, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_dil_change+1,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_dil_O2_ratio+1, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_He_ratio+1, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_type+1, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_dil_change+1,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_dil3:
-    movff   opt_dil_O2_ratio+2, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_He_ratio+2, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_type+2, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_dil_change+2,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_dil_O2_ratio+2, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_He_ratio+2, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_type+2, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_dil_change+2,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_dil4:
-    movff   opt_dil_O2_ratio+3, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_He_ratio+3, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_type+3, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_dil_change+3,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_dil_O2_ratio+3, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_He_ratio+3, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_type+3, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_dil_change+3,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_dil5:
-    movff   opt_dil_O2_ratio+4, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_He_ratio+4, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   opt_dil_type+4, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_dil_change+4,TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	opt_dil_O2_ratio+4, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_He_ratio+4, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	opt_dil_type+4, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_dil_change+4,TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 
 comm_read_sp1:
-    movff   char_I_setpoint_cbar+0, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_setpoint_change+0, TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	char_I_setpoint_cbar+0, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_setpoint_change+0, TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_sp2:
-    movff   char_I_setpoint_cbar+1, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_setpoint_change+1, TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	char_I_setpoint_cbar+1, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_setpoint_change+1, TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_sp3:
-    movff   char_I_setpoint_cbar+2, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_setpoint_change+2, TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	char_I_setpoint_cbar+2, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_setpoint_change+2, TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_sp4:
-    movff   char_I_setpoint_cbar+3, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_setpoint_change+3, TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	char_I_setpoint_cbar+3, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_setpoint_change+3, TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 comm_read_sp5:
-    movff   char_I_setpoint_cbar+4, TXREG1
-    rcall   comm_read_setting_wait          ; Wait for UART
-    movff   char_I_setpoint_change+4, TXREG1
-    bra		comm_read_done                  ; Done. Wait for UART and loop with timeout reset
+	movff	char_I_setpoint_cbar+4, TXREG1
+	rcall	comm_read_setting_wait			; Wait for UART
+	movff	char_I_setpoint_change+4, TXREG1
+	bra		comm_read_done					; Done. Wait for UART and loop with timeout reset
 
 
 ;-----------------------------------------------------------------------------
 comm_write_gas1:
-    movff   RCREG1,opt_gas_O2_ratio+0
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_He_ratio+0
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_type+0
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_OC_bail_gas_change+0
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+	movff	RCREG1,opt_gas_O2_ratio+0
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_He_ratio+0
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_type+0
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_OC_bail_gas_change+0
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_gas2:
-    movff   RCREG1,opt_gas_O2_ratio+1
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_He_ratio+1
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_type+1
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_OC_bail_gas_change+1
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+	movff	RCREG1,opt_gas_O2_ratio+1
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_He_ratio+1
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_type+1
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_OC_bail_gas_change+1
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_gas3:
-    movff   RCREG1,opt_gas_O2_ratio+2
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_He_ratio+2
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_type+2
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_OC_bail_gas_change+2
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+	movff	RCREG1,opt_gas_O2_ratio+2
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_He_ratio+2
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_type+2
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_OC_bail_gas_change+2
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_gas4:
-    movff   RCREG1,opt_gas_O2_ratio+3
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_He_ratio+3
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_type+3
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_OC_bail_gas_change+3
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+	movff	RCREG1,opt_gas_O2_ratio+3
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_He_ratio+3
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_type+3
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_OC_bail_gas_change+3
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_gas5:
-    movff   RCREG1,opt_gas_O2_ratio+4
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_He_ratio+4
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_gas_type+4
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_OC_bail_gas_change+4
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+	movff	RCREG1,opt_gas_O2_ratio+4
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_He_ratio+4
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_gas_type+4
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_OC_bail_gas_change+4
+	bra		comm_write_abort				; Done. Loop with timeout reset
 
 
 comm_write_setting:
-    movlw   "w"
+	movlw	"w"
 	movwf	TXREG1
-	rcall	comm_write_get_byte              ; "Byte 2"
-	btfsc	rs232_recieve_overflow			 ; Got byte?
-	bra		comm_write_abort                 ; No, abort!
-    movff   RCREG1,temp1                     ; Copy
-    rcall	comm_write_get_byte              ; "Byte 3"
-	rcall	comm_read_setting_wait           ; Wait for UART
-    movlw   0x0F
-    cpfsgt  temp1                            ; 0x00-0x0F: unused
-    bra		comm_write_abort                 ; abort!
-    subwf   temp1,W                          ; Subtract unused commands
-    dcfsnz  WREG
-    bra     comm_write_gas1                  ; RCREG1=0x10
-    dcfsnz  WREG
-    bra     comm_write_gas2                  ; RCREG1=0x11
-    dcfsnz  WREG
-    bra     comm_write_gas3                  ; RCREG1=0x12
-    dcfsnz  WREG
-    bra     comm_write_gas4                  ; RCREG1=0x13
-    dcfsnz  WREG
-    bra     comm_write_gas5                  ; RCREG1=0x14
-    dcfsnz  WREG
-    bra     comm_write_dil1                  ; RCREG1=0x15
-    dcfsnz  WREG
-    bra     comm_write_dil2                  ; RCREG1=0x16
-    dcfsnz  WREG
-    bra     comm_write_dil3                  ; RCREG1=0x17
-    dcfsnz  WREG
-    bra     comm_write_dil4                  ; RCREG1=0x18
-    dcfsnz  WREG
-    bra     comm_write_dil5                  ; RCREG1=0x19
-    dcfsnz  WREG
-    bra     comm_write_sp1                   ; RCREG1=0x1A
-    dcfsnz  WREG
-    bra     comm_write_sp2                   ; RCREG1=0x1B
-    dcfsnz  WREG
-    bra     comm_write_sp3                   ; RCREG1=0x1C
-    dcfsnz  WREG
-    bra     comm_write_sp4                   ; RCREG1=0x1D
-    dcfsnz  WREG
-    bra     comm_write_sp5                   ; RCREG1=0x1E
-    dcfsnz  WREG
-    movff   RCREG1, opt_ccr_mode             ; RCREG1=0x1F
-    dcfsnz  WREG
-    movff   RCREG1, opt_dive_mode            ; RCREG1=0x20
-    dcfsnz  WREG
-    movff   RCREG1, char_I_deco_model       ; RCREG1=0x21
-    dcfsnz  WREG
-    movff   RCREG1, char_I_ppO2_max         ; RCREG1=0x22	MODIFIED ## V2.94
-    dcfsnz  WREG
-    movff   RCREG1, char_I_ppO2_min         ; RCREG1=0x23	MODIFIED ## V2.94
-    dcfsnz  WREG
-    movff   RCREG1, char_I_extra_time       ; RCREG1=0x24
-    dcfsnz  WREG
-    movff   RCREG1, opt_GF_low              ; RCREG1=0x25
-    dcfsnz  WREG
-    movff   RCREG1, opt_GF_high             ; RCREG1=0x26
-    dcfsnz  WREG
-    movff   RCREG1, opt_aGF_low             ; RCREG1=0x27
-    dcfsnz  WREG
-    movff   RCREG1, opt_aGF_high            ; RCREG1=0x28
-    dcfsnz  WREG
-    movff   RCREG1, opt_enable_aGF          ; RCREG1=0x29
-    dcfsnz  WREG
-    movff   RCREG1, opt_sat_multiplier_non_gf; RCREG1=0x2A
-    dcfsnz  WREG
-    movff   RCREG1, opt_desat_multiplier_non_gf; RCREG1=0x2B
-    dcfsnz  WREG
-    movff   RCREG1, opt_last_stop           ; RCREG1=0x2C
-    dcfsnz  WREG
-    movff   RCREG1, opt_brightness          ; RCREG1=0x2D
-    dcfsnz  WREG
-    movff   RCREG1, opt_units               ; RCREG1=0x2E
-    dcfsnz  WREG
-    movff   RCREG1, opt_sampling_rate       ; RCREG1=0x2F
-    dcfsnz  WREG
-    movff   RCREG1, opt_salinity            ; RCREG1=0x30
-    dcfsnz  WREG
-    movff   RCREG1, opt_dive_color_scheme   ; RCREG1=0x31
-    dcfsnz  WREG
-    movff   RCREG1, opt_language			; RCREG1=0x32
-    dcfsnz  WREG
-    movff   RCREG1, opt_dateformat          ; RCREG1=0x33
-    dcfsnz  WREG
-    movff   RCREG1, opt_compass_gain        ; RCREG1=0x34
-    dcfsnz  WREG
-    movff   RCREG1, opt_pressure_adjust     ; RCREG1=0x35
-    dcfsnz  WREG
-    movff   RCREG1, opt_enable_safetystop   ; RCREG1=0x36
-    dcfsnz  WREG
-    movff   RCREG1, opt_calibration_O2_ratio; RCREG1=0x37
-    dcfsnz  WREG
-    nop									    ; RCREG1=0x38    NOT USED ANYMORE (opt_sensor_fallback)	## voting logic	
-    dcfsnz  WREG
-    movff   RCREG1, opt_flip_screen         ; RCREG1=0x39
-    dcfsnz  WREG
-    movff   RCREG1, opt_cR_button_left      ; RCREG1=0x3A
-    dcfsnz  WREG
-    movff   RCREG1, opt_cR_button_right     ; RCREG1=0x3B
-    dcfsnz  WREG
-    movff   RCREG1, char_I_bottom_usage     ; RCREG1=0x3C
-    dcfsnz  WREG
-    movff   RCREG1, char_I_deco_usage       ; RCREG1=0x3D
-    dcfsnz  WREG
-    movff   RCREG1, opt_modwarning          ; RCREG1=0x3E
-    dcfsnz  WREG
-    movff   RCREG1, opt_vsitextv2           ; RCREG1=0x3F
-    dcfsnz  WREG
-    movff   RCREG1, opt_vsigraph            ; RCREG1=0x40
-    dcfsnz  WREG
-    movff   RCREG1, opt_showppo2            ; RCREG1=0x41
-    dcfsnz  WREG
-    movff   RCREG1, opt_temperature_adjust  ; RCREG1=0x42
-    dcfsnz  WREG
-    movff   RCREG1, opt_safety_stop_length  ; RCREG1=0x43
-    dcfsnz  WREG
-    movff   RCREG1, opt_safety_stop_start   ; RCREG1=0x44
-    dcfsnz  WREG
-    movff   RCREG1, opt_safety_stop_end     ; RCREG1=0x45
-    dcfsnz  WREG
-    movff   RCREG1, opt_safety_stop_reset   ; RCREG1=0x46
-    dcfsnz  WREG
-    nop					    				; RCREG1=0x47, ignore conservatism for standard hwOS
-    dcfsnz  WREG
-    movff   RCREG1, opt_diveTimeout	    	; RCREG1=0x48
-    dcfsnz  WREG
-    bra	    comm_write_button_polarity	    ; RCREG1=0x49
-    dcfsnz  WREG
-    movff   RCREG1, char_I_PSCR_drop	    ; RCREG1=0x4A
-    dcfsnz  WREG
-    movff   RCREG1, char_I_PSCR_lungratio	; RCREG1=0x4B
-    dcfsnz  WREG
-    movff   RCREG1, char_I_ppO2_max_deco    ; RCREG1=0x4C	MODIFIED V2.94
+	rcall	comm_write_get_byte				; "Byte 2"
+	btfsc	rs232_receive_overflow			; Got byte?
+	bra		comm_write_abort				; No, abort!
+	movff	RCREG1,lo						; Copy
+	rcall	comm_write_get_byte				; "Byte 3"
+	rcall	comm_read_setting_wait			; Wait for UART
+	movlw	0x0F
+	cpfsgt	lo								; 0x00-0x0F: unused
+	bra		comm_write_abort				; abort!
+	subwf	lo,W							; Subtract unused commands
+	dcfsnz	WREG
+	bra		comm_write_gas1					; RCREG1=0x10
+	dcfsnz	WREG
+	bra		comm_write_gas2					; RCREG1=0x11
+	dcfsnz	WREG
+	bra		comm_write_gas3					; RCREG1=0x12
+	dcfsnz	WREG
+	bra		comm_write_gas4					; RCREG1=0x13
+	dcfsnz	WREG
+	bra		comm_write_gas5					; RCREG1=0x14
+	dcfsnz	WREG
+	bra		comm_write_dil1					; RCREG1=0x15
+	dcfsnz	WREG
+	bra		comm_write_dil2					; RCREG1=0x16
+	dcfsnz	WREG
+	bra		comm_write_dil3					; RCREG1=0x17
+	dcfsnz	WREG
+	bra		comm_write_dil4					; RCREG1=0x18
+	dcfsnz	WREG
+	bra		comm_write_dil5					; RCREG1=0x19
+	dcfsnz	WREG
+	bra		comm_write_sp1					; RCREG1=0x1A
+	dcfsnz	WREG
+	bra		comm_write_sp2					; RCREG1=0x1B
+	dcfsnz	WREG
+	bra		comm_write_sp3					; RCREG1=0x1C
+	dcfsnz	WREG
+	bra		comm_write_sp4					; RCREG1=0x1D
+	dcfsnz	WREG
+	bra		comm_write_sp5					; RCREG1=0x1E
+	dcfsnz	WREG
+	movff	RCREG1, opt_ccr_mode			; RCREG1=0x1F
+	dcfsnz	WREG
+	movff	RCREG1, opt_dive_mode			; RCREG1=0x20
+	dcfsnz	WREG
+	movff	RCREG1, char_I_deco_model		; RCREG1=0x21
+	dcfsnz	WREG
+	movff	RCREG1, char_I_ppO2_max			; RCREG1=0x22
+	dcfsnz	WREG
+	movff	RCREG1, char_I_ppO2_min			; RCREG1=0x23
+	dcfsnz	WREG
+	movff	RCREG1, char_I_extra_time		; RCREG1=0x24
+	dcfsnz	WREG
+	movff	RCREG1, opt_GF_low				; RCREG1=0x25
+	dcfsnz	WREG
+	movff	RCREG1, opt_GF_high				; RCREG1=0x26
+	dcfsnz	WREG
+	movff	RCREG1, opt_aGF_low				; RCREG1=0x27
+	dcfsnz	WREG
+	movff	RCREG1, opt_aGF_high			; RCREG1=0x28
+	dcfsnz	WREG
+	movff	RCREG1, opt_enable_aGF			; RCREG1=0x29
+	dcfsnz	WREG
+	movff	RCREG1, opt_sat_multiplier_non_gf	; RCREG1=0x2A
+	dcfsnz	WREG
+	movff	RCREG1, opt_desat_multiplier_non_gf	; RCREG1=0x2B
+	dcfsnz	WREG
+	movff	RCREG1, opt_last_stop			; RCREG1=0x2C
+	dcfsnz	WREG
+	movff	RCREG1, opt_brightness			; RCREG1=0x2D
+	dcfsnz	WREG
+	movff	RCREG1, opt_units				; RCREG1=0x2E
+	dcfsnz	WREG
+	movff	RCREG1, opt_sampling_rate		; RCREG1=0x2F
+	dcfsnz	WREG
+	movff	RCREG1, opt_salinity			; RCREG1=0x30
+	dcfsnz	WREG
+	movff	RCREG1, opt_dive_color_scheme	; RCREG1=0x31
+	dcfsnz	WREG
+	movff	RCREG1, opt_language			; RCREG1=0x32
+	dcfsnz	WREG
+	movff	RCREG1, opt_dateformat			; RCREG1=0x33
+	dcfsnz	WREG
+	movff	RCREG1, opt_compass_gain		; RCREG1=0x34
+	dcfsnz	WREG
+	movff	RCREG1, opt_pressure_adjust		; RCREG1=0x35
+	dcfsnz	WREG
+	movff	RCREG1, opt_enable_safetystop	; RCREG1=0x36
+	dcfsnz	WREG
+	movff	RCREG1, opt_calibration_O2_ratio; RCREG1=0x37
+	dcfsnz	WREG
+	nop										; RCREG1=0x38	NOT USED ANYMORE (ex opt_sensor_fallback)
+	dcfsnz	WREG
+	movff	RCREG1, opt_flip_screen			; RCREG1=0x39
+	dcfsnz	WREG
+	movff	RCREG1, opt_cR_button_left		; RCREG1=0x3A
+	dcfsnz	WREG
+	movff	RCREG1, opt_cR_button_right		; RCREG1=0x3B
+	dcfsnz	WREG
+	movff	RCREG1, char_I_bottom_usage		; RCREG1=0x3C
+	dcfsnz	WREG
+	movff	RCREG1, char_I_deco_usage		; RCREG1=0x3D
+	dcfsnz	WREG
+	movff	RCREG1, opt_modwarning			; RCREG1=0x3E
+	dcfsnz	WREG
+	movff	RCREG1, opt_vsitextv2			; RCREG1=0x3F
+	dcfsnz	WREG
+	movff	RCREG1, opt_vsigraph			; RCREG1=0x40
+	dcfsnz	WREG
+	movff	RCREG1, opt_showppo2			; RCREG1=0x41
+	dcfsnz	WREG
+	movff	RCREG1, opt_temperature_adjust	; RCREG1=0x42
+	dcfsnz	WREG
+	movff	RCREG1, opt_safety_stop_length	; RCREG1=0x43
+	dcfsnz	WREG
+	movff	RCREG1, opt_safety_stop_start	; RCREG1=0x44
+	dcfsnz	WREG
+	movff	RCREG1, opt_safety_stop_end		; RCREG1=0x45
+	dcfsnz	WREG
+	movff	RCREG1, opt_safety_stop_reset	; RCREG1=0x46
+	dcfsnz	WREG
+	nop										; RCREG1=0x47, ignore conservatism for standard hwOS
+	dcfsnz	WREG
+	movff	RCREG1, opt_diveTimeout			; RCREG1=0x48
+	dcfsnz	WREG
+	bra		comm_write_button_polarity		; RCREG1=0x49
+	dcfsnz	WREG
+	movff	RCREG1, char_I_PSCR_drop		; RCREG1=0x4A
+	dcfsnz	WREG
+	movff	RCREG1, char_I_PSCR_lungratio	; RCREG1=0x4B
+	dcfsnz	WREG
+	movff	RCREG1, char_I_ppO2_max_deco	; RCREG1=0x4C
+	dcfsnz	WREG
+	movff	RCREG1, char_I_ppO2_min_loop	; RCREG1=0x4D
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_size+0		; RCREG1=0x4E
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_size+1		; RCREG1=0x4F
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_size+2		; RCREG1=0x50
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_size+3		; RCREG1=0x51
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_size+4		; RCREG1=0x52
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_pres_fill+0	; RCREG1=0x53
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_pres_fill+1	; RCREG1=0x54
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_pres_fill+2	; RCREG1=0x55
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_pres_fill+3	; RCREG1=0x56
+	dcfsnz	WREG
+	movff	RCREG1, char_I_tank_pres_fill+4	; RCREG1=0x57
+	dcfsnz	WREG
+	movff	RCREG1, char_I_cc_max_frac_o2	; RCREG1=0x58
+	dcfsnz	WREG
+	movff	RCREG1, opt_sim_setpoint_number	; RCREG1=0x59
+	dcfsnz	WREG
+	movff	RCREG1, opt_calc_asc_gasvolume	; RCREG1=0x5A
+	dcfsnz	WREG
+	movff	RCREG1, opt_sim_use_aGF			; RCREG1=0x5B
+	dcfsnz	WREG
+	movff	RCREG1, char_I_altitude_wait	; RCREG1=0x5C
+	dcfsnz	WREG
+	movff	RCREG1, opt_enable_IBCD			; RCREG1=0x5D
+	dcfsnz	WREG
+	movff	RCREG1, opt_sat_multiplier_gf	; RCREG1=0x5E
+	dcfsnz	WREG
+	movff	RCREG1, opt_desat_multiplier_gf	; RCREG1=0x5F
 
-	; NEW
-    dcfsnz  WREG
-    movff   RCREG1, char_I_ppO2_min_loop	; RCREG1=0x4D	## CCR/pSCR min ppO2 limiter	MODIFIED ## V2.94
-    dcfsnz  WREG
-    movff   RCREG1, char_I_tank_size+0		; RCREG1=0x4E	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_size+1		; RCREG1=0x4F	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_size+2		; RCREG1=0x50	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_size+3		; RCREG1=0x51	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_size+4		; RCREG1=0x52	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_pres_fill+0	; RCREG1=0x53	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_pres_fill+1	; RCREG1=0x54	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_pres_fill+2	; RCREG1=0x55	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_pres_fill+3	; RCREG1=0x56	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_tank_pres_fill+4	; RCREG1=0x57	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, char_I_cc_max_frac_o2	; RCREG1=0x58	## CCR max ppO2 limiter
-	dcfsnz  WREG
-    movff   RCREG1, opt_sim_setpoint_number	; RCREG1=0x59	## deco calculator enhancement
-	dcfsnz  WREG
-    movff   RCREG1, opt_calc_asc_gasvolume	; RCREG1=0x5A	## bailout gas needs
-	dcfsnz  WREG
-    movff   RCREG1, opt_sim_use_aGF		; RCREG1=0x5B	## deco calculator enhancement
-	dcfsnz  WREG
-    movff   RCREG1, char_I_altitude_wait	; RCREG1=0x5C	## no fly altitude
-	dcfsnz  WREG
-    movff   RCREG1, opt_enable_IBCD		; RCREG1=0x5D	## TBCD
-        dcfsnz  WREG
-    movff   RCREG1, opt_sat_multiplier_gf	; RCREG1=0x5E
-	dcfsnz  WREG
-    movff   RCREG1, opt_desat_multiplier_gf	; RCREG1=0x5F
 
-	
-	
 comm_write_abort:
-    ; Check Options, gases and diluents
-    call    option_check_all                ; Check all options (and reset if not within their min/max boundaries)
-    bsf     ccr_diluent_setup               ; =1: Setting up Diluents ("Gas6-10")
-    call    gaslist_cleanup_list            ; Takes care that only one gas can be first and first has 0m change depth
-    bcf     ccr_diluent_setup               ; =1: Setting up Diluents ("Gas6-10")
-    call    gaslist_cleanup_list            ; Takes care that only one gas can be first and first has 0m change depth
-    call    get_first_gas_to_WREG           ; Makes sure at least one Gas is "First"
-    call    get_first_dil_to_WREG           ; Makes sure at least one Diluent is "First"
-    goto    comm_download_mode0             ; Done. Loop with timeout reset
+	; Check Options, gases and diluents
+	call	option_check_all				; Check all options (and reset if not within their min/max boundaries)
+	bsf		ccr_diluent_setup				; =1: Setting up Diluents ("Gas6-10")
+	call	gaslist_cleanup_list			; Takes care that only one gas can be first and first has 0m change depth
+	bcf		ccr_diluent_setup				; =1: Setting up Diluents ("Gas6-10")
+	call	gaslist_cleanup_list			; Takes care that only one gas can be first and first has 0m change depth
+	call	get_first_gas_to_WREG			; Makes sure at least one Gas is "First"
+	call	get_first_dil_to_WREG			; Makes sure at least one Diluent is "First"
+	goto	comm_download_mode0				; Done. Loop with timeout reset
 
 comm_write_dil1:
-    movff   RCREG1,opt_dil_O2_ratio+0
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_He_ratio+0
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_type+0
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_dil_change+0
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,opt_dil_O2_ratio+0
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_He_ratio+0
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_type+0
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_dil_change+0
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_dil2:
-    movff   RCREG1,opt_dil_O2_ratio+1
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_He_ratio+1
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_type+1
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_dil_change+1
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,opt_dil_O2_ratio+1
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_He_ratio+1
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_type+1
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_dil_change+1
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_dil3:
-    movff   RCREG1,opt_dil_O2_ratio+2
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_He_ratio+2
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_type+2
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_dil_change+2
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,opt_dil_O2_ratio+2
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_He_ratio+2
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_type+2
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_dil_change+2
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_dil4:
-    movff   RCREG1,opt_dil_O2_ratio+3
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_He_ratio+3
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_type+3
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_dil_change+3
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,opt_dil_O2_ratio+3
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_He_ratio+3
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_type+3
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_dil_change+3
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_dil5:
-    movff   RCREG1,opt_dil_O2_ratio+4
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_He_ratio+4
-    rcall	comm_write_get_byte
-    movff   RCREG1,opt_dil_type+4
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_dil_change+4
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,opt_dil_O2_ratio+4
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_He_ratio+4
+	rcall	comm_write_get_byte
+	movff	RCREG1,opt_dil_type+4
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_dil_change+4
+	bra		comm_write_abort				; Done. Loop with timeout reset
 
 comm_write_sp1:
-    movff   RCREG1,char_I_setpoint_cbar+0
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_setpoint_change+0
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,char_I_setpoint_cbar+0
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_setpoint_change+0
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_sp2:
-    movff   RCREG1,char_I_setpoint_cbar+1
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_setpoint_change+1
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,char_I_setpoint_cbar+1
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_setpoint_change+1
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_sp3:
-    movff   RCREG1,char_I_setpoint_cbar+2
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_setpoint_change+2
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,char_I_setpoint_cbar+2
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_setpoint_change+2
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_sp4:
-    movff   RCREG1,char_I_setpoint_cbar+3
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_setpoint_change+3
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,char_I_setpoint_cbar+3
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_setpoint_change+3
+	bra		comm_write_abort				; Done. Loop with timeout reset
 comm_write_sp5:
-    movff   RCREG1,char_I_setpoint_cbar+4
-    rcall	comm_write_get_byte
-    movff   RCREG1,char_I_setpoint_change+4
-    bra		comm_write_abort             	; Done. Loop with timeout reset
+	movff	RCREG1,char_I_setpoint_cbar+4
+	rcall	comm_write_get_byte
+	movff	RCREG1,char_I_setpoint_change+4
+	bra		comm_write_abort				; Done. Loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
@@ -1553,25 +1523,25 @@
 	movlw	"n"								; send echo
 	movwf	TXREG1
 	rcall	comm_rs232_wait_tx				; Wait for UART
-	WIN_SMALL	comm_string_column, comm_string_row
+	WIN_SMALL comm_string_column, comm_string_row
 	movlw	.16
 	movwf	lo								; counter
 comm_send_string_loop:
 	call	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_send_string_abort          ; No, abort!
+	btfsc	rs232_receive_overflow			; Got byte?
+	bra		comm_send_string_abort			; No, abort!
 	movff	RCREG1,POSTINC2					; Store character
 	decfsz	lo,F
 	bra		comm_send_string_loop
 comm_send_string_abort:
 	STRCAT_PRINT ""							; Show the text
-    goto    comm_download_mode0             ; Done. Loop with timeout reset
+	goto	comm_download_mode0				; Done. Loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
 comm_check_day:
-	movff	RCREG1, day
-	movff	month,lo		; new month
+	movff	RCREG1,day
+	movff	month,lo						; new month
 	dcfsnz	lo,F
 	movlw	.31
 	dcfsnz	lo,F
@@ -1596,23 +1566,23 @@
 	movlw	.30
 	dcfsnz	lo,F
 	movlw	.31
-	cpfsgt	day				; day ok?
-	return					; OK
-	movlw	.1				; not OK, set to 1st
+	cpfsgt	day								; day ok?
+	return									; OK
+	movlw	.1								; not OK, set to 1st
 	movwf	day
-	return	
+	return
 
 comm_write_button_polarity:
 	; Store RCREG1 into EEPROM .897
-	movlw	LOW	.897
+	movlw	LOW  .897
 	movwf	EEADR
-	movlw	HIGH	.897
+	movlw	HIGH .897
 	movwf	EEADRH
 	movff	RCREG1,EEDATA
-	movff	EEDATA,button_polarity	    ; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
-	call    write_eeprom                ; EEDATA into EEPROM@EEADR
-	clrf	EEADRH			    		; Reset EEADRH
-	goto	comm_download_mode0         ; Done. Loop with timeout reset
-	
+	movff	EEDATA,button_polarity			; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
+	call	write_eeprom					; EEDATA into EEPROM@EEADR
+	clrf	EEADRH							; Reset EEADRH
+	goto	comm_download_mode0				; Done. Loop with timeout reset
+
 ;----------------------------------------------------------------------------
-        END
\ No newline at end of file
+	END
\ No newline at end of file
--- a/src/compass_ops.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/compass_ops.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,105 +1,123 @@
-#include    "hwos.inc"
-#include    "i2c.inc"
-#include    "tft_outputs.inc"
-#include    "isr.inc"
+;=============================================================================
+;
+;   File compass_ops.asm												V2.98
+;
+;   Compass Operations
+;
+;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
+;=============================================================================
+
+#include	"hwos.inc"
+#include	"i2c.inc"
+#include	"tft_outputs.inc"
+#include	"isr.inc"
 #include	"tft.inc"
 #include	"strings.inc"
-#include 	"wait.inc"                  ; speed_*
-#include    "surfmode.inc"
-#include    "divemode.inc"
-#include    "math.inc"
-#include     "convert.inc"
+#include	"wait.inc"					; speed_*
+#include	"surfmode.inc"
+#include	"divemode.inc"
+#include	"math.inc"
+#include	"convert.inc"
 
 
 ; Make sure symbols from the .inc are available to the C code:
-    ; Filtered data
-    global compass_DX_f, compass_DY_f, compass_DZ_f
-    global accel_DX_f,   accel_DY_f,   accel_DZ_f
+	; Filtered data
+	global	compass_DX_f
+	global	compass_DY_f
+	global	compass_DZ_f
 
-    ; Calibration data
-    global compass_CX_f
-    global compass_CY_f
-    global compass_CZ_f
+	global	accel_DX_f
+	global	accel_DY_f
+	global	accel_DZ_f
+
+	; Calibration data
+	global	compass_CX_f
+	global	compass_CY_f
+	global	compass_CZ_f
 
-    ; Tmp values to pass Q15 arithmetics around
-    global compass_a
-    global compass_b
+	; Tmp values to pass Q15 arithmetics around
+	global	compass_a
+	global	compass_b
 
-    ; Result
-    global compass_heading; , compass_roll, compass_pitch
+	; Result
+	global compass_heading
+;	global compass_roll
+;	global compass_pitch
 
-    extern  compass
-    extern  compass_reset_calibration
-    extern  compass_add_calibration
-    extern  compass_solve_calibration
 
-    extern  menu_processor_bottom_line
+	extern	compass
+	extern	compass_reset_calibration
+	extern	compass_add_calibration
+	extern	compass_solve_calibration
+	extern	menu_processor_bottom_line
+	extern	option_save_all
+	extern	compass
+
 
 compass_ops code
+
+;=============================================================================
+
 ;-----------------------------------------------------------------------------
 ; Filter compass values
 ;
 ; Apply linear filtering to input parameters.
 
-; Apply filtering formula:
-;   reg_f += (reg - reg_f) / 4
-FILTER16 MACRO   reg, reg_f
-        movf    reg_f+0,W
-        subwf   reg+0,W
-        movwf   PRODL
-        movf    reg_f+1,W
-        subwfb  reg+1,W
-        rcall   filter_16_common
-        addwf   reg_f+0,F
-        movf    PRODH,W
-        addwfc  reg_f+1,F
-        ENDM
+; Apply filtering formula: reg_f += (reg - reg_f) / 4
+FILTER16	MACRO	reg, reg_f
+	movf	reg_f+0,W
+	subwf	reg+0,W
+	movwf	PRODL
+	movf	reg_f+1,W
+	subwfb	reg+1,W
+	rcall	filter_16_common
+	addwf	reg_f+0,F
+	movf	PRODH,W
+	addwfc	reg_f+1,F
+	ENDM
 
 filter_16_common:
-        movwf   PRODH
-
-        bcf     STATUS,C        ; Copy sign bit into carry
-        btfsc   PRODH,7
-        bsf     STATUS,C
-        rrcf    PRODH,F         ; 16bit shift right
-        rrcf    PRODL,F
+	movwf	PRODH
+	bcf		STATUS,C					; Copy sign bit into carry
+	btfsc	PRODH,7
+	bsf		STATUS,C
+	rrcf	PRODH,F						; 16bit shift right
+	rrcf	PRODL,F
+	bcf		STATUS,C					; Copy sign bit into carry
+	btfsc	PRODH,7
+	bsf		STATUS,C
+	rrcf	PRODH,F						; 16bit shift right
+	rrcf	PRODL,W
+	return
 
-        bcf     STATUS,C        ; Copy sign bit into carry
-        btfsc   PRODH,7
-        bsf     STATUS,C
-        rrcf    PRODH,F         ; 16bit shift right
-        rrcf    PRODL,W
-        return
-
-        global  compass_filter
+	global	compass_filter
 compass_filter:
-        banksel   compass_DX
-
-        FILTER16  compass_DX, compass_DX_f
-        FILTER16  compass_DY, compass_DY_f
-        FILTER16  compass_DZ, compass_DZ_f
-        FILTER16  accel_DX,   accel_DX_f
-        FILTER16  accel_DY,   accel_DY_f
-        FILTER16  accel_DZ,   accel_DZ_f
-        banksel   common
-        return
+	banksel	compass_DX
+	FILTER16 compass_DX, compass_DX_f
+	FILTER16 compass_DY, compass_DY_f
+	FILTER16 compass_DZ, compass_DZ_f
+	FILTER16 accel_DX,   accel_DX_f
+	FILTER16 accel_DY,   accel_DY_f
+	FILTER16 accel_DZ,   accel_DZ_f
+	banksel	common
+	return
 
 ;-----------------------------------------------------------------------------
 
 compass_filter_init:
-        movff   compass_DX+0, compass_DX_f+0
-        movff   compass_DX+1, compass_DX_f+1
-        movff   compass_DY+0, compass_DY_f+0
-        movff   compass_DY+1, compass_DY_f+1
-        movff   compass_DZ+0, compass_DZ_f+0
-        movff   compass_DZ+1, compass_DZ_f+1
-        movff   accel_DX+0,   accel_DX_f+0
-        movff   accel_DX+1,   accel_DX_f+1
-        movff   accel_DY+0,   accel_DY_f+0
-        movff   accel_DY+1,   accel_DY_f+1
-        movff   accel_DZ+0,   accel_DZ_f+0
-        movff   accel_DZ+1,   accel_DZ_f+1
-        return
+	movff	compass_DX+0, compass_DX_f+0
+	movff	compass_DX+1, compass_DX_f+1
+	movff	compass_DY+0, compass_DY_f+0
+	movff	compass_DY+1, compass_DY_f+1
+	movff	compass_DZ+0, compass_DZ_f+0
+	movff	compass_DZ+1, compass_DZ_f+1
+	movff	accel_DX+0,   accel_DX_f+0
+	movff	accel_DX+1,   accel_DX_f+1
+	movff	accel_DY+0,   accel_DY_f+0
+	movff	accel_DY+1,   accel_DY_f+1
+	movff	accel_DZ+0,   accel_DZ_f+0
+	movff	accel_DZ+1,   accel_DZ_f+1
+	return
 
 ;-----------------------------------------------------------------------------
 ; Q15 fractional numbers: a * b / 2**16 (UNSIGNED)
@@ -112,1345 +130,1333 @@
 ;
 ; (a/2**15) * (b/2**15) = a*b / 2**30 = (a*b/2**16) / 2**14.
 ; So to get back a Q15 number, we need a shift-left...
-    global compass_umul
+	global	compass_umul
 compass_umul:
-        rcall   compass_mul_16
+	rcall	compass_mul_16
 
 ; The 2x time, by left-shifting inserting the missing bit:
 compass_mul_2:
-        rlcf    compass_r+2,F           ; Missing bit into carry
-        rlcf    compass_r+0,F
-        rlcf    compass_r+1,F
-        movff   compass_r+0,PRODL      ; return value into ProdH:L
-        movff   compass_r+1,PRODH
-        return
+	rlcf	compass_r+2,F				; Missing bit into carry
+	rlcf	compass_r+0,F
+	rlcf	compass_r+1,F
+	movff	compass_r+0,PRODL			; return value into ProdH:L
+	movff	compass_r+1,PRODH
+	return
 
 ; The 16x16-> multiply:
 compass_mul_16:
-        banksel compass_a
+	banksel compass_a
 
-        movf    compass_a+1,W           ; Block ah*bh
-        mulwf   compass_b+1
-        movff   PRODL,compass_r+0       ; and copy
-        movff   PRODH,compass_r+1
+	movf	compass_a+1,W				; Block ah*bh
+	mulwf	compass_b+1
+	movff	PRODL,compass_r+0			; and copy
+	movff	PRODH,compass_r+1
 
-        movf    compass_a+0,W           ; Block al*bl
-        mulwf   compass_b+0
-        movff   PRODH,compass_r+2       ; Into fraction byte
+	movf	compass_a+0,W				; Block al*bl
+	mulwf   compass_b+0
+	movff   PRODH,compass_r+2			; Into fraction byte
 
-        movf    compass_a+1,W           ; Block ah*bl
-        mulwf   compass_b+0
-        movf    PRODL,W
-        addwf   compass_r+2,F           ; Fraction part to carry.
-        movf    PRODH,W                 ; and add16
-        addwfc  compass_r+0,F
-        movlw   0
-        addwfc  compass_r+1,F
+	movf	compass_a+1,W				; Block ah*bl
+	mulwf	compass_b+0
+	movf	PRODL,W
+	addwf	compass_r+2,F				; Fraction part to carry.
+	movf	PRODH,W						; and add16
+	addwfc	compass_r+0,F
+	movlw	0
+	addwfc  compass_r+1,F
 
-        movf    compass_a+0,W           ; Block al*bh
-        mulwf   compass_b+1
-        movf    PRODL,W
-        addwf   compass_r+2,F           ; Fraction part to carry.
-        movf    PRODH,W                 ; and add16
-        addwfc  compass_r+0,F
-        movlw   0
-        addwfc  compass_r+1,F
+	movf	compass_a+0,W				; Block al*bh
+	mulwf	compass_b+1
+	movf	PRODL,W
+	addwf	compass_r+2,F				; Fraction part to carry.
+	movf	PRODH,W						; and add16
+	addwfc	compass_r+0,F
+	movlw	0
+	addwfc	compass_r+1,F
 
-        return
+	return
 
 ;-----------------------------------------------------------------------------
 ; Q15 fractional numbers: a * b / 2**16 (SIGNED)
 
-        global compass_imul
+	global	compass_imul
 compass_imul:
-        rcall   compass_mul_16
+	rcall	compass_mul_16
 
-        btfss   compass_b+1,7
-        bra     compass_mul_3
+	btfss	compass_b+1,7
+	bra		compass_mul_3
 
-        movf    compass_a+0,W
-        subwf   compass_r+0,F
-        movf    compass_a+1,W
-        subwfb  compass_r+1,F
+	movf	compass_a+0,W
+	subwf	compass_r+0,F
+	movf	compass_a+1,W
+	subwfb	compass_r+1,F
 
 compass_mul_3:
-        btfss   compass_a+1,7
-        bra     compass_mul_4
+	btfss	compass_a+1,7
+	bra		compass_mul_4
 
-        movf    compass_b+0,W
-        subwf   compass_r+0,F
-        movf    compass_b+1,W
-        subwfb  compass_r+1,F
+	movf	compass_b+0,W
+	subwf	compass_r+0,F
+	movf	compass_b+1,W
+	subwfb  compass_r+1,F
 
 compass_mul_4:
-        bcf     compass_r+1,6           ; Copy bit 7 to 6, so keep it after 2x
-        btfsc   compass_r+1,7
-        bsf     compass_r+1,6
-        bra     compass_mul_2
+	bcf		compass_r+1,6				; Copy bit 7 to 6, so keep it after 2x
+	btfsc	compass_r+1,7
+	bsf		compass_r+1,6
+	bra		compass_mul_2
 
-    global  compass_calibration_loop
-compass_calibration_loop:               ; Compass calibration
-    bsf     no_sensor_int               ; No Sensor ISR
-    call    I2C_sleep_accelerometer     ; Stop accelerometer
-    call    I2C_sleep_compass           ; Stop compass
-    call	TFT_ClearScreen
-    ; Mask
-    WIN_COLOR   color_greenish
-	WIN_SMALL	.16,.0
-	STRCPY_TEXT_PRINT	tCompassMenu
-    btfss		switch_right2           ; wait until button is released
-    bra         $-4
+	global	compass_calibration_loop
+compass_calibration_loop:				; Compass calibration
+	bsf		no_sensor_int				; No Sensor ISR
+	call	I2C_sleep_accelerometer		; Stop accelerometer
+	call	I2C_sleep_compass			; Stop compass
+	call	TFT_ClearScreen
+	; Mask
+	WIN_COLOR color_greenish
+	WIN_SMALL .16,.0
+	STRCPY_TEXT_PRINT tCompassMenu
+	btfss	switch_right2				; wait until button is released
+	bra		$-4
 
-    call	TFT_standard_color
-;	WIN_SMALL	.0,.215
-;    STRCPY_TEXT_PRINT  tExit
-    WAITMS  d'255'
-    WAITMS  d'255'
-    
-    movlw   .7                          ; Gain init
-    movff   WREG,opt_compass_gain
-compass_calibration_gainset:            ; Reduce the gain, set bank here!
-    banksel opt_compass_gain
-    decf    opt_compass_gain,F          ; Reduce by one
-    btfsc   STATUS,N                    ; <0?
-    clrf    opt_compass_gain            ; Yes, keep at zero
+	call	TFT_standard_color
+;	WIN_SMALL .0,.215
+;	STRCPY_TEXT_PRINT tExit
+	WAITMS	d'255'
+	WAITMS	d'255'
 
-    banksel common
-    call    I2C_init_accelerometer
-    call    I2C_init_compass
-    
-;    btfsc   compass_type	    ; compass1?
-;    bra	    compass_calibration_loop1	; Yes, skip gain stuff
+	movlw	.7							; Gain init
+	movff	WREG,opt_compass_gain
+compass_calibration_gainset:			; Reduce the gain, set bank here!
+	banksel	opt_compass_gain
+	decf	opt_compass_gain,F			; Reduce by one
+	btfsc	STATUS,N					; <0?
+	clrf	opt_compass_gain			; Yes, keep at zero
 
-    rcall   TFT_compass_show_gain       ; Show the current compass gain
+	banksel	common
+	call	I2C_init_accelerometer
+	call	I2C_init_compass
+
+;	btfsc	compass_type				; compass1?
+;	bra	compass_calibration_loop1		; Yes, skip gain stuff
+
+	rcall	TFT_compass_show_gain		; show the current compass gain
 
-    WAITMS  d'250'
-    WAITMS  d'250'		; Wait for first reading...
+	WAITMS	d'250'
+	WAITMS	d'250'						; wait for first reading...
 
- 	clrf	timeout_counter2
-	clrf 	timeout_counter3
+	clrf	timeout_counter2
+;	clrf	timeout_counter3			; not used / required [rl]
 
-    call	speed_fastest
-    call    I2C_RX_compass              ; read compass
-    call    I2C_RX_accelerometer        ; read Accelerometer
+	call	speed_fastest
+	call	I2C_RX_compass				; read compass
+	call	I2C_RX_accelerometer		; read Accelerometer
 
-    ; Test all axes for +4096 (Hi byte=16)
-    banksel compass_DX+1
-    movlw   .16
-    cpfseq  compass_DX+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DY+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DZ+1
-    bra     $+4
-    bra     compass_calibration_gainset
+	; Test all axes for +4096 (Hi byte=16)
+	banksel	compass_DX+1
+	movlw	.16
+	cpfseq	compass_DX+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DY+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DZ+1
+	bra		$+4
+	bra		compass_calibration_gainset
 
-    ; Test all axes for -4096 (Hi byte=240)
-    movlw   .240
-    cpfseq  compass_DX+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DY+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DZ+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    banksel common
+	; Test all axes for -4096 (Hi byte=240)
+	movlw	.240
+	cpfseq	compass_DX+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DY+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DZ+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	banksel	common
 
-compass_calibration_loop1: ; Done with Gain
-    rcall   compass_filter_init         ; set DX_f values
-    call	compass_reset_calibration   ; Reset CX_f values
-    banksel common
+compass_calibration_loop1:				; Done with Gain
+	rcall	compass_filter_init			; set DX_f values
+	call	compass_reset_calibration	; Reset CX_f values
+	banksel	common
 
 compass_calibration_loop2:
-    call    I2C_RX_compass              ; read compass
-    call    I2C_RX_accelerometer        ; Test Accelerometer
-    rcall   compass_filter              ; Filter compass raw data
-    banksel common
+	call	I2C_RX_compass				; read compass
+	call	I2C_RX_accelerometer		; Test Accelerometer
+	rcall	compass_filter				; Filter compass raw data
+	banksel	common
 
-    ; Twice
-    call    I2C_RX_compass              ; read compass
-    call    I2C_RX_accelerometer        ; Test Accelerometer
-    rcall   compass_filter              ; Filter compass raw data
-    banksel common
-    
-;    btfsc   compass_type	    ; compass1?
-;    bra	    compass_calibration_loop3	; Yes, skip gain stuff
+	; Twice
+	call	I2C_RX_compass				; read compass
+	call	I2C_RX_accelerometer		; Test Accelerometer
+	rcall	compass_filter				; Filter compass raw data
+	banksel	common
+
+;	btfsc	compass_type				; compass1?
+;	bra		compass_calibration_loop3	; Yes, skip gain stuff
 
-    ; Test all axes for +4096 (Hi byte=16)
-    banksel compass_DX+1
-    movlw   .16
-    cpfseq  compass_DX+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DY+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DZ+1
-    bra     $+4
-    bra     compass_calibration_gainset
+	; Test all axes for +4096 (Hi byte=16)
+	banksel	compass_DX+1
+	movlw	.16
+	cpfseq	compass_DX+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DY+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DZ+1
+	bra		$+4
+	bra		compass_calibration_gainset
 
-    ; Test all axes for -4096 (Hi byte=240)
-    movlw   .240
-    cpfseq  compass_DX+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DY+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    cpfseq  compass_DZ+1
-    bra     $+4
-    bra     compass_calibration_gainset
-    banksel common
+	; Test all axes for -4096 (Hi byte=240)
+	movlw	.240
+	cpfseq	compass_DX+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DY+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	cpfseq	compass_DZ+1
+	bra		$+4
+	bra		compass_calibration_gainset
+	banksel	common
 ;
-;    ; Three
-;    call    I2C_RX_compass              ; read compass
-;    call    I2C_RX_accelerometer        ; Test Accelerometer
-;    call    compass_filter              ; Filter compass raw data
-;    banksel common
+;	; Three
+;	call	I2C_RX_compass				; read compass
+;	call	I2C_RX_accelerometer		; Test Accelerometer
+;	call	compass_filter				; Filter compass raw data
+;	banksel	common
 ;
-;    ; Four times to get cleaner values
-;    call    I2C_RX_compass              ; read compass
-;    call    I2C_RX_accelerometer        ; Test Accelerometer
-;    call    compass_filter              ; Filter compass raw data
+;	; Four times to get cleaner values
+;	call	I2C_RX_compass				; read compass
+;	call	I2C_RX_accelerometer		; Test Accelerometer
+;	call	compass_filter				; Filter compass raw data
 
 compass_calibration_loop3:
-    ; And register only one value out of four:
-    call    compass_add_calibration     ; check and store new max/min values
-    banksel common
+	; And register only one value out of four:
+	call	compass_add_calibration		; check and store new max/min values
+	banksel	common
 
-    rcall    TFT_compass_fast            ; show values
+	rcall	TFT_compass_fast			; show values
 
-    btfsc   sleepmode			; Sleepmode active?
-    bra     compass_calibration_exit    ; Yes, exit
+	btfsc	sleepmode					; Sleepmode active?
+	bra		compass_calibration_exit	; Yes, exit
 
 
-    btfss   onesecupdate		; do every second tasks?
-    bra     compass_calibration_loop2   ; no, loop here
+	btfss	onesecupdate				; do every second tasks?
+	bra		compass_calibration_loop2	; no, loop here
 
-    movlw   .60
-    call    timeout_testmode		; check timeout
-    movlw   .60
-    rcall   TFT_show_timeout_testmode   ; Show the timeout
-    
-    bcf     onesecupdate                ; clear flag
+	movlw	.60
+	call	timeout_testmode			; check timeout
+	movlw	.60
+	rcall	TFT_show_timeout_testmode	; Show the timeout
 
-    bra     compass_calibration_loop2   ; loop here
+	bcf		onesecupdate				; clear flag
+
+	bra		compass_calibration_loop2	; loop here
 
 compass_calibration_exit:
-    call    compass_solve_calibration
-    banksel common
-    ; Done.
-    extern  option_save_all
-    call	option_save_all             ; save all settings into EEPROM
-    bcf     sleepmode                   ; Clear the flag before exiting to surfacemode
-    movlw   .6
-    movwf   customview_surfmode         ; Set to compass view...
-   	goto	surfloop       				; ...and exit
+	call	compass_solve_calibration
+	banksel	common
+	; Done.
+	call	option_save_all				; save all settings into EEPROM
+	bcf		sleepmode					; Clear the flag before exiting to surface mode
+	movlw	.6
+	movff	WREG,customview_surfmode	; Set to compass view...
+	goto	surfloop					; ...and exit
 
-    global  TFT_compass_fast
+	global	TFT_compass_fast
 TFT_compass_fast:
 	WIN_TINY	.20,.50
-	STRCPY  "X:"
-    movff	compass_DX+0,lo
-    movff	compass_DX+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    output_16
-	STRCAT  " Y:"
-    movff	compass_DY+0,lo
-    movff	compass_DY+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    output_16
-	STRCAT  " Z:"
-    movff	compass_DZ+0,lo
-    movff	compass_DZ+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    output_16
+	STRCPY	"X:"
+	movff	compass_DX+0,lo
+	movff	compass_DX+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	output_16
+	STRCAT	" Y:"
+	movff	compass_DY+0,lo
+	movff	compass_DY+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	output_16
+	STRCAT	" Z:"
+	movff	compass_DZ+0,lo
+	movff	compass_DZ+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	output_16
 	STRCAT_PRINT "  "
-    return
+	return
 
-TFT_show_timeout_testmode:              ; With timeout in WREG...
-    movwf   hi
-    WIN_TINY	.20,.68
-    STRCPY  "T:"
-    movf    timeout_counter2,W          ; current timeout
-    subwf   hi,W                        ; subtract from timeout value
-    addlw   .1                          ; +1
-    movwf   lo
-    bsf     leftbind
-    output_8                            ; Display timeout
-    bcf     leftbind
-    STRCAT_PRINT "s "
-    return
-    
+TFT_show_timeout_testmode:				; With timeout in WREG...
+	movwf	hi
+	WIN_TINY .20,.68
+	STRCPY	"T:"
+	movf	timeout_counter2,W			; current timeout
+	subwf	hi,W						; subtract from timeout value
+	addlw	.1							; +1
+	movwf	lo
+	bsf		leftbind
+	output_8							; Display timeout
+	bcf		leftbind
+	STRCAT_PRINT "s "
+	return
 
-TFT_compass_show_gain:       ; Show the current compass gain
-;    movff   opt_compass_gain,lo    ; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
-;    tstfsz  lo
-;    return                         ; Do not show unless gain=0
-	WIN_TINY	.20,.86
-    STRCPY_TEXT  tCompassGain
-    movff   opt_compass_gain,lo    ; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
-    bsf     leftbind
-    output_8
-    bcf     leftbind
-    STRCAT_PRINT ""
-    return
+TFT_compass_show_gain:					; Show the current compass gain
+;	movff	opt_compass_gain,lo			; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
+;	tstfsz	lo
+;	return								; Do not show unless gain=0
+	WIN_TINY .20,.86
+	STRCPY_TEXT tCompassGain
+	movff	opt_compass_gain,lo			; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	STRCAT_PRINT ""
+	return
 
 TFT_surface_compass_bearing:
-    WIN_SMALL   surf_compass_bear_column,surf_compass_bear_row
-    movff   compass_bearing+0,lo
-    movff   compass_bearing+1,hi
-    PUTC    "("
-    bsf     leftbind
-    output_16dp .2      ; Result is "0.000"
-    bcf     leftbind
-    ; rearrange figures to "000"
-    movff   buffer+3,buffer+1
-    movff   buffer+4,buffer+2
-    movff   buffer+5,buffer+3
-    lfsr	FSR2,buffer+4
-    STRCAT  "° "
-    rcall   tft_compass_cardinal        ; Add cardinal and ordinal to POSTINC2
-    STRCAT_PRINT ")"
-    return
+	WIN_SMALL surf_compass_bear_column,surf_compass_bear_row
+	movff	compass_bearing+0,lo
+	movff	compass_bearing+1,hi
+	PUTC	"("
+	bsf	leftbind
+	output_16dp .2						; Result is "0.000"
+	bcf		leftbind
+	; rearrange figures to "000"
+	movff	buffer+3,buffer+1
+	movff	buffer+4,buffer+2
+	movff	buffer+5,buffer+3
+	lfsr	FSR2,buffer+4
+	STRCAT	"° "
+	rcall	tft_compass_cardinal		; Add cardinal and ordinal to POSTINC2
+	STRCAT_PRINT ")"
+	return
 
-    global  TFT_surface_compass_mask
+	global	TFT_surface_compass_mask
 TFT_surface_compass_mask:
-    WIN_SMALL   surf_compass_mask_column,surf_compass_mask_row
+	WIN_SMALL surf_compass_mask_column,surf_compass_mask_row
 	call	TFT_standard_color
-    STRCPY_TEXT_PRINT   tHeading            ; Heading:
-    return
+	STRCPY_TEXT_PRINT tHeading			; Heading:
+	return
 
-    global  TFT_dive_compass_mask
+	global	TFT_dive_compass_mask
 TFT_dive_compass_mask:
-    WIN_FRAME_STD   dm_custom_compass_graph_row, dm_custom_compass_graph_row+dm_custom_compass_graph_height, .0, .159
-    return
+	WIN_FRAME_STD dm_custom_compass_graph_row, dm_custom_compass_graph_row+dm_custom_compass_graph_height, .0, .159
+	return
 
-    global  TFT_surface_compass_heading
+	global	TFT_surface_compass_heading
 TFT_surface_compass_heading:
-    rcall   compass_heading_common
-    WIN_STD   surf_compass_head_column,surf_compass_head_row
+	rcall	compass_heading_common
+	WIN_STD	surf_compass_head_column,surf_compass_head_row
 	call	TFT_standard_color
-TFT_surface_compass_heading_com:     ; Show "000° N"
-    movff	compass_heading+0,lo
-    movff	compass_heading+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+TFT_surface_compass_heading_com:		; Show "000° N"
+	movff	compass_heading+0,lo
+	movff	compass_heading+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
 
-    ; Shown and actual identical?
-    movff   compass_heading_shown+0,WREG
-    cpfseq  lo
-    bra     TFT_surface_compass_heading_com1    ; Not equal
-    movff   compass_heading_shown+1,WREG
-    cpfseq  hi
-    bra     TFT_surface_compass_heading_com1    ; Not equal
-    bra     TFT_surface_compass_heading_com3    ; equal, skip smoothing
+	; Shown and actual identical?
+	movff	compass_heading_shown+0,WREG
+	cpfseq	lo
+	bra		TFT_surface_compass_heading_com1	; Not equal
+	movff	compass_heading_shown+1,WREG
+	cpfseq	hi
+	bra		TFT_surface_compass_heading_com1	; Not equal
+	bra		TFT_surface_compass_heading_com3	; equal, skip smoothing
 
 TFT_surface_compass_heading_com1:
-    movff   lo,sub_a+0
-    movff   hi,sub_a+1
-    movff   compass_heading_shown+0,sub_b+0
-    movff   compass_heading_shown+1,sub_b+1
-    call    subU16
-    btfsc   neg_flag
-    bra     TFT_surface_compass_heading_com2        ; shown > actual
-    ; shown < actual
-    banksel compass_heading_shown
-    infsnz  compass_heading_shown+0,F
-    incf    compass_heading_shown+1,F               ; +1
-    bra     TFT_surface_compass_heading_com3
+	movff	lo,sub_a+0
+	movff	hi,sub_a+1
+	movff	compass_heading_shown+0,sub_b+0
+	movff	compass_heading_shown+1,sub_b+1
+	call	subU16
+	btfsc   neg_flag
+	bra	TFT_surface_compass_heading_com2	; shown > actual
+	; shown < actual
+	banksel compass_heading_shown
+	infsnz  compass_heading_shown+0,F
+	incf	compass_heading_shown+1,F		; +1
+	bra	TFT_surface_compass_heading_com3
 
 TFT_surface_compass_heading_com2:
-    banksel compass_heading_shown
-    movlw	d'1'
-    subwf	compass_heading_shown+0,F
-    movlw	d'0'
-    subwfb	compass_heading_shown+1,F               ; -1
+	banksel	compass_heading_shown
+	movlw	d'1'
+	subwf	compass_heading_shown+0,F
+	movlw	d'0'
+	subwfb	compass_heading_shown+1,F		; -1
 
 TFT_surface_compass_heading_com3:
-    banksel common
-    movff   compass_heading_shown+0,lo
-    movff   compass_heading_shown+1,hi
-    bsf     leftbind
-    output_16dp .2      ; Result is "0.000"
-    bcf     leftbind
-    ; rearrange figures to "000"
-    movff   buffer+2,buffer+0
-    movff   buffer+3,buffer+1
-    movff   buffer+4,buffer+2
-    lfsr	FSR2,buffer+3
-    STRCAT  "° "
-    rcall   tft_compass_cardinal        ; Add cardinal and ordinal to POSTINC2
-    clrf    WREG
-    movff   WREG,buffer+.7              ; limit to 7 chars
-    STRCAT_PRINT ""
+	banksel	common
+	movff	compass_heading_shown+0,lo
+	movff	compass_heading_shown+1,hi
+	bsf		leftbind
+	output_16dp .2						; Result is "0.000"
+	bcf		leftbind
+	; rearrange figures to "000"
+	movff	buffer+2,buffer+0
+	movff	buffer+3,buffer+1
+	movff	buffer+4,buffer+2
+	lfsr	FSR2,buffer+3
+	STRCAT	"° "
+	rcall	tft_compass_cardinal		; Add cardinal and ordinal to POSTINC2
+	clrf	WREG
+	movff	WREG,buffer+.7				; limit to 7 chars
+	STRCAT_PRINT ""
 
-    btfsc   divemode
-    return                  ; Done for divemode.
-    ; Show bearing on the surface?
-    btfss   compass_bearing_set
-    return                  ; No, return
-    btfsc   premenu         ; "Bearing?" shown?
-    return                  ; Yes, return
-    bra     TFT_surface_compass_bearing
+	btfsc	divemode
+	return								; Done for divemode
+	; Show bearing on the surface?
+	btfss	compass_bearing_set
+	return								; No, return
+	btfsc	premenu						; "Bearing?" shown?
+	return								; Yes, return
+	bra		TFT_surface_compass_bearing
 
-    global  TFT_dive_compass_heading
+	global	TFT_dive_compass_heading
 TFT_dive_compass_heading:
-    rcall   compass_heading_common
-;    ; ToDo - these are for development only, hardcoding the bearing position
-;    ; 244° : SW - W
-;    movlw   low(d'244')
-;    movff   WREG,compass_bearing+0
-;    movlw   high(d'244')
-;    movff   WREG,compass_bearing+1
+	rcall	compass_heading_common
+;	; ToDo - these are for development only, hard-coding the bearing position
+;	; 244° : SW - W
+;	movlw	low(d'244')
+;	movff	WREG,compass_bearing+0
+;	movlw	high(d'244')
+;	movff	WREG,compass_bearing+1
 
-    movff   compass_heading_shown+0,xA+0
-    movff   compass_heading_shown+1,xA+1
-    ; xRD and xRDlft
-    ; 1.  160° viewing angle: +360 offset if xA<=292; for non-negative scale
-    movlw   high(d'292')
-    movff   WREG,sub_a+1
-    movlw   low(d'292')
-    movff   WREG,sub_a+0
-    movff   xA+1,sub_b+1
-    movff   xA+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xA>292
-    bra     TFT_dive_compass_heading_1  ;yes
-    ; no, xA<=292
-    movlw   high(d'360')
-    addwf   xA+1,1
-    movlw   low(d'360')
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
+	movff	compass_heading_shown+0,xA+0
+	movff	compass_heading_shown+1,xA+1
+	; xRD and xRDlft
+	; 1.  160° viewing angle: +360 offset if xA<=292; for non-negative scale
+	movlw	high(d'292')
+	movff	WREG,sub_a+1
+	movlw	low(d'292')
+	movff	WREG,sub_a+0
+	movff	xA+1,sub_b+1
+	movff	xA+0,sub_b+0
+	call	subU16						; sub_c = sub_a - sub_b
+	btfsc	neg_flag					; xA > 292 ?
+	bra		TFT_dive_compass_heading_1	; yes
+	; no, xA<=292
+	movlw	high(d'360')
+	addwf	xA+1,1
+	movlw	low(d'360')
+	addwf	xA+0,1
+	btfsc	STATUS,C
+	incf	xA+1
 TFT_dive_compass_heading_1:
-    ; 2. -80: left pixel offset from the center
-    movlw   low( d'80' )
-    subwf   xA+0,1
-    btfss   STATUS,C
-    decf    xA+1
-    ; 3. save it to xRD
-    movff   xA+0,xRD+0
-    movff   xA+1,xRD+1
-    ; 4. add 160 (display px width)
-    movlw   high(d'160')
-    addwf   xA+1,1
-    movlw   low(d'160')
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
-    ; 5. save it to xRDr
-    movff   xA+0,xRDr+0
-    movff   xA+1,xRDr+1
+	; 2. -80: left pixel offset from the center
+	movlw	low( d'80' )
+	subwf	xA+0,1
+	btfss	STATUS,C
+	decf	xA+1
+	; 3. save it to xRD
+	movff	xA+0,xRD+0
+	movff	xA+1,xRD+1
+	; 4. add 160 (display px width)
+	movlw	high(d'160')
+	addwf	xA+1,1
+	movlw	low(d'160')
+	addwf	xA+0,1
+	btfsc	STATUS,C
+	incf	xA+1
+	; 5. save it to xRDr
+	movff	xA+0,xRDr+0
+	movff	xA+1,xRDr+1
 
-    btfss   compass_bearing_set
-    bra     TFT_dive_compass_ruler      ; no value in the bearing, skip calc
+	btfss	compass_bearing_set
+	bra		TFT_dive_compass_ruler		; no value in the bearing, skip calc
 
-    ; we have bearing set, we will need xRD180 calculated
-    ; xRD180  is xRDr-180
-    movff   xRDr+1,sub_a+1
-    movff   xRDr+0,sub_a+0
-    movlw   high(d'180')
-    movff   WREG,sub_b+1
-    movlw   low(d'180')
-    movff   WREG,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    movff   sub_c+1,xRD180+1
-    movff   sub_c+0,xRD180+0
+	; we have bearing set, we will need xRD180 calculated
+	; xRD180  is xRDr-180
+	movff	xRDr+1,sub_a+1
+	movff	xRDr+0,sub_a+0
+	movlw	high(d'180')
+	movff	WREG,sub_b+1
+	movlw	low(d'180')
+	movff	WREG,sub_b+0
+	call	subU16						; sub_c = sub_a - sub_b
+	movff	sub_c+1,xRD180+1
+	movff	sub_c+0,xRD180+0
 
 TFT_dive_compass_bearing_1:
-    ; calculate bearing position and visibility (ahead or behind)
-    bcf     compass_bearing_vis     ; default is not-visibly
-    bcf     compass_bearing_ahd     ; default is behind
-    ; get the bearing virtual display offset, store it to divA
-    movff   compass_bearing+0,xA+0
-    movff   compass_bearing+1,xA+1
-    movlw   high(d'360')
-    addwf   xA+1,1
-    movlw   low(d'360')
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
-    ; save it to reuse for upper/lower turns and ahead/behind checks
-    movff   xA+1,divA+1
-    movff   xA+0,divA+0
+	; calculate bearing position and visibility (ahead or behind)
+	bcf		compass_bearing_vis			; default is not-visibly
+	bcf		compass_bearing_ahd			; default is behind
+	; get the bearing virtual display offset, store it to divA
+	movff	compass_bearing+0,xA+0
+	movff	compass_bearing+1,xA+1
+	movlw	high(d'360')
+	addwf	xA+1,1
+	movlw	low(d'360')
+	addwf	xA+0,1
+	btfsc	STATUS,C
+	incf	xA+1
+	; save it to reuse for upper/lower turns and ahead/behind checks
+	movff	xA+1,divA+1
+	movff	xA+0,divA+0
 
-    ; check if it's ahead
-    ; load the bearing offset into sub_a
-    movff   divA+1,sub_a+1
-    movff   divA+0,sub_a+0
-    ; load the display offset back to sub_b
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    rcall    TFT_dive_compass_bearing_ap
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
+	; check if it's ahead
+	; load the bearing offset into sub_a
+	movff	divA+1,sub_a+1
+	movff	divA+0,sub_a+0
+	; load the display offset back to sub_b
+	movff	xRD+0,sub_b+0
+	movff	xRD+1,sub_b+1
+	rcall	TFT_dive_compass_bearing_ap
+	;test if we found it
+	btfsc	compass_bearing_vis
+	bra		TFT_dive_compass_bearing_dir
 
-    ; check if it's ahead with an upper turn
-    ; load the bearing offset into sub_a
-    movff   divA+1,sub_a+1
-    movff   divA+0,sub_a+0
-    ; load the display offset back to sub_b
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    movlw   high(d'360')
-    addwf   sub_b+1,1
-    movlw   low(d'360')
-    addwf   sub_b+0,1
-    btfsc   STATUS,C
-    incf    sub_b+1
-    rcall    TFT_dive_compass_bearing_ap
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
+	; check if it's ahead with an upper turn
+	; load the bearing offset into sub_a
+	movff	divA+1,sub_a+1
+	movff	divA+0,sub_a+0
+	; load the display offset back to sub_b
+	movff	xRD+0,sub_b+0
+	movff	xRD+1,sub_b+1
+	movlw	high(d'360')
+	addwf	sub_b+1,1
+	movlw	low(d'360')
+	addwf	sub_b+0,1
+	btfsc	STATUS,C
+	incf	sub_b+1
+	rcall	TFT_dive_compass_bearing_ap
+	;test if we found it
+	btfsc	compass_bearing_vis
+	bra		TFT_dive_compass_bearing_dir
 
-    ; check if it's ahead with a lower turn
-    ; load the bearing offset into sub_a
-    movff   divA+1,sub_a+1
-    movff   divA+0,sub_a+0
-    movlw   high(d'360')
-    addwf   sub_a+1,1
-    movlw   low(d'360')
-    addwf   sub_a+0,1
-    btfsc   STATUS,C
-    incf    sub_a+1
-    ; load the display offset back to sub_b
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    rcall    TFT_dive_compass_bearing_ap
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
+	; check if it's ahead with a lower turn
+	; load the bearing offset into sub_a
+	movff	divA+1,sub_a+1
+	movff	divA+0,sub_a+0
+	movlw	high(d'360')
+	addwf	sub_a+1,1
+	movlw	low(d'360')
+	addwf	sub_a+0,1
+	btfsc	STATUS,C
+	incf	sub_a+1
+	; load the display offset back to sub_b
+	movff	xRD+0,sub_b+0
+	movff	xRD+1,sub_b+1
+	rcall	TFT_dive_compass_bearing_ap
+	;test if we found it
+	btfsc	compass_bearing_vis
+	bra		TFT_dive_compass_bearing_dir
 
-    ; marker is not ahead of us, check if it's behind us
-    ; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
-    ; load the display offset back to sub_a
-    movff   xRD180+0,sub_a+0
-    movff   xRD180+1,sub_a+1
-    ; load the marker's offset into sub_b
-    movff   divA+0,sub_b+0
-    movff   divA+1,sub_b+1
-    rcall    TFT_dive_compass_bearing_bp
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
+	; marker is not ahead of us, check if it's behind us
+	; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
+	; load the display offset back to sub_a
+	movff	xRD180+0,sub_a+0
+	movff	xRD180+1,sub_a+1
+	; load the marker's offset into sub_b
+	movff	divA+0,sub_b+0
+	movff	divA+1,sub_b+1
+	rcall	TFT_dive_compass_bearing_bp
+	;test if we found it
+	btfsc	compass_bearing_vis
+	bra		TFT_dive_compass_bearing_dir
 
-    ;check if it's behind with the lower turn
-    movff   xRD180+0,sub_a+0
-    movff   xRD180+1,sub_a+1
-    movlw   high(d'360')
-    addwf   sub_a+1,1
-    movlw   low(d'360')
-    addwf   sub_a+0,1
-    btfsc   STATUS,C
-    incf    sub_a+1
-    ; load the marker's offset into sub_b
-    movff   divA+0,sub_b+0
-    movff   divA+1,sub_b+1
-    rcall    TFT_dive_compass_bearing_bp
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
+	;check if it's behind with the lower turn
+	movff	xRD180+0,sub_a+0
+	movff	xRD180+1,sub_a+1
+	movlw	high(d'360')
+	addwf	sub_a+1,1
+	movlw	low(d'360')
+	addwf	sub_a+0,1
+	btfsc	STATUS,C
+	incf	sub_a+1
+	; load the marker's offset into sub_b
+	movff	divA+0,sub_b+0
+	movff	divA+1,sub_b+1
+	rcall	TFT_dive_compass_bearing_bp
+	;test if we found it
+	btfsc	compass_bearing_vis
+	bra		TFT_dive_compass_bearing_dir
 
-    ; check if it's behind with the upper turn
-    movff   divA+1,sub_b+1
-    movff   divA+0,sub_b+0
-    movlw   high(d'360')
-    addwf   sub_b+1,1
-    movlw   low(d'360')
-    addwf   sub_b+0,1
-    btfsc   STATUS,C
-    incf    sub_b+1
-    rcall    TFT_dive_compass_bearing_bp
-    bra     TFT_dive_compass_bearing_dir
+	; check if it's behind with the upper turn
+	movff	divA+1,sub_b+1
+	movff	divA+0,sub_b+0
+	movlw	high(d'360')
+	addwf	sub_b+1,1
+	movlw	low(d'360')
+	addwf	sub_b+0,1
+	btfsc	STATUS,C
+	incf	sub_b+1
+	rcall	TFT_dive_compass_bearing_bp
+	bra		TFT_dive_compass_bearing_dir
 
 TFT_dive_compass_bearing_ap:
-    ; xCM received in sub_a
-    ; xRD received in sub_b
-    ; 1/a. check if it's viewable from the left side
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xRD>divA
-    return  ;no,
-    ; yes, store the RO=RP-RD for drawing
-    movff   sub_c+0,xC+0
-    movff   sub_c+1,xC+1
-    ; 1/b. check if it's viewable from the right side?
-    movlw   d'2'        ;   avoid thin mess on the side of the display
-    addwf   sub_a+0,1
-    btfsc   STATUS, C
-    incf    sub_a+1
-    ; load the display offset right side into sub_b
-    movlw   high(d'158')
-    addwf   sub_b+1,1
-    movlw   low(d'158')
-    addwf   sub_b+0,1
-    btfsc   STATUS,C
-    incf    sub_b+1
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; xRDr>xA(+2)
-    return ; no,
-    ; print the bearing lines on the screen
-    movff   xC+0,xCM
-    bsf     compass_bearing_vis     ; set visible
-    bsf     compass_bearing_ahd     ; set ahead
-    return    ; done,
+	; xCM received in sub_a
+	; xRD received in sub_b
+	; 1/a. check if it's viewable from the left side
+	call	subU16						; sub_c = sub_a - sub_b
+	btfsc	neg_flag	; xRD>divA
+	return								; no
+	; yes, store the RO=RP-RD for drawing
+	movff	sub_c+0,xC+0
+	movff	sub_c+1,xC+1
+	; 1/b. check if it's viewable from the right side?
+	movlw	d'2'						; avoid thin mess on the side of the display
+	addwf	sub_a+0,1
+	btfsc	STATUS, C
+	incf	sub_a+1
+	; load the display offset right side into sub_b
+	movlw	high(d'158')
+	addwf	sub_b+1,1
+	movlw	low(d'158')
+	addwf	sub_b+0,1
+	btfsc	STATUS,C
+	incf	sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
+	btfss	neg_flag					; xRDr > xA(+2) ?
+	return								; no
+	; print the bearing lines on the screen
+	movff	xC+0,xCM
+	bsf		compass_bearing_vis			; set visible
+	bsf		compass_bearing_ahd			; set ahead
+	return								; done,
 
 TFT_dive_compass_bearing_bp:
-    ; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
-    ; the marker's offset received in sub_b
-    ; the xRD180 display offset received in sub_a
-    ; xRD180 - xCM
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; CM>xRD180
-    return  ; no, not on screen
-    ; 160 - (X)
-    movlw   high(d'158')
-    movff   WREG,sub_a+1
-    movlw   low(d'158')
-    movff   WREG,sub_a+0
-    movff   sub_c+1,sub_b+1
-    movff   sub_c+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; X>160
-    return  ; no, not on screen
-    ; check if not overflow - this sounds a double check...
-    movlw   d'1'
-    cpfslt  sub_c+1
-    return  ; high set, >160
-    movlw   d'158'
-    cpfslt  sub_c+0
-    return  ; low >160
-    ; print the bearing lines on the screen
-    movff   sub_c+0,xCM
-    bsf     compass_bearing_vis
-    return    ; done
+	; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
+	; the marker's offset received in sub_b
+	; the xRD180 display offset received in sub_a
+	; xRD180 - xCM
+	call	subU16						; sub_c = sub_a - sub_b
+	btfsc	neg_flag					; CM > xRD180 ?
+	return								; no, not on screen
+	; 160 - (X)
+	movlw	high(d'158')
+	movff	WREG,sub_a+1
+	movlw	low(d'158')
+	movff	WREG,sub_a+0
+	movff	sub_c+1,sub_b+1
+	movff	sub_c+0,sub_b+0
+	call	subU16						; sub_c = sub_a - sub_b
+	btfsc	neg_flag	; X>160
+	return								; no, not on screen
+	; check if not overflow - this sounds a double check...
+	movlw	d'1'
+	cpfslt	sub_c+1
+	return								; high set, >160
+	movlw	d'158'
+	cpfslt	sub_c+0
+	return								; low >160
+	; print the bearing lines on the screen
+	movff	sub_c+0,xCM
+	bsf		compass_bearing_vis
+	return								; done
 
 TFT_dive_compass_bearing_dir:
-    ; check if bearing to heading, and calculate the direction
-    bcf     compass_bearing_eq
-    btfss   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_lr
-    btfss   compass_bearing_ahd
-    bra     TFT_dive_compass_bearing_lr
-    movff   xCM,xA+0
-    movlw   d'80'
-    cpfseq  xA+0
-    bra     TFT_dive_compass_bearing_lr
-    bsf     compass_bearing_eq
-    bra     TFT_dive_compass_ruler  ; bearing points to heading, no signs are required, go to the ruler
+	; check if bearing to heading, and calculate the direction
+	bcf		compass_bearing_eq
+	btfss	compass_bearing_vis
+	bra		TFT_dive_compass_bearing_lr
+	btfss	compass_bearing_ahd
+	bra		TFT_dive_compass_bearing_lr
+	movff	xCM,xA+0
+	movlw	d'80'
+	cpfseq	xA+0
+	bra		TFT_dive_compass_bearing_lr
+	bsf		compass_bearing_eq
+	bra		TFT_dive_compass_ruler		; bearing points to heading, no signs are required, go to the ruler
 
 TFT_dive_compass_bearing_lr:
-    ; get the bearing virtual display offset
-    movff   compass_bearing+0,xA+0
-    movff   compass_bearing+1,xA+1
-    ; divA =IF (U10>292;U10;U10+360)
-    movlw   high(d'292')
-    movff   WREG,sub_a+1
-    movlw   low(d'292')
-    movff   WREG,sub_a+0
-    movff   xA+1,sub_b+1
-    movff   xA+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xA>292
-    bra     TFT_dive_compass_bearing_lr_1  ;yes
-    ; no, xA<=292
-    movlw   high(d'360')
-    addwf   xA+1,1
-    movlw   low(d'360')
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
+	; get the bearing virtual display offset
+	movff	compass_bearing+0,xA+0
+	movff	compass_bearing+1,xA+1
+	; divA =IF (U10>292;U10;U10+360)
+	movlw	high(d'292')
+	movff	WREG,sub_a+1
+	movlw	low(d'292')
+	movff	WREG,sub_a+0
+	movff	xA+1,sub_b+1
+	movff	xA+0,sub_b+0
+	call	subU16						; sub_c = sub_a - sub_b
+	btfsc	neg_flag					; xA > 292 ?
+	bra		TFT_dive_compass_bearing_lr_1 ; yes
+	; no, xA <= 292
+	movlw	high(d'360')
+	addwf	xA+1,1
+	movlw	low(d'360')
+	addwf	xA+0,1
+	btfsc	STATUS,C
+	incf	xA+1
 TFT_dive_compass_bearing_lr_1:
-    ; 1. calculate whether bearing is to left or to right
-    bsf     compass_bearing_lft   ; to the left by default
-    ; xC: save center value to compare the direction to front value
-    movff   xA+1,xC+1
-    movff   xA+0,xC+0
-    ; xB: we need the left side for comparism... left = -180
-    movff   xA+1,sub_a+1
-    movff   xA+0,sub_a+0
-    movlw   high(d'180')
-    movff   WREG,sub_b+1
-    movlw   low(d'180')
-    movff   WREG,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    movff   sub_c+1,xB+1    ; xB has the left side of the 180° distance center
-    movff   sub_c+0,xB+0
-    ; xA = IF(xRD>(xC+100);xRD-280;xRD+80)
-    movff   xC+1,sub_a+1
-    movff   xC+0,sub_a+0
-    movlw   d'100'
-    addwf   sub_a+0,1
-    btfsc   STATUS,C
-    incf    sub_a+1
-    movff   xRD+1,sub_b+1
-    movff   xRD+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xRD>xC+100
-    bra     TFT_dive_compass_bearing_lr_2   ; yes, xA=xRD-280
-    ; no, xA = xRD+80
-    movff   xRD+1,xA+1
-    movff   xRD+0,xA+0
-    movlw   d'80'
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
-    bra     TFT_dive_compass_bearing_lr_c
+	; 1. calculate whether bearing is to left or to right
+	bsf	compass_bearing_lft   ; to the left by default
+	; xC: save center value to compare the direction to front value
+	movff	xA+1,xC+1
+	movff	xA+0,xC+0
+	; xB: we need the left side for comparison... left = -180
+	movff	xA+1,sub_a+1
+	movff	xA+0,sub_a+0
+	movlw	high(d'180')
+	movff	WREG,sub_b+1
+	movlw	low(d'180')
+	movff	WREG,sub_b+0
+	call	subU16						; sub_c = sub_a - sub_b
+	movff	sub_c+1,xB+1				; xB has the left side of the 180° distance center
+	movff	sub_c+0,xB+0
+	; xA = IF(xRD>(xC+100);xRD-280;xRD+80)
+	movff	xC+1,sub_a+1
+	movff	xC+0,sub_a+0
+	movlw	d'100'
+	addwf	sub_a+0,1
+	btfsc	STATUS,C
+	incf	sub_a+1
+	movff	xRD+1,sub_b+1
+	movff	xRD+0,sub_b+0
+	call	subU16						;  sub_c = sub_a - sub_b
+	btfsc	neg_flag	; xRD>xC+100
+	bra		TFT_dive_compass_bearing_lr_2 ; yes, xA=xRD-280
+	; no, xA = xRD+80
+	movff	xRD+1,xA+1
+	movff	xRD+0,xA+0
+	movlw	d'80'
+	addwf	xA+0,1
+	btfsc	STATUS,C
+	incf	xA+1
+	bra		TFT_dive_compass_bearing_lr_c
 
 TFT_dive_compass_bearing_lr_2:
-    ; xA=xRD-280
-    movff   xRD+1,sub_a+1
-    movff   xRD+0,sub_a+0
-    movlw   high(d'280')
-    movff   WREG,sub_b+1
-    movlw   low(d'280')
-    movff   WREG,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    movff   sub_c+1,xA+1
-    movff   sub_c+0,xA+0
-    ;bra     TFT_dive_compass_bearing_lr_c
+	; xA=xRD-280
+	movff	xRD+1,sub_a+1
+	movff	xRD+0,sub_a+0
+	movlw	high(d'280')
+	movff	WREG,sub_b+1
+	movlw	low(d'280')
+	movff	WREG,sub_b+0
+	call	subU16						; sub_c = sub_a - sub_b
+	movff	sub_c+1,xA+1
+	movff	sub_c+0,xA+0
+	;bra	TFT_dive_compass_bearing_lr_c
 
 TFT_dive_compass_bearing_lr_c:
-   ; xB < xA < xC => right, otherwise left (default)
-    movff   xA+1,sub_b+1
-    movff   xA+0,sub_b+0
-    movff   xB+1,sub_a+1
-    movff   xB+0,sub_a+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; xA>xB ?
-    bra     TFT_dive_compass_ruler     ; No, xB >= xA, keep default left
-    movff   xA+1,sub_a+1
-    movff   xA+0,sub_a+0
-    movff   xC+1,sub_b+1
-    movff   xC+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; xC>xA ?
-    bra     TFT_dive_compass_ruler     ; No, xA >= xC, keep default left
-    bcf     compass_bearing_lft
+	; xB < xA < xC => right, otherwise left (default)
+	movff	xA+1,sub_b+1
+	movff	xA+0,sub_b+0
+	movff	xB+1,sub_a+1
+	movff	xB+0,sub_a+0
+	call	subU16						; sub_c = sub_a - sub_b
+	btfss	neg_flag					; xA>xB ?
+	bra		TFT_dive_compass_ruler		; No, xB >= xA, keep default left
+	movff	xA+1,sub_a+1
+	movff	xA+0,sub_a+0
+	movff	xC+1,sub_b+1
+	movff	xC+0,sub_b+0
+	call	subU16						; sub_c = sub_a - sub_b
+	btfss	neg_flag					; xC>xA ?
+	bra		TFT_dive_compass_ruler		; No, xA >= xC, keep default left
+	bcf		compass_bearing_lft
 
 TFT_dive_compass_ruler:
-    ; calculate mod15 for the ticks
-    movff   xRD+0,xA+0
-    movff   xRD+1,xA+1
+	; calculate mod15 for the ticks
+	movff	xRD+0,xA+0
+	movff	xRD+1,xA+1
 	movlw	d'15'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16  				;xA/xB=xC with xA+0 as remainder
-    ; check xA+0, it has the remainder
-    movlw   d'0'
-    cpfsgt  xA+0                        ; mod15 > 0
-    bra     TFT_dive_compass_ruler_1  ; no, RM = 0
-    ; yes RM = 15 - RDmod15
-    movlw   d'15'
-    subfwb  xA+0,1
+	call	div16x16					; xA/xB=xC with xA+0 as remainder
+	; check xA+0, it has the remainder
+	movlw	d'0'
+	cpfsgt	xA+0						; mod15 > 0
+	bra	TFT_dive_compass_ruler_1		; no, RM = 0
+	; yes RM = 15 - RDmod15
+	movlw	d'15'
+	subfwb	xA+0,1
 TFT_dive_compass_ruler_1:
-    ; xA+0 holds the RM, store it to 'lo'
-    movff    xA+0,lo
-    ; init DD to zero, store it to 'hi'
-    clrf     hi
+	; xA+0 holds the RM, store it to 'lo'
+	movff	xA+0,lo
+	; init DD to zero, store it to 'hi'
+	clrf	hi
 
 TFT_dive_compass_ruler_loop:
-    ; 1. check if we run of from the display
-    movlw   d'159'    ; Looks like 159 works because TFT_box limits the dispay
-    cpfslt  lo,1
-    bra     TFT_dive_compass_ruler_lend    ; xRM >= W
-    ; 2. Clear the tick area from DD to RM - in segments to avoid blinking
-    ;    don't do a clear if we are at 0 (zero) otherwise it will blink
-    ;    because of the width underflow
-    movlw   d'0'
-    cpfsgt  lo,1
-    bra     TFT_dive_compass_ruler_loop_zz
-    rcall    TFT_dive_compass_clr_ruler
+	; 1. check if we run of from the display
+	movlw	d'159'						; Looks like 159 works because TFT_box limits the display
+	cpfslt	lo,1
+	bra		TFT_dive_compass_ruler_lend	; xRM >= W
+	; 2. Clear the tick area from DD to RM - in segments to avoid blinking
+	;    don't do a clear if we are at 0 (zero) otherwise it will blink
+	;    because of the width underflow
+	movlw	d'0'
+	cpfsgt	lo,1
+	bra		TFT_dive_compass_ruler_loop_zz
+	rcall	TFT_dive_compass_clr_ruler
 TFT_dive_compass_ruler_loop_zz:
-    ; 3. Draw the markers @ RM
-    ; we receive RM in lo and DD in hi
-    movlw   dm_custom_compass_tick_top_top
-    movwf   win_top
-    movlw   dm_custom_compass_tick_height
-    movwf   win_height
-    movlw   d'2'
-    movwf   win_width+0
-    clrf    win_width+1
-    movwf   win_bargraph
-    movff   lo,win_leftx2          ; 0..159
-    call    TFT_standard_color
-    call    TFT_box
-    movlw   dm_custom_compass_tick_bot_top
-    movwf   win_top
-    movlw   dm_custom_compass_tick_height
-    movwf   win_height
-    call    TFT_standard_color  ; color in WREG is trashed, must be set again!
-    call    TFT_box
-    ; 4. If D<82 and RM>79: means we put something over the center line
-    ;    redraw the center line
-    movlw   d'82'
-    cpfslt  hi,1
-    bra     TFT_dive_compass_ruler_loop_zz2
-    movlw   d'79'
-    cpfsgt  lo,1
-    bra     TFT_dive_compass_ruler_loop_zz2
-    ;enough to print cline as bearing marker is not in the ticker area
-   	movlw   color_yellow
-    WIN_BOX_COLOR     dm_custom_compass_tick_top_top, dm_custom_compass_tick_bot_bot,.80,.81        ; center line in yellow
+	; 3. Draw the markers @ RM
+	;    we receive RM in lo and DD in hi
+	movlw	dm_custom_compass_tick_top_top
+	movwf	win_top
+	movlw	dm_custom_compass_tick_height
+	movwf	win_height
+	movlw	d'2'
+	movwf	win_width+0
+	clrf	win_width+1
+	movwf   win_bargraph
+	movff   lo,win_leftx2				; 0..159
+	call	TFT_standard_color
+	call	TFT_box
+	movlw	dm_custom_compass_tick_bot_top
+	movwf	win_top
+	movlw	dm_custom_compass_tick_height
+	movwf	win_height
+	call	TFT_standard_color			; color in WREG is trashed, must be set again!
+	call	TFT_box
+	; 4. If D<82 and RM>79: means we put something over the center line
+	;	redraw the center line
+	movlw	d'82'
+	cpfslt	hi,1
+	bra		TFT_dive_compass_ruler_loop_zz2
+	movlw	d'79'
+	cpfsgt	lo,1
+	bra		TFT_dive_compass_ruler_loop_zz2
+	; enough to print cline as bearing marker is not in the ticker area
+	movlw	color_yellow
+	WIN_BOX_COLOR dm_custom_compass_tick_top_top, dm_custom_compass_tick_bot_bot,.80,.81 ; center line in yellow
 TFT_dive_compass_ruler_loop_zz2:
-    ; 5. set D = RM + 2 : position after the 2px tick
-    movff   lo,hi
-    movlw   d'2'
-    addwf   hi,F
-    ; 6. set RM = RM + 15 : position to the next tick
-    movlw   d'15'
-    addwf   lo,F
-    ; 7. loop
-    bra     TFT_dive_compass_ruler_loop
+	; 5. set D = RM + 2 : position after the 2px tick
+	movff	lo,hi
+	movlw	d'2'
+	addwf	hi,F
+	; 6. set RM = RM + 15 : position to the next tick
+	movlw	d'15'
+	addwf	lo,F
+	; 7. loop
+	bra		TFT_dive_compass_ruler_loop
 
-TFT_dive_compass_ruler_lend:    ; loop end
-    ; 8. clear the rest of the tick area if D<160
-    movlw   d'160'
-    cpfslt  hi
-    bra     TFT_dive_compass_ruler_lend2    ; D >= W
-    ; 9. position left to end of display to clear the remaining area
-    movlw   d'159'
-    movwf   lo
-    ; 10. clear it
-    rcall TFT_dive_compass_clr_ruler
+TFT_dive_compass_ruler_lend:			; loop end
+	; 8. clear the rest of the tick area if D<160
+	movlw	d'160'
+	cpfslt	hi
+	bra		TFT_dive_compass_ruler_lend2 ; D >= W
+	; 9. position left to end of display to clear the remaining area
+	movlw	d'159'
+	movwf	lo
+	; 10. clear it
+	rcall	TFT_dive_compass_clr_ruler
 
 TFT_dive_compass_ruler_lend2:
-    ; done with the compass ruler, put the labels on the screen
-    ; get the RD abck to sub_b
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    ; hi stores the display position
-    clrf    hi
-    clrf    xHI
-    ; lo stores the last item's display position
-    clrf    lo
-    clrf    xLO
-
-    movlw   low( d'219' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'219' )
-    rcall   TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_1
-    STRCPY_TEXT_PRINT     tSW                 ; yes - print it
-dcr_1:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'267' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'267' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_2
-    STRCPY_TEXT_PRINT     tW                 ; yes - print it
-dcr_2:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'309' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'309' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_3
-    STRCPY_TEXT_PRINT     tNW                 ; yes - print it
-dcr_3:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'358' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'358' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_4
-    STRCPY_TEXT_PRINT     tN                 ; yes - print it
-dcr_4:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'399' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'399' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_5
-    STRCPY_TEXT_PRINT     tNE                 ; yes - print it
-dcr_5:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
+	; done with the compass ruler, put the labels on the screen
+	; get the RD abck to sub_b
+	movff	xRD+0,sub_b+0
+	movff	xRD+1,sub_b+1
+	; hi stores the display position
+	clrf	hi
+	clrf	xHI
+	; lo stores the last item's display position
+	clrf	lo
+	clrf	xLO
 
-    movlw   low( d'448' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'448' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_6
-    STRCPY_TEXT_PRINT     tE                 ; yes - print it
+	movlw	low( d'219' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'219' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_1
+	STRCPY_TEXT_PRINT	tSW				; yes - print it
+dcr_1:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'267' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'267' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_2
+	STRCPY_TEXT_PRINT tW				; yes - print it
+dcr_2:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'309' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'309' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_3
+	STRCPY_TEXT_PRINT tNW				; yes - print it
+dcr_3:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'358' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'358' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_4
+	STRCPY_TEXT_PRINT tN				; yes - print it
+dcr_4:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'399' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'399' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_5
+	STRCPY_TEXT_PRINT tNE				; yes - print it
+dcr_5:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'448' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'448' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_6
+	STRCPY_TEXT_PRINT	tE				; yes - print it
 dcr_6:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'489' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'489' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_7
-    STRCPY_TEXT_PRINT     tSE                 ; yes - print it
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'489' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'489' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_7
+	STRCPY_TEXT_PRINT	tSE				; yes - print it
 dcr_7:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'538' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'538' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_8
-    STRCPY_TEXT_PRINT     tS                 ; yes - print it
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'538' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'538' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_8
+	STRCPY_TEXT_PRINT tS				; yes - print it
 dcr_8:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'579' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'579' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_9
+	STRCPY_TEXT_PRINT tSW				; yes - print it
+dcr_9:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'627' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'627' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_10
+	STRCPY_TEXT_PRINT tW				; yes - print it
+dcr_10:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	movlw	low( d'669' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'669' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_11
+	STRCPY_TEXT_PRINT tNW				; yes - print it
+dcr_11:
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
 
-    movlw   low( d'579' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'579' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_9
-    STRCPY_TEXT_PRINT     tSW                 ; yes - print it
-dcr_9:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'627' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'627' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_10
-    STRCPY_TEXT_PRINT     tW                 ; yes - print it
-dcr_10:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'669' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'669' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_11
-    STRCPY_TEXT_PRINT     tNW                 ; yes - print it
-dcr_11:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   low( d'718' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'718' )
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_12
-    STRCPY_TEXT_PRINT     tN                 ; yes - print it
+	movlw	low( d'718' )				; position of the label
+	movwf	sub_a+0
+	movlw	high( d'718' )
+	rcall	TFT_dive_compass_label_proc	; check if the label should be on screen
+	btfss	print_compass_label			; Yes?
+	bra		dcr_12
+	STRCPY_TEXT_PRINT tN				; yes - print it
 dcr_12:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
 
 TFT_dive_compass_label_end:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-    ; restore lo and hi for the final cleanup
-    movff   xLO,lo
-    movff   xHI,hi
-    ; clear the rest of the SQ area if there are more space
-    movlw   d'159'
-    cpfslt  hi
-    bra     TFT_dive_compass_label_end2    ; D >= 160, no more space
-    ; position left to end of display to clear the remaining area
-    movlw   d'158'
-    movwf   lo
-    ; clear it
-    rcall    TFT_dive_compass_clr_label
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	; restore lo and hi for the final cleanup
+	movff	xLO,lo
+	movff	xHI,hi
+	; clear the rest of the SQ area if there are more space
+	movlw	d'159'
+	cpfslt	hi
+	bra		TFT_dive_compass_label_end2	; D >= 160, no more space
+	; position left to end of display to clear the remaining area
+	movlw	d'158'
+	movwf	lo
+	; clear it
+	rcall	TFT_dive_compass_clr_label
 TFT_dive_compass_label_end2:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-    ; do we have bearing set?
-    btfsc   compass_bearing_set
-    bra     TFT_dive_compass_dir_text   ; bearing_set=1 - go and print the dir (<< or >>)
-    rcall    TFT_dive_compass_dir_lclr     ; no, clear the area (e.g. we had but removed)
-    rcall    TFT_dive_compass_dir_rclr
-    bra     TFT_dive_compass_text
+	rcall	TFT_dive_compass_c_mk		; check if label is on the center line or the marker
+	; do we have bearing set?
+	btfsc	compass_bearing_set
+	bra		TFT_dive_compass_dir_text	; bearing_set=1 - go and print the dir (<< or >>)
+	rcall	TFT_dive_compass_dir_lclr	; no, clear the area (e.g. we had but removed)
+	rcall	TFT_dive_compass_dir_rclr
+	bra		TFT_dive_compass_text
 
 TFT_dive_compass_dir_text:
-    ; bearing set, but does it point to heading?
-    btfss   compass_bearing_eq
-    bra     TFT_dive_compass_dir_text_2   ; bearing != heading - go and print the dir
-    rcall    TFT_dive_compass_dir_lclr     ; bearing = heading, no need for direction markers
-    rcall    TFT_dive_compass_dir_rclr
-    bra     TFT_dive_compass_text
+	; bearing set, but does it point to heading?
+	btfss	compass_bearing_eq
+	bra		TFT_dive_compass_dir_text_2	; bearing != heading - go and print the dir
+	rcall	TFT_dive_compass_dir_lclr	; bearing = heading, no need for direction markers
+	rcall	TFT_dive_compass_dir_rclr
+	bra		TFT_dive_compass_text
 
 TFT_dive_compass_dir_text_2:
-    movlw   color_green
-    call    TFT_set_color
-    btfsc   compass_bearing_lft
-    bra     TFT_dive_compass_dir_ldir      ; bearing_lft=1, print the left marker
+	movlw	color_green
+	call	TFT_set_color
+	btfsc	compass_bearing_lft
+	bra		TFT_dive_compass_dir_ldir	; bearing_lft=1, print the left marker
 ;TFT_dive_compass_text_rdir:
-    WIN_SMALL   dm_custom_compass_rdir_column, dm_custom_compass_head_row-.2
-    STRCPY_PRINT    ">>"
-    ; do not forget to clear the left
-    rcall    TFT_dive_compass_dir_lclr
-    bra     TFT_dive_compass_text
+	WIN_SMALL dm_custom_compass_rdir_column, dm_custom_compass_head_row-.2
+	STRCPY_PRINT ">>"
+	; do not forget to clear the left
+	rcall	TFT_dive_compass_dir_lclr
+	bra		TFT_dive_compass_text
 
 TFT_dive_compass_dir_ldir:
-    WIN_SMALL   dm_custom_compass_ldir_column, dm_custom_compass_head_row-.2
-    STRCPY_PRINT    "<<"
-    ; do not forget to clear the right
-    rcall    TFT_dive_compass_dir_rclr
-    ;bra     TFT_dive_compass_text
+	WIN_SMALL dm_custom_compass_ldir_column, dm_custom_compass_head_row-.2
+	STRCPY_PRINT "<<"
+	; do not forget to clear the right
+	rcall	TFT_dive_compass_dir_rclr
+	;bra	TFT_dive_compass_text
 
 TFT_dive_compass_text:
-    ; Clear some unused space on the right mH
-    WIN_BOX_BLACK    dm_custom_compass_tick_top_bot+.1,dm_custom_compass_tick_bot_top-.1,.158,.159	; top, bottom, left, right
+	; Clear some unused space on the right mH
+	WIN_BOX_BLACK dm_custom_compass_tick_top_bot+.1,dm_custom_compass_tick_bot_top-.1,.158,.159	; top, bottom, left, right
 
-    ; Text output
-    call    TFT_standard_color
-    WIN_SMALL   dm_custom_compass_head_column, dm_custom_compass_head_row
-    rcall   TFT_surface_compass_heading_com  ; Show "000° N"
-    return
+	; Text output
+	call	TFT_standard_color
+	WIN_SMALL dm_custom_compass_head_column, dm_custom_compass_head_row
+	rcall	TFT_surface_compass_heading_com  ; Show "000° N"
+	return
 
 TFT_dive_compass_dir_lclr:
-    WIN_SMALL   dm_custom_compass_ldir_column, dm_custom_compass_head_row-.2
-    STRCPY_PRINT    "  "
-    return
+	WIN_SMALL dm_custom_compass_ldir_column, dm_custom_compass_head_row-.2
+	STRCPY_PRINT "  "
+	return
 
 TFT_dive_compass_dir_rclr:
-    WIN_SMALL   dm_custom_compass_rdir_column, dm_custom_compass_head_row-.2
-    STRCPY_PRINT    "  "
-    return
+	WIN_SMALL dm_custom_compass_rdir_column, dm_custom_compass_head_row-.2
+	STRCPY_PRINT "  "
+	return
 
 TFT_dive_compass_label_proc:
-    movwf   sub_a+1
-    movlw   d'14'
-    movwf   up                  ; cardinal width in px
-    bcf     print_compass_label
-    ; 1/a. check if it's viewable ? sub_a(RP) >= sub_b(RD) ?
-    ;    set the carry flag if sub_b(xRD) is equal to or greater than sub_a(xRP):
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; >=0?
-    return              ; No
-    ; store the RO=RP-RD for drawing
-    movff   sub_c+0,xC+0
-    movff   sub_c+1,xC+1
+	movwf	sub_a+1
+	movlw	d'14'
+	movwf	up							; cardinal width in px
+	bcf	print_compass_label
+	; 1/a. check if it's viewable ? sub_a(RP) >= sub_b(RD) ?
+	;      set the carry flag if sub_b(xRD) is equal to or greater than sub_a(xRP):
+	movff	xRD+0,sub_b+0
+	movff	xRD+1,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
+	btfsc	neg_flag					; >=0?
+	return								; No
+	; store the RO=RP-RD for drawing
+	movff	sub_c+0,xC+0
+	movff	sub_c+1,xC+1
 
-    ; 1/b. check if it's viewable ? sub_a(RP)+up(width) < sub_b(RD)+160
-    ;      if already above, no need to process the rest of the labels
-    movff   up,WREG    ; take care about the width
-    addwf   sub_a+0,1
-    btfsc   STATUS, C
-    incf    sub_a+1
+	; 1/b. check if it's viewable ? sub_a(RP)+up(width) < sub_b(RD)+160
+	;      if already above, no need to process the rest of the labels
+	movff	up,WREG	; take care about the width
+	addwf	sub_a+0,1
+	btfsc	STATUS, C
+	incf	sub_a+1
 
-    movff   xRDr+0,sub_b+0
-    movff   xRDr+1,sub_b+1
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; ? <0
-    bra     TFT_dive_compass_label_end      ; No
+	movff	xRDr+0,sub_b+0
+	movff	xRDr+1,sub_b+1
+	call	subU16	 ;  sub_c = sub_a - sub_b
+	btfss	neg_flag	; ? <0
+	bra		TFT_dive_compass_label_end	; No
 
-    ; 2. restore RO=RP-RD from 1/a.
-    movff   xC+0,lo
+	; 2. restore RO=RP-RD from 1/a.
+	movff	xC+0,lo
 
-    ; 3. Clear the segment from DD(hi) to lo
-    ; don't do a clear if we are at 0 (zero) otherwise it will blink
-    ;   ?because of the width underflow?
-    movlw   d'1'
-    cpfsgt  lo
-    bra     TFT_dive_compass_label_proc_p
-    rcall   TFT_dive_compass_clr_label
+	; 3. Clear the segment from DD(hi) to lo
+	;    don't do a clear if we are at 0 (zero) otherwise it will blink
+	;   ?because of the width underflow?
+	movlw	d'1'
+	cpfsgt	lo
+	bra		TFT_dive_compass_label_proc_p
+	rcall	TFT_dive_compass_clr_label
 TFT_dive_compass_label_proc_p:
-    ; 4. print the SQ on the screen
-    call    TFT_standard_color
-    bsf     print_compass_label
+	; 4. print the SQ on the screen
+	call	TFT_standard_color
+	bsf		print_compass_label
 ;TFT_dive_compass_label_print:
-    movlw   dm_custom_compass_label_row
-    movff   WREG,win_top
-    movff   lo,win_leftx2
-    movlw   FT_SMALL
-    movff   WREG,win_font
-    ; 6. retain the new display positions
-    movff   lo,hi
-    movff   up,WREG
-    addwf   hi,F
-    movff   lo,xLO
-    movff   hi,xHI
-    return
+	movlw	dm_custom_compass_label_row
+	movff	WREG,win_top
+	movff	lo,win_leftx2
+	movlw	FT_SMALL
+	movff	WREG,win_font
+	; 6. retain the new display positions
+	movff	lo,hi
+	movff	up,WREG
+	addwf	hi,F
+	movff	lo,xLO
+	movff	hi,xHI
+	return
 
 TFT_dive_compass_c_mk:
-    ; Common task to draw center line and marker
-    ;    until a proper implementation make it simple:
-    rcall    TFT_dive_compass_mk
-   	movlw   color_yellow
-    WIN_BOX_COLOR     dm_custom_compass_tick_top_top, dm_custom_compass_tick_bot_bot,.80,.81        ; center line in yellow
-    return
+	; Common task to draw center line and marker
+	; until a proper implementation make it simple:
+	rcall	TFT_dive_compass_mk
+	movlw	color_yellow
+	WIN_BOX_COLOR dm_custom_compass_tick_top_top, dm_custom_compass_tick_bot_bot,.80,.81 ; center line in yellow
+	return
 
 TFT_dive_compass_mk:
-    ; draw the bearing on the screen if visible and if we just put something over it
-    btfss   compass_bearing_set
-    return  ; bearing_set=0 nothing to display
+	; draw the bearing on the screen if visible and if we just put something over it
+	btfss	compass_bearing_set
+	return								; bearing_set=0 nothing to display
 
-    btfss   compass_bearing_vis
-    return  ; bearing set but not visible
+	btfss	compass_bearing_vis
+	return	; bearing set but not visible
 
-    ; save lo/hi from trashing
-    movff   lo,xA+0
-    movff   hi,xA+1
+	; save lo/hi from trashing
+	movff	lo,xA+0
+	movff	hi,xA+1
 
-    ; did we just update the marker's position?
-    ;                       DD.......DD
-    ;          CM+2>=DD(old)    or     CM-2<=DD
-    ; ToDo
+	; did we just update the marker's position?
+	; DD.......DD
+	; CM+2>=DD(old) or CM-2<=DD
+	; ToDo
 
-    btfss   compass_bearing_ahd
-    bra     TFT_dive_compass_mk_rear
+	btfss	compass_bearing_ahd
+	bra		TFT_dive_compass_mk_rear
 ;TFT_dive_compass_mk_front:
-    clrf    lo
-    movff   xCM,lo
-    bsf     print_compass_label ; set=green marker
-    rcall   TFT_dive_compass_mk_print
-    bcf     print_compass_label
-    bra     TFT_dive_compass_mk_end
+	clrf	lo
+	movff	xCM,lo
+	bsf		print_compass_label			; set=green marker
+	rcall	TFT_dive_compass_mk_print
+	bcf		print_compass_label
+	bra		TFT_dive_compass_mk_end
 
 TFT_dive_compass_mk_rear:
-    clrf    lo
-    movff   xCM,lo
-    bcf     print_compass_label ; set=red marker
-    rcall   TFT_dive_compass_mk_print
+	clrf	lo
+	movff	xCM,lo
+	bcf		print_compass_label			; set=red marker
+	rcall	TFT_dive_compass_mk_print
 
 TFT_dive_compass_mk_end:
-    movff   xA+0,lo
-    movff   xA+1,hi
-    return
+	movff	xA+0,lo
+	movff	xA+1,hi
+	return
 
 TFT_dive_compass_mk_print:
-    movlw   d'1'
-    cpfsgt  lo
-    bra     TFT_dive_compass_mk_print_2 ; lo<=1, skip the first line
-    movlw   d'2'
-    subwf   lo,0
-;    movff   WREG,win_leftx2
-    rcall   TFT_dive_compass_mk_print_3
+	movlw	d'1'
+	cpfsgt	lo
+	bra		TFT_dive_compass_mk_print_2	; lo<=1, skip the first line
+	movlw	d'2'
+	subwf	lo,0
+;	movff	WREG,win_leftx2
+	rcall	TFT_dive_compass_mk_print_3
 TFT_dive_compass_mk_print_2:
-    ; save hi/lo
-    movff   hi,divA+1
-    movff   lo,divA+0
-    ; clear the middle of the bearing marker
-    movff   lo,hi
-    movlw   d'2'
-    addwf   lo,1
-    rcall   TFT_dive_compass_clr_label
-    ; restore hi/lo
-    movff   divA+1,hi
-    movff   divA+0,lo
-    ; print a dot on the middle
-    movff   lo,WREG
-    rcall   TFT_dive_compass_mk_print_dot
-    ; finally print the right marker line
-    movlw   d'2'
-    addwf   lo,0
-;    rcall   TFT_dive_compass_mk_print_3
-;    return
+	; save hi/lo
+	movff	hi,divA+1
+	movff	lo,divA+0
+	; clear the middle of the bearing marker
+	movff	lo,hi
+	movlw	d'2'
+	addwf	lo,1
+	rcall	TFT_dive_compass_clr_label
+	; restore hi/lo
+	movff	divA+1,hi
+	movff	divA+0,lo
+	; print a dot on the middle
+	movff	lo,WREG
+	rcall	TFT_dive_compass_mk_print_dot
+	; finally print the right marker line
+	movlw	d'2'
+	addwf	lo,0
+;	rcall	TFT_dive_compass_mk_print_3
+;	return
 TFT_dive_compass_mk_print_3:
-    movwf   win_leftx2
-    movlw   dm_custom_compass_label_row
-    movwf   win_top
-    movlw   dm_custom_compass_label_height-.2
-    movwf   win_height
-    bra     TFT_dive_compass_mk_print_4
+	movwf	win_leftx2
+	movlw	dm_custom_compass_label_row
+	movwf	win_top
+	movlw	dm_custom_compass_label_height-.2
+	movwf	win_height
+	bra		TFT_dive_compass_mk_print_4
 TFT_dive_compass_mk_print_dot:
-    movwf   win_leftx2
-    movlw   dm_custom_compass_label_row + .9
-    movwf   win_top
-    movlw   d'4'
-    movwf   win_height
+	movwf	win_leftx2
+	movlw	dm_custom_compass_label_row + .9
+	movwf	win_top
+	movlw	d'4'
+	movwf	win_height
 TFT_dive_compass_mk_print_4:
-    movlw   .158
-    cpfslt  win_leftx2
-    bra     TFT_dive_compass_mk_print_5
-    movlw   d'2'
-    movwf   win_width+0
-    clrf    win_width+1
-    movwf   win_bargraph
-    movlw   color_green
-    btfss   print_compass_label
-    movlw   color_red
-    call    TFT_set_color
-    call    TFT_box
+	movlw	.158
+	cpfslt	win_leftx2
+	bra		TFT_dive_compass_mk_print_5
+	movlw	d'2'
+	movwf	win_width+0
+	clrf	win_width+1
+	movwf	win_bargraph
+	movlw	color_green
+	btfss	print_compass_label
+	movlw	color_red
+	call	TFT_set_color
+	call	TFT_box
 TFT_dive_compass_mk_print_5:
-    banksel common
-    return
+	banksel	common
+	return
 
 TFT_dive_compass_clr_label:
-    movlw   dm_custom_compass_label_row-.2     ; set top & height
-    movff   WREG,win_top
-    movlw   dm_custom_compass_label_height+.2
-    movff   WREG,win_height
-    rcall   TFT_dive_compass_clear
-    return
+	movlw	dm_custom_compass_label_row-.2	; set top & height
+	movff	WREG,win_top
+	movlw	dm_custom_compass_label_height+.2
+	movff	WREG,win_height
+	rcall	TFT_dive_compass_clear
+	return
 
 TFT_dive_compass_clr_ruler:
-    ; top tick
-    movlw   dm_custom_compass_tick_top_top     ; set top & height
-    movff   WREG,win_top
-    movlw   dm_custom_compass_tick_height
-    movff   WREG,win_height
-    rcall    TFT_dive_compass_clear
-    ;bottom tick
-    movlw   dm_custom_compass_tick_bot_top     ; set top & height
-    movff   WREG,win_top
-    movlw   dm_custom_compass_tick_height
-    movff   WREG,win_height
-;    rcall   TFT_dive_compass_clear
-;    return
+	; top tick
+	movlw	dm_custom_compass_tick_top_top	; set top & height
+	movff	WREG,win_top
+	movlw	dm_custom_compass_tick_height
+	movff	WREG,win_height
+	rcall	TFT_dive_compass_clear
+	;bottom tick
+	movlw	dm_custom_compass_tick_bot_top	; set top & height
+	movff	WREG,win_top
+	movlw	dm_custom_compass_tick_height
+	movff	WREG,win_height
+;	rcall	TFT_dive_compass_clear
+;	return
 TFT_dive_compass_clear:
-    ; we receive RM in lo and DD in hi
-    ; calculate width = RM-D
-    movff   hi,WREG
-    subwf   lo,W
-    bz      TFT_dive_compass_clear3 ; Do nothing if there is nothing to do
-    movwf   win_width+0         ; RM-DD
-    movwf   win_bargraph
-    clrf    win_width+1
-    movlw   .1
-    cpfsgt  win_width+0
-    bra     TFT_dive_compass_clear3 ; Do not clear a single pixel (or less)
-    movff   hi,win_leftx2
-    movlw   color_black
-    call    TFT_set_color
-    call    TFT_box
+	; we receive RM in lo and DD in hi
+	; calculate width = RM-D
+	movff	hi,WREG
+	subwf	lo,W
+	bz		TFT_dive_compass_clear3		; Do nothing if there is nothing to do
+	movwf	win_width+0					; RM-DD
+	movwf	win_bargraph
+	clrf	win_width+1
+	movlw	.1
+	cpfsgt	win_width+0
+	bra		TFT_dive_compass_clear3		; Do not clear a single pixel (or less)
+	movff	hi,win_leftx2
+	movlw	color_black
+	call	TFT_set_color
+	call	TFT_box
 TFT_dive_compass_clear3:
-    return
+	return
 
 tft_compass_cardinal:
-    btfsc  hi,0          ; Heading >255°?
-    bra     tft_compass_cardinal2   ; Yes must be W, NW or N
-    ; No, Must be W, SW, S, SE, E, NE or N
-    movlw   .23
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_N
-    movlw   .68
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_NE
-    movlw   .113
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_E
-    movlw   .158
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_SE
-    movlw   .203
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_S
-    movlw   .248
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_SW
-    bra     tft_compass_cardinal_W
+	btfsc	hi,0						; Heading >255°?
+	bra		tft_compass_cardinal2		; Yes must be W, NW or N
+	; No, Must be W, SW, S, SE, E, NE or N
+	movlw	.23
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_N
+	movlw	.68
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_NE
+	movlw	.113
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_E
+	movlw	.158
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_SE
+	movlw	.203
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_S
+	movlw	.248
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_SW
+	bra		tft_compass_cardinal_W
 
 tft_compass_cardinal2:
-    movlw   .37
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_W
-    movlw   .82
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_NW
-;    bra     tft_compass_cardinal_N
+	movlw	.37
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_W
+	movlw	.82
+	subwf	lo,W
+	btfss	STATUS,C
+	bra		tft_compass_cardinal_NW
+;	bra		tft_compass_cardinal_N
+
 tft_compass_cardinal_N:
-    STRCAT_TEXT     tN
-    return
+	STRCAT_TEXT	tN
+	return
 tft_compass_cardinal_NE:
-    STRCAT_TEXT     tNE
-    return
+	STRCAT_TEXT	tNE
+	return
 tft_compass_cardinal_E:
-    STRCAT_TEXT     tE
-    return
+	STRCAT_TEXT	tE
+	return
 tft_compass_cardinal_SE:
-    STRCAT_TEXT     tSE
-    return
+	STRCAT_TEXT	tSE
+	return
 tft_compass_cardinal_S:
-    STRCAT_TEXT     tS
-    return
+	STRCAT_TEXT	tS
+	return
 tft_compass_cardinal_SW:
-    STRCAT_TEXT     tSW
-    return
+	STRCAT_TEXT	tSW
+	return
 tft_compass_cardinal_W:
-    STRCAT_TEXT     tW
-    return
+	STRCAT_TEXT	tW
+	return
 tft_compass_cardinal_NW:
-    STRCAT_TEXT     tNW
-    return
+	STRCAT_TEXT	tNW
+	return
 
 compass_heading_common:
 	call	speed_normal
-    movlw   compass_averaging           ; numbers of extra averaging
-    movwf   up
+	movlw	compass_averaging			; numbers of extra averaging
+	movwf	up
 compass_heading_common2:
-    rcall   TFT_get_compass
-    decfsz  up,F
-    bra     compass_heading_common2
-    extern  compass
-    call    compass                     ; Do compass corrections.
-    banksel common
+	rcall	TFT_get_compass
+	decfsz	up,F
+	bra		compass_heading_common2
+	call	compass						; Do compass corrections.
+	banksel	common
 
-    ; More then compass_fast_treshold?
-    movff   compass_heading_old+0,sub_a+0
-    movff   compass_heading_old+1,sub_a+1
-    movff   compass_heading+0,sub_b+0
-    movff   compass_heading+1,sub_b+1
-    call    sub16
-    btfss   neg_flag                        ; <0?
-    bra     compass_heading_common3         ; No, test for threshold
-    ; Yes, subtract the other way round
-    movff   compass_heading+0,sub_a+0
-    movff   compass_heading+1,sub_a+1
-    movff   compass_heading_old+0,sub_b+0
-    movff   compass_heading_old+1,sub_b+1
-    call    sub16
+	; More then compass_fast_treshold?
+	movff	compass_heading_old+0,sub_a+0
+	movff	compass_heading_old+1,sub_a+1
+	movff	compass_heading+0,sub_b+0
+	movff	compass_heading+1,sub_b+1
+	call	sub16
+	btfss	neg_flag					; <0?
+	bra	compass_heading_common3			; No, test for threshold
+	; Yes, subtract the other way round
+	movff	compass_heading+0,sub_a+0
+	movff	compass_heading+1,sub_a+1
+	movff	compass_heading_old+0,sub_b+0
+	movff	compass_heading_old+1,sub_b+1
+	call	sub16
 compass_heading_common3:
-    movff   compass_heading+0,compass_heading_old+0 ; copy new "old"
-    movff   compass_heading+1,compass_heading_old+1
+	movff	compass_heading+0,compass_heading_old+0	; copy new "old"
+	movff	compass_heading+1,compass_heading_old+1
 
-    bcf     compass_fast_mode
-    movlw   compass_fast_treshold
-    cpfslt  sub_c+0                             ; > compass_fast_treshold?
-    bsf     compass_fast_mode                   ; Yes!
+	bcf		compass_fast_mode
+	movlw	compass_fast_treshold
+	cpfslt	sub_c+0						; > compass_fast_treshold?
+	bsf		compass_fast_mode			; Yes!
 
-    btfss   compass_fast_mode               ; In fast mode?
-    return                                  ; No.
-    ; Yes.
-    movff	compass_heading+0,lo
-    movff	compass_heading+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    movff   lo,compass_heading_shown+0
-    movff   hi,compass_heading_shown+1
-    return
+	btfss   compass_fast_mode			; In fast mode?
+	return								; No.
+	; Yes.
+	movff	compass_heading+0,lo
+	movff	compass_heading+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	movff	lo,compass_heading_shown+0
+	movff	hi,compass_heading_shown+1
+	return
 
 TFT_get_compass:
-    call    I2C_RX_compass              ; Test Compass
-    call    I2C_RX_accelerometer        ; Test Accelerometer
-    call    compass_filter              ; Filter Raw compass + accel readings.
-    banksel common
-    return
+	call	I2C_RX_compass				; Test Compass
+	call	I2C_RX_accelerometer		; Test Accelerometer
+	call	compass_filter				; Filter Raw compass + accel readings.
+	banksel	common
+	return
 
-    global  TFT_surf_set_bearing
+	global  TFT_surf_set_bearing
 TFT_surf_set_bearing:
-    btfsc   premenu
-    return                              ; Already shown, return
-    bsf     premenu                     ; set flag
-    WIN_BOX_BLACK   surf_compass_bear_row,surf_warning1_row-1, surf_compass_bear_column, surf_decotype_column-.1	; top, bottom, left, right
-    WIN_SMALL   surf_compass_bear_column,surf_compass_bear_row
-    WIN_COLOR   color_yellow
-    bsf     win_invert
-    STRCPY_TEXT_PRINT   tSetHeading         ; 7 chars
-    bcf     win_invert
-    return
+	btfsc	premenu
+	return								; Already shown, return
+	bsf		premenu						; set flag
+	WIN_BOX_BLACK surf_compass_bear_row,surf_warning1_row-1, surf_compass_bear_column, surf_decotype_column-.1 ; top, bottom, left, right
+	WIN_SMALL surf_compass_bear_column,surf_compass_bear_row
+	WIN_COLOR color_yellow
+	bsf		win_invert
+	STRCPY_TEXT_PRINT tSetHeading		; 7 chars
+	bcf		win_invert
+	return
 
-        END
+	END
--- a/src/convert.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/convert.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File convert.asm
+;   File convert.asm												## V2.98
 ;
 ;   Converts register values to string
 ;
@@ -11,298 +11,270 @@
 ;   2010-12-10 : [jDG] Optimize macro size
 ;
 
-#include    "hwos.inc"                  ; Mandatory header
+#include "hwos.inc"						; Mandatory header
+
+basic	CODE
 
 ;=============================================================================
 
-        CBLOCK  tmp+0x09                ; space for aa_wordprocessor
-        	temp3
-        	temp4
-        	cvt_flags2
-            ; Reserved to tmp+0x11...
-        ENDC
-
-#define pre_zero_flag   cvt_flags2,0
-#define all_zeros_flag  cvt_flags2,1
-#define DP_done         cvt_flags2,2
-#define DP_done2        cvt_flags2,3
-#define show_last3      cvt_flags2,4
-#define leading_zeros   cvt_flags2,5
-#define show_last4      cvt_flags2,6
-
-basic   CODE
-
-;=============================================================================
-    global  output99_call
+	global	output99_call
 output99_call:
 	clrf	ignore_digits
 	incf	ignore_digits,F
-	clrf	temp4
+	clrf	cvt_temp4
 
-    global  output99
+
+	global	output99
 output99:
 	movlw	d'99'
 	cpfslt	lo
 	movwf	lo							; Limit to 99
-	movff	lo,lo_temp		
+	movff	lo,lo_temp
 	clrf	hi_temp
-	bcf		pre_zero_flag	; do not display leading zeros
+	bcf		pre_zero_flag				; do not display leading zeros
 
-LCD_val99_2:	
-	movlw	b'00001010'	; 10
-	movwf	temp2		
-	clrf	temp3		
+LCD_val99_2:
+	movlw	.10							; 10
+	movwf	cvt_temp2
+	clrf	cvt_temp3
 	rcall	DEC2ASCII
 
-	movlw	b'00000001'	; 1
-	movwf	temp2		
-	clrf	temp3		
-	bsf		pre_zero_flag ; last figure, display zero (0)
+	movlw	.1							; 1
+	movwf	cvt_temp2
+	clrf	cvt_temp3
+	bsf		pre_zero_flag				; last figure, display zero (0)
 	rcall	DEC2ASCII
-	RETURN
+	return
 
 	global	output99x_call
-
 output99x_call:
 	clrf	ignore_digits
 	incf	ignore_digits,F
-	clrf	temp4
+	clrf	cvt_temp4
 
 	movlw	d'99'
 	cpfslt	lo
 	movwf	lo							; Limit to 99
-	movff	lo, lo_temp		
+	movff	lo, lo_temp
 	clrf	hi_temp
-	bsf		pre_zero_flag		; display leading zeros
-	bra		LCD_val99_2			
-	
+	bsf		pre_zero_flag				; display leading zeros
+	bra		LCD_val99_2
+
+
 	global	output8_call
-
-output8_call:	
-    clrf	ignore_digits
+output8_call:
+	clrf	ignore_digits
 	incf	ignore_digits,F
-	clrf	temp4
+	clrf	cvt_temp4
 
 output8:
-	movff	lo, lo_temp		
+	movff	lo, lo_temp
 	clrf	hi_temp
-	bcf		pre_zero_flag	; do not display leading zeros
-	
-	movlw	b'01100100'	; 100
-	movwf	temp2		
-	clrf	temp3		
+	bcf		pre_zero_flag				; do not display leading zeros
+	movlw	.100						; 100
+	movwf	cvt_temp2
+	clrf	cvt_temp3
 	rcall	DEC2ASCII
-	bra		LCD_val99_2			
+	bra		LCD_val99_2
+
 
 	global	output16_4_call
-output16_4_call:                ; limit to 9999
+output16_4_call:						; limit to 9999
 	bsf		show_last4
-    ; 9999 = 27 0F = [39][15]
-    movlw   .40
-    cpfslt  hi                  ; hi < 40 ?
-    bra     output16_4_call_2   ; No, hi >= 40, do limit
-    ; Yes, hi <= 39
-    movlw   .39
-    cpfseq  hi                  ; hi = 39 ?
-    bra     output16_4_call_3   ; No, hi < 39, no limit needed
-    ; Yes, hi = 39
-    movlw   .15
-    cpfslt  lo                  ; lo < 15
-    movwf   lo                  ; No, lo >= 15, set lo = 15.
-    ; Yes, lo <= 14 or lo set to =15
-    bra     output16_4_call_3   ; done.
-output16_4_call_2:  ; Set to 9999
-    movlw   LOW     .9999
-    movwf   lo
-    movlw   HIGH    .9999
-    movwf   hi
+	; 9999 = 27 0F = [39][15]
+	movlw	.40
+	cpfslt	hi							; hi < 40 ?
+	bra		output16_4_call_2			; No, hi >= 40, do limit
+	; Yes, hi <= 39
+	movlw	.39
+	cpfseq	hi							; hi = 39 ?
+	bra		output16_4_call_3			; No, hi < 39, no limit needed
+	; Yes, hi = 39
+	movlw	.15
+	cpfslt	lo							; lo < 15
+	movwf	lo							; No, lo >= 15, set lo = 15.
+	; Yes, lo <= 14 or lo set to =15
+	bra		output16_4_call_3			; done.
+output16_4_call_2:						; Set to 9999
+	movlw	LOW  .9999
+	movwf	lo
+	movlw	HIGH .9999
+	movwf	hi
 output16_4_call_3:
-    bra     output16_call
+	bra		output16_call
 
 	global	output16_3_call
 	global	output16_call
 	global	output16
-output16_3_call:                ; limit to 999
+output16_3_call:						; limit to 999
 	bsf		show_last3
-    ; Limit to 3
-    movlw   .4
-    cpfslt  hi
-    bra     output16_3_call_2
-    movlw   .3
-    cpfseq  hi          ; =3?
-    bra     output16_3_call_3   ; No, done.
-    movlw   .231                ; Limit to 231(+768=999...)
-    cpfslt  lo
-    movwf   lo
-    bra     output16_3_call_3   ; done.
-output16_3_call_2:  ; Set to .999
-    movlw   LOW     .999
-    movwf   lo
-    movlw   HIGH    .999
-    movwf   hi
+	; Limit to 3
+	movlw	.4
+	cpfslt	hi
+	bra	output16_3_call_2
+	movlw	.3
+	cpfseq	hi							; =3?
+	bra		output16_3_call_3			; No, done.
+	movlw	.231						; Limit to 231(+768=999...)
+	cpfslt	lo
+	movwf	lo
+	bra		output16_3_call_3			; done.
+output16_3_call_2:						; Set to .999
+	movlw	LOW  .999
+	movwf	lo
+	movlw	HIGH .999
+	movwf	hi
 output16_3_call_3:
 output16_call:
 	clrf	ignore_digits
 	incf	ignore_digits,F
 	clrf	WREG
 output16:
-	movwf	temp4           ; Passed from output16dp macro, cleared by others.
-
-	bcf		all_zeros_flag	; do not display any zero from here unless there was at least one figure /zero
-
+	movwf	cvt_temp4						; Passed from output16dp macro, cleared by others.
+	bcf		all_zeros_flag				; do not display any zero from here unless there was at least one figure /zero
 	bsf		leading_zeros
-	tstfsz	temp4			; Display leading zeros at all?
+	tstfsz	cvt_temp4						; Display leading zeros at all?
 	bcf		leading_zeros
-
-	bsf		DP_done2		
-	tstfsz	temp4
-	bcf		DP_done2		; decimal point not yet set
-	
-	movff	lo, lo_temp		
-	movff	hi, hi_temp		
-	bcf		pre_zero_flag	; do not display leading zeros
-	
-	movlw	b'00010000'	; 10000s
-	movwf	temp2		 
+	bsf		DP_done2
+	tstfsz	cvt_temp4
+	bcf		DP_done2					; decimal point not yet set
+	movff	lo, lo_temp
+	movff	hi, hi_temp
+	bcf		pre_zero_flag				; do not display leading zeros
+	movlw	b'00010000'					; 10000s
+	movwf	cvt_temp2
 	movlw	b'00100111'
-	movwf	temp3		 
-	btfsc	show_last3		; display only last three figures?
-    bra     output16_sk5
-	btfsc	show_last4		; display only last four figures?
-    bra     output16_sk5
-	rcall	DEC2ASCII		; No, show all. Here: 5th order digit
+	movwf	cvt_temp3
+	btfsc	show_last3					; display only last three figures?
+	bra		output16_sk5
+	btfsc	show_last4					; display only last four figures?
+	bra		output16_sk5
+	rcall	DEC2ASCII					; No, show all. Here: 5th order digit
 
 output16_sk5:
-    bcf     show_last4
-	movlw	b'11101000'	; 1000s
-	movwf	temp2		 
+	bcf		show_last4
+	movlw	b'11101000'					; 1000s
+	movwf	cvt_temp2
 	movlw	b'00000011'
-	movwf	temp3		 
-	btfsc	DP_done2			; Is there a decimal point at all?
-	bra		output16_2			; no, use normal display mode
+	movwf	cvt_temp3
+	btfsc	DP_done2					; Is there a decimal point at all?
+	bra		output16_2					; no, use normal display mode
 
-	btfsc	all_zeros_flag		; display any zero from here
-	bra		output16_1			; there was a figure /zero already
+	btfsc	all_zeros_flag				; display any zero from here
+	bra		output16_1					; there was a figure /zero already
 
-	bsf		pre_zero_flag		; display figure if zero?
-	decfsz	temp4,W		
-	bcf		pre_zero_flag		; No
+	bsf		pre_zero_flag				; display figure if zero?
+	decfsz	cvt_temp4,W
+	bcf		pre_zero_flag				; No
 
 output16_1:
-	btfsc	DP_done				; Decimal point set already?
-	bsf		pre_zero_flag		; Yes, so display the rest
+	btfsc	DP_done						; Decimal point set already?
+	bsf		pre_zero_flag				; Yes, so display the rest
 output16_2:
-	btfss	show_last3			; display only last three figures?
-	rcall	DEC2ASCII			; No, show all. Here: 4th order digit
-	bcf		show_last3			; Yes, so display the rest
-
-	movlw	b'01100100'	; 100s
-	movwf	temp2		 
-	clrf	temp3		
-
-	btfsc	ignore_digit3		; Ignore 3rd-5th digit?
-	bra		output16_5			; Yes, skip the rest
-
-	btfsc	DP_done2			; Is there a decimal point at all?
-	bra		output16_3			; no, use normal display mode
-
-	btfsc	all_zeros_flag		; display any zero from here
-	bra		output16_2_1		; there was a figure /zero already
-
-	bsf		pre_zero_flag		; display figure if zero?
-	decfsz	temp4,W		
-	bcf		pre_zero_flag		; No
+	btfss	show_last3					; display only last three figures?
+	rcall	DEC2ASCII					; No, show all. Here: 4th order digit
+	bcf		show_last3					; Yes, so display the rest
+	movlw	b'01100100'					; 100s
+	movwf	cvt_temp2
+	clrf	cvt_temp3
+	btfsc	ignore_digit3				; Ignore 3rd-5th digit?
+	bra		output16_5					; Yes, skip the rest
+	btfsc	DP_done2					; Is there a decimal point at all?
+	bra		output16_3					; no, use normal display mode
+	btfsc	all_zeros_flag				; display any zero from here
+	bra		output16_2_1				; there was a figure /zero already
+	bsf		pre_zero_flag				; display figure if zero?
+	decfsz	cvt_temp4,W
+	bcf		pre_zero_flag				; No
 
 output16_2_1:
-	btfsc	DP_done				; Decimal point set already?
-	bsf		pre_zero_flag		; Yes, so display the rest
-	btfsc	DP_done2			; Is there a decimal point at all?
-	bsf		pre_zero_flag		; No, so display the rest
+	btfsc	DP_done						; Decimal point set already?
+	bsf		pre_zero_flag				; Yes, so display the rest
+	btfsc	DP_done2					; Is there a decimal point at all?
+	bsf		pre_zero_flag				; No, so display the rest
 output16_3:
-	rcall	DEC2ASCII			;3th order digit...
-
-	movlw	b'00001010'	; 10s
-	movwf	temp2		
-	clrf	temp3		
-	btfsc	DP_done2	
-	bra		output16_4	
-
-	btfsc	all_zeros_flag		; display any zero from here
-	bra		output16_3_1		; there was a figure /zero already
-
+	rcall	DEC2ASCII					; 3th order digit...
+	movlw	b'00001010'					; 10s
+	movwf	cvt_temp2
+	clrf	cvt_temp3
+	btfsc	DP_done2
+	bra		output16_4
+	btfsc	all_zeros_flag				; display any zero from here
+	bra		output16_3_1				; there was a figure /zero already
 	bsf		pre_zero_flag
-	decfsz	temp4,W		
+	decfsz	cvt_temp4,W
 	bcf		pre_zero_flag
 
 output16_3_1:
-	btfsc	DP_done		
+	btfsc	DP_done
+	bsf		pre_zero_flag
+	btfsc	DP_done2
 	bsf		pre_zero_flag
-	btfsc	DP_done2	
-	bsf		pre_zero_flag		
 output16_4:
-	btfsc	ignore_digit4		; Ignore 4-5th digit?
-	bra		output16_5			; Yes, skip the rest
-	rcall	DEC2ASCII			; 2nd order digit
+	btfsc	ignore_digit4				; Ignore 4-5th digit?
+	bra		output16_5					; Yes, skip the rest
+	rcall	DEC2ASCII					; 2nd order digit
 
-	movlw	b'00000001'	; 1s
-	movwf	temp2		
-	clrf	temp3		 
+	movlw	b'00000001'					; 1s
+	movwf	cvt_temp2
+	clrf	cvt_temp3
 	bsf		pre_zero_flag
-	btfss	ignore_digit5		; Ignore 5th digit?
-	rcall	DEC2ASCII			; 1st order digit
-	bcf		ignore_digit5		; yes, and clear flag
+	btfss	ignore_digit5				; Ignore 5th digit?
+	rcall	DEC2ASCII					; 1st order digit
+	bcf		ignore_digit5				; yes, and clear flag
 output16_5:
-    bcf     ignore_digit4		; Clear flag
-	bcf		ignore_digit3		; Clear flag
+	bcf		ignore_digit4				; Clear flag
+	bcf		ignore_digit3				; Clear flag
 	clrf	ignore_digits
 	incf	ignore_digits,F
 	bcf		DP_done
-	RETURN						; Done with convert.asm...
-	
-DEC2ASCII	clrf	temp1		; converts into ASCII code
-DEC2ASCII_2	movf	temp3,W
+	RETURN								; Done with convert.asm...
+
+
+DEC2ASCII:
+	clrf	cvt_temp1						; converts into ASCII code
+DEC2ASCII_2:
+	movf	cvt_temp3,W
 	subwf	hi_temp,W
-	btfss	STATUS,C	
-	bra		DEC2ASCII_4	
-	bnz		DEC2ASCII_3		
-
-	movf	temp2,W	
+	btfss	STATUS,C
+	bra		DEC2ASCII_4
+	bnz		DEC2ASCII_3
+	movf	cvt_temp2,W
 	subwf	lo_temp,W
 	btfss	STATUS,C
 	bra		DEC2ASCII_4
-	
-DEC2ASCII_3	movf	temp3,W
+DEC2ASCII_3:
+	movf	cvt_temp3,W
 	subwf	hi_temp,F
-	movf	temp2,W
+	movf	cvt_temp2,W
 	subwf	lo_temp,F
 	btfss	STATUS,C
 	decf	hi_temp,F
-	incf	temp1,F	
+	incf	cvt_temp1,F
 	bsf		pre_zero_flag
 	bra		DEC2ASCII_2
-
-DEC2ASCII_4
+DEC2ASCII_4:
 	decfsz	ignore_digits,F
 	return
-	incf	ignore_digits,F	; so ignore_digits stays zero for the test above
-	movlw	'0'				; Offset for Ascii-value
-	addwf	temp1,W
-	btfsc	pre_zero_flag	; is this a leading zero?
-	bra		DEC2ASCII_4_1	; no
+	incf	ignore_digits,F				; so ignore_digits stays zero for the test above
+	movlw	'0'							; Offset for ASCII-value
+	addwf	cvt_temp1,W
+	btfsc	pre_zero_flag				; is this a leading zero?
+	bra		DEC2ASCII_4_1				; no
 	btfsc	leftbind
 	bra		DEC2ASCII_6
-	movlw	' '				; instead of leading zeros a space!
+	movlw	' '							; instead of leading zeros a space!
 	bra		DEC2ASCII_5
 DEC2ASCII_4_1:
-	bsf		all_zeros_flag	; display any zero from here
-DEC2ASCII_5
+	bsf		all_zeros_flag				; display any zero from here
+DEC2ASCII_5:
 	movwf	POSTINC2
-DEC2ASCII_6	
-	decfsz	temp4,F			; Set decimal point?
-	RETURN					; No
-	movlw	"."				; Yes
+DEC2ASCII_6:
+	decfsz	cvt_temp4,F						; Set decimal point?
+	RETURN								; No
+	movlw	"."							; Yes
 	movwf	POSTINC2
 	bsf		DP_done
-	RETURN
-	
-	END
\ No newline at end of file
+	return
+
+	END
--- a/src/convert.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/convert.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File convert.inc
+;   File convert.inc												## V2.98
 ;
 ;   Converts register values to string
 ;
@@ -9,40 +9,40 @@
 ; HISTORY
 ;   2007-10-07 : [MH]  Creation for OSTC sources
 ;   2010-12-10 : [jDG] Optimize macro size
-;
+
 
-    extern  output16_3_call
-output_16_3 macro			; displays only last three figures from a 16Bit value (0-999)
-	call 	output16_3_call
+	extern	output16_3_call
+output_16_3	macro				; displays only last three figures from a 16Bit value (0-999)
+	call	output16_3_call
 	endm
 
-    extern  output16_4_call
-output_16_4 macro			; displays only last four figures from a 16Bit value (0-9999)
-	call 	output16_4_call
+	extern	output16_4_call
+output_16_4	macro				; displays only last four figures from a 16Bit value (0-9999)
+	call	output16_4_call
+	endm
+
+	extern	output16
+output_16dp	macro dp_position	; 16 Bit with decimal point
+	movlw	dp_position
+	call	output16
 	endm
 
-    extern  output16
-output_16dp macro temp4		; 16Bit with decimal point
-	movlw	temp4			; Temp4 stores position for decimal point
-	call 	output16
-	endm					
+	extern	output16_call
+output_16	macro				; 16Bit Normal
+	call	output16_call
+	endm
 
-    extern  output16_call
-output_16 macro				; 16Bit Normal
-	call 	output16_call
+	extern	output8_call
+output_8	macro				; 8 Bit Normal
+	call	output8_call
 	endm
 
-   extern  output8_call
-output_8 macro				; 8 Bit Normal
- 	call    output8_call
+	extern	output99_call
+output_99	macro				; displays only last two figures from a 8Bit value (0-99)
+	call	output99_call
 	endm
 
-	extern  output99_call
-output_99 macro				; displays only last two figures from a 8Bit value (0-99)
-	call 	output99_call
+	extern	output99x_call
+output_99x	macro				; displays only last two figures from a 8Bit value with leading zero (00-99) 
+	call	output99x_call
 	endm
-
-	extern  output99x_call
-output_99x macro			; displays only last two figures from a 8Bit value with leading zero (00-99) 
-	call 	output99x_call
-	endm
--- a/src/customview.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/customview.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File customview.asm								REFACTORED VERSION V2.95
+;   File customview.asm								REFACTORED VERSION V2.98
 ;
 ;   Customview in Surfacemode and Divemode
 ;
@@ -11,87 +11,94 @@
 
 ;=============================================================================
 
-#include    "hwos.inc"                  ; Mandatory header
-#include	"tft_outputs.inc"
-#include 	"strings.inc"
-#include 	"tft.inc"
-#include	"isr.inc"
-#include	"wait.inc"
-#include	"surfmode.inc"
-#include	"convert.inc"
-#include	"divemode.inc"
-#include    "i2c.inc"
-#include    "start.inc"	
+#include "hwos.inc"						; Mandatory header
+#include "tft_outputs.inc"
+#include "strings.inc"
+#include "tft.inc"
+#include "isr.inc"
+#include "wait.inc"
+#include "surfmode.inc"
+#include "convert.inc"
+#include "divemode.inc"
+#include "i2c.inc"
+#include "start.inc"
 
-gui     CODE
+
+	extern	gaslist_strcat_gas_mod
+	extern	char_I_deco_model
+	extern	TFT_sensor_mV
+	extern	TFT_surface_compass_mask
+	extern	TFT_dive_compass_mask
+
+
+gui	CODE
 
 ;=============================================================================
 ; Do every-second tasks for the custom view area (Dive mode)
 
 	global	customview_second
 customview_second:
-	movff	menupos3,WREG			; copy current view (1-...)
+	movff	menupos3,WREG				; copy current view (1-...)
 	dcfsnz	WREG,F
-	goto    TFT_update_ppo2_sensors	; Update Sensor data ; and return
+	goto	TFT_update_ppo2_sensors		; Update Sensor data ; and return
 	dcfsnz	WREG,F
-	goto    TFT_update_avr_stopwatch ; Update average depth and stopwatch; and return
+	goto	TFT_update_avr_stopwatch	; Update average depth and stopwatch; and return
 	dcfsnz	WREG,F
-	goto    TFT_decoplan			; Show decoplan ; and return
+	goto	TFT_decoplan				; Show decoplan ; and return
 	dcfsnz	WREG,F
-	goto    TFT_battinfo_tissues_clock ; Update Battery, Tissues and clock ; and return
+	goto	TFT_battinfo_tissues_clock	; Update Battery, Tissues and clock ; and return
 	dcfsnz	WREG,F
-	goto    TFT_gf_info				; Update GF informations ; and return
+	goto	TFT_gf_info					; Update GF informations ; and return
 	dcfsnz	WREG,F
-	return							; Compass updated separately (faster) in divemode;
+	return								; Compass updated separately (faster) in divemode;
 	dcfsnz	WREG,F
-	nop								; ex goto TFT_dyn_gaslist
+	nop									; ex goto TFT_dyn_gaslist
 	dcfsnz	WREG,F
-	goto	TFT_CNS					; Show CNS values for end-of-dive, ex goto TFT_hud_voltages
+	goto	TFT_CNS						; Show CNS values for end-of-dive, ex goto TFT_hud_voltages
 	dcfsnz	WREG,F
-	bra		customview_1sec_view9	; Make sure to change value in "check_ppo2_display:" when moving around custom views
+	bra		customview_1sec_view9		; Make sure to change value in "check_ppo2_display:" when moving around custom views
 	dcfsnz	WREG,F
-	goto    TFT_sensor_check		; Show ppO2 of O2 and Diluent ; and return
+	goto	TFT_sensor_check			; Show ppO2 of O2 and Diluent ; and return
 	dcfsnz	WREG,F
-	goto	TFT_ppo2_ead_end_cns	; Show ppO2, END/EAD and CNS; and return
+	goto	TFT_ppo2_ead_end_cns		; Show ppO2, END/EAD and CNS; and return
 	dcfsnz	WREG,F
-	goto	TFT_pscr_info			; Show ppO2, drop and lung ratio; and return
+	goto	TFT_pscr_info				; Show ppO2, drop and lung ratio; and return
 	dcfsnz	WREG,F
-	goto	TFT_gas_needs			; Show gas needs
+	goto	TFT_gas_needs				; Show gas needs
 
 	; Menupos3=0, do nothing
 	return
 
-customview_1sec_view9:              ; Ceiling
-    call    TFT_ceiling             ; Show Ceiling
-    call    TFT_display_pure_ppo2	; ppO2 value
-    extern  char_I_deco_model		; current GF value
-    TSTOSS  char_I_deco_model       ; 0 = ZH-L16, 1 = ZH-L16-GF
-    return                          ; No GF info for non-GF modes
-    goto    TFT_gf_info             ; Update GF informations ; and return
+customview_1sec_view9:					; Ceiling
+	call	TFT_ceiling					; Show Ceiling
+	call	TFT_display_pure_ppo2		; ppO2 value
+	TSTOSS	char_I_deco_model			; 0 = ZH-L16, 1 = ZH-L16-GF
+	return								; No GF info for non-GF modes
+	goto	TFT_gf_info					; Update GF informations ; and return
 
-    global  customview_alternative_second
-customview_alternative_second:    
-	movff	menupos3,WREG			; copy current view (1-...)
+	global	customview_alternative_second
+customview_alternative_second:
+	movff	menupos3,WREG				; copy current view (1-...)
 	dcfsnz	WREG,F
 	bra		customview_alt_second_view1	; View 1
 	dcfsnz	WREG,F
-	nop 							; View 2
+	nop									; View 2
 
 	; Menupos3=0, do nothing
 	return
-	
+
 customview_alt_second_view1:
-    bsf	    FLAG_TFT_max_depth_alt
-    bsf	    FLAG_TFT_big_deco_alt
-    return
+	bsf		FLAG_TFT_max_depth_alt
+	bsf		FLAG_TFT_big_deco_alt
+	return
 
 ;=============================================================================
 ; Do every-minute tasks for the custom view area
 
 	global	customview_minute
 customview_minute:
-    return
-;	movff	menupos3,WREG           ; copy
+	return
+;	movff	menupos3,WREG				; copy
 ;	dcfsnz	WREG,F
 ;	bra		customview_1min_view1
 ;	dcfsnz	WREG,F
@@ -128,609 +135,575 @@
 ;customview_1min_view9:
 ;customview_1min_view10:
 ;customview_1min_view11:
-;	return
+;return
 
-    global  surf_customview_toggle
+	global	surf_customview_toggle
 surf_customview_toggle:
 	bcf		switch_right
-	incf	menupos3,F			            ; Number of customview to show
-	movlw	d'9'							; Max number of customsviews in surface mode
-	cpfsgt	menupos3			            ; Max reached?
-	bra		surf_customview_mask		    ; No, show
-    movlw   .1
-	movwf   menupos3			            ; Reset to one (Always one custom view visible)
+	incf	menupos3,F					; Number of customview to show
+	movlw	d'9'						; Max number of customsviews in surface mode
+	cpfsgt	menupos3					; Max reached?
+	bra		surf_customview_mask		; No, show
+	movlw	.1
+	movwf	menupos3					; Reset to one (Always one custom view visible)
 
-    global  surf_customview_mask
+	global	surf_customview_mask
 surf_customview_mask:
-    WIN_BOX_BLACK    .50,surf_warning1_row-1, .0, surf_decotype_column-.1	; top, bottom, left, right
-    ; Prepare title
-    WIN_TINY    surf_customview_title_column,surf_customview_title_row
-    WIN_COLOR   color_greenish
-	movff	menupos3,WREG                   ; Menupos3 holds number of customview function
+	WIN_BOX_BLACK .50,surf_warning1_row-1, .0, surf_decotype_column-.1	; top, bottom, left, right
+	; Prepare title
+	WIN_TINY  surf_customview_title_column,surf_customview_title_row
+	WIN_COLOR color_greenish
+	movff	menupos3,WREG				; Menupos3 holds number of customview function
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view1      ; OC Gas list
+	bra		surf_customview_init_view1	; OC Gas list
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view2      ; CC Dil list
+	bra		surf_customview_init_view2	; CC Dil list
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view3      ; CC SP list
+	bra		surf_customview_init_view3	; CC SP list
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view4      ; Custom Text
+	bra		surf_customview_init_view4	; Custom Text
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view5      ; Tissue Diagram
+	bra		surf_customview_init_view5	; Tissue Diagram
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view6      ; Compass
+	bra		surf_customview_init_view6	; Compass
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view7      ; Deco settings
+	bra		surf_customview_init_view7	; Deco settings
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view8      ; Last Dive info
+	bra		surf_customview_init_view8	; Last Dive info
 	dcfsnz	WREG,F
-	bra		surf_customview_init_view9      ; Sensor mV readings
+	bra		surf_customview_init_view9	; Sensor mV readings
 
-    call    I2C_sleep_accelerometer         ; Stop accelerometer
-    call    I2C_sleep_compass               ; Stop compass
+	call	I2C_sleep_accelerometer		; Stop accelerometer
+	call	I2C_sleep_compass			; Stop compass
 
-    movlw   .1
-	movwf   menupos3			            ; Reset to one (Always one custom view visible)
+	movlw	.1
+	movwf	menupos3					; Reset to one (Always one custom view visible)
 
-surf_customview_init_view1:                 ; View1: OC Gas list
-    btfsc   FLAG_gauge_mode
-    bra     surf_customview_toggle
-    btfsc   FLAG_apnoe_mode
-    bra     surf_customview_toggle
-    btfsc   FLAG_ccr_mode
-    bra     surf_customview_init_view1_bail ; Bailout version of "OC Gas List"
-    btfsc   FLAG_pscr_mode
-    bra     surf_customview_init_view1_bail ; Bailout version of "OC Gas List"
-    STRCPY_TEXT_PRINT tGaslist              ; Title of customview
-    call    TFT_standard_color
-    call	TFT_gaslist_surfmode            ; Show gas list
-    bra		customview_toggle_exit          ; Done.
+surf_customview_init_view1:				; View1: OC Gas list
+	btfsc	FLAG_gauge_mode
+	bra		surf_customview_toggle
+	btfsc	FLAG_apnoe_mode
+	bra		surf_customview_toggle
+	btfsc	FLAG_ccr_mode
+	bra		surf_customview_init_view1_bail ; Bailout version of "OC Gas List"
+	btfsc	FLAG_pscr_mode
+	bra		surf_customview_init_view1_bail ; Bailout version of "OC Gas List"
+	STRCPY_TEXT_PRINT tGaslist			; Title of customview
+	call	TFT_standard_color
+	call	TFT_gaslist_surfmode		; Show gas list
+	bra		customview_toggle_exit		; Done.
 
 surf_customview_init_view1_bail:
-    STRCPY_TEXT_PRINT tDiveBailout          ; Title of customview
-    call    TFT_standard_color
-    call	TFT_gaslist_surfmode            ; Show gas list
-    bra		customview_toggle_exit          ; Done.
+	STRCPY_TEXT_PRINT tDiveBailout		; Title of customview
+	call	TFT_standard_color
+	call	TFT_gaslist_surfmode		; Show gas list
+	bra		customview_toggle_exit		; Done.
 
-surf_customview_init_view2:                 ; View2: CC Dil list
-    btfsc   FLAG_pscr_mode
-    bra     surf_customview_init_view2_2
-    btfss   FLAG_ccr_mode
-    bra     surf_customview_toggle
-    btfsc   FLAG_gauge_mode
-    bra     surf_customview_toggle
-    btfsc   FLAG_apnoe_mode
-    bra     surf_customview_toggle
-surf_customview_init_view2_2:    
-    STRCPY_TEXT_PRINT tGaslistCC            ; Title of customview
-    call    TFT_standard_color
-    call	TFT_dillist_surfmode            ; Show diluent list
-    bra		customview_toggle_exit          ; Done.
+surf_customview_init_view2:				; View2: CC Dil list
+	btfsc	FLAG_pscr_mode
+	bra		surf_customview_init_view2_2
+	btfss	FLAG_ccr_mode
+	bra		surf_customview_toggle
+	btfsc	FLAG_gauge_mode
+	bra		surf_customview_toggle
+	btfsc	FLAG_apnoe_mode
+	bra		surf_customview_toggle
+surf_customview_init_view2_2:	
+	STRCPY_TEXT_PRINT tGaslistCC		; Title of customview
+	call	TFT_standard_color
+	call	TFT_dillist_surfmode		; Show diluent list
+	bra		customview_toggle_exit		; Done.
+
+surf_customview_init_view3:				; View3: CC SP list
+	btfss	FLAG_ccr_mode
+	bra		surf_customview_toggle
+	btfsc	FLAG_gauge_mode
+	bra		surf_customview_toggle
+	btfsc	FLAG_apnoe_mode
+	bra	surf_customview_toggle
+	STRCPY_TEXT_PRINT tFixedSetpoints	; Title of customview
+	call	TFT_standard_color
+	call	TFT_splist_surfmode			; Show Setpoint list
+	bra		customview_toggle_exit		; Done.
 
-surf_customview_init_view3:                 ; View3: CC SP list
-    btfss   FLAG_ccr_mode
-    bra     surf_customview_toggle
-    btfsc   FLAG_gauge_mode
-    bra     surf_customview_toggle
-    btfsc   FLAG_apnoe_mode
-    bra     surf_customview_toggle
-    STRCPY_TEXT_PRINT tFixedSetpoints       ; Title of customview
-    call    TFT_standard_color
-    call	TFT_splist_surfmode             ; Show Setpoint list
-    bra		customview_toggle_exit          ; Done.
-    
-surf_customview_init_view9:		    		; View 9: Sensor mV on the surface
-    btfsc   FLAG_ccr_mode 
-    bra	    surf_customview_init_view9a	    ; we are in CCR mode 
-    btfsc   FLAG_pscr_mode
-    bra	    surf_customview_init_view9a	    ; we are in PSCR mode 
-    bra	    surf_customview_toggle	    	; we are not in any rebreather mode, so skip 
+surf_customview_init_view9:				; View 9: Sensor mV on the surface
+	btfsc	FLAG_ccr_mode 
+	bra		surf_customview_init_view9a	; we are in CCR mode 
+	btfsc	FLAG_pscr_mode
+	bra		surf_customview_init_view9a	; we are in PSCR mode 
+	bra		surf_customview_toggle		; we are not in any rebreather mode, so skip 
 surf_customview_init_view9a: 
-    movff   opt_ccr_mode,WREG		    	; =0: Fixed SP, =1: Sensor, =2: Auto SP 
-    sublw   .1				    			; opt_ccr_mode = 1 (Sensor)? 
-    bnz	    surf_customview_toggle	    	; sorry, no sensors, skip again 
-    STRCPY_TEXT_PRINT tSensorMilliVolt	    ; Title of customview 
-    call    TFT_standard_color 
-    extern  TFT_sensor_mV
-    call    TFT_sensor_mV		    		; write sensor mV readings to screen 
-    bra	    customview_toggle_exit			; Done.
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP 
+	sublw	.1							; opt_ccr_mode = 1 (Sensor)? 
+	bnz		surf_customview_toggle		; sorry, no sensors, skip again 
+	STRCPY_TEXT_PRINT tSensorMilliVolt	; Title of customview 
+	call	TFT_standard_color 
+	call	TFT_sensor_mV				; write sensor mV readings to screen 
+	bra		customview_toggle_exit		; Done.
 
-surf_customview_init_view4:                 ; View4: Custom text
-    call    TFT_standard_color
-    call	TFT_custom_text                 ; Show the custom text
-    bra		customview_toggle_exit          ; Done.
+surf_customview_init_view4:				; View4: Custom text
+	call	TFT_standard_color
+	call	TFT_custom_text				; Show the custom text
+	bra		customview_toggle_exit		; Done.
 
-surf_customview_init_view5:                 ; View5: Tissue Diagram
-    btfsc   FLAG_gauge_mode
-    bra     surf_customview_toggle
-    btfsc   FLAG_apnoe_mode
-    bra     surf_customview_toggle
-    call    TFT_standard_color
-    call	TFT_surface_tissues             ; Show Tissue diagram
-    bra		customview_toggle_exit          ; Done.
+surf_customview_init_view5:				; View5: Tissue Diagram
+	btfsc	FLAG_gauge_mode
+	bra		surf_customview_toggle
+	btfsc	FLAG_apnoe_mode
+	bra		surf_customview_toggle
+	call	TFT_standard_color
+	call	TFT_surface_tissues			; Show Tissue diagram
+	bra		customview_toggle_exit		; Done.
 
-surf_customview_init_view6:                 ; View6: Compass
-    call    I2C_init_accelerometer          ; Start accelerometer
-    call    I2C_init_compass                ; Start compass
-    extern  TFT_surface_compass_mask
-    call	TFT_surface_compass_mask        ; Show compass
-    bra		customview_toggle_exit          ; Done.
-    
+surf_customview_init_view6:				; View6: Compass
+	call	I2C_init_accelerometer		; Start accelerometer
+	call	I2C_init_compass			; Start compass
+	call	TFT_surface_compass_mask	; Show compass
+	bra		customview_toggle_exit		; Done.
+
 surf_customview_init_view7:
-    btfsc   FLAG_gauge_mode		    		; View7: Deco settings
-    bra     surf_customview_toggle
-    btfsc   FLAG_apnoe_mode
-    bra     surf_customview_toggle
-	
-    call    TFT_surface_decosettings        ; Show all deco settings
-    bra		customview_toggle_exit          ; Done.
+	btfsc	FLAG_gauge_mode				; View7: Deco settings
+	bra		surf_customview_toggle
+	btfsc	FLAG_apnoe_mode
+	bra		surf_customview_toggle
+
+	call	TFT_surface_decosettings	; Show all deco settings
+	bra		customview_toggle_exit		; Done.
+
+surf_customview_init_view8:				; View8: Last dive info
+	call	TFT_surface_lastdive		; Show last dive interval
+	bra		customview_toggle_exit		; Done.
+
 
-surf_customview_init_view8:                 ; View8: Last dive info
-    call	TFT_surface_lastdive			; Show last dive interval
-    bra		customview_toggle_exit          ; Done.
-    
-    
-    global  menuview_toggle
-menuview_toggle:            				; Show Menu or the simulator tasks
-    btfss   alternative_divelayout			; In alternative layout mode?
-    bra	    menuview_toggle2				; No
-    ; Switch back to normal mode for any menu tasks
-    bcf	    alternative_divelayout			; clear flag
-    bsf	    FLAG_TFT_divemode_mask			; Set flag for mask
-    bsf	    FLAG_TFT_max_depth				; set flag
-    btfss   decostop_active             	; deco?
-    bsf	    FLAG_TFT_display_ndl_mask   	; NDL
-    btfsc   decostop_active             	; deco?
-    bsf	    FLAG_TFT_display_deko_mask		; Deco
-    call    TFT_ClearScreen					; Clear screen
-    rcall   customview_mask					; Re-Draw customview
-    
+	global	menuview_toggle
+menuview_toggle:						; Show Menu or the simulator tasks
+	btfss	alternative_divelayout		; In alternative layout mode?
+	bra		menuview_toggle2			; No
+	; Switch back to normal mode for any menu tasks
+	bcf		alternative_divelayout		; clear flag
+	bsf		FLAG_TFT_divemode_mask		; Set flag for mask
+	bsf		FLAG_TFT_max_depth			; set flag
+	btfss	decostop_active				; deco?
+	bsf		FLAG_TFT_display_ndl_mask	; NDL
+	btfsc	decostop_active				; deco?
+	bsf		FLAG_TFT_display_deko_mask	; Deco
+	call	TFT_ClearScreen				; Clear screen
+	rcall	customview_mask				; Re-Draw customview
+
 menuview_toggle2:
-    movlw   divemode_menuview_timeout
-    movwf   timeout_counter3
-    bsf     menuview
-    bcf		switch_left
-    incf	menupos2,F			            ; Number of options to show
-    movlw	d'10'					        ; Max number of options in divemode
-    cpfsgt	menupos2			            ; Max reached?
-    bra		menuview_mask		            ; No, show
-    global  menuview_toggle_reset
-menuview_toggle_reset:                      ; Timeout occurred
-    clrf    menupos2
-    bcf     menuview
+	movlw	divemode_menuview_timeout
+	movwf	timeout_counter2
+	bsf		menuview
+	bcf		switch_left
+	incf	menupos2,F					; Number of options to show
+	movlw	d'10'						; Max number of options in divemode
+	cpfsgt	menupos2					; Max reached?
+	bra		menuview_mask				; No, show
+	global	menuview_toggle_reset
+menuview_toggle_reset:					; Timeout occurred
+	clrf	menupos2
+	bcf		menuview
 menuview_mask:
-    WIN_BOX_BLACK   dm_simtext_row, dm_simtext_row+.23, dm_simtext_column, dm_simtext_column+.49 ; top, bottom, left, right
-    btfss   FLAG_gauge_mode
-    bra     menuview_mask2
-    ; Clear some more in gauge mode  -- "Reset Avg." text is longer than normal simtext
-    WIN_BOX_BLACK   dm_simtext_row, dm_simtext_row+.23, dm_simtext_column+.50, dm_simtext_column+.70  ; top, bottom, left, right
+	WIN_BOX_BLACK dm_simtext_row, dm_simtext_row+.23, dm_simtext_column, dm_simtext_column+.49 ; top, bottom, left, right
+	btfss	FLAG_gauge_mode
+	bra		menuview_mask2
+	; Clear some more in gauge mode -- "Reset Avg." text is longer than normal simtext
+	WIN_BOX_BLACK dm_simtext_row, dm_simtext_row+.23, dm_simtext_column+.50, dm_simtext_column+.70 ; top, bottom, left, right
 menuview_mask2:
-    call    TFT_draw_gassep_line
-    movlw   color_yellow
-    call	TFT_set_color
-    bsf     win_invert                  	; Set invert flag
-    WIN_SMALL   dm_simtext_column,dm_simtext_row
-	movff	menupos2,WREG                   ; Menupos2 holds number of menu option to show
+	call	TFT_draw_gassep_line
+	movlw	color_yellow
+	call	TFT_set_color
+	bsf		win_invert					; Set invert flag
+	WIN_SMALL dm_simtext_column,dm_simtext_row
+	movff	menupos2,WREG				; Menupos2 holds number of menu option to show
 	dcfsnz	WREG,F
-	bra		menuview_view_gaschange         ; If a better gas is indicated
+	bra		menuview_view_gaschange		; If a better gas is indicated
 	dcfsnz	WREG,F
-	bra		menuview_view1                  ; "Menu?" (Not in Gauge and Anpnoe)
+	bra		menuview_view1				; "Menu?" (Not in Gauge and Anpnoe)
 	dcfsnz	WREG,F
-	bra		menuview_view2                  ; "Quit Simulation?" (Sim only)
+	bra		menuview_view2				; "Quit Simulation?" (Sim only)
 	dcfsnz	WREG,F
-	bra		menuview_view3                  ; "Descent 1m" (Sim only)
+	bra		menuview_view3				; "Descent 1m" (Sim only)
 	dcfsnz	WREG,F
-	bra		menuview_view4                  ; "Ascend 1m" (Sim only)
+	bra		menuview_view4				; "Ascend 1m" (Sim only)
 	dcfsnz	WREG,F
-	bra		menuview_view5                  ; "Quit Apnea mode?" (Apnea only)
+	bra		menuview_view5				; "Quit Apnea mode?" (Apnea only)
 	dcfsnz	WREG,F
-	bra		menuview_view6                  ; "Reset Avr." (Gauge only)
+	bra		menuview_view6				; "Reset Avr." (Gauge only)
 	dcfsnz	WREG,F
-	bra		menuview_view7                  ; "Sim:+5mins"  (Sim only)
+	bra		menuview_view7				; "Sim:+5mins" (Sim only)
 	dcfsnz	WREG,F
-	bra		menuview_view8                  ; "Heading"  (When compass is shown)
+	bra		menuview_view8				; "Heading" (When compass is shown)
 	dcfsnz	WREG,F
-	bra		menuview_view9                  ; "Layout"  (Alternative Layout, aka Blind mode)
-	
+	bra		menuview_view9				; "Layout" (Alternative Layout, aka Blind mode)
+
 menuview_exit:
-    call	TFT_standard_color
-    bcf     win_invert              		; Reset invert flag
-	return                                  ; Menupos2 = 0, Show nothing
+	call	TFT_standard_color
+	bcf		win_invert					; Reset invert flag
+	return								; Menupos2 = 0, Show nothing
 
 
 menuview_view_gaschange:
-    extern  gaslist_strcat_gas_mod
-    btfss	better_gas_available            ; =1: A better gas is available
-	bra		menuview_toggle 				; No, call next option
-    btfsc   divemode_gaschange              ; Skip if the last gas change is not done yet.
-    bra		menuview_toggle
-    bsf     short_gas_decriptions           ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-    movff   better_gas_number,PRODL     	; number (1-5) of the "better gas" in divemode, =0: no better gas available
-    decf    PRODL,F
-    call    gaslist_strcat_gas_mod          ; Append gas description of gas #PRODL (0-4) to current string
-    movlw   .5
-    movwf   FSR2L                           ; Point to char 6 (5 chars gas description only)
-    STRCAT_PRINT "?"
-    bra     menuview_exit                   ; Done.
+	btfss	better_gas_available		; =1: A better gas is available
+	bra		menuview_toggle				; No, call next option
+	btfsc	divemode_gaschange			; Skip if the last gas change is not done yet.
+	bra		menuview_toggle
+	bsf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	movff	better_gas_number,PRODL		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+	decf	PRODL,F
+	call	gaslist_strcat_gas_mod		; Append gas description of gas #PRODL (0-4) to current string
+	movlw	.5
+	movwf	FSR2L						; Point to char 6 (5 chars gas description only)
+	STRCAT_PRINT "?"
+	bra		menuview_exit				; Done.
 menuview_view1:
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		menuview_toggle 				; Call next option
-	btfsc	FLAG_gauge_mode					; In Gauge mode?
-	bra		menuview_toggle 				; Call next option
-	STRCPY_TEXT_PRINT tDivePreMenu			; "Menu?"
-    bra     menuview_exit                   ; Done.
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		menuview_toggle				; Call next option
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		menuview_toggle				; Call next option
+	STRCPY_TEXT_PRINT tDivePreMenu		; "Menu?"
+	bra		menuview_exit				; Done.
 menuview_view2:
-    btfss  	simulatormode_active			; View only for simulator mode
-	bra		menuview_toggle 				; Call next option
-	STRCPY_TEXT_PRINT tQuitSim				; "Quit Simulation?"
-    bra     menuview_exit                   ; Done.
+	btfss	simulatormode_active		; View only for simulator mode
+	bra		menuview_toggle				; Call next option
+	STRCPY_TEXT_PRINT tQuitSim			; "Quit Simulation?"
+	bra		menuview_exit				; Done.
 menuview_view3:
-    btfss  	simulatormode_active			; View only for simulator mode
-	bra		menuview_toggle 				; Call next option
-	STRCPY_PRINT "Sim-1m"					; CHANGED, now "-" for going down
-    bra     menuview_exit                   ; Done.
+	btfss	simulatormode_active		; View only for simulator mode
+	bra		menuview_toggle				; Call next option
+	STRCPY_PRINT "Sim-1m"				; "-" for going down
+	bra	menuview_exit					; Done.
 menuview_view4:
-    btfss  	simulatormode_active			; View only for simulator mode
-	bra		menuview_toggle 				; Call next option
-	STRCPY_PRINT "Sim+1m"					; CHANGED, now "+" for going up
-    bra     menuview_exit                   ; Done.
+	btfss	simulatormode_active		; View only for simulator mode
+	bra		menuview_toggle				; Call next option
+	STRCPY_PRINT "Sim+1m"				; "+" for going up
+	bra		menuview_exit				; Done.
 menuview_view5:
-	btfss	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		menuview_toggle 				; No, call next option
-	btfss	FLAG_active_descent				; Are we descending?
-	bra		menuview_toggle 				; Yes
+	btfss	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		menuview_toggle				; No, call next option
+	btfss	FLAG_active_descent			; Are we descending?
+	bra		menuview_toggle				; Yes
 ; We are at the surface:
-	STRCPY_TEXT_PRINT	tQuitSim			; "Quit Apnea mode?"
-	bra     menuview_exit                   ; Done.
+	STRCPY_TEXT_PRINT tQuitSim			; "Quit Apnea mode?"
+	bra		menuview_exit				; Done.
 menuview_view6:
-	btfss	FLAG_gauge_mode					; In Gauge mode?
-	bra		menuview_toggle 				; No, call next option
-	STRCPY_TEXT_PRINT	tDivemenu_ResetAvg  ; "Reset Avg."
-	bra     menuview_exit                   ; Done.
+	btfss	FLAG_gauge_mode				; In Gauge mode?
+	bra		menuview_toggle				; No, call next option
+	STRCPY_TEXT_PRINT tDivemenu_ResetAvg; "Reset Avg."
+	bra		menuview_exit				; Done.
 menuview_view7:
-    btfss  	simulatormode_active			; View only for simulator mode
-	bra		menuview_toggle 				; Call next option
-	btfsc	FLAG_gauge_mode					; In Gauge mode?
-	bra		menuview_toggle 				; Yes, call next option
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		menuview_toggle 				; Yes, call next option
-	STRCPY_PRINT	"Sim+5'"
-	bra     menuview_exit                   ; Done.
+	btfss	simulatormode_active		; View only for simulator mode
+	bra		menuview_toggle				; Call next option
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		menuview_toggle				; Yes, call next option
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		menuview_toggle				; Yes, call next option
+	STRCPY_PRINT "Sim+5'"
+	bra		menuview_exit				; Done.
 menuview_view8:
-    movlw   .6
-    cpfseq  menupos3                        ; in compass view?
-	bra		menuview_toggle 				; No, call next option
-	STRCPY_TEXT_PRINT	tSetHeading         ; "Heading"
-	bra     menuview_exit                   ; Done.
+	movlw	.6
+	cpfseq	menupos3					; in compass view?
+	bra		menuview_toggle				; No, call next option
+	STRCPY_TEXT_PRINT	tSetHeading		; "Heading"
+	bra		menuview_exit				; Done.
 menuview_view9:
-	STRCPY_PRINT	"Layout"
-	bra     menuview_exit                   ; Done.
+    	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		menuview_toggle				; Yes, call next option
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		menuview_toggle				; Yes, call next option
+	STRCPY_PRINT "Layout"
+	bra		menuview_exit				; Done.
+
+;=============================================================================
+
+customview_toggle_alternative:
+	movlw	d'1'						; Max number of customviews in divemode, alternative layout
+	cpfsgt	menupos3					; Max reached?
+	bra		customview_mask_alternative	; No, show
+	movlw	.1
+	movwf	menupos3					; Reset to one, always one customview visible in alternative layout
+customview_mask_alternative:	
+	; Clear custom view area in divemode
+	WIN_BOX_BLACK	dm_customview_row, .239, .0, .159	; top, bottom, left, right
+	call	TFT_standard_color
+	movff	menupos3,WREG				; Menupos3 holds number of customview function
+	dcfsnz	WREG,F
+	bra		customview_alt_init_view1	; View 1: Big deco/ndl and max. depth
+	dcfsnz	WREG,F
+	bra		customview_alt_init_view2	; View 2: 
+
+	;bra	customview_alternative_toggle_exit	; No view (menupos3=0)
+
+customview_alt_toggle_exit:
+	call	TFT_standard_color
+	bcf		toggle_customview			; Clear flag
+	return
+
+customview_alt_init_view1:				; View 1: Big deco/ndl and max. depth
+	call	TFT_max_depth_alternative
+	call	TFT_big_deco_alt
+	bra		customview_alt_toggle_exit
+
+customview_alt_init_view2:
+	; /* Just for test...
+	call	TFT_mask_avr_stopwatch		; Show mask for average depth and stopwatch
+	call	TFT_update_avr_stopwatch	; Update average depth and stopwatch
+	; ...Just for test */
+	bra		customview_alt_toggle_exit
 
 
-	
-	
-;=============================================================================
-	
-customview_toggle_alternative:
-	movlw	d'1'				    ; Max number of customviews in divemode, alternative layout
-	cpfsgt	menupos3			    ; Max reached?
-	bra 	customview_mask_alternative         ; No, show
-	movlw	.1
-	movwf	menupos3			    ; Reset to one, always one customview visible in alternative layout
-customview_mask_alternative:	
-    ; Clear custom view area in divemode
-	WIN_BOX_BLACK    dm_customview_row, .239, .0, .159	; top, bottom, left, right
-	call	TFT_standard_color
-	movff	menupos3,WREG           ; Menupos3 holds number of customview function
-	dcfsnz	WREG,F
-	bra	customview_alt_init_view1   ; View 1: Big deco/ndl and max. depth
-	dcfsnz	WREG,F
-	bra	customview_alt_init_view2   ; View 2: 
-
-	;bra	customview_alternative_toggle_exit  ; No view (menupos3=0)
-	
-customview_alt_toggle_exit:
-    call    TFT_standard_color
-    bcf	    toggle_customview		; Clear flag
-    return
-
-customview_alt_init_view1:  ; View 1: Big deco/ndl and max. depth
-    call    TFT_max_depth_alternative
-    call    TFT_big_deco_alt
-    bra	    customview_alt_toggle_exit
-
-customview_alt_init_view2:
-    ; /* Just for test...
-    call    TFT_mask_avr_stopwatch		; Show mask for average depth and stopwatch
-    call    TFT_update_avr_stopwatch	; Update average depth and stopwatch
-    ; ...Just for test */
-    
-    bra	    customview_alt_toggle_exit
-    
-	
 ; Show next customview (and delete this flag)
 	global	customview_toggle
 customview_toggle:
 	bcf	switch_right
-	incf	menupos3,F			    ; Number of customview to show
-	
-	btfsc   alternative_divelayout		    ; In alternative layout mode?
+	incf	menupos3,F					; Number of customview to show
+
+	btfsc	alternative_divelayout			; In alternative layout mode?
 	bra		customview_toggle_alternative	; Yes, use the big ones instead
-	
-	movlw	d'13'				    ; Max number of customviews in divemode
-	cpfsgt	menupos3			    ; Max reached?
-	bra 	customview_mask		            ; No, show
-	clrf	menupos3			    ; Reset to zero (Zero=no custom view)
 
-    global  customview_mask
+	movlw	d'13'						; Max number of customviews in divemode
+	cpfsgt	menupos3					; Max reached?
+	bra		customview_mask				; No, show
+	clrf	menupos3					; Reset to zero (Zero=no custom view)
+
+	global	customview_mask
 customview_mask:	
-    ; Clear custom view area in divemode
-    WIN_BOX_BLACK    dm_customview_row, dm_customview_bot-.2, dm_customview_column, dm_customview_rgt	; top, bottom, left, right
-	WIN_SMALL	dm_customview_column,dm_customview_row
+	; Clear custom view area in divemode
+	WIN_BOX_BLACK dm_customview_row, dm_customview_bot-.2, dm_customview_column, dm_customview_rgt	; top, bottom, left, right
+	WIN_SMALL     dm_customview_column,dm_customview_row
 	call	TFT_standard_color
-	movff	menupos3,WREG                   ; Menupos3 holds number of customview function
+	movff	menupos3,WREG				; Menupos3 holds number of customview function
 	dcfsnz	WREG,F
-	bra		customview_init_view1			; Update Sensor data
+	bra		customview_init_view1		; Update Sensor data
 	dcfsnz	WREG,F
-	bra		customview_init_view2			; average depth and stopwatch
+	bra		customview_init_view2		; average depth and stopwatch
 	dcfsnz	WREG,F
-	bra		customview_init_view3			; Decoplan
+	bra		customview_init_view3		; Decoplan
 	dcfsnz	WREG,F
-	bra		customview_init_view4			; Battery info, Tissues and clock
+	bra		customview_init_view4		; Battery info, Tissues and clock
 	dcfsnz	WREG,F
-	bra		customview_init_view5           ; GF informations
+	bra		customview_init_view5		; GF informations
 	dcfsnz	WREG,F
-	bra		customview_init_view6           ; Compass
+	bra		customview_init_view6		; Compass
 	dcfsnz	WREG,F
-	bra		customview_init_view7           ; Dynamic gaslist
+	bra		customview_init_view7		; Dynamic gaslist
 	dcfsnz	WREG,F
-	bra		customview_init_view8           ; HIJACKED for CNS (ex HUD voltages)
+	bra		customview_init_view8		; CNS
 	dcfsnz	WREG,F
-	bra		customview_init_view9           ; ppO2, Ceiling and current GF
+	bra		customview_init_view9		; ppO2, Ceiling and current GF
 	dcfsnz	WREG,F
-	bra		customview_init_view10          ; Sensor check
+	bra		customview_init_view10		; Sensor check
 	dcfsnz	WREG,F
-	bra		customview_init_view11          ; ppO2, END/EAD and CNS
+	bra		customview_init_view11		; ppO2, END/EAD and CNS
 	dcfsnz	WREG,F
-	bra		customview_init_view12          ; PSCR Info
-	; NEW	## bailout gas needs
+	bra		customview_init_view12		; PSCR Info
 	dcfsnz	WREG,F
-	bra		customview_init_view13			; Gas needs
-	
+	bra		customview_init_view13		; Gas needs
+
 customview_init_nocustomview:
-    call    I2C_sleep_accelerometer         ; Stop accelerometer
-    call    I2C_sleep_compass               ; Stop compass
-    bra		customview_toggle_exit	
+	call	I2C_sleep_accelerometer		; Stop accelerometer
+	call	I2C_sleep_compass			; Stop compass
+	bra		customview_toggle_exit
 
 customview_init_view1:
-    btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-    bra		customview_toggle				; yes, Call next view...
-    btfsc	FLAG_pscr_mode					; In PSCR mode?
-    bra		customview_init_view1a			; Yes
-    btfss	FLAG_ccr_mode					; In CC mode?
-    bra		customview_toggle				; no, Call next view...
-    
-customview_init_view1a:    
-    movf    hardware_flag,W
-    sublw   0x11        ; 2 with BLE
-    btfsc   STATUS,Z
-    bra		customview_toggle				; no, Call next view...
-    movf    hardware_flag,W
-    sublw   0x13        ; +
-    btfsc   STATUS,Z
-    bra		customview_toggle				; no, Call next view...
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; yes, Call next view...
+	btfsc	FLAG_pscr_mode				; In PSCR mode?
+	bra		customview_init_view1a		; Yes
+	btfss	FLAG_ccr_mode				; In CC mode?
+	bra		customview_toggle			; no, Call next view...
 
-    call    TFT_hud_mask					; Setup HUD mask
-    call    TFT_update_ppo2_sensors			; Update Sensor data
-    bra	    customview_toggle_exit	
+customview_init_view1a:
+	btfsc	analog_o2_input				; do we have an analog input?
+	bra		customview_init_view1b		; YES - show this view
+	btfss	s8_digital					; NO  - do we have a digital input?
+	bra		customview_toggle			;       NO  - call next view...
+										;       YES - show this view
+customview_init_view1b:
+	call	TFT_hud_mask				; Setup HUD mask
+	call	TFT_update_ppo2_sensors		; Update Sensor data
+	bra		customview_toggle_exit
 
 customview_init_view2:
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		customview_toggle				; Yes, Call next view...
-    call    TFT_mask_avr_stopwatch			; Show mask for average depth and stopwatch
-    call    TFT_update_avr_stopwatch		; Update average depth and stopwatch
-    bra		customview_toggle_exit
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; Yes, Call next view...
+	call	TFT_mask_avr_stopwatch		; Show mask for average depth and stopwatch
+	call	TFT_update_avr_stopwatch	; Update average depth and stopwatch
+	bra		customview_toggle_exit
 
 customview_init_view3:
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		customview_toggle				; Yes, Call next view...
-	btfsc	FLAG_gauge_mode					; In Gauge mode?
-	bra		customview_toggle				; Yes, Call next view...
-    call    TFT_decoplan                    ; Show decoplan
-    bra		customview_toggle_exit
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; Yes, Call next view...
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		customview_toggle			; Yes, Call next view...
+	call	TFT_decoplan				; Show decoplan
+	bra		customview_toggle_exit
 
 customview_init_view4:
-    call    TFT_battinfo_tissues_clock_mask	; Setup Mask
-    call    TFT_battinfo_tissues_clock		; Show Battery info, Tissues and clock
-    bra		customview_toggle_exit
+	call	TFT_battinfo_tissues_clock_mask	; Setup Mask
+	call	TFT_battinfo_tissues_clock		; Show Battery info, Tissues and clock
+	bra		customview_toggle_exit
 
 customview_init_view5:
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		customview_toggle				; Yes, Call next view...
-	btfsc	FLAG_gauge_mode					; In Gauge mode?
-	bra		customview_toggle				; Yes, Call next view...
-
-    extern  char_I_deco_model
-    TSTOSS  char_I_deco_model               ; 0 = ZH-L16, 1 = ZH-L16-GF
-    bra		customview_toggle				; No GF info for non-GF modes
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; Yes, Call next view...
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		customview_toggle			; Yes, Call next view...
 
-    call    TFT_gf_mask                     ; Setup Mask
-    call    TFT_gf_info                     ; Show GF informations
-    bra		customview_toggle_exit
+	TSTOSS	char_I_deco_model			; 0 = ZH-L16, 1 = ZH-L16-GF
+	bra		customview_toggle			; No GF info for non-GF modes
 
-customview_init_view6:                      ; Compass (View 6)
-    call    I2C_init_accelerometer          ; Start accelerometer
-    call    I2C_init_compass                ; Start compass
-    extern  TFT_dive_compass_mask
-    call	TFT_dive_compass_mask           ; Show compass
-    bra		customview_toggle_exit
+	call	TFT_gf_mask					; Setup Mask
+	call	TFT_gf_info					; Show GF informations
+	bra		customview_toggle_exit
 
-; MODIFIED - view disabled	## memory
-customview_init_view7:                      ; Dynamic gaslist (View 7)
-;	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		customview_toggle				; Yes, Call next view...
-;	btfsc	FLAG_ccr_mode					; In CC mode?
-;	bra		customview_toggle				; Yes, Call next view...
-;   call    TFT_dyn_gaslist                 ; Show the dyn gaslist
-;   bra		customview_toggle_exit
+customview_init_view6:					; Compass (View 6)
+	call	I2C_init_accelerometer		; Start accelerometer
+	call	I2C_init_compass			; Start compass
+	call	TFT_dive_compass_mask		; Show compass
+	bra		customview_toggle_exit
 
-customview_init_view8:                      ; HIJACKED for CNS outputs (ex Sensor millivolts)
-	btfsc	FLAG_gauge_mode					; In Gauge mode?
-	bra		customview_toggle				; Yes, Call next view...
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		customview_toggle				; yes, Call next view...
-	; REPLACE	## CNS at end-of-dive
-	; btfsc	FLAG_pscr_mode					; In PSCR mode?
-	; bra		customview_init_view8a		; Yes
-	; btfss	FLAG_ccr_mode					; In CC mode?
-	; bra		customview_toggle			; no, Call next view...
-; customview_init_view8a:    
-    ; movf    hardware_flag,W
-    ; sublw   0x13        ; +
-    ; btfsc   STATUS,Z
-    ; bra	  customview_toggle				; no, Call next view...
-    ; movff   opt_ccr_mode,WREG             ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    ; sublw   .1                            ; opt_ccr_mode = 1 (Sensor)?
-    ; bnz     customview_toggle				; no, Call next view...
-    ; call    TFT_hud_mask                  ; Setup HUD mask
-    ; call    TFT_hud_voltages              ; Show HUD details
-	; BY
+customview_init_view7:					; view disabled
+	bra		customview_toggle
+
+customview_init_view8:					; CNS at end of dive
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		customview_toggle			; Yes, Call next view...
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; yes, Call next view...
 	call	TFT_CNS_mask
 	call	TFT_CNS
-
-	goto    customview_toggle_exit
+	goto	customview_toggle_exit
 
-customview_init_view9:                      ; ppO2, Ceiling and current GF
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra	customview_toggle					; yes, Call next view...
-	btfsc	FLAG_gauge_mode					; In Gauge mode?
-	bra	customview_toggle					; Yes, Call next view...
-    call    TFT_ceiling_mask                ; Setup mask
-    call    TFT_ceiling                     ; Show Ceiling
+customview_init_view9:					; ppO2, Ceiling and current GF
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; yes, Call next view...
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		customview_toggle			; Yes, Call next view...
+	call	TFT_ceiling_mask			; Setup mask
+	call	TFT_ceiling					; Show Ceiling
 
-    ; ppO2 value
-    call    TFT_mask_ppo2
-    call    TFT_display_pure_ppo2
+	; ppO2 value
+	call	TFT_mask_ppo2
+	call	TFT_display_pure_ppo2
 
-    ; current GF value
-    extern  char_I_deco_model
-    TSTOSS  char_I_deco_model               ; 0 = ZH-L16, 1 = ZH-L16-GF
-    bra	    customview_toggle_exit	   		; No GF info for non-GF modes
-    ; current GF value
-    call    TFT_gf_mask_cGF                 ; Setup Mask - current GF only
-    call    TFT_gf_info                     ; Show GF informations
-    bra	    customview_toggle_exit
+	; current GF value
+	TSTOSS	char_I_deco_model			; 0 = ZH-L16, 1 = ZH-L16-GF
+	bra		customview_toggle_exit		; No GF info for non-GF modes
+	; current GF value
+	call	TFT_gf_mask_cGF				; Setup Mask - current GF only
+	call	TFT_gf_info					; Show GF informations
+	bra		customview_toggle_exit
 
-customview_init_view10:                     ; Sensor check
-    btfsc   FLAG_apnoe_mode		    		; In Apnoe mode?
-    bra	    customview_toggle		    	; yes, Call next view...
-    btfsc   FLAG_gauge_mode		    		; In Gauge mode?
-    bra	    customview_toggle		    	; Yes, Call next view...
-    btfss   FLAG_ccr_mode		    		; In CC mode?
-    bra	    customview_toggle		   		; no, Call next view...
+customview_init_view10:					; Sensor check
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; yes, Call next view...
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		customview_toggle			; Yes, Call next view...
+	btfss	FLAG_ccr_mode				; In CC mode?
+	bra		customview_toggle			; no, Call next view...
 
-    call    TFT_sensor_check_mask           ; Show ppO2 of O2 and Diluent mask
-    call    TFT_sensor_check                ; Show ppO2 of O2 and Diluent
-    bra		customview_toggle_exit
+	call	TFT_sensor_check_mask		; Show ppO2 of O2 and Diluent mask
+	call	TFT_sensor_check			; Show ppO2 of O2 and Diluent
+	bra		customview_toggle_exit
 
-customview_init_view11:                     ; ppO2, END/EAD and CNS
-    btfsc   FLAG_apnoe_mode		    		; In Apnoe mode?
-    bra	    customview_toggle		    	; yes, Call next view...
-    btfsc   FLAG_gauge_mode		    		; In Gauge mode?
-    bra	    customview_toggle		    	; Yes, Call next view...
+customview_init_view11:					; ppO2, END/EAD and CNS
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		customview_toggle			; yes, Call next view...
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	bra		customview_toggle			; Yes, Call next view...
 
-    call    TFT_ppo2_ead_end_cns_mask       ; Show ppO2, END/EAD and CNS mask
-    call    TFT_ppo2_ead_end_cns            ; Show ppO2, END/EAD and CNS
-    goto    customview_toggle_exit
+	call	TFT_ppo2_ead_end_cns_mask	; Show ppO2, END/EAD and CNS mask
+	call	TFT_ppo2_ead_end_cns		; Show ppO2, END/EAD and CNS
+	goto	customview_toggle_exit
 
-customview_init_view12:		            	; PSCR Info    
-    btfss   FLAG_pscr_mode		    		; In PSCR mode?
-    bra	    customview_toggle		    	; No, Call next view...
-    
-    call    TFT_pscr_info_mask		   		; Show ppO2, drop and lung ratio
-    call    TFT_pscr_info		    		; Show ppO2, drop and lung ratio
-    bra		customview_toggle_exit
+customview_init_view12:					; PSCR Info	
+	btfss	FLAG_pscr_mode				; In PSCR mode?
+	bra		customview_toggle			; No, Call next view...
+	
+	call	TFT_pscr_info_mask			; Show ppO2, drop and lung ratio
+	call	TFT_pscr_info				; Show ppO2, drop and lung ratio
+	bra		customview_toggle_exit
 
-; NEW	## bailout gas needs
-customview_init_view13:						; Gas Needs
-    TSTOSS  opt_calc_asc_gasvolume			; check if gas volume calculations is switched on
-    bra	    customview_toggle				; NO  - Call next view...
-    call    TFT_gas_needs_mask				; YES - Show the mask for gas needs
-    call    TFT_gas_needs					; 		Show the gas needs
-    bra	    customview_toggle_exit
-	
+customview_init_view13:					; Gas Needs
+	TSTOSS	opt_calc_asc_gasvolume		; check if gas volume calculations is switched on
+	bra		customview_toggle			; NO  - Call next view...
+	call	TFT_gas_needs_mask			; YES - Show the mask for gas needs
+	call	TFT_gas_needs				;       Show the gas needs
+	bra		customview_toggle_exit
+
 customview_toggle_exit:
-    btfsc   divemode				; In Dive Mode?
-    bsf	    FLAG_TFT_temp_divemode		; Set flag to redraw temp
-    call    TFT_standard_color
-    bcf	toggle_customview			; Clear flag
-    return
+	btfsc	divemode					; In Dive Mode?
+	bsf		FLAG_TFT_temp_divemode		; Set flag to redraw temp
+	call	TFT_standard_color
+	bcf		toggle_customview			; Clear flag
+	return
 
-	global 	customview_show_change_depth
-customview_show_change_depth:       		; Put " lom" or " loft" into Postinc2
-    PUTC    " "
-    TSTOSS  opt_units   					; 0=m, 1=ft
+	global	customview_show_change_depth
+customview_show_change_depth:			; Put " lom" or " loft" into Postinc2
+	PUTC	" "
+	TSTOSS	opt_units					; 0=m, 1=ft
 	bra		customview_show_mix_metric
-    movf    lo,W
-    mullw   .100                    		; convert meters to mbar
-    movff   PRODL,lo
-    movff   PRODH,hi
-    call	convert_mbar_to_feet    		; convert value in lo:hi from mbar to feet
-    bsf     leftbind
-    output_16								; Change depth in lo:hi
-    bcf     leftbind
-    STRCAT_TEXT		tFeets
-    return
+	movf	lo,W
+	mullw	.100						; convert meters to mbar
+	movff	PRODL,lo
+	movff	PRODH,hi
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	bsf		leftbind
+	output_16							; Change depth in lo:hi
+	bcf		leftbind
+	STRCAT_TEXT tFeets
+	return
 customview_show_mix_metric:
-    output_99								; Change depth in lo
-    STRCAT_TEXT		tMeters
-    return
+	output_99							; Change depth in lo
+	STRCAT_TEXT tMeters
+	return
 
 
-	global 	customview_show_mix
-customview_show_mix:                		; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
-    tstfsz  hi                      		; He=0?
-    bra     customview_show_mix5    		; No, Show a TX
+	global	customview_show_mix
+customview_show_mix:					; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	tstfsz	hi							; He=0?
+	bra		customview_show_mix5		; No, Show a TX
 	movlw	.21
-	cpfseq	lo								; Air?
-	bra		customview_show_mix2			; No
-	STRCAT_TEXT		tSelectAir				; Yes, show "Air"
-    bra     customview_show_mix4b
+	cpfseq	lo							; Air?
+	bra		customview_show_mix2		; No
+	STRCAT_TEXT tSelectAir				; Yes, show "Air"
+	bra		customview_show_mix4b
 customview_show_mix2:
 	movlw	.100
-	cpfseq	lo								; O2?
-	bra		customview_show_mix3			; No
-	STRCAT_TEXT		tSelectO2				; Yes, show "O2"
-    bra     customview_show_mix4b
+	cpfseq	lo							; O2?
+	bra		customview_show_mix3		; No
+	STRCAT_TEXT tSelectO2				; Yes, show "O2"
+	bra		customview_show_mix4b
 
 customview_show_mix3:
 	movlw	.21
-	cpfslt	lo								; < Nx21?
-	bra		customview_show_mix4    		; No
-	STRCAT_TEXT		tGasErr        			; Yes, show "Err"
-	output_99								; O2 ratio is still in "lo"
-    bra     customview_show_mix4c
+	cpfslt	lo							; < Nx21?
+	bra		customview_show_mix4		; No
+	STRCAT_TEXT tGasErr					; Yes, show "Err"
+	output_99							; O2 ratio is still in "lo"
+	bra	 customview_show_mix4c
 
 customview_show_mix4:
-	STRCAT_TEXT		tSelectNx				; Show "Nx"
-	output_99								; O2 ratio is still in "lo"
+	STRCAT_TEXT tSelectNx				; Show "Nx"
+	output_99							; O2 ratio is still in "lo"
 customview_show_mix4b:
-    STRCAT  " "
+	STRCAT	" "
 customview_show_mix4c:
-    btfsc   divemode                		; In divemode
-	return                          		; Yes
-    STRCAT  "  "
-    return
+	btfsc	divemode					; In divemode
+	return								; Yes
+	STRCAT	"  "
+	return
 
 customview_show_mix5:
-    btfsc   divemode
-    bra     customview_show_mix6
-    STRCAT_TEXT		tSelectTx   			; Show "Tx"
+	btfsc	divemode
+	bra		customview_show_mix6
+	STRCAT_TEXT tSelectTx				; Show "Tx"
 customview_show_mix6:
-    output_99								; O2 ratio is still in "lo"
-    PUTC    "/"
-    movff   hi,lo
-    output_99								; He ratio
-    return
+	output_99							; O2 ratio is still in "lo"
+	PUTC	"/"
+	movff	hi,lo
+	output_99							; He ratio
+	return
 
 	END
\ No newline at end of file
--- a/src/divemenu_tree.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/divemenu_tree.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File divemenu_tree.asm							REFACTORED VERSION V2.96a
+;   File divemenu_tree.asm							REFACTORED VERSION V2.98
 ;
 ;   OSTC dive mode menu
 ;
@@ -9,144 +9,135 @@
 ; HISTORY
 ;   2013-02-02 : [mH] Made out of menu_tree.asm
 
-#include    "hwos.inc"                  ; Mandatory header
-#include    "menu_processor.inc"
-#include 	"shared_definitions.h"      ; Mailbox from/to p2_deco.c
-#include    "tft_outputs.inc"
-#include    "customview.inc"
-#include    "strings.inc"
-#include    "calibrate.inc"
+#include "hwos.inc"						; Mandatory header
+#include "menu_processor.inc"
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
+#include "tft_outputs.inc"
+#include "customview.inc"
+#include "strings.inc"
+#include "calibrate.inc"
+
+	extern	timeout_divemode_menu2
+	extern	diveloop_loop4
 
 
-divegui     CODE
+divegui		CODE
+
 ;=============================================================================
 ; Main Menu
-	global  do_main_divemenu
+	global	do_main_divemenu
 do_main_divemenu:
-	call	menu_processor_reset		; restart from first icon.
-
-do_continue_main_divemenu:
-	call	menu_processor_pop			; drop exit line.
-	call	menu_processor_pop			; drop exit line.
-
+	call	menu_processor_reset		; restart from first icon
+	movlw	.1
+	movwf	menupos1					; set to first option in divemode menu
 	btfsc	FLAG_ccr_mode
 	bra		main_divemenu_loop			; goto CCR / pSCR Menu menu
 	btfsc	FLAG_pscr_mode
 	bra		main_divemenu_loop			; goto CCR / pSCR Menu menu
 
-main_divemenu_OC:	
+main_divemenu_OC:
 	bcf		ccr_diluent_setup
 	bcf		is_bailout_menu
-	movlw	.1
-	movwf	menupos						; Set to first option in divemode menu
-	
-	MENU_BEGIN  tMainMenu, .5
-		MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
-		MENU_CALL   tDivemenu_ResetAvg, do_reset_average
-		MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
-		MENU_CALL   tDivemenu_Marker,   do_set_marker
-		MENU_CALL   tExit,              do_exit_divemode_menu
+
+	MENU_BEGIN	tMainMenu,	.5
+		MENU_CALL	tDivemenu_Gaslist,	do_divemode_gaslist
+		MENU_CALL	tDivemenu_ResetAvg,	do_reset_average
+		MENU_CALL	tDivemenu_ToggleGF,	do_toggle_gf
+		MENU_CALL	tDivemenu_Marker,	do_set_marker
+		MENU_CALL	tExit,				do_exit_divemode_menu
 	MENU_END
 
 main_divemenu_loop:
-    bsf     ccr_diluent_setup			; default to operations on diluents
+	bsf		ccr_diluent_setup			; default to operations on diluents
 	bcf		is_bailout_menu				; default to none-bailout menu
-    movlw   .1
-    movwf   menupos						; Set to first option in divemode menu
-    
-    btfsc   FLAG_pscr_mode
-    bra     main_divemenu_pscr			; PSCR Menu
-    
-    MENU_BEGIN  tMainMenu, .6
-        MENU_CALL   tDiveBailout,       do_divemode_gaslist_bail
-        MENU_CALL   tDivemenu_Setpoint, do_divemode_splist
-        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
-        MENU_CALL   tDivemenu_ResetAvg, do_reset_average
-        MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
-        MENU_CALL   tExit,              do_exit_divemode_menu
-    MENU_END
-    
+	btfsc	FLAG_pscr_mode
+	bra		main_divemenu_pscr			; PSCR Menu
+
+	MENU_BEGIN	tMainMenu,	.6
+		MENU_CALL	tDiveBailout,		do_divemode_gaslist_bail
+		MENU_CALL	tDivemenu_Setpoint,	do_divemode_splist
+		MENU_CALL	tDivemenu_Gaslist,	do_divemode_gaslist
+		MENU_CALL	tDivemenu_ResetAvg,	do_reset_average
+		MENU_CALL	tDivemenu_ToggleGF,	do_toggle_gf
+		MENU_CALL	tExit,				do_exit_divemode_menu
+	MENU_END
+
 main_divemenu_pscr:
-    movf    hardware_flag,W
-    sublw   0x11						; 2 with BLE
-    btfsc   STATUS,Z
-    bra     main_divemenu_pscr_no_sensors
-	movf    hardware_flag,W
-    sublw   0x13						; +
-    btfsc   STATUS,Z
-    bra		main_divemenu_pscr_no_sensors
-
-    MENU_BEGIN  tMainMenu, .6
-        MENU_CALL   tDiveBailout,       do_divemode_gaslist_bail
-		MENU_CALL   tCCRSensor,			do_divemode_setpoint_pscr
-        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
-        MENU_CALL   tDivemenu_ResetAvg, do_reset_average
-        MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
-        MENU_CALL   tExit,              do_exit_divemode_menu
-    MENU_END
+	btfsc	analog_o2_input				; do we have an analog input?
+	bra		main_divemenu_pscr_sensors	; YES
+	btfsc	s8_digital					; do we have a digital input?
+	bra		main_divemenu_pscr_sensors	; YES
 
 main_divemenu_pscr_no_sensors:
-    MENU_BEGIN  tMainMenu, .6
-        MENU_CALL   tDiveBailout,       do_divemode_gaslist_bail
-        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
-        MENU_CALL   tDivemenu_ResetAvg, do_reset_average
-        MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
-		MENU_CALL   tDivemenu_Marker,   do_set_marker
-        MENU_CALL   tExit,              do_exit_divemode_menu
-    MENU_END
-  
+	MENU_BEGIN	tMainMenu,	.6
+		MENU_CALL	tDiveBailout,		do_divemode_gaslist_bail
+		MENU_CALL	tDivemenu_Gaslist,	do_divemode_gaslist
+		MENU_CALL	tDivemenu_ResetAvg,	do_reset_average
+		MENU_CALL	tDivemenu_ToggleGF,	do_toggle_gf
+		MENU_CALL	tDivemenu_Marker,	do_set_marker
+		MENU_CALL	tExit,				do_exit_divemode_menu
+	MENU_END
+
+main_divemenu_pscr_sensors:
+	MENU_BEGIN	tMainMenu,	.6
+		MENU_CALL	tDiveBailout,		do_divemode_gaslist_bail
+		MENU_CALL	tCCRSensor,			do_divemode_setpoint_pscr
+		MENU_CALL	tDivemenu_Gaslist,	do_divemode_gaslist
+		MENU_CALL	tDivemenu_ResetAvg,	do_reset_average
+		MENU_CALL	tDivemenu_ToggleGF,	do_toggle_gf
+		MENU_CALL	tExit,				do_exit_divemode_menu
+	MENU_END
+
 
 do_toggle_gf:
-	movff	char_I_deco_model,WREG  	; 0 = ZH-L16, 1 = ZH-L16-GF
-	decfsz	WREG,W		    			; Toggle GF only in GF modes - in GF mode?
-	bra		do_continue_main_divemenu   ; No, do nothing and return
-	TSTOSS  opt_enable_aGF          	; =1: aGF can be selected underwater
-    bra     do_continue_main_divemenu   ; No, do nothing and return
-	movlw	.4						    ; Set customview to 5 (GF informations)
+	movff	char_I_deco_model,WREG		; 0 = ZH-L16, 1 = ZH-L16-GF
+	decfsz	WREG,W						; Toggle GF only in GF modes - in GF mode?
+	bra		do_main_divemenu			; No, do nothing and return
+	TSTOSS	opt_enable_aGF				; =1: aGF can be selected underwater
+	bra		do_main_divemenu			; No, do nothing and return
+	movlw	.4							; Set customview to 5 (GF informations)
 	movwf	menupos3					; Customview to come-1
 	bsf		toggle_customview			; Set flag, the customview will be toggled very soon now...
 	movlw	.1
-	movwf	menupos						; Set to first option in divemode menu
-	
-    MENU_BEGIN  tDivemenu_ToggleGF, .2
-        MENU_CALL       tDivemenu_ToggleGF,     do_togglegf
-        MENU_CALL       tExit,                  do_continue_main_divemenu
-    MENU_END
+	movwf	menupos1					; Set to first option in divemode menu
+
+	MENU_BEGIN	tDivemenu_ToggleGF,	.2
+		MENU_CALL	tDivemenu_ToggleGF,	do_togglegf
+		MENU_CALL	tBack,				do_main_divemenu
+	MENU_END
 
 do_togglegf:
-	;TSTOSS	opt_enable_aGF				; =1: aGF can be selected underwater  ## check is now done before entering menu
+	;TSTOSS	opt_enable_aGF				; =1: aGF can be selected underwater ; check is now done before entering menu
 	;bra	do_exit_divemode_menu		; continue with exiting menu code
 	bsf		toggle_gf					; Set flag...
 	bra		do_exit_divemode_menu		; continue with exiting menu code
-  
-  
+
+
 do_set_marker:
-	movlw	d'6'						; Type of Alarm (Manual Marker)
-	movwf	AlarmType					; Copy to Alarm Register
-	bsf		event_occured				; Set Event Flag
-    bra     do_exit_divemode_menu		; And exit
+	bsf		FLAG_set_marker				; set flag...
+	bra		do_exit_divemode_menu		; ... and exit
+
 
-	
 do_reset_average:
-    bsf     reset_average_depth			; Set Flag
-    bra     do_exit_divemode_menu   	; continue with exiting menu code
+	bsf		reset_average_depth			; Set Flag
+	bra		do_exit_divemode_menu		; continue with exiting menu code
 
-	
+
 do_switch_sensor:						; entry point when coming from switch to sensor
-    movlw   .1                      	; Switch to Sensor
-    movff   WREG,opt_ccr_mode       	; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor,  =2: Auto SP
-    ; enable all sensors
-    bsf	    use_O2_sensor1
-    bsf	    use_O2_sensor2
-    bsf	    use_O2_sensor3
-	bra     do_switch_sp_com			; continue with common part
-	
+	movlw	.1							; Switch to Sensor
+	movff	WREG,opt_ccr_mode			; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor, =2: Auto SP
+	; enable all sensors
+	bsf		use_O2_sensor1
+	bsf		use_O2_sensor2
+	bsf		use_O2_sensor3
+	bra		do_switch_sp_com			; continue with common part
+
 do_switch_sp:							; entry point when coming from manual setpoint selection (CCR)
-    decf    menupos,W         			; 1-5 -> 0-4
-    lfsr    FSR1,char_I_setpoint_cbar
-    movff   PLUSW1,char_I_const_ppO2	; setup fixed setpoint
-    movff   char_I_const_ppO2,WREG
-    call    transmit_setpoint			; tansmit current setpoint from WREG (in cbar) to external electronics
+	decf	menupos1,W					; 1-5 -> 0-4
+	lfsr	FSR1,char_I_setpoint_cbar
+	movff	PLUSW1,char_I_const_ppO2	; setup fixed setpoint
+	movff	char_I_const_ppO2,WREG
+	call	transmit_setpoint			; transmit current setpoint from WREG (in cbar) to external electronics
 	bcf		setpoint_fallback			; clear fallback condition (stops fallback warning)
 	clrf	WREG						; Switch to fixed SP
 	movff	WREG,opt_ccr_mode			; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor, =2: Auto SP
@@ -154,81 +145,84 @@
 
 do_switch_sp_calc:						; entry point when coming from switch to calculated ppO2 (pSCR)
 	bcf		setpoint_fallback			; clear fallback condition (stops fallback warning)
-    clrf    WREG                    	; Switch to fixed SP
-    movff   WREG,opt_ccr_mode       	; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor,  =2: Auto SP
+	clrf	WREG						; Switch to fixed SP
+	movff	WREG,opt_ccr_mode			; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor, =2: Auto SP
 	movff	WREG,char_I_const_ppO2		; set setpoint to 0, this forces deco engine to take the computed ppO2
 
 do_switch_sp_com:						; merge point to common part
-    bsf		event_occured				; set global event byte
-    bsf     setpoint_changed			; set flag (for profile)
+	bsf		event_occured				; set global event byte
+	bsf		setpoint_changed			; set flag (for profile)
+
+	; Clear some flags in case we were in bailout before...
+	bcf		is_bailout					; end bailout mode
+	;bcf	is_bailout_menu				; not needed
+	bcf		better_gas_available		; =1: A better gas is available and a gas change is advised in divemode
+	bcf		blinking_better_gas			; clear blinking flag
+	call	customview_mask				; update customview mask to (eventually) rewrite ppO2(Dil): to ppO2:
 
-    ; Clear some flags in case we were in bailout before...
-    bcf     is_bailout              	; end bailout mode
-    ;bcf     is_bailout_menu         	; not needed
-    bcf	    better_gas_available    	; =1: A better gas is available and a gas change is advised in divemode
-    bcf     blinking_better_gas     	; clear blinking flag
-    call    customview_mask         	; update customview mask to (eventually) rewrite ppO2(Dil): to ppO2:
-	
-	movff   active_diluent,menupos		; reconfigure last diluent (menupos is transfer register for selected gas/diluent towards gas_switched_common:)
-	bsf     divemode_gaschange			; initiate reconfiguration to loop mode on last diluent
-	
-    bra     do_exit_divemode_menu   	; continue with exiting menu code
+	bsf		FLAG_back_to_loop			; indicate that it is a switchback from OC bailout to CCR/pSCR loop
+	bsf		divemode_gaschange			; initiate reconfiguration to loop mode on last diluent
+
+	bra		do_exit_divemode_menu		; continue with exiting menu code
+
 
-   
 do_divemode_gaslist_bail:				; entry point from CCR/pSCR to bailout to OC gases
-	bcf		ccr_diluent_setup       	; switch to OC gases
-	bsf		is_bailout_menu         	; flag it is a bailout action
+	bcf		ccr_diluent_setup			; switch to OC gases
+	bsf		is_bailout_menu				; flag it is a bailout action
 do_divemode_gaslist:					; entry point for switching: OC -> gases, loop -> diluents
-	btfsc	is_bailout              	; in bailout mode?
-	bcf		ccr_diluent_setup       	; yes - for safety reasons, redirect to OC (bailout) gases
+	btfsc	is_bailout					; in bailout mode?
+	bcf		ccr_diluent_setup			; yes - for safety reasons, redirect to OC (bailout) gases
+do_divemode_gaslist_com:
 	bsf		short_gas_decriptions
 	movlw	.1
-	movwf	menupos						; Set to first option in divemode menu
-    MENU_BEGIN  tGaslist, .6
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
-        MENU_CALL       tMore,                  do_divemode_gaslist_more
-    MENU_END
+	movwf	menupos1					; Set to first option in divemode menu
+	MENU_BEGIN	tGaslist,	.6
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_switch_gas
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_switch_gas
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_switch_gas
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_switch_gas
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_switch_gas
+		MENU_CALL		tMore,					do_divemode_gaslist_more
+	MENU_END
+
 
 do_divemode_gaslist_more:
 	movlw	.1
-	movwf	menupos							; Set to first option in divemode menu
-	
+	movwf	menupos1						; Set to first option in divemode menu
+
 	movff	char_I_O2_ratio,gas6_O2_ratio	; initialize gas6 with currently breathed gas - O2 ratio
 	movff	char_I_He_ratio,gas6_He_ratio	; initialize gas6 with currently breathed gas - He ratio
-	
-do_divemode_gaslist_more_loop:
-    MENU_BEGIN  tGaslist, .6
-        MENU_CALL       tO2Plus,                do_dive_pO2
-        MENU_CALL       tO2Minus,               do_dive_mO2
-        MENU_CALL       tHePlus,                do_dive_pHe
-        MENU_CALL       tHeMinus,               do_dive_mHe
-        MENU_DYNAMIC    gaslist_strcat_gas6,    do_switch_gas6
-        MENU_CALL       tDivemenu_LostGas,      do_lost_gas
-    MENU_END
+
+do_divemode_gaslist_more_common:
+	MENU_BEGIN	tGaslist,	.6
+		MENU_CALL		tO2Plus,				do_dive_pO2
+		MENU_CALL		tO2Minus,				do_dive_mO2
+		MENU_CALL		tHePlus,				do_dive_pHe
+		MENU_CALL		tHeMinus,				do_dive_mHe
+		MENU_DYNAMIC	gaslist_strcat_gas6,	do_switch_gas6
+		MENU_CALL		tDivemenu_LostGas,		do_lost_gas
+	MENU_END
+
 
 do_lost_gas:
 	movlw	.1
-	movwf	menupos							; Set to first option in divemode menu
-do_lost_gas_loop:
+	movwf	menupos1					; Set to first option in divemode menu
+do_lost_gas_common:
 	bsf		short_gas_decriptions
-    MENU_BEGIN  tDivemenu_LostGas, .6
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
-        MENU_CALL   	tExit,              	do_exit_divemode_menu
-    MENU_END
+	MENU_BEGIN	tDivemenu_LostGas, .6
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_toggle_active	; Toggle the gas (in)active
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_toggle_active	; Toggle the gas (in)active
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_toggle_active	; Toggle the gas (in)active
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_toggle_active	; Toggle the gas (in)active
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,	do_toggle_active	; Toggle the gas (in)active
+		MENU_CALL		tExit,					do_exit_divemode_menu
+	MENU_END
 
 
 do_switch_gas6:
-	movlw   .6							; gas 6
-	movwf	menupos						; transfer register for selected gas towards gas_switched_common: 
-	bsf		gas6_changed            	; set flag for profile recording
+	movlw	.6							; gas 6
+	movwf	menupos1					; transfer register for selected gas towards gas_switched_common: 
+	bsf		gas6_changed				; set flag for profile recording
 	;bra	do_switch_gas				; continue with common gas-switched code
 
 do_switch_gas:
@@ -237,44 +231,42 @@
 	bsf		is_bailout					; begin bailout mode
 	call	customview_mask				; update custom view mask to (eventually) rewrite ppO2(Dil): to ppO2:
 	;bra	do_exit_divemode_menu		; continue with exiting menu code
-	
+
 do_exit_divemode_menu:
-	extern  timeout_divemode_menu2
 	call	timeout_divemode_menu2
 	clrf	STKPTR
-	extern  diveloop_loop4
 	goto	diveloop_loop4
 
 
 do_toggle_active:
 	extern	restart_deco_engine_wo_ceiling
 	call	restart_deco_engine_wo_ceiling
-    movlw   .5
-    btfsc   ccr_diluent_setup			; diluents?
-    addwf   menupos,F				; yes 1-5 -> 6-10
-    decf    menupos,W				; -> 0-4 for gases / 5-9 for diluents
-    lfsr    FSR1,opt_gas_type+0
-    movff   PLUSW1,lo
-    tstfsz  lo					; Already disabled?
-    bra     do_toggle_active2			; No, disable now!
-    lfsr    FSR1,opt_gas_type_backup+0		; copy opt_gas_type_backup+W back to opt_gas_type+W
-    movff   PLUSW1,lo
-    lfsr    FSR1,opt_gas_type+0
-    movff   lo,PLUSW1
-    lfsr    FSR1,opt_OC_bail_gas_change_backup+0 ; copy opt_OC_bail_gas_change_backup+W back to opt_OC_bail_gas_change+W
-    movff   PLUSW1,lo
-    lfsr    FSR1,opt_OC_bail_gas_change+0
-    movff   lo,PLUSW1
-    bra	    do_toggle_active3
+	movlw	.5
+	btfsc	ccr_diluent_setup			; diluents?
+	addwf	menupos1,F					; yes 1-5 -> 6-10
+	decf	menupos1,W					; -> 0-4 for gases / 5-9 for diluents
+	lfsr	FSR1,opt_gas_type+0
+	movff	PLUSW1,lo
+	tstfsz	lo							; Already disabled?
+	bra		do_toggle_active2			; No, disable now!
+	lfsr	FSR1,opt_gas_type_backup+0	; copy opt_gas_type_backup+W back to opt_gas_type+W
+	movff	PLUSW1,lo
+	lfsr	FSR1,opt_gas_type+0
+	movff	lo,PLUSW1
+	lfsr	FSR1,opt_OC_bail_gas_change_backup+0 ; copy opt_OC_bail_gas_change_backup+W back to opt_OC_bail_gas_change+W
+	movff	PLUSW1,lo
+	lfsr	FSR1,opt_OC_bail_gas_change+0
+	movff	lo,PLUSW1
+	bra		do_toggle_active3
 do_toggle_active2:
-    clrf    PLUSW1				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    lfsr    FSR1,opt_OC_bail_gas_change+0
-    clrf    PLUSW1				; also delete change depth here to have the menu updated immediately
+	clrf	PLUSW1						; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	lfsr	FSR1,opt_OC_bail_gas_change+0
+	clrf	PLUSW1						; also delete change depth here to have the menu updated immediately
 do_toggle_active3:
-    movlw   .5
-    btfsc   ccr_diluent_setup			; use OC gases?
-    subwf   menupos,F				; Back to 1-5 
-    bra     do_lost_gas_loop			; Return to list and show updated result
+	movlw	.5
+	btfsc	ccr_diluent_setup			; use OC gases?
+	subwf	menupos1,F					; back to 1-5 
+	bra		do_lost_gas					; return to list and show updated result
 
 
 do_dive_pO2:
@@ -284,118 +276,117 @@
 	addwf	gas6_O2_ratio,W
 	movwf	gas6_temp
 	movlw	.101
-	cpfslt	gas6_temp					; O2+He<101?
-	decf	gas6_O2_ratio,F				; O2-- (Unchanged)
-	banksel common
-	bra     do_divemode_gaslist_more_loop
-				
+	cpfslt	gas6_temp					; O2 + He < 101 ?
+	decf	gas6_O2_ratio,F				; O2-- (unchanged)
+	banksel	common
+	bra		do_divemode_gaslist_more_common
+
 do_dive_mO2:
-	banksel gas6_O2_ratio
-	decf    gas6_O2_ratio,F				; O2--
-	movlw   gaslist_min_o2
-	cpfslt  gas6_O2_ratio
-	bra     do_dive_mO2_done
-	movlw   gaslist_min_o2
-	movwf   gas6_O2_ratio
+	banksel	gas6_O2_ratio
+	decf	gas6_O2_ratio,F				; O2--
+	movlw	gaslist_min_o2
+	cpfslt	gas6_O2_ratio				; O2 < minimum allowed %O2?
+	bra		do_dive_mO2_done			; NO
+	movlw	gaslist_min_o2				; YES - restore minimum
+	movwf	gas6_O2_ratio
 do_dive_mO2_done:
-	banksel common
-	bra     do_divemode_gaslist_more_loop
+	banksel	common
+	bra		do_divemode_gaslist_more_common
 
 do_dive_pHe:
-	banksel gas6_O2_ratio
-	incf    gas6_He_ratio,F				; He++
-	movf    gas6_He_ratio,W
-	addwf   gas6_O2_ratio,W
-	movwf   lo
-	movlw   .101
-	cpfslt  lo							; O2+He<101?
-	decf    gas6_He_ratio,F				; Yes, He-- (Unchanged)
-	banksel common
-	bra     do_divemode_gaslist_more_loop
+	banksel	gas6_O2_ratio
+	incf	gas6_He_ratio,F				; He++
+	movf	gas6_He_ratio,W
+	addwf	gas6_O2_ratio,W
+	movwf	lo
+	movlw	.101
+	cpfslt	lo							; O2 + He < 101 ?
+	decf	gas6_He_ratio,F				; Yes, He-- (Unchanged)
+	banksel	common
+	bra		do_divemode_gaslist_more_common
 
 do_dive_mHe:
 	banksel gas6_O2_ratio
-	decf    gas6_He_ratio,F				; He--
-	bnn     do_dive_mHe_done
-	clrf    gas6_He_ratio
+	decf	gas6_He_ratio,F				; He--
+	bnn		do_dive_mHe_done			; H2 < 0?
+	clrf	gas6_He_ratio				; YES - reset to 0
 do_dive_mHe_done:
-	banksel common
-	bra     do_divemode_gaslist_more_loop
+	banksel	common
+	bra		do_divemode_gaslist_more_common
+
 
 do_divemode_splist:
 	bsf		short_gas_decriptions
 	movlw	.1
-	movwf	menupos							; Set to first option in divemode menu
-	
-	movf	hardware_flag,W
-	sublw	0x11							; 2 with BLE
-	btfsc	STATUS,Z
-	bra		do_divemode_splist_no_sensor	; no sensor
-	movf	hardware_flag,W
-	sublw	0x13							; +
-	btfsc	STATUS,Z
-	bra		do_divemode_splist_no_sensor	; no sensor
+	movwf	menupos1					; set to first option in divemode menu
 
-do_divemode_splist_with_sensor:
-    MENU_BEGIN  tGaslist, .6
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_CALL   	tCCRSensor,              do_divemode_sensor
-  MENU_END
+do_divemode_splist_common:
+	btfsc	analog_o2_input				; do we have an analog input?
+	bra		do_divemode_splist_sensor	; YES
+	btfsc	s8_digital					; do we have a digital input?
+	bra		do_divemode_splist_sensor	; YES
 
 do_divemode_splist_no_sensor:
-    MENU_BEGIN  tGaslist, .5
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-  MENU_END
+	MENU_BEGIN	tGaslist, .5
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+	MENU_END
+
+do_divemode_splist_sensor:
+	MENU_BEGIN	tGaslist,	.6
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_switch_sp
+		MENU_CALL		tCCRSensor,					do_divemode_sensor
+	MENU_END
 
 
 do_divemode_sensor:
 	clrf	menupos3					; show customview 1 (HUD Data)
 	bsf		toggle_customview
-    movlw   .1
-    movwf   menupos                 	; Set to 1st option: use sensors
-do_divemode_sensor_loop:
-    MENU_BEGIN  tGaslist, .6
-        MENU_CALL       tDivemenu_UseSensor,    do_switch_sensor
+	movlw	.1
+	movwf	menupos1					; Set to 1st option: use sensors
+
+do_return_divemode_sensor:
+	MENU_BEGIN	tGaslist,	.6
+		MENU_CALL		tDivemenu_UseSensor,	do_switch_sensor
 		MENU_CALL		tBack,					do_divemode_splist
-        MENU_CALL       tExit,                  do_exit_divemode_menu
+		MENU_CALL		tExit,					do_exit_divemode_menu
 		MENU_CALL		tDiveHudMask1,			do_toggle_sensor
 		MENU_CALL		tDiveHudMask2,			do_toggle_sensor
 		MENU_CALL		tDiveHudMask3,			do_toggle_sensor
-    MENU_END
+	MENU_END
 
 do_divemode_setpoint_pscr:
-    movlw   .1
-    movwf   menupos                 	; Set to 1st option: use calculated ppO2
-    MENU_BEGIN  tGaslist, .6
+	movlw	.1
+	movwf	menupos1					; Set to 1st option: use calculated ppO2
+	MENU_BEGIN	tGaslist,	.6
 		MENU_CALL		tCalculated,			do_switch_sp_calc
-		MENU_CALL       tDivemenu_UseSensor,    do_switch_sensor
-        MENU_CALL       tExit,                  do_continue_main_divemenu
+		MENU_CALL		tDivemenu_UseSensor,	do_switch_sensor
+		MENU_CALL		tExit,					do_exit_divemode_menu
 		MENU_CALL		tDiveHudMask1,			do_toggle_sensor
 		MENU_CALL		tDiveHudMask2,			do_toggle_sensor
 		MENU_CALL		tDiveHudMask3,			do_toggle_sensor
-    MENU_END
+	MENU_END
+
 
 do_toggle_sensor:
-	movff   menupos,lo	    ; backup position
-	decf	menupos,f					; 4, 5, 6 ->  3, 4, 5
-	decf	menupos,f					; 3, 4, 5 ->  2, 3, 4
-	decf	menupos,f					; 2, 3, 4 ->  1, 2, 3
-	dcfsnz	menupos						; 1, 2, 3 ->  0, 1, 2
-	btg		use_O2_sensor1				;             = 
-	dcfsnz	menupos						; 0, 1, 2 -> -1, 0, 1
-	btg		use_O2_sensor2				;                =
-	dcfsnz	menupos						; -1,0, 1 -> -2,-1, 0
-	btg		use_O2_sensor3				;                   =
-	movff   lo,menupos	    ; reload position
-	bra		do_divemode_sensor_loop
+	movff	menupos1,lo					; backup position
+	decf	menupos1,f					; 4, 5, 6 ->  3, 4, 5
+	decf	menupos1,f					; 3, 4, 5 ->  2, 3, 4
+	decf	menupos1,f					; 2, 3, 4 ->  1, 2, 3
+	dcfsnz	menupos1					; 1, 2, 3 ->  0, 1, 2
+	btg		use_O2_sensor1				;			  = 
+	dcfsnz	menupos1					; 0, 1, 2 -> -1, 0, 1
+	btg		use_O2_sensor2				;				 =
+	dcfsnz	menupos1					; -1,0, 1 -> -2,-1, 0
+	btg		use_O2_sensor3				;					=
+	movff	lo,menupos1					; restore position
+	bra		do_return_divemode_sensor
 
-	
-    END
\ No newline at end of file
+	END
\ No newline at end of file
--- a/src/divemode.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/divemode.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File divemode.asm								REFACTORED VERSION V2.96a
+;   File divemode.asm								REFACTORED VERSION V2.98
 ;
 ;   Divemode
 ;
@@ -9,99 +9,119 @@
 ; HISTORY
 ;  2011-08-15 : [mH] moving from OSTC code
 
-#include    "hwos.inc"					; Mandatory header
-#include    "shared_definitions.h"		; Mailbox from/to p2_deco.c
-#include    "tft_outputs.inc"
-#include    "strings.inc"
-#include    "tft.inc"
-#include    "eeprom_rs232.inc"
-#include    "isr.inc"
-#include    "math.inc"
-#include    "wait.inc"
-#include    "customview.inc"
-#include    "start.inc"
-#include    "adc_lightsensor.inc"
-#include    "ghostwriter.inc"
-#include    "i2c.inc"
-#include    "calibrate.inc"
-#include    "convert.inc"
+#include "hwos.inc"						; Mandatory header
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
+#include "tft_outputs.inc"
+#include "strings.inc"
+#include "tft.inc"
+#include "eeprom_rs232.inc"
+#include "isr.inc"
+#include "math.inc"
+#include "wait.inc"
+#include "customview.inc"
+#include "start.inc"
+#include "adc_lightsensor.inc"
+#include "ghostwriter.inc"
+#include "i2c.inc"
+#include "calibrate.inc"
+#include "convert.inc"
+
 
-gui     CODE
+	extern	TFT_dive_compass_heading
+	extern	do_line_menu
+	extern	do_main_divemenu
+	extern	option_save_all
+	extern	init_recording_params
+
+
+	;---- Private local variables -------------------------------------------------
+
+	CBLOCK	local1						; max size is 16 Byte !!!
+		apnoe_timeout_counter			; timeout counter for apnoe mode
+		average_depth_hold:4			; used in calculation of the average depth
+		sensor_setpoint					; sensor ppo2 in 0.01bar for deco routine
+		active_diluent					; backup of diluent gas for when switching back from bailout to CCR/pSCR loop
+		average_depth_hold_total:4		; used to calculate the average depth
+	ENDC								; used: 11 byte, remaining: 5 byte
+
+gui		CODE
+
+;=============================================================================
 
 	global	diveloop
 diveloop:
-    banksel common
-    call    speed_normal
-    call    diveloop_boot				; Boot tasks for all modes
+	banksel common
+	call	speed_normal
+	call	diveloop_boot				; Boot tasks for all modes
 
-    ; Startup Tasks for all modes
-    call    TFT_boot                	; Initialize TFT (includes clear screen)
-    bsf	    FLAG_TFT_divemode_mask		; Display mask
-    movff   customview_divemode,menupos3; Reload last customview
-    call    customview_mask         	; Redraw last custom view
+	; Startup Tasks for all modes
+	call	TFT_boot					; Initialize TFT (includes clear screen)
+	bsf		FLAG_TFT_divemode_mask		; Display mask
+	movff	customview_divemode,menupos3; Reload last customview
+	call	customview_mask				; Redraw last custom view
 
-    btfsc   FLAG_apnoe_mode
-    bsf	    realdive					; Set Realdive flag in Apnoe mode
+	btfsc	FLAG_apnoe_mode
+	bsf		realdive					; Set Realdive flag in Apnoe mode
 
-    btfsc   FLAG_apnoe_mode             ; Done for Apnoe or Gauge mode
-    bra     diveloop_loop_start
-    btfsc   FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
-    bra     diveloop_loop_start
+	btfsc	FLAG_apnoe_mode				; Done for Apnoe or Gauge mode
+	bra		diveloop_loop_start
+	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
+	bra		diveloop_loop_start
 
-    bsf	    FLAG_TFT_display_ndl_mask	; display "NDL"
+	bsf		FLAG_TFT_display_ndl_mask	; display "NDL"
 
 	; +@5 init
-    clrf    WREG                    	; WAIT marker: display "---"
-    movff   WREG,char_I_sim_advance_time; bank safe clrf
-    movff   WREG,int_O_alternate_ascenttime+0
+	clrf	WREG						; WAIT marker: display "---"
+	movff	WREG,char_I_sim_advance_time
+	movff	WREG,int_O_alternate_ascenttime+0
 	bsf		WREG,int_not_yet_computed
 	bsf		WREG,int_invalid_flag
-    movff   WREG,int_O_alternate_ascenttime+1
+	movff	WREG,int_O_alternate_ascenttime+1
 
 diveloop_loop_start:
-    btfsc   FLAG_TFT_display_ndl_mask
-    call    TFT_display_ndl_mask
+	btfsc	FLAG_TFT_display_ndl_mask
+	call	TFT_display_ndl_mask
 
 
 diveloop_loop:							; The diveloop starts here
-    btfss   quarter_second_update
-    bra     diveloop_loop4a
+	btfss	quarter_second_update
+	bra		diveloop_loop1
+
+	; tasks any 1/4 second, any mode
+	bcf		quarter_second_update		; clear flag
 
-    ; tasks any 1/4 second, any mode
-    bcf     quarter_second_update		; clear flag
-    
-    movlw   .6
-    cpfseq  menupos3                    ; in compass view?
-    bra     diveloop_loop4a				; No, done.
+	movlw	.6
+	cpfseq	menupos3					; in compass view?
+	bra		diveloop_loop1				; No, done.
 
-    btfsc   alternative_divelayout		; In alternative layout mode?
-    bra	    diveloop_loop4a				; Yes, done. No Compass.
+	btfsc	alternative_divelayout		; In alternative layout mode?
+	bra		diveloop_loop1				; Yes, done. No Compass.
 
-; TFT Output routines	
-    extern  TFT_dive_compass_heading
-    call    TFT_dive_compass_heading    ; Yes, update compass heading value
-    bsf	    FLAG_TFT_temp_divemode		; Redraw temperature (Is slighty affected from compass heading arrow)
-; TFT Output routines	
+; TFT Output routines
+	call	TFT_dive_compass_heading	; Yes, update compass heading value
+	bsf		FLAG_TFT_temp_divemode		; Redraw temperature (is slightly affected from compass heading arrow)
+; TFT Output routines
 
-diveloop_loop4a:
-	btfss	onesecupdate					
+diveloop_loop1:
+	btfss	onesecupdate
 	bra		diveloop_loop3
-	
+
 ; tasks any new second...
-    bcf     onesecupdate				; one seconds update, clear flag here in case it's set again in ISR before all tasks are done.
+	bcf		onesecupdate				; one seconds update, clear flag here in case it's set again in ISR before all tasks are done.
 
-	;bsf	LEDg	; ### DEBUG - used to measure the time used by all deco code to see if there is enough margin each second ###	
+	;bsf	LEDg	; ### USE FOR DEBUG ONLY - RESETS RX CIRCUITRY ###
 
 	; display depth based on full seconds interval (nicer blinking)
-    btfss   alternative_divelayout
-    rcall   TFT_output4_normal
-    btfsc   alternative_divelayout
-    rcall   TFT_output4_alternative
-	
+	btfss	alternative_divelayout
+	rcall	TFT_output4_normal
+	btfsc	alternative_divelayout
+	rcall	TFT_output4_alternative
+
 	btfsc	FLAG_apnoe_mode				; Only in apnoe mode
-	bra		diveloop_loop1b				; One Second Tasks in Apnoe mode
-	
+	bra		diveloop_loop1_nonedeco		; One Second Tasks in Apnoe mode
+
 ; tasks any new second - only for deco modes
+diveloop_loop1_decomodes:
 	bsf		FLAG_TFT_divemins			; Display (new) divetime!
 	btfsc	show_safety_stop			; Show the safety stop?
 	bsf		FLAG_TFT_show_safety_stop	; Yes, show/delete if done.
@@ -111,9 +131,9 @@
 	btfsc	alternative_divelayout
 	rcall	TFT_output1_alternative
 
-	btfsc   FLAG_ccr_mode				; In CCR mode...
-	call    check_dive_autosp			; ...check for Auto-SP
-	
+	btfsc	FLAG_ccr_mode				; in CCR mode...
+	call	check_dive_autosp			; ...check for Auto-SP
+
 	call	calc_deko_divemode			; calculate decompression and set resulting display flags
 
 	btfss	alternative_divelayout
@@ -123,20 +143,19 @@
 
 	call	divemode_check_for_warnings	; Check for any warnings
 
-	bra		diveloop_loop1x				; Common Tasks
+	bra		diveloop_loop2				; Common Tasks
+
 
-	
 ; tasks any new second - only for apnoe mode
-diveloop_loop1b:
+diveloop_loop1_nonedeco:
 	rcall	divemode_apnoe_tasks		; 1 sec. Apnoe tasks
 	call	customview_second			; Do every-second tasks for the custom view area
-
-	;bra	diveloop_loop1x				; Common Tasks
+	;bra	diveloop_loop2				; Common Tasks
 
 ; continue tasks any new second, any mode
-diveloop_loop1x:
+diveloop_loop2:
 	rcall	timeout_divemode			; ** menu timeout? ** This routine sets the required flags
-	rcall	set_dive_modes				; tests if depth>threshold
+	rcall	set_dive_modes				; tests if depth > threshold
 	rcall	set_min_temp				; store min. temp if required (Future hardware will need this to be checked 1/second...)
 
 	btfsc	oneminupdate				; one minute tasks
@@ -147,75 +166,78 @@
 	btfsc	alternative_divelayout
 	rcall	TFT_output3_alternative
 
-	;bcf	LEDg	; ### DEBUG - used to measure the time used by all deco code to see if there is enough margin each second ###
+	;bcf	LEDg	; ### USE FOR DEBUG ONLY - RESETS RX CIRCUITRY ###
 
 ; tasks any round, any mode
 diveloop_loop3:
-    call	test_switches_divemode		; Check switches in divemode
-	
-    global  diveloop_loop4
+	call	test_switches_divemode		; Check switches in divemode
+
+	global	diveloop_loop4
 diveloop_loop4:							; Menu-Exit returns here...
 	btfsc	divemode_menu				; in the big divemode menu?
 	bra		diveloop_loop4b				; YES - no space for CCR/pSCR info
 	btfsc	menuview					; NO  - in the small yellow menu?
-	bra		diveloop_loop4b				; 		YES - no space for CCR/pSCR info
-	btfsc	alternative_divelayout		; 		NO  - in the alternative layout?
-	bra		diveloop_loop4b				; 			  YES - no space for CCR/pSCR info
-	call	TFT_show_mode_divemode		; 			  NO  - (re)write CCR/pSCR mode info to display
+	bra		diveloop_loop4b				;       YES - no space for CCR/pSCR info
+	btfsc	alternative_divelayout		;       NO  - in the alternative layout?
+	bra		diveloop_loop4b				;             YES - no space for CCR/pSCR info
+	call	TFT_show_mode_divemode		;             NO  - (re)write CCR/pSCR mode info to display
 diveloop_loop4b:
-    btfsc   toggle_customview			; Next view?
-    call    customview_toggle			; Yes, show next customview (and delete this flag)
+	btfsc	toggle_customview			; Next view?
+	call	customview_toggle			; Yes, show next customview (and delete this flag)
 
-    btfsc   store_sample				; store new sample?
-    call    store_dive_data				; Store profile data
+	btfsc	divemode_gaschange			; Gas switch flag set?
+	call	gas_switched_common			; YES
 
-    btfss   divemode					; Dive finished?
-    goto    ghostwriter_end_dive    	; Dive finished!
+	btfsc	toggle_gf					; Toggle GF/aGF?
+	rcall	divemodemode_togglegf		; YES
 
-    btfsc   divemode_gaschange			; Gas switch flag set?
-    call    gas_switched_common			; Yes
+	btfsc	FLAG_set_marker				; shall a marker be set?
+	call	set_logbook_marker			; YES
+
+	btfsc	store_sample				; store new sample?
+	call	store_dive_data				; Store profile data
+
+	btfss	divemode					; Dive finished?
+	goto	ghostwriter_end_dive		; Dive finished!
 
-    btfsc   toggle_gf					; =1: Toggle GF/aGF
-    rcall   divemodemode_togglegf		; Toggle aGF/GF
-    
-    btfsc   pressure_refresh			; new pressure available?	
-    rcall   set_max_depth				; update max. depth if required
-    btfsc   pressure_refresh			; new pressure available?	
-    bsf	    FLAG_TFT_depth				; Yes, update depth asap
-    bcf	    pressure_refresh			; clear flag
+	btfsc	pressure_refresh			; new pressure available?
+	rcall	set_max_depth				; update max. depth if required
+	btfsc	pressure_refresh			; new pressure available?
+	bsf		FLAG_TFT_depth				; Yes, update depth
+	bcf		pressure_refresh			; clear flag
 
-    btfsc   temp_changed
-    bsf	    FLAG_TFT_temp_divemode		; Displays temperature
+	btfsc	temp_changed
+	bsf		FLAG_TFT_temp_divemode		; Displays temperature
 
 	; display depth based on as-fast-as-possible (no nice blinking)
-    ;btfss   alternative_divelayout
-    ;rcall   TFT_output4_normal
-    ;btfsc   alternative_divelayout
-    ;rcall   TFT_output4_alternative
-    
-    btfsc   enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    bra     diveloop_loop5
-    bra     diveloop_loop6
+	;btfss	alternative_divelayout
+	;rcall	TFT_output4_normal
+	;btfsc	alternative_divelayout
+	;rcall	TFT_output4_alternative
+
+	btfsc	enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	bra		diveloop_loop5
+	bra		diveloop_loop6
 
 diveloop_loop5:
-    btfss   vusb_in						; USB (still) plugged in?
-    bcf     enable_screen_dumps			; No, clear flag
-    call    rs232_get_byte
-    btfsc   rs232_recieve_overflow
-    bra     diveloop_loop6
-    movlw   "l"
-    cpfseq	RCREG1
-    bra     diveloop_loop6
-    call    TFT_dump_screen				; Dump the screen contents
-	
+	btfss	vusb_in						; USB (still) plugged in?
+	bcf		enable_screen_dumps			; No, clear flag
+	call	rs232_get_byte
+	btfsc	rs232_receive_overflow
+	bra		diveloop_loop6
+	movlw	"l"
+	cpfseq	RCREG1
+	bra		diveloop_loop6
+	call	TFT_dump_screen				; Dump the screen contents
+
 diveloop_loop6:
 	bra		diveloop_loop				; Loop the divemode
-	
+
 ;--------------------------------------------------------------------------------------------------------	
-	
-TFT_output1_normal:	    				; beginning of any new second - only for deco modes
-	btfsc   FLAG_TFT_divemode_mask
-	call    TFT_divemode_mask
+
+TFT_output1_normal:						; beginning of any new second - only for deco modes
+	btfsc	FLAG_TFT_divemode_mask
+	call	TFT_divemode_mask
 	btfsc	FLAG_TFT_divemins
 	call	TFT_divemins				; Display (new) divetime!
 	call	customview_second			; Do every-second tasks for the custom view area (In sync with the divetime) mH
@@ -224,20 +246,20 @@
 	btfsc	FLAG_TFT_clear_safety_stop
 	call	TFT_clear_safety_stop		; Clear safety stop
 	return
-	
+
 TFT_output1_alternative:				; beginning of any new second - only for deco modes
 	btfsc	FLAG_TFT_divemins
 	call	TFT_divemins_alternative	; Display (new) divetime!
 	btfsc	FLAG_TFT_divemode_mask_alt
-	call    TFT_divemode_mask_alternative	; Alt. mask
-	call	customview_alternative_second	; Do every-second tasks for the custom view area (In sync with the divetime) mH
+	call	TFT_divemode_mask_alternative ; Alt. mask
+	call	customview_alternative_second ; Do every-second tasks for the custom view area (In sync with the divetime) mH
 	return
-	
-TFT_output2_normal:	    				; any new second - only for deco modes
-	btfsc   FLAG_TFT_display_ndl_mask
-	call    TFT_display_ndl_mask
-	btfsc   FLAG_TFT_display_ndl
-	call    TFT_display_ndl
+
+TFT_output2_normal:						; any new second - only for deco modes
+	btfsc	FLAG_TFT_display_ndl_mask
+	call	TFT_display_ndl_mask
+	btfsc	FLAG_TFT_display_ndl
+	call	TFT_display_ndl
 	btfsc	FLAG_TFT_display_deko_mask
 	call	TFT_display_deko_mask
 	btfsc	FLAG_TFT_display_deko
@@ -246,10 +268,10 @@
 	call	TFT_display_tts
 	return
 
-TFT_output2_alternative:    			; any new second - only for deco modes
+TFT_output2_alternative:				; any new second - only for deco modes
 	return
-	
-TFT_output3_normal:	    				; tasks any new second, any mode
+
+TFT_output3_normal:						; tasks any new second, any mode
 	btfsc	FLAG_TFT_max_depth
 	call	TFT_max_depth				; use normal max. depth
 	btfsc	FLAG_TFT_divemode_warning
@@ -257,14 +279,14 @@
 	btfsc	FLAG_TFT_divemode_warning_clear
 	call	TFT_divemode_warning_clear
 	btfsc	FLAG_TFT_active_gas_divemode
-	call	TFT_active_gas_divemode			; Display gas/Setpoint
+	call	TFT_active_gas_divemode		; Display gas/Setpoint
 	btfsc	FLAG_TFT_dive_warning_text_clear
-	call	TFT_clear_warning_text          ; clear complete warnings area
-	btfsc   FLAG_TFT_dive_warning_text_clr2
-	call    TFT_clear_warning_text_2nd_row	; clear 2nd row of warnings
+	call	TFT_clear_warning_text		; clear complete warnings area
+	btfsc	FLAG_TFT_dive_warning_text_clr2
+	call	TFT_clear_warning_text_2nd_row; clear 2nd row of warnings
 	return
-	
-TFT_output3_alternative:    			; tasks any new second, any mode
+
+TFT_output3_alternative:				; tasks any new second, any mode
 	btfsc	FLAG_TFT_max_depth_alt
 	call	TFT_max_depth_alternative	; big max. depth
 	btfsc	FLAG_TFT_dive_warning_text_clear
@@ -276,16 +298,16 @@
 TFT_output4_normal:						; tasks any round, any mode
 	btfsc	FLAG_TFT_depth
 	call	TFT_depth					; Displays new depth
-	btfsc	FLAG_TFT_temp_divemode		
+	btfsc	FLAG_TFT_temp_divemode
 	call	TFT_temp_divemode			; Update temperature
 	return
-	
-TFT_output4_alternative:    			; tasks any round, any mode
-    btfsc	FLAG_TFT_depth
+
+TFT_output4_alternative:				; tasks any round, any mode
+	btfsc	FLAG_TFT_depth
 	call	TFT_depth					; Displays new depth
 	return
-	
-	
+
+
 ;--------------------------------------------------------------------------------------------------------
 
 divemode_apnoe_tasks:					; 1 sec. Apnoe tasks
@@ -305,11 +327,11 @@
 	clrf	apnoe_surface_secs
 	incf	apnoe_surface_mins,F
 
-divemode_apnoe_tasks1:	
-	bcf	FLAG_active_descent				; Clear flag
+divemode_apnoe_tasks1:
+	bcf		FLAG_active_descent			; Clear flag
 	btfsc	divemode2					; Time running?
 	return								; Yes, return
-	bsf	FLAG_active_descent				; Set Flag
+	bsf		FLAG_active_descent			; Set Flag
 	return
 
 divemode_apnoe_tasks2:
@@ -337,7 +359,7 @@
 	call	subU16						; sub_c = sub_a - sub_b
 										; apnoe_max_pressure<max_pressure -> neg_flag=1
 										; max_pressure<=apnoe_max_pressure -> neg_flag=0
-	btfss	neg_flag	
+	btfss	neg_flag
 	return
 										;apnoe_max_pressure<max_pressure
 	movff	max_pressure+0,apnoe_max_pressure+0
@@ -352,10 +374,10 @@
 	bra		calc_deko_divemode1
 	bsf		twosecupdate
 	return
-	
+
 calc_deko_divemode1:					; the following code is invoked every 2 seconds
 	bcf		twosecupdate
-	
+
 	call	calc_average_depth			; calculate average depth
 	call	calc_velocity				; calculate vertical velocity and display if > threshold (every two seconds)
 	call	set_reset_safety_stop		; Set flags for safety stop and/or reset safety stop
@@ -369,7 +391,7 @@
 ; Check for a gas change
 	goto	check_gas_change			; Checks if a better gas should be selected (by user) and return...
 
-	
+
 calc_deko_divemode2:
 	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
 	return
@@ -377,23 +399,23 @@
 	btfsc	FLAG_ccr_mode				; In CCR mode?
 	rcall	calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
 
-    btfsc   FLAG_pscr_mode				; In PSCR mode?
-    rcall   calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
-    
+	btfsc	FLAG_pscr_mode				; In PSCR mode?
+	rcall	calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
+
 	SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; transfer ambient pressure to deco engine
 
 
 	; check deco engine state and switch between normal and alternative plan calculations
 	;
 	; Remark: Any reconfigurations done here do only affect the ascent & deco calculation settings,
-	;         not the settings for the calculations done on the real tissues. The later ones are only
-	;         altered in case of a gas change, or in case of a real bailout or switchback to setpoint
-	;         or sensor, respectively.
-	;         In case of a gas change or real bailout/switchback, the settings for the deco calculations
-	;         are also changed to match the settings for the real tissues. This is done on signal through
-	;         'divemode_gaschange' and will also leave the deco engine status in state as if having done
-	;         the alternative plan last.
-	
+	;		not the settings for the calculations done on the real tissues. The later ones are only
+	;		altered in case of a gas change, or in case of a real bailout or switchback to setpoint
+	;		or sensor, respectively.
+	;		In case of a gas change or real bailout/switchback, the settings for the deco calculations
+	;		are also changed to match the settings for the real tissues. This is done on signal through
+	;		'divemode_gaschange' and will also leave the deco engine status in state as if having done
+	;		the alternative plan last.
+
 	; check state of ascent/deco calculations
 	movff	char_O_deco_status,lo		; get a working copy of char_O_deco_status into bank common
 	movlw	DECO_STATUS_MASK			; load bit mask covering the deco status bits
@@ -405,7 +427,7 @@
 
 	; The PLAN bit is set, i.e. an alternative plan was computed in the last cycle, or the deco engine has
 	; been restarted because of a gas change etc. --> Reconfigure to normal plan for next computation cycle.
-	
+
 	; reset flags for special calculations
 	bcf		lo,DECO_PLAN_FLAG			; clear flag for alternative plan
 	bcf		lo,DECO_ASCENT_FLAG			; clear flag for delayed ascent calculation
@@ -428,75 +450,67 @@
 	btfsc	is_bailout					; YES - check if a real bailout situation is present
 	bra		calc_deko_divemode2e		; YES - OC gases have been set by bailout action then, start normal plan
 	movff	active_gas,WREG				; NO  - switch back to loop calculation: get current (diluent) gas, ...
-	call	deco_setup_cc_diluents		;       ... set up deco calculations in CCR/pSCR mode with diluents,
-	bra		calc_deko_divemode2e		;       ... and start in normal plan mode
+	call	deco_setup_cc_diluents		;     ... set up deco calculations in CCR/pSCR mode with diluents,
+	bra		calc_deko_divemode2e		;     ... and start in normal plan mode
 
 	; The PLAN bit was cleared, i.e. a normal plan was computed in the last cycle. For the next
 	; computation cycle the mode may be switched to alternative plan, or stay in normal mode...
-	
+
 calc_deko_divemode2b:
 	bcf		lo,DECO_ASCENT_FLAG			; clear flag for delayed ascent calculation (for safety only)
 	btfsc	is_bailout					; check if a real bailout situation is present
 	bra		calc_deko_divemode2c		; YES - stay in normal plan mode and preclude delayed ascent calculation
 	movff	char_I_extra_time,hi		; NO  -	get the delayed ascent setting
-	tstfsz	hi							; 		check if delayed ascent calculation is enabled
-	bsf		lo,DECO_ASCENT_FLAG			; 		YES - set flag for delayed ascent calculation
-	tstfsz	hi							; 		check if delayed ascent calculation is enabled (again)
-	bsf		lo,DECO_PLAN_FLAG			; 		YES - set flag for alternative plan
+	tstfsz	hi							;       check if delayed ascent calculation is enabled
+	bsf		lo,DECO_ASCENT_FLAG			;       YES - set flag for delayed ascent calculation
+	tstfsz	hi							;       check if delayed ascent calculation is enabled (again)
+	bsf		lo,DECO_PLAN_FLAG			;       YES - set flag for alternative plan
 
 	; check if a gas needs calculation shall be done
 calc_deko_divemode2c:					
 	bsf		lo,DECO_VOLUME_FLAG			; set gas needs calculation flag (may be cleared again next)
-	TSTOSS  opt_calc_asc_gasvolume		; check if gas needs calculation is enabled
+	TSTOSS	opt_calc_asc_gasvolume		; check if gas needs calculation is enabled
 	bcf		lo,DECO_VOLUME_FLAG			; NO  - reset flag again
 	movff	lo,char_O_deco_status		; write-back char_O_deco_status to deco engine interface
-	TSTOSS  opt_calc_asc_gasvolume		; check if gas volume calculation is enabled (again)
+	TSTOSS	opt_calc_asc_gasvolume		; check if gas volume calculation is enabled (again)
 	bra		calc_deko_divemode2e		; NO  - no volume calculation, no simulated bailout plan in no case
-	
+
 	; check if conditions are met to calculate a bailout plan
 	btfsc	is_bailout					; check if a real bailout situation is present
 	bra		calc_deko_divemode2e		; YES - normal plan already does bailout (OC) calculation "for real"
 	btfss	lo,DECO_MODE_LOOP_FLAG		; NO  - have loop mode calculation been done during the normal plan?
 	bra		calc_deko_divemode2e		; NO  - when not in loop mode, no simulated bailout to be done
 	bsf		lo,DECO_PLAN_FLAG			; YES - set flag for alternative plan
-	movff	lo,char_O_deco_status		; 		write-back char_O_deco_status to deco engine interface
-	call    get_first_gas_to_WREG		; 		get first OC gas, ...
+	movff	lo,char_O_deco_status		;       write-back char_O_deco_status to deco engine interface
+	call	get_first_gas_to_WREG		;       get first OC gas, ...
 	call	deco_setup_oc_gases			;       ... set up deco calculations in OC mode with OC gases,
 	;bra	calc_deko_divemode2e		;       ... and start in alternative plan mode
 
 
 calc_deko_divemode2e:
-    clrf    TMR5L
-    clrf    TMR5H                       ; 30,51757813µs/bit in TMR5L:TMR5H
+	clrf	TMR5L
+	clrf	TMR5H						; 30,51757813µs/bit in TMR5L:TMR5H
 	call	deco_calc_hauptroutine		; calc_tissue
-	banksel common
-
-    ; Check if deco stops are necessary ?
-	movff	char_O_first_deco_depth,wait_temp	; copy ceiling to temp register
-	tstfsz	wait_temp							; Ceiling<0m?
-	bra		calc_deko_divemode3					; Yes!
+	banksel	common
 
-	btfsc	decostop_active             		; Already in nodeco mode ?
-	bsf		FLAG_TFT_display_ndl_mask       	; No, Clear deco data, display nostop time
-	bcf		decostop_active						; clear flag (again)
-
-	; Copy for profile recording
-	clrf	decodata+0
-	movff	char_O_nullzeit,decodata+1 			; NDL
-	
-	bsf		FLAG_TFT_display_ndl				; display no deco limit
+	; Check if deco stops are necessary
+	movff	char_O_first_deco_depth,WREG; get ceiling
+	tstfsz	WREG						; ceiling < 0m (aka in deco) ?
+	bra		calc_deko_divemode3			; YES
+	; NO - within NDL
+	btfsc	decostop_active				; already in no deco mode ?
+	bsf		FLAG_TFT_display_ndl_mask	; NO - clear deco data, display NDL time
+	bsf		FLAG_TFT_display_ndl		; display NDL time
+	bcf		decostop_active				; clear flag (again)
 	return
 
 calc_deko_divemode3:
-	btfss	decostop_active						; Already in deco mode ?
-	bsf		FLAG_TFT_display_deko_mask			; No, clear nostop time, display decodata
-	bsf		decostop_active						; Set flag (again)
-
-	; Copy for profile recording
-	movff	char_O_first_deco_depth,decodata+0	; ceiling
-	movff	char_O_first_deco_time,decodata+1	; length of first stop in minutes
-	bsf		FLAG_TFT_display_deko				; display decodata
-	bsf		FLAG_TFT_display_tts				; display TTS
+	; YES - in deco
+	btfss	decostop_active				; already in deco mode ?
+	bsf		FLAG_TFT_display_deko_mask	; NO - clear NDL time, display deco data
+	bsf		FLAG_TFT_display_deko		; display deco data
+	bsf		FLAG_TFT_display_tts		; display TTS
+	bsf		decostop_active				; set flag (again)
 	return
 
 	; --------------------------------------------------------------------------------------
@@ -504,48 +518,50 @@
 	global	calc_deko_divemode_sensor
 calc_deko_divemode_sensor:
 	; sensor acquisition code
-	btfss   s8_digital				; check if we have digital interface to the sensors
-	bra     calc_deko_divemode_sensor_analog	; NO  - use analog interface
-	btfss   new_s8_data_available			; YES - check if a new data frame was received
-	bra	calc_deko_divemode_sensor_common	; NO  - use old values
-	call	compute_mvolts_for_all_sensors		; YES - compute mV values from digital data
-	bra	calc_deko_divemode_sensor_common
+	btfss	s8_digital						 ; check if we have a digital interface to the sensors
+	bra		calc_deko_divemode_sensor_analog ; NO  - check if we have an analog interface
+	btfss	new_s8_data_available			 ; YES - check if a new data frame was received
+	bra		calc_deko_divemode_sensor_common ; NO  - use old values -- TODO: add timeout for no new data
+	call	compute_mvolts_for_all_sensors	 ; YES - compute mV values from digital data
+	bra		calc_deko_divemode_sensor_common
 
 calc_deko_divemode_sensor_analog:
-	call    get_analog_inputs					; TODO: abort when OSTC model does not have analog inputs
+	btfss	analog_o2_input				; do we have an analog input?
+	return								; NO  - return
+	call	get_analog_inputs			; YES - get the analog voltages and continue with the common part
 
 calc_deko_divemode_sensor_common:
 	; Check for each sensor if it is calibrated and if its mv value is within min_mv and max_mv limits.
-	; If     ok: compute o2_ppo2_sensorX := o2_mv_sensorX * opt_x_sX / 1000.
-	; If not ok: reset o2_ppo2_sensorX, reset use_O2_sensorX and show the customview 1 in case the sensor was ok before.
+	; If     ok: compute o2_ppo2_sensorX := o2_mv_sensorX * opt_x_sX / 1000
+	; If not ok: reset   o2_ppo2_sensorX, reset use_O2_sensorX and show the customview 1 in case the sensor was ok before
 
 	; Check min_mv of sensor 1
-	btfss	sensor1_calibrated_ok			; check if sensor is usable at all
-	bra		check_sensor_1_fail				; NO  - handle it as failed
-	movff	o2_mv_sensor1+0, sub_a+0		; load sensor mV value
+	btfss	sensor1_calibrated_ok		; check if sensor is usable at all
+	bra		check_sensor_1_fail			; NO  - handle it as failed
+	movff	o2_mv_sensor1+0, sub_a+0	; load sensor mV value
 	movff	o2_mv_sensor1+1, sub_a+1
-	movlw	LOW		min_mv					; load minimum mV value
+	movlw	LOW  min_mv					; load minimum mV value
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16							; sub_c = sensor_mv - min_mv
-    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
-	bra		check_sensor_1_fail				; YES - declare sensor as failed
-	; Check max_mv of sensor 1				  NO  - continue with next check
+	call	sub16						; sub_c = sensor_mv - min_mv
+	btfsc	neg_flag					; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_1_fail			; YES - declare sensor as failed
+	; Check max_mv of sensor 1			; NO  - continue with next check
 	movff	o2_mv_sensor1+0, sub_a+0
 	movff	o2_mv_sensor1+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16							;  sub_c = sensor_mv - max_mv
-	btfss	neg_flag						; check if result is negative, i.e. sensor_mv < max_mv
-	bra		check_sensor_1_fail				; NO  - declare sensor as failed
-	; Check HUD data, if available			  YES - continue with next check
-	btfss   hud_connection_ok				; check if there is a HUD connected
-    bra     check_sensor_1_ok				; NO  - all checks done then and positive
-	btfss   sensor1_active					; YES - check HUD report on sensor
-	bra		check_sensor_1_fail				; HUD reports a fail
+	call	sub16						; sub_c = sensor_mv - max_mv
+	btfss	neg_flag					; check if result is negative, i.e. sensor_mv < max_mv
+	bra		check_sensor_1_fail			; NO  - declare sensor as failed
+	; Check HUD data, if available		; YES - continue with next check
+	btfss	hud_connection_ok			; check if there is a HUD connected
+	bra		check_sensor_1_ok			; NO  - all checks done then and positive
+	btfss	sensor1_active				; YES - check HUD report on sensor
+	bra		check_sensor_1_fail			; HUD reports a fail
 
 check_sensor_1_ok:
 	; o2_ppo2_sensor1 := o2_mv_sensor1:2 * opt_x_s1:2 / 1000
@@ -554,46 +570,46 @@
 	movff	opt_x_s1+0,xB+0
 	movff	opt_x_s1+1,xB+1
 	rcall	compute_ppo2_helper
-	movff	xC+0,o2_ppo2_sensor1			; result in 0.01bar
-	bra	check_sensor_2						; continue with next sensor
+	movff	xC+0,o2_ppo2_sensor1		; result in 0.01bar
+	bra		check_sensor_2				; continue with next sensor
 
 check_sensor_1_fail:
 	clrf	WREG
-	movff	WREG,o2_ppo2_sensor1			; set ppO2 reading to zero
-	btfss	use_O2_sensor1					; check if sensor was in use before
-	bra		check_sensor_1_fail_1			; NO  - no new news then
-	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+	movff	WREG,o2_ppo2_sensor1		; set ppO2 reading to zero
+	btfss	use_O2_sensor1				; check if sensor was in use before
+	bra		check_sensor_1_fail_1		; NO  - no new news then
+	call	check_sensor_custview_helper; YES - show customview 1 (sensor values) on further conditions met
 check_sensor_1_fail_1:
-	bcf		use_O2_sensor1					; revoke sensor from usage
-	;bra	check_sensor_2					; continue with next sensor
+	bcf		use_O2_sensor1				; revoke sensor from usage
+	;bra	check_sensor_2				; continue with next sensor
 
-check_sensor_2:								; Check min_mv of sensor 2
-	btfss	sensor2_calibrated_ok			; check if sensor is usable at all
-	bra		check_sensor_2_fail				; NO  - handle it as failed
-	movff	o2_mv_sensor2+0, sub_a+0		; load sensor mV value
+check_sensor_2:							; Check min_mv of sensor 2
+	btfss	sensor2_calibrated_ok		; check if sensor is usable at all
+	bra		check_sensor_2_fail			; NO  - handle it as failed
+	movff	o2_mv_sensor2+0, sub_a+0	; load sensor mV value
 	movff	o2_mv_sensor2+1, sub_a+1
-	movlw	LOW		min_mv					; load minimum mV value
+	movlw	LOW  min_mv					; load minimum mV value
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16							; sub_c = sensor_mv - min_mv
-    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
-	bra		check_sensor_2_fail				; YES - declare sensor as failed
-	; Check max_mv of sensor 2				  NO  - continue with next check
+	call	sub16						; sub_c = sensor_mv - min_mv
+	btfsc	neg_flag					; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_2_fail			; YES - declare sensor as failed
+	; Check max_mv of sensor 2			; NO  - continue with next check
 	movff	o2_mv_sensor2+0, sub_a+0
 	movff	o2_mv_sensor2+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16							;  sub_c = sensor_mv - max_mv
-	btfss	neg_flag						; check if result is nagative, i.e. sensor_mv < max_mv
-	bra		check_sensor_2_fail				; NO  - declare sensor as failed
-	; Check HUD data, if available			  YES - continue with next check
-	btfss   hud_connection_ok				; check if there is a HUD connected
-    bra     check_sensor_2_ok				; NO  - all checks done then and positive
-	btfss   sensor2_active					; YES - check HUD report on sensor
-	bra		check_sensor_2_fail				; HUD reports a fail
+	call	sub16						; sub_c = sensor_mv - max_mv
+	btfss	neg_flag					; check if result is nagative, i.e. sensor_mv < max_mv
+	bra		check_sensor_2_fail			; NO  - declare sensor as failed
+	; Check HUD data, if available		; YES - continue with next check
+	btfss	hud_connection_ok			; check if there is a HUD connected
+	bra		check_sensor_2_ok			; NO  - all checks done then and positive
+	btfss	sensor2_active				; YES - check HUD report on sensor
+	bra		check_sensor_2_fail			; HUD reports a fail
 
 check_sensor_2_ok:
 	; o2_ppo2_sensor2 := o2_mv_sensor2:2 * opt_x_s2:2 / 1000
@@ -602,46 +618,46 @@
 	movff	opt_x_s2+0,xB+0
 	movff	opt_x_s2+1,xB+1
 	rcall	compute_ppo2_helper
-	movff	xC+0,o2_ppo2_sensor2			; result in 0.01bar
-	bra	check_sensor_3						; continue with next sensor
+	movff	xC+0,o2_ppo2_sensor2		; result in 0.01bar
+	bra		check_sensor_3				; continue with next sensor
 
 check_sensor_2_fail:
 	clrf	WREG
-	movff	WREG,o2_ppo2_sensor2			; set ppO2 reading to zero
-	btfss	use_O2_sensor2					; check if sensor was in use before
-	bra		check_sensor_2_fail_1			; NO  - no new news then
-	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+	movff	WREG,o2_ppo2_sensor2		; set ppO2 reading to zero
+	btfss	use_O2_sensor2				; check if sensor was in use before
+	bra		check_sensor_2_fail_1		; NO  - no new news then
+	call	check_sensor_custview_helper; YES - show customview 1 (sensor values) on further conditions met
 check_sensor_2_fail_1:
-	bcf		use_O2_sensor2					; revoke sensor from usage
-	;bra	check_sensor_3					; continue with next sensor	
+	bcf		use_O2_sensor2				; revoke sensor from usage
+	;bra	check_sensor_3				; continue with next sensor	
 
-check_sensor_3:								; Check min_mv of sensor 2
-	btfss	sensor3_calibrated_ok			; check if sensor is usable at all
-	bra		check_sensor_3_fail				; NO  - handle it as failed
-	movff	o2_mv_sensor3+0, sub_a+0		; load sensor mV value
+check_sensor_3:							; Check min_mv of sensor 2
+	btfss	sensor3_calibrated_ok		; check if sensor is usable at all
+	bra		check_sensor_3_fail			; NO  - handle it as failed
+	movff	o2_mv_sensor3+0, sub_a+0	; load sensor mV value
 	movff	o2_mv_sensor3+1, sub_a+1
-	movlw	LOW		min_mv					; load minimum mV value
+	movlw	LOW  min_mv					; load minimum mV value
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16							; sub_c = sensor_mv - min_mv
-    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
-	bra		check_sensor_3_fail				; YES - declare sensor as failed
-	; Check max_mv of sensor 2				  NO  - continue with next check
+	call	sub16						; sub_c = sensor_mv - min_mv
+	btfsc	neg_flag					; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_3_fail			; YES - declare sensor as failed
+	; Check max_mv of sensor 2			; NO  - continue with next check
 	movff	o2_mv_sensor3+0, sub_a+0
 	movff	o2_mv_sensor3+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16							;  sub_c = sensor_mv - max_mv
-	btfss	neg_flag						; check if result is nagative, i.e. sensor_mv < max_mv
-	bra		check_sensor_3_fail				; NO  - declare sensor as failed
-	; Check HUD data, if available			  YES - continue with next check
-	btfss   hud_connection_ok				; check if there is a HUD connected
-    bra     check_sensor_3_ok				; NO  - all checks done then and positive
-	btfss   sensor3_active					; YES - check HUD report on sensor
-	bra		check_sensor_3_fail				; HUD reports a fail
+	call	sub16						; sub_c = sensor_mv - max_mv
+	btfss	neg_flag					; check if result is negative, i.e. sensor_mv < max_mv
+	bra		check_sensor_3_fail			; NO  - declare sensor as failed
+	; Check HUD data, if available		; YES - continue with next check
+	btfss	hud_connection_ok			; check if there is a HUD connected
+	bra		check_sensor_3_ok			; NO  - all checks done then and positive
+	btfss	sensor3_active				; YES - check HUD report on sensor
+	bra		check_sensor_3_fail			; HUD reports a fail
 
 check_sensor_3_ok:
 	; o2_ppo2_sensor3 := o2_mv_sensor3:2 * opt_x_s1:2 / 1000
@@ -650,420 +666,423 @@
 	movff	opt_x_s3+0,xB+0
 	movff	opt_x_s3+1,xB+1
 	rcall	compute_ppo2_helper
-	movff	xC+0,o2_ppo2_sensor3			; result in 0.01bar
-	bra		calc_deko_divemode_sensor1		; continue with calculating sensor average
+	movff	xC+0,o2_ppo2_sensor3		; result in 0.01bar
+	bra		calc_deko_divemode_sensor1	; continue with calculating sensor average
 
 check_sensor_3_fail:
 	clrf	WREG
-	movff	WREG,o2_ppo2_sensor3			; set ppO2 reading to zero
-	btfss	use_O2_sensor3					; check if sensor was in use before
-	bra		check_sensor_3_fail_1			; NO  - no new news then
-	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+	movff	WREG,o2_ppo2_sensor3		; set ppO2 reading to zero
+	btfss	use_O2_sensor3				; check if sensor was in use before
+	bra		check_sensor_3_fail_1		; NO  - no new news then
+	call	check_sensor_custview_helper; YES - show customview 1 (sensor values) on further conditions met
 check_sensor_3_fail_1:
-	bcf		use_O2_sensor3					; revoke sensor from usage
-	;bra	calc_deko_divemode_sensor1		; continue with calculating sensor average
-	
-calc_deko_divemode_sensor1:					; calculate sensor average
+	bcf		use_O2_sensor3				; revoke sensor from usage
+	;bra	calc_deko_divemode_sensor1	; continue with calculating sensor average
+
+calc_deko_divemode_sensor1:				; calculate sensor average
 	; exit here if not in divemode
 	btfss	divemode
 	return
 
 	; compute sensor_setpoint := average of all o2_ppo2_sensorX of those sensors that have use_O2_sensorX == true
-    ; sum up sensor values (in xA:2) and active sensors in (xB:2)
-    clrf    xB+0
-    clrf    xB+1
-    clrf    xA+0
-    clrf    xA+1
-    btfss   use_O2_sensor1                  ; Sensor1 active?
-    bra     divemode_setup_sensor_values2   ; No
-    movf    o2_ppo2_sensor1,W
-    addwf   xA+0
-    movlw   .0
-    addwfc  xA+1                            ; Add into xA:2
-    incf    xB+0,F                          ; Add a sensor
+	; sum up sensor values (in xA:2) and active sensors in (xB:2)
+	clrf	xB+0
+	clrf	xB+1
+	clrf	xA+0
+	clrf	xA+1
+	btfss	use_O2_sensor1				; Sensor1 active?
+	bra		divemode_setup_sensor_values2 ; No
+	movf	o2_ppo2_sensor1,W
+	addwf	xA+0
+	movlw	.0
+	addwfc	xA+1						; Add into xA:2
+	incf	xB+0,F						; Add a sensor
 divemode_setup_sensor_values2:
-    btfss   use_O2_sensor2                  ; Sensor2 active?
-    bra     divemode_setup_sensor_values3   ; No
-    movf    o2_ppo2_sensor2,W
-    addwf   xA+0
-    movlw   .0
-    addwfc  xA+1                            ; Add into xA:2
-    incf    xB+0,F                          ; Add a sensor
+	btfss	use_O2_sensor2				; Sensor2 active?
+	bra		divemode_setup_sensor_values3 ; No
+	movf	o2_ppo2_sensor2,W
+	addwf	xA+0
+	movlw	.0
+	addwfc	xA+1						; Add into xA:2
+	incf	xB+0,F						; Add a sensor
 divemode_setup_sensor_values3:
-    btfss   use_O2_sensor3                  ; Sensor3 active?
-    bra     divemode_setup_sensor_values4   ; No
-    movf    o2_ppo2_sensor3,W
-    addwf   xA+0
-    movlw   .0
-    addwfc  xA+1                            ; Add into xA:2
-    incf    xB+0,F                          ; Add a sensor
+	btfss	use_O2_sensor3				; Sensor3 active?
+	bra		divemode_setup_sensor_values4 ; No
+	movf	o2_ppo2_sensor3,W
+	addwf	xA+0
+	movlw	.0
+	addwfc	xA+1						; Add into xA:2
+	incf	xB+0,F						; Add a sensor
 
 	; Divide sum of sensor values by number of active sensors found.
 divemode_setup_sensor_values4:
-    call    div16x16						; xA/xB=xC with xA+0 as remainder
-    movff   xC+0,sensor_setpoint            ; copy result
-	
+	call	div16x16					; xA/xB=xC with xA+0 as remainder
+	movff	xC+0,sensor_setpoint		; copy result
+
 	; set default value for pSCR mode: 0 = let p2_deco.c compute the ppO2 based on current dil gas and depth
 	; will be overwritten later in case we are in sensor mode and have at least one usable sensor
-	clrf	WREG							; preload a zero
-	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
-	movff	WREG,char_I_const_ppO2			; YES - write 0 to char_I_const_ppo2,
-											;		it will be overwritten if we have a usable sensor reading
-	
-	btfsc	is_bailout						; check if we are in bailout
-	bra		calc_deko_divemode_sensor2		; YES - no sensor data transfer to char_I_const_ppO2 in this case
-	movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     calc_deko_divemode_sensor2		; not in sensor mode - no transfer of sensor data to char_I_const_ppO2
-	tstfsz	xB+0							; check if we have found at least one usable sensor
-	bra		calc_deko_divemode_sensor1a		; YES - we have at least one usable sensor
-	bsf		setpoint_fallback				; NO  - we have NO usable sensors -> initiate fallback
-	btfss	FLAG_ccr_mode					; check if we are in CCR mode
-	bra		calc_deko_divemode_sensor2		; NO  - continue with voting logic flags
+	clrf	WREG						; preload a zero
+	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
+	movff	WREG,char_I_const_ppO2		; YES - write 0 to char_I_const_ppo2,
+										;		it will be overwritten if we have a usable sensor reading
+
+	btfsc	is_bailout					; check if we are in bailout
+	bra		calc_deko_divemode_sensor2	; YES - no sensor data transfer to char_I_const_ppO2 in this case
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensor)?
+	bnz		calc_deko_divemode_sensor2	; not in sensor mode - no transfer of sensor data to char_I_const_ppO2
+	tstfsz	xB+0						; check if we have found at least one usable sensor
+	bra		calc_deko_divemode_sensor1a	; YES - we have at least one usable sensor
+	bsf		setpoint_fallback			; NO  - we have NO usable sensors -> initiate fallback
+	btfss	FLAG_ccr_mode				; check if we are in CCR mode
+	bra		calc_deko_divemode_sensor2	; NO  - continue with voting logic flags
 	movff	char_I_setpoint_cbar+0,char_I_const_ppO2	; YES - select fixed setpoint no. 1 for fallback
-	bra		calc_deko_divemode_sensor2		; done - continue with voting logic flags
-calc_deko_divemode_sensor1a:				; we have at least one usable sensor with a value > 0
-	bcf		setpoint_fallback				; clear fallback condition
+	bra		calc_deko_divemode_sensor2	; done - continue with voting logic flags
+calc_deko_divemode_sensor1a:			; we have at least one usable sensor with a value > 0
+	bcf		setpoint_fallback			; clear fallback condition
 	movff	sensor_setpoint,char_I_const_ppO2	; transfer average sensor value to p2_deco.c code
-	; bra	calc_deko_divemode_sensor2
+	;bra	calc_deko_divemode_sensor2
 
 calc_deko_divemode_sensor2:
-    bsf     voting_logic_sensor1
-    movff   o2_ppo2_sensor1,temp1
-    rcall   check_sensor_voting_helper
-    incfsz  WREG                    		; Was Wreg=255?
-    bcf     voting_logic_sensor1    		; No, ignore this sensor
+	bsf		voting_logic_sensor1
+	movff	o2_ppo2_sensor1,lo
+	rcall	check_sensor_voting_helper
+	incfsz	WREG						; Was WREG = 255?
+	bcf		voting_logic_sensor1		; No, ignore this sensor
 
-    bsf     voting_logic_sensor2
-    movff   o2_ppo2_sensor2,temp1
-    rcall   check_sensor_voting_helper
-    incfsz  WREG                    		; Was Wreg=255?
-    bcf     voting_logic_sensor2    		; No, ignore this sensor
+	bsf		voting_logic_sensor2
+	movff	o2_ppo2_sensor2,lo
+	rcall	check_sensor_voting_helper
+	incfsz	WREG						; Was WREG=255?
+	bcf		voting_logic_sensor2		; No, ignore this sensor
 
-    bsf     voting_logic_sensor3
-    movff   o2_ppo2_sensor3,temp1
-    rcall   check_sensor_voting_helper
-    incfsz  WREG                    		; Was Wreg=255?
-    bcf     voting_logic_sensor3    		; No, ignore this sensor
-	
+	bsf		voting_logic_sensor3
+	movff	o2_ppo2_sensor3,lo
+	rcall	check_sensor_voting_helper
+	incfsz	WREG						; Was WREG=255?
+	bcf		voting_logic_sensor3		; No, ignore this sensor
+
 	; check if a warning shall be issued on sensor disagreement
 
-	btfsc	FLAG_ccr_mode					; check if we are in CCR mode
-	bra 	check_warn_sensor_1				; YES - continue with further checks
-	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
-	bra		check_warn_sensor_1				; YES - continue with further checks
-	bra 	check_warn_sensor_agree			; not in CCR and not in pSCR, so no warning
-check_warn_sensor_1:						; we are in CCR or pSCR mode
-	btfsc	is_bailout						; check if we are in bailout
-	bra		check_warn_sensor_agree			; YES - no warning in this case
-	movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     check_warn_sensor_agree			; not in sensor mode - no warning in this case
-											; check sensor 1
-	btfss	sensor1_calibrated_ok			; check if sensor has a valid calibration
-	bra		check_warn_sensor_2				; NO  - sensor can not cause a warning then
-	btfss	use_O2_sensor1					; YES - check if sensor is in use
-	bra		check_warn_sensor_2				; NO  - sensor can not cause a warning then
-	btfsc	voting_logic_sensor1			; YES - check if sensor value is within agreement range
-	bra		check_warn_sensor_2				; YES - continue with next sensor
-	bcf		sensors_agree					; NO  - issue a warning
+	btfsc	FLAG_ccr_mode				; check if we are in CCR mode
+	bra		check_warn_sensor_1			; YES - continue with further checks
+	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
+	bra		check_warn_sensor_1			; YES - continue with further checks
+	bra		check_warn_sensor_agree		; not in CCR and not in pSCR, so no warning
+check_warn_sensor_1:					; we are in CCR or pSCR mode
+	btfsc	is_bailout					; check if we are in bailout
+	bra		check_warn_sensor_agree		; YES - no warning in this case
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensor)?
+	bnz		check_warn_sensor_agree		; not in sensor mode - no warning in this case
+										; check sensor 1
+	btfss	sensor1_calibrated_ok		; check if sensor has a valid calibration
+	bra		check_warn_sensor_2			; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor1				; YES - check if sensor is in use
+	bra		check_warn_sensor_2			; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor1		; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_2			; YES - continue with next sensor
+	bcf		sensors_agree				; NO  - issue a warning
 	return
 
-check_warn_sensor_2:						; check sensor 2
-	btfss	sensor2_calibrated_ok			; check if sensor has a valid calibration
-	bra		check_warn_sensor_3				; NO  - sensor can not cause a warning then
-	btfss	use_O2_sensor2					; YES - check if sensor is in use
-	bra		check_warn_sensor_3				; NO  - sensor can not cause a warning then
-	btfsc	voting_logic_sensor2			; YES - check if sensor value is within agreement range
-	bra		check_warn_sensor_3				; YES - continue with next sensor
-	bcf		sensors_agree					; NO  - issue a warning
+check_warn_sensor_2:					; check sensor 2
+	btfss	sensor2_calibrated_ok		; check if sensor has a valid calibration
+	bra		check_warn_sensor_3			; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor2				; YES - check if sensor is in use
+	bra		check_warn_sensor_3			; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor2		; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_3			; YES - continue with next sensor
+	bcf		sensors_agree				; NO  - issue a warning
 	return
-	
-check_warn_sensor_3:						; check sensor 2
-	btfss	sensor3_calibrated_ok			; check if sensor has a valid calibration
-	bra		check_warn_sensor_agree			; NO  - sensor can not cause a warning then
-	btfss	use_O2_sensor3					; YES - check if sensor is in use
-	bra		check_warn_sensor_agree			; NO  - sensor can not cause a warning then
-	btfsc	voting_logic_sensor3			; YES - check if sensor value is within agreement range
-	bra		check_warn_sensor_agree			; YES - continue with next sensor
-	bcf		sensors_agree					; NO  - issue a warning
+
+check_warn_sensor_3:					; check sensor 2
+	btfss	sensor3_calibrated_ok		; check if sensor has a valid calibration
+	bra		check_warn_sensor_agree		; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor3				; YES - check if sensor is in use
+	bra		check_warn_sensor_agree		; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor3		; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_agree		; YES - continue with next sensor
+	bcf		sensors_agree				; NO  - issue a warning
 	return
-					
+
 check_warn_sensor_agree:
 	bsf		sensors_agree
 	return
 
 compute_ppo2_helper:
-	call	mult16x16						;xA:2*xB:2=xC:4
-	movlw	LOW		.1000
+	call	mult16x16					; xA:2*xB:2=xC:4
+	movlw	LOW  .1000
 	movwf	xB+0
-	movlw	HIGH	.1000
+	movlw	HIGH .1000
 	movwf	xB+1
-	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movlw	d'1'
-	addwf	xC+0,W							; we are just interessed in the carry flag
+	addwf	xC+0,W						; we are just interested in the carry flag
 	movlw	d'0'
-	addwfc	xC+1,W							; we are still just interessed in the carry flag
-    tstfsz  WREG							; ppO2 is higher than 2.55bar?
-    setf    xC+0							; Yes.
-    return
+	addwfc	xC+1,W						; we are still just interested in the carry flag
+	tstfsz	WREG						; ppO2 is higher than 2.55bar?
+	setf	xC+0						; Yes.
+	return
 
 check_sensor_custview_helper:
-	btfss	divemode						; check if we are in divemode
-	return									; NO  - not in dive mode, return
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensors)?
-    bnz		check_sensor_helper_1			; NO  - not using the sensors in the moment
-	clrf	menupos3						; YES - arm customview 1 (sensor values)
-	bsf		toggle_customview				;       and request a customview toggle
+	btfss	divemode					; check if we are in divemode
+	return								; NO  - not in dive mode, return
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensors)?
+	bnz		check_sensor_helper_1		; NO  - not using the sensors in the moment
+	clrf	menupos3					; YES - arm customview 1 (sensor values)
+	bsf		toggle_customview			;       and request a customview toggle
 check_sensor_helper_1:
 	return
 
-	
+
 check_sensor_voting_helper:
-    movf    temp1,W
-    cpfsgt  sensor_setpoint
-    bra     check_sensor_voting_common2		; temp1<sensor_setpoint
-    ; temp1>sensor_setpoint
-    movf    temp1,W
-    subwf   sensor_setpoint,W
-    movwf   temp1
+	movf	lo,W
+	cpfsgt	sensor_setpoint
+	bra		check_sensor_voting_common2	; lo < sensor_setpoint
+	; lo > sensor_setpoint
+	movf	lo,W
+	subwf	sensor_setpoint,W
+	movwf	lo
 check_sensor_voting_common1:
-    movlw	sensor_voting_logic_threshold	; Threshold in 0.01 bar
-    cpfsgt  temp1
-    retlw   .255							; Within range
-    retlw   .0								; Out of range
+	movlw	sensor_voting_logic_threshold ; Threshold in 0.01 bar
+	cpfsgt	lo
+	retlw	.255						; Within range
+	retlw	.0							; Out of range
 check_sensor_voting_common2:
-    ; temp1<sensor_setpoint
-    movf    sensor_setpoint,W
-    subwf   temp1,F
-    bra     check_sensor_voting_common1
-		
+	; lo<sensor_setpoint
+	movf	sensor_setpoint,W
+	subwf	lo,F
+	bra		check_sensor_voting_common1
+
 ;-----------------------------------------------------------------------------
 
-divemodemode_togglegf:						; Toggle aGF/GF
-    bcf     toggle_gf						; clear flag    
-    btg     use_agf							; toggle GF
+divemodemode_togglegf:								; Toggle aGF/GF
+	bcf		toggle_gf								; clear flag
+	btg		use_agf									; toggle GF
 
-	movff	opt_GF_low,char_I_GF_Low_percentage
-	movff	opt_GF_high,char_I_GF_High_percentage
+	btfsc	use_agf									; switch to aGF?
+	bra		divemodemode_togglegf_1					; YES - branch to using aGF
+	movff	opt_GF_low,char_I_GF_Low_percentage		; NO  - use normal GF factors
+	movff	opt_GF_high,char_I_GF_High_percentage	;
+	bra		divemodemode_togglegf_2					;       continue with common part
 
-	; Overwrite GF if aGF is wanted
-	btfsc	use_agf							; =1: Use aGF
+divemodemode_togglegf_1:							; use alternative GF factors
 	movff	opt_aGF_low,char_I_GF_Low_percentage
-	btfsc	use_agf							; =1: Use aGF
 	movff	opt_aGF_high,char_I_GF_High_percentage
 
-    call    TFT_gf_mask						; Setup Mask
-	goto	restart_deco_engine				; ...and return
+divemodemode_togglegf_2:
+	call	TFT_gf_mask								; update customview mask to show which one is in use
+													; the customview itself has been called from divemenu_tree before
+	goto	restart_deco_engine						; ...and return
 
 
-calc_velocity:								; called every two seconds
-    btfsc   display_velocity                
-    bra     calc_velocity1                  ; Always update if already displayed
-	btfss	divemode2						
-	return                      			; display velocity only if deepter then 1m (Not at the surface after the dive)
+calc_velocity:									; called every two seconds
+	btfsc	display_velocity
+	bra		calc_velocity1						; Always update if already displayed
+	btfss	divemode2
+	return										; display velocity only if deeper then 1m (Not at the surface after the dive)
 calc_velocity1:
-    SAFE_2BYTE_COPY amb_pressure, sub_a
+	SAFE_2BYTE_COPY amb_pressure, sub_a
 	movff	last_pressure_velocity+0,sub_b+0
 	movff	last_pressure_velocity+1,sub_b+1
 	movff	sub_a+0,last_pressure_velocity+0	; store old value for velocity
 	movff	sub_a+1,last_pressure_velocity+1
 
-	call	subU16							; sub_c = amb_pressure - last_pressure
+	call	subU16								; sub_c = amb_pressure - last_pressure
 
-    bcf     neg_flag_velocity
-    btfsc   neg_flag
-    bsf     neg_flag_velocity
+	bcf		neg_flag_velocity
+	btfsc	neg_flag
+	bsf		neg_flag_velocity
 
 	movff	sub_c+0,xA+0
 	movff	sub_c+1,xA+1
-	movlw	d'39'							; 77 when called every second....
+	movlw	d'39'						; 77 when called every second....
 	movwf	xB+0
 	clrf	xB+1
-	call	mult16x16						; differential pressure in mbar*77...
+	call	mult16x16					; differential pressure in mbar*77...
 	movff	xC+0,divA+0
 	movff	xC+1,divA+1
 	movlw	d'7'
 	movwf	divB+0
-	call	div16							; devided by 2^7 equals velocity in m/min
+	call	div16						; divided by 2^7 equals velocity in m/min
 
 	movlw	d'99'
-	cpfsgt	divA+0                      	; limit to 99m/min
+	cpfsgt	divA+0						; limit to 99m/min
 	bra		calc_velocity3
-	movwf	divA+0							; divA=99
+	movwf	divA+0						; divA=99
 
 calc_velocity3:
-    ; Copy old speeds
-    movff   old_velocity+2,old_velocity+3
-    movff   old_velocity+1,old_velocity+2
-    movff   old_velocity+0,old_velocity+1
-    movff   divA+0,old_velocity+0
-    
-;    movff   old_velocity+3,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-;    movff   old_velocity+2,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-;    movff   old_velocity+1,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-;    movff   old_velocity+0,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-	goto	TFT_display_velocity			; With divA+0 = m/min..., and return...
+	; Copy old speeds
+	movff	old_velocity+2,old_velocity+3
+	movff	old_velocity+1,old_velocity+2
+	movff	old_velocity+0,old_velocity+1
+	movff	divA+0,old_velocity+0
+
+;	movff	old_velocity+3,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+;	movff	old_velocity+2,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+;	movff	old_velocity+1,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+;	movff	old_velocity+0,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+	goto	TFT_display_velocity		; With divA+0 = m/min..., and return...
 
 
 ;=============================================================================
 
-set_reset_safety_stop:						; Set flags for safety stop and/or reset safety stop
-    TSTOSS  opt_enable_safetystop           ; =1: A safety stop is shown
-    bra		delete_safety_stop              ; No, don't show safety stop
+set_reset_safety_stop:					; Set flags for safety stop and/or reset safety stop
+	TSTOSS	opt_enable_safetystop		; =1: A safety stop is shown
+	bra		delete_safety_stop			; No, don't show safety stop
 
-	btfsc	decostop_active					; Is a deco stop displayed?
-	bra		delete_safety_stop				; Yes, don't show safety stop
+	btfsc	decostop_active				; Is a deco stop displayed?
+	bra		delete_safety_stop			; Yes, don't show safety stop
 
 	; Below "opt_safety_stop_reset"? Set flag and reset count-down timer
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-    movff   opt_safety_stop_reset,WREG      ; [cbar]
-    mullw   .10                             ; mbar in PRODL:H
-    movff   PRODL,sub_b+0
-    movff   PRODH,sub_b+1
-	call	subU16							; sub_c = sub_a - sub_b
+	movff	opt_safety_stop_reset,WREG	; [cbar]
+	mullw	.10							; mbar in PRODL:H
+	movff	PRODL,sub_b+0
+	movff	PRODH,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	bra		reset_safety_stop				; Below 10m, reset safety stop
+	bra		reset_safety_stop			; Below 10m, reset safety stop
 
 	; Above "opt_safety_stop_end"? Clear flag.
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-    movff   opt_safety_stop_end,WREG      	; [cbar]
-    mullw   .10                             ; mbar in PRODL:H
-    movff   PRODL,sub_b+0
-    movff   PRODH,sub_b+1
-	call	subU16							; sub_c = sub_a - sub_b
+	movff	opt_safety_stop_end,WREG	; [cbar]
+	mullw	.10							; mbar in PRODL:H
+	movff	PRODL,sub_b+0
+	movff	PRODH,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-	bra		delete_safety_stop				; Above 3m, remove safety stop
+	bra		delete_safety_stop			; Above 3m, remove safety stop
 
 	; Above "opt_safety_stop_start"? Activate safety stop
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-    movff   opt_safety_stop_start,WREG      ; [cbar]
-    mullw   .10                             ; mbar in PRODL:H
-    movff   PRODL,sub_b+0
-    movff   PRODH,sub_b+1
-	call	subU16							;  sub_c = sub_a - sub_b
+	movff	opt_safety_stop_start,WREG	; [cbar]
+	mullw	.10							; mbar in PRODL:H
+	movff	PRODL,sub_b+0
+	movff	PRODH,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-	bra		acivate_safety_stop				; Above 5m, activate safety stop
-	bra		reset_safety_stop2				; Pause safety stop
+	bra		acivate_safety_stop			; Above 5m, activate safety stop
+	bra		reset_safety_stop2			; Pause safety stop
 
 acivate_safety_stop:
-	tstfsz	safety_stop_countdown			; Countdown at zero?
-	bsf		show_safety_stop				; No, Set flag!
+	tstfsz	safety_stop_countdown		; Countdown at zero?
+	bsf		show_safety_stop			; No, Set flag!
 	return
 
 delete_safety_stop:
-	clrf	safety_stop_countdown			; reset timer
-	bra		reset_safety_stop2				; Remove safety stop from display
+	clrf	safety_stop_countdown		; reset timer
+	bra		reset_safety_stop2			; Remove safety stop from display
 
 reset_safety_stop:
-    movff   opt_safety_stop_length,safety_stop_countdown	; reset timer
+	movff	opt_safety_stop_length,safety_stop_countdown ; reset timer
 reset_safety_stop2:
-	bcf		show_safety_stop				; Clear flag
-	btfss	safety_stop_active				; Safety stop shown
-	return									; No, don't delete it
-	bcf		safety_stop_active				; Clear flag
-    bsf	    FLAG_TFT_clear_safety_stop		; Clear safety stop
-    return
+	bcf		show_safety_stop			; Clear flag
+	btfss	safety_stop_active			; Safety stop shown
+	return								; No, don't delete it
+	bcf		safety_stop_active			; Clear flag
+	bsf		FLAG_TFT_clear_safety_stop	; Clear safety stop
+	return
 
 
 ;=============================================================================
 
 timeout_menuview:
-    decfsz  timeout_counter3,F          ; timeout for menuview
-    return                              ; No timeout, return
-    ; Timeout, clear e.g. "Menu?"
-    goto    menuview_toggle_reset       ; "returns"
+	decfsz	timeout_counter2,F			; timeout for menuview
+	return								; No timeout, return
+	; Timeout, clear e.g. "Menu?"
+	goto	menuview_toggle_reset		; "returns"
 
 timeout_divemode_menu:
-    decfsz  timeout_counter3,F          ; timeout for divemode menu
-    return
+	decfsz	timeout_counter2,F			; timeout for divemode menu
+	return
 
-    global  timeout_divemode_menu2
-timeout_divemode_menu2:                 ; Called from divemenu_tree.asm
-    bcf     divemode_menu               ; Timeout! Clear flag
-    call    TFT_clear_divemode_menu     ; Clear menu
-    bsf	    FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
-    bcf     blinking_better_gas         ; Clear flag to have temperature updated once
-    bsf	    FLAG_TFT_temp_divemode		; Displays temperature
-    call    TFT_draw_gassep_line        ; Gas separator grid in spec mode only
+	global	timeout_divemode_menu2
+timeout_divemode_menu2:					; Called from divemenu_tree.asm
+	bcf		divemode_menu				; Timeout! Clear flag
+	call	TFT_clear_divemode_menu		; Clear menu
+	bsf		FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
+	bcf		blinking_better_gas			; Clear flag to have temperature updated once
+	bsf		FLAG_TFT_temp_divemode		; Displays temperature
+	call	TFT_draw_gassep_line		; Gas separator grid in spec mode only
 
-    btfss   decostop_active             ; In deco mode ?
-    bra     timeout_divemode_menu_ndl   ; No, show NDL again
-    ; Show deco
-    bsf	    FLAG_TFT_display_deko_mask
-    bsf	    FLAG_TFT_display_deko
-    bsf	    FLAG_TFT_display_tts
-    return
-    
-timeout_divemode_menu_ndl:              
-    ; Show NDL
-    bsf	    FLAG_TFT_display_ndl_mask
-    bsf	    FLAG_TFT_display_ndl
-    return
+	btfss	decostop_active				; In deco mode ?
+	bra		timeout_divemode_menu_ndl	; No, show NDL again
+	; Show deco
+	bsf		FLAG_TFT_display_deko_mask
+	bsf		FLAG_TFT_display_deko
+	bsf		FLAG_TFT_display_tts
+	return
+
+timeout_divemode_menu_ndl:
+	; Show NDL
+	bsf		FLAG_TFT_display_ndl_mask
+	bsf		FLAG_TFT_display_ndl
+	return
 
 timeout_divemode:
-    btfsc   divemode_menu               ; Divemode menu active?
-    rcall   timeout_divemode_menu       ; Yes, check the timeout for it...
+	btfsc	divemode_menu				; Divemode menu active?
+	rcall	timeout_divemode_menu		; Yes, check the timeout for it...
 
-    btfsc   menuview                    ; is a menuview shown?
-    rcall   timeout_menuview            ; Yes, check the timeout for it...
+	btfsc	menuview					; is a menuview shown?
+	rcall	timeout_menuview			; Yes, check the timeout for it...
 
 	btfss	realdive					; Dive longer then one minute
 	return
-	
+
 	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
 	bra		timeout_divemode2			; Yes, use apnoe_timeout [min] for timeout
 
-    ifndef __DEBUG
-    	btfsc	simulatormode_active    ; In Simulator mode?
-    	bra		timeout_divemode3       ; Yes, use simulator timeout
-    endif
-	
+	ifndef __DEBUG
+		btfsc	simulatormode_active	; In Simulator mode?
+		bra		timeout_divemode3		; Yes, use simulator timeout
+	endif
+
 	bcf		divemode
-	infsnz  timeout_counter,F
-    incf    timeout_counter2,F			; timeout is 15bits
+	infsnz	timeout_counter1+0,F
+	incf	timeout_counter1+1,F		; timeout is 16 bit counter
 
-	movff	opt_diveTimeout,WREG	    ; in [min]
+	movff	opt_diveTimeout,WREG		; in [min]
 	mullw	.60
 	movff	PRODL,sub_a+0
-	movff	PRODH,sub_a+1		    	; in [s]
+	movff	PRODH,sub_a+1				; in [s]
 
-	movff	timeout_counter, sub_b+0
-	movff	timeout_counter2, sub_b+1
-	call	subU16						;  sub_c = sub_a - sub_b
+	movff	timeout_counter1+0,sub_b+0
+	movff	timeout_counter1+1,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfss	neg_flag					; Result negative?
 	bsf		divemode					; No, set flag
 	return
 
 timeout_divemode2:
-	incf	timeout_counter,F			; seconds...
+	incf	timeout_counter1+0,F		; seconds...
 	movlw	d'60'
-	cpfseq	timeout_counter				; timeout_counter=60?
-	return								; No.
-; One minute timeout done.
-	clrf	timeout_counter
+	cpfseq	timeout_counter1+0			; timeout_counter1+0 = 60 ?
+	return								; No
+	; one minute timeout done
+	clrf	timeout_counter1+0
 	bcf		divemode
 	incf	apnoe_timeout_counter,F
 	movlw	apnoe_timeout				; apnoe timeout [min]
@@ -1073,54 +1092,56 @@
 
 timeout_divemode3:
 	bcf		divemode
-	incf	timeout_counter,F
-	movlw	simulator_timeout   		; simulator timeout
-	cpfsgt	timeout_counter
+	incf	timeout_counter1+0,F
+	movlw	simulator_timeout			; simulator timeout
+	cpfsgt	timeout_counter1+0
 	bsf		divemode
 	return
 
-update_divemode60:                      ; update any minute
+update_divemode60:						; update any minute
 	call	get_battery_voltage			; gets battery voltage
 	rcall	set_powersafe				; Battery low?
 	call	customview_minute			; Do every-minute tasks for the custom view area
-	bcf	oneminupdate
+	bcf		oneminupdate
 
-    btfss   simulatormode_active        ; in simulator mode?
-	return                              ; No
+	btfss	simulatormode_active		; in simulator mode?
+	return								; No
 	; Yes, quite dive mode simulation after 21*256s=89min:36s
 	movlw	.20
 	cpfsgt	total_divetime_seconds+1	; Timeout?
-	return                              ; No
-    ifdef __DEBUG
-    return                              ; No simulator timeout in debug mode
-    endif
-	bra		divemode_option1            ; Yes, set to 0m and "return"
+	return								; No
+
+	ifdef __DEBUG
+		return							; No simulator timeout in debug mode
+	endif
+
+	bra		divemode_option1			; Yes, set to 0m and "return"
 
 set_max_depth:
 	movff	max_pressure+0,sub_a+0
 	movff	max_pressure+1,sub_a+1
-    SAFE_2BYTE_COPY rel_pressure, sub_b
-	call	subU16                      ; sub_c = sub_a - sub_b
-                                        ; max_pressure<rel_pressure -> neg_flag=1
-                                        ; rel_pressure<=max_pressure -> neg_flag=0
-	btfss	neg_flag	
+	SAFE_2BYTE_COPY rel_pressure, sub_b
+	call	subU16						; sub_c = sub_a - sub_b
+										; max_pressure<rel_pressure -> neg_flag=1
+										; rel_pressure<=max_pressure -> neg_flag=0
+	btfss	neg_flag
 	return
-                                        ; max_pressure<rel_pressure
+										; max_pressure<rel_pressure
 	movff	sub_b+0,max_pressure+0
 	movff	sub_b+1,max_pressure+1
-	bsf	FLAG_TFT_max_depth				; Set flag
+	bsf		FLAG_TFT_max_depth			; Set flag
 	return
 
 set_min_temp:
 	movff	minimum_temperature+0,sub_a+0
 	movff	minimum_temperature+1,sub_a+1
-    SAFE_2BYTE_COPY temperature,sub_b
-	call	sub16                       ; sub_c = sub_a - sub_b
-                                        ; minimum_temperature<T -> neg_flag=1
-                                        ; T<=minimum_temperature -> neg_flag=0
-	btfsc	neg_flag	
+	SAFE_2BYTE_COPY temperature,sub_b
+	call	sub16						; sub_c = sub_a - sub_b
+										; minimum_temperature<T -> neg_flag=1
+										; T<=minimum_temperature -> neg_flag=0
+	btfsc	neg_flag
 	return
-                                        ; minimum_temperature>=T
+	; minimum_temperature >= T
 	movff	sub_b+0,minimum_temperature+0
 	movff	sub_b+1,minimum_temperature+1
 	return
@@ -1131,20 +1152,20 @@
 	bra		set_dive_modes3				; Yes!
 
 set_dive_modes0:
-	movlw	LOW		start_dive_threshold
+	movlw	LOW  start_dive_threshold
 	movwf	sub_a+0						; dive_treshold is in cm
-	movlw	HIGH	start_dive_threshold
+	movlw	HIGH start_dive_threshold
 	movwf	sub_a+1						; dive_treshold is in cm
 
 set_dive_modes1:
-    SAFE_2BYTE_COPY rel_pressure, sub_b
+	SAFE_2BYTE_COPY rel_pressure, sub_b
 	call	subU16						; sub_c = sub_a - sub_b
 
-	btfss	neg_flag	
-	bra		set_dive_modes2				; too shallow (rel_pressure<dive_threshold)
+	btfss	neg_flag
+	bra		set_dive_modes2				; too shallow (rel_pressure < dive_threshold)
 
 	btfsc	realdive					; Dive longer than one minute?
-	clrf 	timeout_counter				; Yes, reset timout counter
+	clrf	timeout_counter1+0			; Yes, reset timeout counter +++
 
 	bsf		divemode					; (Re-)Set divemode flag
 	bsf		divemode2					; displayed divetime is running
@@ -1161,22 +1182,22 @@
 	btfsc	realdive					; dive longer then one minute?
 	bra		set_dive_modes0				; Yes -> this is a real dive -> Use start_dive_threshold or ascend
 
-	movlw	HIGH	high_altitude_dive_threshold
+	movlw	LOW  high_altitude_dive_threshold
+	movwf	sub_a+0
+	movlw	HIGH high_altitude_dive_threshold
 	movwf	sub_a+1
-	movlw	LOW		high_altitude_dive_threshold
-	movwf	sub_a+0
 	bra		set_dive_modes1
 
 set_powersafe:
-    movlw   color_code_battery_low+1; [%]
-    cpfslt  batt_percent
+	movlw	color_code_battery_low+1; [%]
+	cpfslt	batt_percent
 	return
 
 	movlw	d'7'						; Type of Alarm (Battery Low)
 	movwf	AlarmType					; Copy to Alarm Register
-	bsf		event_occured				; Set Event Flag
-    movlw   .0
-    movff   WREG,opt_brightness     	; Set Brightness to ECO
+	bsf		event_occured				; set event flag
+	movlw	.0
+	movff	WREG,opt_brightness			; Set Brightness to ECO
 	return								; return
 
 calc_average_depth:
@@ -1184,10 +1205,10 @@
 	rcall	reset_average1				; Reset the resettable average depth
 
 	; 1. Add new 2xdepth to the Sum of depths registers
-    SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
-    bcf     STATUS,C
-    rlcf    xB+0,F
-    rlcf    xB+1,F                  	; x2
+	SAFE_2BYTE_COPY rel_pressure,xB		; Buffer...
+	bcf		STATUS,C
+	rlcf	xB+0,F
+	rlcf	xB+1,F						; x2
 
 	movf	xB+0,w
 	addwf	average_depth_hold+0,F
@@ -1195,7 +1216,7 @@
 	addwfc	average_depth_hold+1,F
 	movlw	d'0'
 	addwfc	average_depth_hold+2,F
-	addwfc	average_depth_hold+3,F 		; Will work up to 9999mbar*60*60*24=863913600mbar
+	addwfc	average_depth_hold+3,F		; Will work up to 9999mbar*60*60*24=863913600mbar
 
 	; Do the same for the _total registers (Non-Resettable)
 	movf	xB+0,w
@@ -1204,7 +1225,7 @@
 	addwfc	average_depth_hold_total+1,F
 	movlw	d'0'
 	addwfc	average_depth_hold_total+2,F
-	addwfc	average_depth_hold_total+3,F ; Will work up to 9999mbar*60*60*24=863913600mbar
+	addwfc	average_depth_hold_total+3,F; Will work up to 9999mbar*60*60*24=863913600mbar
 
 	; 2. Compute Average Depth on base of average_divesecs:2
 	movff	average_divesecs+0,xB+0
@@ -1214,21 +1235,21 @@
 	movff	average_depth_hold+2,xC+2
 	movff	average_depth_hold+3,xC+3
 
-	call	div32x16 					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,avg_rel_pressure+0
 	movff	xC+1,avg_rel_pressure+1
 
-    btfss   divemode2                   ; displayed divetime is running?
-	return                              ; No (e.g. too shallow)
+	btfss	divemode2					; displayed divetime is running?
+	return								; No (e.g. too shallow)
 
 	; 3. Compute Total Average Depth on base of total_divetime_seconds:2
 	movff	total_divetime_seconds+0,xB+0
-	movff	total_divetime_seconds+1,xB+1		; Copy
+	movff	total_divetime_seconds+1,xB+1	; Copy
 	movff	average_depth_hold_total+0,xC+0
 	movff	average_depth_hold_total+1,xC+1
 	movff	average_depth_hold_total+2,xC+2
 	movff	average_depth_hold_total+3,xC+3
-	call	div32x16 					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,avg_rel_pressure_total+0
 	movff	xC+1,avg_rel_pressure_total+1
 	return
@@ -1245,53 +1266,52 @@
 	return
 
 test_switches_divemode:					; checks switches in divemode
-    btfsc   divemode_menu               ; Divemode menu shown?
-    bra     test_switches_divemode_menu ; Yes, use menu processor
+	btfsc	divemode_menu				; Divemode menu shown?
+	bra		test_switches_divemode_menu	; Yes, use menu processor
 	btfsc	switch_left
-	; bra	test_switches_divemode2		; Enter button pressed, check if we need to do something
-	goto    menuview_toggle         	; Menu or Simulator tasks; and return...
+	;bra	test_switches_divemode2		; Enter button pressed, check if we need to do something
+	goto	menuview_toggle				; Menu or Simulator tasks; and return...
 	btfss	switch_right
-	return                              ; No button press
-    tstfsz  menupos2                    ; any option shown?
-    bra     test_switches_divemode1     ; Yes, do option tasks
-	bsf		toggle_customview           ; No, toggle custom view
-    return
+	return								; No button press
+	tstfsz	menupos2					; any option shown?
+	bra		test_switches_divemode1		; Yes, do option tasks
+	bsf		toggle_customview			; No, toggle custom view
+	return
 
 test_switches_divemode_menu:
 	btfsc	switch_left
-	bra		test_switches_divemode_menu2    ; Move cursor
+	bra		test_switches_divemode_menu2; Move cursor
 	btfsc	switch_right
-    bra		test_switches_divemode_menu3    ; Enter submenu or do something
-    return                                  ; No button press
+	bra		test_switches_divemode_menu3; Enter submenu or do something
+	return								; No button press
 
 test_switches_divemode_menu1:
-    clrf    menupos
+	clrf	menupos1
 test_switches_divemode_menu2:
-    incf    menupos,F
-    incf    menupos4,W                  ; menupos4+1 -> WREG
-    cpfslt  menupos                     ; >menupos4 (Set in menu_processor.asm)?
-    bra     test_switches_divemode_menu1; > Yes, set to 1
-    call    TFT_divemode_menu_cursor    ; Update the cursor
-    bcf     switch_left
-	movlw	divemode_menu_timeout       ; Reload timeout
-	movwf	timeout_counter3            ; timeout for divemode menu
-    return
+	incf	menupos1,F
+	incf	menupos4,W					; menupos4+1 -> WREG
+	cpfslt	menupos1					; > menupos4 (Set in menu_processor.asm)?
+	bra		test_switches_divemode_menu1; > Yes, set to 1
+	call	TFT_divemode_menu_cursor	; Update the cursor
+	bcf		switch_left
+	movlw	divemode_menu_timeout		; Reload timeout
+	movwf	timeout_counter2			; timeout for divemode menu
+	return
 
-test_switches_divemode_menu3:           ; Enter submenu or do something
-    bcf     switch_right
-;    decf    menupos,F					; menu_processor needs 0-5...
-    extern  do_line_menu
-    goto    do_line_menu                ; Warning! Trashes STKPTR and returns to diveloop_loop4:
+test_switches_divemode_menu3:			; Enter submenu or do something
+	bcf		switch_right
+;	decf	menupos1,F					; menu_processor needs 0-5...
+	goto	do_line_menu				; Warning! Trashes STKPTR and returns to diveloop_loop4:
 
 test_switches_divemode1:
 	bcf		switch_right
-    movlw   divemode_menuview_timeout
-    movwf   timeout_counter3            ; Reload timeout
-	movff	menupos2,WREG               ; menupos2 holds number of customview/divemode menu function
+	movlw	divemode_menuview_timeout
+	movwf	timeout_counter2			; Reload timeout
+	movff	menupos2,WREG				; menupos2 holds number of customview/divemode menu function
 	dcfsnz	WREG,F
-    bra		divemode_option_gaschange	; Switch to the indicated "better gas"
+	bra		divemode_option_gaschange	; Switch to the indicated "better gas"
 	dcfsnz	WREG,F
-    bra		divemode_option0			; Start/Setup Divemode menu
+	bra		divemode_option0			; Start/Setup Divemode menu
 	dcfsnz	WREG,F
 	bra		divemode_option1			; Quit Simulation?
 	dcfsnz	WREG,F
@@ -1308,89 +1328,95 @@
 	bra		divemode_option7			; Store heading
 	dcfsnz	WREG,F
 	bra		divemode_option8			; Switch to alt. layout
-    return
+	return
 
 gas_switched_common:
-    bcf     divemode_gaschange			; Clear flag
-    tstfsz  menupos						; menupos=0?
-    bra     gas_switched_common1		; No
-    return								; Yes, do not switch gas (there is no Gas #0 !)
+	bcf		divemode_gaschange			; Clear flag
+	btfss	FLAG_back_to_loop			; check if it is a switchback from OC bailout to loop
+	bra		gas_switched_common0		; NO  - continue with checking if selected gas is valid
+	bcf		FLAG_back_to_loop			; YES - clear flag
+	movff	active_diluent,menupos1		;       reload last diluent
+	bra		gas_switched_common1		;       continue with common part
+gas_switched_common0:
+	tstfsz	menupos1					; menupos1=0?
+	bra		gas_switched_common1		; NO  - valid gas
+	return								; YES - something went wrong, invalid gas, abort
 gas_switched_common1:
-	movf	menupos,W					; get selected gas into WREG (1-6)
+	movf	menupos1,W					; get selected gas into WREG (1-6)
 
-    btfsc   FLAG_ccr_mode				; in CCR mode?
+	btfsc	FLAG_ccr_mode				; in CCR mode?
 	bra		gas_switched_common2		; YES - configure diluent or bailout
-	btfsc   FLAG_pscr_mode				; in pSCR mode?
+	btfsc	FLAG_pscr_mode				; in pSCR mode?
 	bra		gas_switched_common2		; YES - configure diluent or bailout
-	
+
 	; OC
 	rcall	setup_gas_registers			; With WREG = Gas 1-6
-    rcall	deco_setup_oc_gases			; With WREG = Gas 1-6
+	rcall	deco_setup_oc_gases			; With WREG = Gas 1-6
 	bra		gas_switched_common3
 
-	; Loop or Bailout
+	; loop or bailout
 gas_switched_common2:
-    rcall   setup_dil_registers			; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
-    rcall	deco_setup_cc_diluents		; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
- 
+	rcall	setup_dil_registers			; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
+	rcall	deco_setup_cc_diluents		; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
+
 gas_switched_common3:
-    bsf		FLAG_TFT_active_gas_divemode	; Redraw gas/setpoint/diluent
-    call	restart_deco_engine_wo_ceiling	; abort any running deco calculations and restart the deco engine
+	bsf		FLAG_TFT_active_gas_divemode	; Redraw gas/setpoint/diluent
+	call	restart_deco_engine_wo_ceiling	; abort any running deco calculations and restart the deco engine
 
-    ; Set flags for profile recording
-	bsf		event_occured				; Set global event byte
-    btfsc   is_bailout					; Choose OC Bailouts (OC Gases)
-    bsf     bailoutgas_event			; Bailout gas change
-    btfss   is_bailout					; Choose OC Bailouts (OC Gases)
+	; Set flags for profile recording
+	bsf		event_occured				; set event flag
+	btfsc	is_bailout					; Choose OC Bailouts (OC Gases)
+	bsf		bailoutgas_event			; Bailout gas change
+	btfss	is_bailout					; Choose OC Bailouts (OC Gases)
 	bsf		stored_gas_changed			; OC gas change
 	return
 
 
 ; Code to pass all parameters to the C code
 
-	global  get_first_gas_to_WREG
+	global	get_first_gas_to_WREG
 get_first_gas_to_WREG:					; Gets first gas (1-5) into WREG
-	lfsr    FSR1,opt_gas_type			; Point to gas types
-	clrf    lo							; start with Gas0
+	lfsr	FSR1,opt_gas_type			; Point to gas types
+	clrf	lo							; start with Gas0
 get_first_gas_to_WREG2:
-	movf    lo,W
-	movf    PLUSW1,W					; Get Type of Gas #lo
-	sublw   .1							; it is = 1 (First Gas)
-	bz      get_first_gas_to_WREG3		; Found the first gas!
-	incf    lo,F						; ++
-	movlw   NUM_GAS+1
-	cpfseq  lo							; All done?
-	bra     get_first_gas_to_WREG2		; Not yet
+	movf	lo,W
+	movf	PLUSW1,W					; Get Type of Gas #lo
+	sublw	.1							; it is = 1 (First Gas)
+	bz		get_first_gas_to_WREG3		; Found the first gas!
+	incf	lo,F						; ++
+	movlw	NUM_GAS+1
+	cpfseq	lo							; All done?
+	bra		get_first_gas_to_WREG2		; Not yet
 	; No first gas found, use #1
-	movlw   .0
-	movff   WREG,opt_gas_type+0			; Set Gas1 to First
+	movlw	.0
+	movff	WREG,opt_gas_type+0			; Set Gas1 to First
 	incf	WREG,W						; 0 -> 1
 	return
 get_first_gas_to_WREG3:
-	movf    lo,W						; Put into Wreg
+	movf	lo,W						; Put into Wreg
 	incf	WREG,W						; 0-4 -> 1-5
 	return								; Done
 
-	global  get_first_dil_to_WREG
+	global	get_first_dil_to_WREG
 get_first_dil_to_WREG:					; Gets first dil (1-5) into WREG
-	lfsr    FSR1,opt_dil_type			; Point to dil types
-	clrf    lo							; start with Gas0
+	lfsr	FSR1,opt_dil_type			; Point to dil types
+	clrf	lo							; start with Gas0
 get_first_dil_to_WREG2:
-	movf    lo,W
-	movf    PLUSW1,W					; Get Type of Dil #lo
-	sublw   .1							; it is = 1 (First Dil)
-	bz      get_first_dil_to_WREG3		; Found the first dil!
-	incf    lo,F						; ++
-	movlw   NUM_GAS+1
-	cpfseq  lo							; All done?
-	bra     get_first_dil_to_WREG2		; Not yet
+	movf	lo,W
+	movf	PLUSW1,W					; Get Type of Dil #lo
+	sublw	.1							; it is = 1 (First Dil)
+	bz		get_first_dil_to_WREG3		; Found the first dil!
+	incf	lo,F						; ++
+	movlw	NUM_GAS+1
+	cpfseq	lo							; All done?
+	bra		get_first_dil_to_WREG2		; Not yet
 	; No first dil found, use #1
-	movlw   .0
-	movff   WREG,opt_dil_type+0			; Set Dil1 to First
+	movlw	.0
+	movff	WREG,opt_dil_type+0			; Set Dil1 to First
 	incf	WREG,W						; 0 -> 1
 	return
 get_first_dil_to_WREG3:
-	movf    lo,W						; Put into Wreg
+	movf	lo,W						; Put into Wreg
 	incf	WREG,W						; 0-4 -> 1-5
 	return								; Done
 
@@ -1398,110 +1424,105 @@
 deco_setup_oc_gases:					; with currently breathed gas in WREG (1-5 or 6)
 	movff	WREG,char_I_current_gas		; gas to start with when doing the deco calculations
 
-	movff   opt_gas_He_ratio+0,char_I_deco_He_ratio+0
-	movff   opt_gas_O2_ratio+0,char_I_deco_O2_ratio+0
-	banksel opt_gas_type+0
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+0				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+0	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	banksel	opt_gas_type				; opt_gas_type[] and opt_OC_bail_gas_change[] are together in bank common2
+
+	movff	opt_gas_He_ratio+0,char_I_deco_He_ratio+0
+	movff	opt_gas_O2_ratio+0,char_I_deco_O2_ratio+0
 
-	movff   opt_gas_He_ratio+1,char_I_deco_He_ratio+1
-	movff   opt_gas_O2_ratio+1,char_I_deco_O2_ratio+1
-	banksel opt_gas_type+1
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+1				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+1	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+0				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+0	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+
+	movff	opt_gas_He_ratio+1,char_I_deco_He_ratio+1
+	movff	opt_gas_O2_ratio+1,char_I_deco_O2_ratio+1
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+1				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+1	; No, clear depth for 0=Disabled, 1=First and 2=Travel
 
-	movff   opt_gas_He_ratio+2,char_I_deco_He_ratio+2
-	movff   opt_gas_O2_ratio+2,char_I_deco_O2_ratio+2
-	banksel opt_gas_type+2
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+2				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+2	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	movff	opt_gas_He_ratio+2,char_I_deco_He_ratio+2
+	movff	opt_gas_O2_ratio+2,char_I_deco_O2_ratio+2
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+2				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+2	; No, clear depth for 0=Disabled, 1=First and 2=Travel
 
-	movff   opt_gas_He_ratio+3,char_I_deco_He_ratio+3
-	movff   opt_gas_O2_ratio+3,char_I_deco_O2_ratio+3
-	banksel opt_gas_type+3
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+3				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+3	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	movff	opt_gas_He_ratio+3,char_I_deco_He_ratio+3
+	movff	opt_gas_O2_ratio+3,char_I_deco_O2_ratio+3
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+3				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+3	; No, clear depth for 0=Disabled, 1=First and 2=Travel
 
-	movff   opt_gas_He_ratio+4,char_I_deco_He_ratio+4
-	movff   opt_gas_O2_ratio+4,char_I_deco_O2_ratio+4
-	banksel opt_gas_type+4
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+4				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+4	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+	movff	opt_gas_He_ratio+4,char_I_deco_He_ratio+4
+	movff	opt_gas_O2_ratio+4,char_I_deco_O2_ratio+4
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+4				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+4	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+
 	banksel common
 
 	; Setup char_I_deco_gas_change array
-	movff   opt_OC_bail_gas_change+0, char_I_deco_gas_change+0
-	movff   opt_OC_bail_gas_change+1, char_I_deco_gas_change+1
-	movff   opt_OC_bail_gas_change+2, char_I_deco_gas_change+2
-	movff   opt_OC_bail_gas_change+3, char_I_deco_gas_change+3
-	movff   opt_OC_bail_gas_change+4, char_I_deco_gas_change+4
+	movff	opt_OC_bail_gas_change+0, char_I_deco_gas_change+0
+	movff	opt_OC_bail_gas_change+1, char_I_deco_gas_change+1
+	movff	opt_OC_bail_gas_change+2, char_I_deco_gas_change+2
+	movff	opt_OC_bail_gas_change+3, char_I_deco_gas_change+3
+	movff	opt_OC_bail_gas_change+4, char_I_deco_gas_change+4
 
 	; switch to oc mode
 	movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
 	bcf		lo,DECO_MODE_PSCR_FLAG		; clear the pSCR-mode flag (may not be set, but never mind)
 	bcf		lo,DECO_MODE_LOOP_FLAG		; clear the loop/CCR-mode flag
 	movff	lo,char_O_deco_status		; bank safe write-back of char_O_deco_status
-		
+
 	return
 
-		
+
 	global	deco_setup_cc_diluents
 deco_setup_cc_diluents:					; with currently breathed gas in WREG (1-5 or 6)
 	btfsc	is_bailout					; check if in bailout condition
 	bra		deco_setup_oc_gases			; revert to setting up OC gases in bailout condition
-	
+
 	movff	WREG,char_I_current_gas		; gas to start with when doing the deco calculations
 
-	movff   opt_dil_He_ratio+0,char_I_deco_He_ratio+0
-	movff   opt_dil_O2_ratio+0,char_I_deco_O2_ratio+0
-	movff   opt_dil_type+0,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+0	; Yes, clear char_I_deco_gas_change (Bank safe)
+	movff	opt_dil_He_ratio+0,char_I_deco_He_ratio+0
+	movff	opt_dil_O2_ratio+0,char_I_deco_O2_ratio+0
+	movff	opt_dil_type+0,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+0	; Yes, clear char_I_deco_gas_change (Bank safe)
 
-	movff   opt_dil_He_ratio+1,char_I_deco_He_ratio+1
-	movff   opt_dil_O2_ratio+1,char_I_deco_O2_ratio+1
-	movff   opt_dil_type+1,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+1	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+1,char_I_deco_He_ratio+1
+	movff	opt_dil_O2_ratio+1,char_I_deco_O2_ratio+1
+	movff	opt_dil_type+1,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+1	; Yes, clear char_I_dil_change
 
-	movff   opt_dil_He_ratio+2,char_I_deco_He_ratio+2
-	movff   opt_dil_O2_ratio+2,char_I_deco_O2_ratio+2
-	movff   opt_dil_type+2,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+2	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+2,char_I_deco_He_ratio+2
+	movff	opt_dil_O2_ratio+2,char_I_deco_O2_ratio+2
+	movff	opt_dil_type+2,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+2	; Yes, clear char_I_dil_change
 
-	movff   opt_dil_He_ratio+3,char_I_deco_He_ratio+3
-	movff   opt_dil_O2_ratio+3,char_I_deco_O2_ratio+3
-	movff   opt_dil_type+3,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+3	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+3,char_I_deco_He_ratio+3
+	movff	opt_dil_O2_ratio+3,char_I_deco_O2_ratio+3
+	movff	opt_dil_type+3,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+3	; Yes, clear char_I_dil_change
 
-	movff   opt_dil_He_ratio+4,char_I_deco_He_ratio+4
-	movff   opt_dil_O2_ratio+4,char_I_deco_O2_ratio+4
-	movff   opt_dil_type+4,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+4	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+4,char_I_deco_He_ratio+4
+	movff	opt_dil_O2_ratio+4,char_I_deco_O2_ratio+4
+	movff	opt_dil_type+4,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+4	; Yes, clear char_I_dil_change
 
 	; Setup char_I_deco_gas_change array
-	movff   char_I_dil_change+0, char_I_deco_gas_change+0
-	movff   char_I_dil_change+1, char_I_deco_gas_change+1
-	movff   char_I_dil_change+2, char_I_deco_gas_change+2
-	movff   char_I_dil_change+3, char_I_deco_gas_change+3
-	movff   char_I_dil_change+4, char_I_deco_gas_change+4
+	movff	char_I_dil_change+0, char_I_deco_gas_change+0
+	movff	char_I_dil_change+1, char_I_deco_gas_change+1
+	movff	char_I_dil_change+2, char_I_deco_gas_change+2
+	movff	char_I_dil_change+3, char_I_deco_gas_change+3
+	movff	char_I_dil_change+4, char_I_deco_gas_change+4
 
 	; switch to CCR / pSCR mode
 	movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
@@ -1510,159 +1531,158 @@
 	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
 	bsf		lo,DECO_MODE_PSCR_FLAG		; YES - set additional flag for pSCR mode
 	movff	lo,char_O_deco_status		; bank safe write-back of char_O_deco_status	
-		
+
 	return
 
-	global  setup_gas_registers
-setup_gas_registers:						; with currently breathed gas in WREG (1-5 or 6)
-	movwf	active_gas						; set as current gas
+	global	setup_gas_registers
+setup_gas_registers:					; with currently breathed gas in WREG (1-5 or 6)
+	movwf	active_gas					; set as current gas
 	movlw	.6
-	cpfseq	active_gas						; gas = gas6 ?
-	bra		setup_gas_registers_15			; NO - load gas 1-5
-	movff	gas6_O2_ratio,char_I_O2_ratio	; copy gas6 O2 ratio to deco engine
-	movff	gas6_He_ratio,char_I_He_ratio	; copy gas6 H2 ratio to deco engine	
-	bra		setup_gas_registers_com			; continue with common part
+	cpfseq	active_gas					; gas = gas6 ?
+	bra		setup_gas_registers_15		; NO - load gas 1-5
+	movff	gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine
+	movff	gas6_He_ratio,char_I_He_ratio ; copy gas6 H2 ratio to deco engine	
+	bra		setup_gas_registers_com		; continue with common part
 setup_gas_registers_15:
-	decf	active_gas,W					; 1-5 -> 0-4
+	decf	active_gas,W				; 1-5 -> 0-4
 	lfsr	FSR1,opt_gas_O2_ratio+0
-	movff	PLUSW1,char_I_O2_ratio			; copy gas 1-5 O2 ratio to deco engine
+	movff	PLUSW1,char_I_O2_ratio		; copy gas 1-5 O2 ratio to deco engine
 	lfsr	FSR1,opt_gas_He_ratio+0
-	movff	PLUSW1,char_I_He_ratio			; copy gas 1-5 He ratio to deco engine
+	movff	PLUSW1,char_I_He_ratio		; copy gas 1-5 He ratio to deco engine
 setup_gas_registers_com:	
-	;lfsr	FSR1,opt_gas_type				; commented out - currently not used anywhere
-	;movff	PLUSW1,active_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco
-	movff	char_O_main_status,lo			; working copy of char_O_main_status in bank common
-	bcf		lo,DECO_MODE_PSCR_FLAG			; clear the pSCR-mode flag (may not be set, but never mind)
-	bcf		lo,DECO_MODE_LOOP_FLAG			; clear the loop/CCR-mode flag
-	movff	lo,char_O_main_status			; bank safe write-back of char_O_main_status
-	movf	active_gas,W					; reload WREG with diluent 1-5 or 6 (important!)
+	;lfsr	FSR1,opt_gas_type			; commented out - currently not used anywhere
+	;movff	PLUSW1,active_gas_type		; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	char_O_main_status,lo		; working copy of char_O_main_status in bank common
+	bcf		lo,DECO_MODE_PSCR_FLAG		; clear the pSCR-mode flag (may not be set, but never mind)
+	bcf		lo,DECO_MODE_LOOP_FLAG		; clear the loop/CCR-mode flag
+	movff	lo,char_O_main_status		; bank safe write-back of char_O_main_status
+	movf	active_gas,W				; reload WREG with diluent 1-5 or 6 (important!)
 	return
 
-	global  setup_dil_registers
-setup_dil_registers:						; with currently breathed gas in WREG (1-5 or 6)
-	btfsc	is_bailout						; check if in bailout condition
-	bra		setup_gas_registers				; revert to setting up OC gases in bailout condition
-	movwf	active_gas						; set as current gas
-	movff	WREG,active_diluent				; remember for when switching back from bailout to loop
+	global	setup_dil_registers
+setup_dil_registers:					; with currently breathed gas in WREG (1-5 or 6)
+	btfsc	is_bailout					; check if in bailout condition
+	bra		setup_gas_registers			; revert to setting up OC gases in bailout condition
+	movwf	active_gas					; set as current gas
+	movff	WREG,active_diluent			; remember for when switching back from bailout to loop
 	movlw	.6
-	cpfseq	active_gas						; diluent = gas6 ?
-	bra		setup_dil_registers_15			; NO - load diluent 1-5
-	movff	gas6_O2_ratio,char_I_O2_ratio	; copy gas6 O2 ratio to deco engine
-	movff	gas6_He_ratio,char_I_He_ratio	; copy gas6 H2 ratio to deco engine
-	bra		setup_dil_registers_com			; continue with common part
+	cpfseq	active_gas					; diluent = gas6 ?
+	bra		setup_dil_registers_15		; NO - load diluent 1-5
+	movff	gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine
+	movff	gas6_He_ratio,char_I_He_ratio ; copy gas6 H2 ratio to deco engine
+	bra		setup_dil_registers_com		; continue with common part
 setup_dil_registers_15:
-	decf	active_gas,W					; 1-5 -> 0-4
+	decf	active_gas,W				; 1-5 -> 0-4
 	lfsr	FSR1,opt_dil_O2_ratio+0
-	movff	PLUSW1,char_I_O2_ratio			; copy diluent 1-5 O2 ratio to deco engine
+	movff	PLUSW1,char_I_O2_ratio		; copy diluent 1-5 O2 ratio to deco engine
 	lfsr	FSR1,opt_dil_He_ratio+0
-	movff	PLUSW1,char_I_He_ratio			; copy diluent 1-5 He ratio to deco engine
+	movff	PLUSW1,char_I_He_ratio		; copy diluent 1-5 He ratio to deco engine
 setup_dil_registers_com:
-	;lfsr	FSR1,opt_dil_type				; commented out - currently not used anywhere
-	;movff	PLUSW1,active_gas_type			; 0=Disabled, 1=First, 2=Normal (there is no type 3 for diluents)
-	movff	char_O_main_status,lo			; working copy of char_O_main_status in bank common
-	bsf		lo,DECO_MODE_LOOP_FLAG			; loop flag is set in both, CCR and pSCR mode
-	bcf		lo,DECO_MODE_PSCR_FLAG			; clear pSCR mode flag by default
-	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
-	bsf		lo,DECO_MODE_PSCR_FLAG			; YES - set additional flag for pSCR mode
-	movff	lo,char_O_main_status			; bank safe write-back of char_O_main_status
-	movf	active_gas,W					; reload WREG with diluent 1-5 or 6 (important!)
+	;lfsr	FSR1,opt_dil_type			; commented out - currently not used anywhere
+	;movff	PLUSW1,active_gas_type		; 0=Disabled, 1=First, 2=Normal (there is no type 3 for diluents)
+	movff	char_O_main_status,lo		; working copy of char_O_main_status in bank common
+	bsf		lo,DECO_MODE_LOOP_FLAG		; loop flag is set in both, CCR and pSCR mode
+	bcf		lo,DECO_MODE_PSCR_FLAG		; clear pSCR mode flag by default
+	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
+	bsf		lo,DECO_MODE_PSCR_FLAG		; YES - set additional flag for pSCR mode
+	movff	lo,char_O_main_status		; bank safe write-back of char_O_main_status
+	movf	active_gas,W				; reload WREG with diluent 1-5 or 6 (important!)
 	return
 
-divemode_option_gaschange:					; Switch to the better gas
-	movff	better_gas_number,menupos		; 1-5
-	bsf		divemode_gaschange				; Change the gas in the dive mode loop...
-	call	menuview_toggle_reset			; Reset to zero (Zero=no menuview)
-	bcf		better_gas_available			; Clear flag immediately
+divemode_option_gaschange:				; Switch to the better gas
+	movff	better_gas_number,menupos1	; 1-5
+	bsf		divemode_gaschange			; Change the gas in the dive mode loop...
+	call	menuview_toggle_reset		; Reset to zero (Zero=no menuview)
+	bcf		better_gas_available		; Clear flag immediately
 	return
 
-divemode_option0:							; Start/Setup Divemode menu
-	call	TFT_clear_divemode_menu			; Clear menu area
-	bcf	menuview
-	extern	do_main_divemenu
+divemode_option0:						; Start/Setup Divemode menu
+	call	TFT_clear_divemode_menu		; Clear menu area
+	bcf		menuview
 	call	do_main_divemenu
 
-    global  divemode_option0_return
+	global	divemode_option0_return
 divemode_option0_return:
-;    movlw   .1
-;    movwf   menupos                 ; Set to first option in divemode menu
-    call    TFT_divemode_menu_cursor; Show the cursor
+;	movlw	.1
+;	movwf	menupos1					; Set to first option in divemode menu
+	call	TFT_divemode_menu_cursor	; Show the cursor
 	movlw	divemode_menu_timeout
-	movwf	timeout_counter3        ; timeout for divemode menu
-    bsf     divemode_menu           ; Set flag
-    clrf    menupos2                ; Clear option counter
-    goto	diveloop_loop4          ; Goto back to diveloop (Menuprocessor trashes STKPTR!)
+	movwf	timeout_counter2			; timeout for divemode menu
+	bsf		divemode_menu				; Set flag
+	clrf	menupos2					; Clear option counter
+	goto	diveloop_loop4				; Goto back to diveloop (menu processor trashes STKPTR!)
 
 divemode_option4:
-	movlw	d'58'					; two seconds left
-	movwf	timeout_counter
-	movlw	apnoe_timeout-1			; apnoe timeout [min]
+	movlw	d'58'						; two seconds left
+	movwf	timeout_counter1+0
+	movlw	apnoe_timeout-1				; apnoe timeout [min]
 	movwf	apnoe_timeout_counter
-    btfss   simulatormode_active	; in simulator mode?
-	return							; No
-divemode_option1:					; Quit simulation mode
+	btfss	simulatormode_active		; in simulator mode?
+	return								; No
+divemode_option1:						; Quit simulation mode
 	banksel	isr_backup
-    movlw   low     .1000
-    movwf	sim_pressure+0
-    movlw   high    .1000
-	movwf   sim_pressure+1			; Set to 0m -> End of Dive
-	banksel common
-    call    menuview_toggle_reset   ; Reset to zero (Zero=no menuview)
-	
-	btfss	FLAG_apnoe_mode			; In Apnoe mode?
-	return							; No
-	movlw	d'58'					; two seconds left
-	movwf	timeout_counter
-	movlw	apnoe_timeout-1			; apnoe timeout [min]
+	movlw	LOW  .1000
+	movwf	sim_pressure+0
+	movlw	HIGH .1000
+	movwf	sim_pressure+1				; Set to 0m -> End of Dive
+	banksel	common
+	call	menuview_toggle_reset		; Reset to zero (Zero=no menuview)
+
+	btfss	FLAG_apnoe_mode				; In Apnoe mode?
+	return								; No
+	movlw	d'58'						; two seconds left
+	movwf	timeout_counter1+0
+	movlw	apnoe_timeout-1				; apnoe timeout [min]
 	movwf	apnoe_timeout_counter
 	return
 
-divemode_option3:					; minus 1m
+divemode_option3:						; minus 1m
 	banksel	isr_backup
 	movlw	d'100'
 	subwf	sim_pressure+0
 	movlw	.0
 	subwfb	sim_pressure+1
 	rcall	divemode_simulator_check_limits
-	banksel common
+	banksel	common
 	return
 
-divemode_option2:					; plus 1m
+divemode_option2:						; plus 1m
 	banksel	isr_backup
 	movlw	d'100'
 	addwf	sim_pressure+0
 	movlw	.0
 	addwfc	sim_pressure+1
 	rcall	divemode_simulator_check_limits
-	banksel common
+	banksel	common
 	return
 
 divemode_option5:
-    call    menuview_toggle_reset   ; Reset to zero (Zero=no menuview)
-    bsf     reset_average_depth     ; Set Flag
-    return
+	call	menuview_toggle_reset		; Reset to zero (Zero=no menuview)
+	bsf		reset_average_depth			; Set Flag
+	return
 
 divemode_option6:
-    bcf     divemode2                   ; Stop divetime
-    movlw   .5
-    addwf   divemins+0,F
-    movlw   .0
-    addwfc  divemins+1,F                ; Add 5 mins
-    movlw   LOW     (.5*.60)
-    addwf   average_divesecs+0,F
-    movlw   HIGH    (.5*.60)
-    addwfc  average_divesecs+1,F        ; Add 5*60 seconds
-    movlw   LOW     (.5*.60)
-    addwf   total_divetime_seconds+0,F
-    movlw   HIGH    (.5*.60)
-    addwfc  total_divetime_seconds+1,F  ; Add 5*60 seconds
+	bcf		divemode2					; Stop divetime
+	movlw	.5
+	addwf	divemins+0,F
+	movlw	.0
+	addwfc	divemins+1,F				; Add 5 mins
+	movlw	LOW  (.5*.60)
+	addwf	average_divesecs+0,F
+	movlw	HIGH (.5*.60)
+	addwfc	average_divesecs+1,F		; Add 5*60 seconds
+	movlw	LOW  (.5*.60)
+	addwf	total_divetime_seconds+0,F
+	movlw	HIGH (.5*.60)
+	addwfc	total_divetime_seconds+1,F	; Add 5*60 seconds
 
-	; 1. Add 300xdepth to the Sum of depths registers
-    SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
-    movlw   LOW     (.5*.60)
-    movwf   xA+0
-    movlw   HIGH    (.5*.60)
-    movwf   xA+1
-    call    mult16x16           		; xA*xB=xC
+	; 1. Add 300xdepth to the sum of depths registers
+	SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
+	movlw	LOW  (.5*.60)
+	movwf	xA+0
+	movlw	HIGH (.5*.60)
+	movwf	xA+1
+	call	mult16x16					; xA*xB=xC
 
 	movf	xC+0,w
 	addwf	average_depth_hold+0,F
@@ -1670,7 +1690,7 @@
 	addwfc	average_depth_hold+1,F
 	movf	xC+2,w
 	addwfc	average_depth_hold+2,F
-    movf	xC+3,w
+	movf	xC+3,w
 	addwfc	average_depth_hold+3,F		; Will work up to 9999mbar*60*60*24=863913600mbar
 
 	; Do the same for the _total registers (Non-Resettable)
@@ -1685,50 +1705,50 @@
 
 	movlw	.5							; + 5 minutes
 	movff	WREG,char_I_sim_advance_time; copy to mailbox
-	bsf     divemode2                   ; continue divetime
+	bsf		divemode2					; continue divetime
 	call	restart_deco_engine
-    goto    menuview_toggle_reset		; and return...
+	goto	menuview_toggle_reset		; and return...
 
 divemode_option7:
-    ; Store heading for compass view
-    movff   compass_heading_shown+0,compass_bearing+0
-    movff   compass_heading_shown+1,compass_bearing+1
-    bsf     compass_bearing_set         ; set flag
-    goto    menuview_toggle_reset       ; Done and return...
-    
+	; Store heading for compass view
+	movff	compass_heading_shown+0,compass_bearing+0
+	movff	compass_heading_shown+1,compass_bearing+1
+	bsf		compass_bearing_set			; set flag
+	goto	menuview_toggle_reset		; Done and return...
+	
 divemode_option8:
-    bsf	    alternative_divelayout		; Set flag for mode
-    bsf	    FLAG_TFT_divemode_mask_alt	; Set flag for mask
-    movlw   .1
-    movwf   menupos3					; For the customviews...
-    call    TFT_ClearScreen				; Clear screen
-    goto    menuview_toggle_reset       ; Done and return...
+	bsf		alternative_divelayout		; Set flag for mode
+	bsf		FLAG_TFT_divemode_mask_alt	; Set flag for mask
+	movlw	.1
+	movwf	menupos3					; For the customviews...
+	call	TFT_ClearScreen				; Clear screen
+	goto	menuview_toggle_reset		; Done and return...
 
 divemode_simulator_check_limits:
 	; Check limits (150m and 0m)
-	movlw	LOW		d'16000'            ; Compare to 16bar=16000mbar (150m).
-	subwf   sim_pressure+0,W
-	movlw	HIGH	d'16000'
-	subwfb  sim_pressure+1,W
-	bnc     divemode_simulator_check_limits2 ; No-carry = borrow = not deeper
+	movlw	LOW  d'16000'			; Compare to 16bar=16000mbar (150m).
+	subwf	sim_pressure+0,W
+	movlw	HIGH d'16000'
+	subwfb	sim_pressure+1,W
+	bnc		divemode_simulator_check_limits2 ; No-carry = borrow = not deeper
 
 	; Too deep, limit to 150m
-	movlw	LOW		d'16000'
+	movlw	LOW  d'16000'
 	movwf	sim_pressure+0
-	movlw	HIGH	d'16000'
+	movlw	HIGH d'16000'
 	movwf	sim_pressure+1
 	return
 divemode_simulator_check_limits2:
-	movlw	LOW		d'1000'             ; Compare to 1bar == 0m == 1000 mbar.
-	subwf   sim_pressure+0,W
-	movlw	HIGH	d'1000'
-	subwfb  sim_pressure+1,W
-	btfsc   STATUS,C                    ; No-carry = borrow = not deeper.
-	return                              ; Deeper than 0m == Ok.
+	movlw	LOW  d'1000'				; Compare to 1bar == 0m == 1000 mbar.
+	subwf	sim_pressure+0,W
+	movlw	HIGH d'1000'
+	subwfb	sim_pressure+1,W
+	btfsc	STATUS,C					; No-carry = borrow = not deeper.
+	return								; Deeper than 0m == Ok.
 	; Too shallow, limit to 0m
-	movlw	LOW		d'1000'
+	movlw	LOW  d'1000'
 	movwf	sim_pressure+0
-	movlw	HIGH	d'1000'
+	movlw	HIGH d'1000'
 	movwf	sim_pressure+1
 	return
 
@@ -1737,277 +1757,286 @@
 ;
 ; Output: better_gas_available, better_gas_number
 ;
-check_gas_change:					; Checks if a better gas should be selected (by user)
-	bcf		better_gas_available    ;=1: A better gas is available and a gas change is advised in divemode
-	clrf	better_gas_number       ; Clear better gas register
+check_gas_change:						; Checks if a better gas should be selected (by user)
+	bcf		better_gas_available		; =1: A better gas is available and a gas change is advised in divemode
+	clrf	WREG
+	movff	WREG,better_gas_number		; clear better gas register
 
-    SAFE_2BYTE_COPY rel_pressure,xA
+	SAFE_2BYTE_COPY rel_pressure,xA
 	movlw	d'100'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16				; compute depth in full m -> result in xC+0
+	call	div16x16					; compute depth in full m -> result in xC+0
 
-    btfsc   FLAG_pscr_mode          ; In PSCR mode...
-    bra     check_gas_change2	    ; Yes, check for diluents
-    btfss   FLAG_ccr_mode           ; In CCR mode...
-    bra     check_gas_change_OC_bail; No, check for OC or bailout
+	btfsc	FLAG_pscr_mode				; in PSCR mode?
+	bra		check_gas_change2			; YES - check for diluents
+	btfss	FLAG_ccr_mode				; in CCR mode?
+	bra		check_gas_change_OC_bail	; NO - check for OC
 check_gas_change2:
-    btfsc   is_bailout              ; Bailout?
-    bra     check_gas_change_OC_bail; Yes, check for OC or bailout
+	btfsc	is_bailout					; in bailout?
+	bra		check_gas_change_OC_bail	; YES - check for OC
 
-    ; Check Diluents
-    movlw   .0
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .1
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .2
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .3
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .4
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    bra     check_gas_change_exit
+	; Check Diluents
+	movlw	.0
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.1
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.2
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.3
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.4
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	bra		check_gas_change_exit
 
 check_gas_change_OC_bail:
-    movlw   .0
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .1
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .2
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .3
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .4
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-;    bra     check_gas_change_exit
+	movlw	.0
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.1
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.2
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.3
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.4
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	;bra	check_gas_change_exit
 
 check_gas_change_exit:
-    btfss   better_gas_available	; Is a better gas available
-    bcf     blinking_better_gas		; No, Clear blinking flag
-    btfss   better_gas_available	; Is a better gas available
-    clrf    better_gas_number		; No, Clear better_gas_number (For gaslist display)
-    bsf	    FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
-    return
+	bsf		FLAG_TFT_active_gas_divemode; redraw gas/setpoint/diluent
+	btfss	better_gas_available		; is a better gas available?
+	bcf		blinking_better_gas			; NO - clear blinking flag
+	btfsc	better_gas_available		; is a better gas available?
+	return								; YES
+	clrf	WREG						; NO  - clear better_gas_number (for gaslist display)
+	movff	WREG,better_gas_number
+	return
 
-check_gas_common:                   ; With Gas 0-4 in WREG
-    btfsc   better_gas_available	; Better Gas already found?
-    return                          ; Yes, return
-    lfsr    FSR1,opt_gas_type       ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    btfss   PLUSW1,0                ; Test for Bit0 and 1 -> type=3 -> Deco
-    return                          ; No
-    btfss   PLUSW1,1                ; Test for Bit0 and 1 -> type=3 -> Deco
-    return                          ; No
-    incf    WREG,W                  ; 1-5
-    cpfseq  active_gas				; is this gas current gas?
-    bra     check_gas_common2       ; No
-    return                          ; Yes, skip test for active gas
+check_gas_common:						; With Gas 0-4 in WREG
+	btfsc	better_gas_available		; Better Gas already found?
+	return								; Yes, return
+	lfsr	FSR1,opt_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	btfss	PLUSW1,0					; Test for Bit0 and 1 -> type=3 -> Deco
+	return								; No
+	btfss	PLUSW1,1					; Test for Bit0 and 1 -> type=3 -> Deco
+	return								; No
+	incf	WREG,W						; 1-5
+	cpfseq	active_gas					; is this gas current gas?
+	bra		check_gas_common2			; No
+	return								; Yes, skip test for active gas
 check_gas_common2:
-    decf    WREG,W                  ; 0-4
-    movwf   hi                      ; Save tested gas 0-4
-    lfsr    FSR1,opt_OC_bail_gas_change
-    movff   PLUSW1,lo               ; Change depth into lo
+	decf	WREG,W						; 0-4
+	movwf	hi							; Save tested gas 0-4
+	lfsr	FSR1,opt_OC_bail_gas_change
+	movff	PLUSW1,lo					; Change depth into lo
 	movlw	minimum_change_depth
-	cpfsgt	lo  					; Change depth>minimum_change_depth?
-	return                          ; No, Change depth not deep enough, skip!
-	movf	xC+0,W					; load depth in m into WREG
-	cpfsgt	lo  					; gas_change_depth < current depth?
-    bra     check_gas_common3       ; No, check if we are within the better_gas_window_pos window
-	incf    hi,W                    ; 1-5
-	movwf	better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+	cpfsgt	lo							; Change depth>minimum_change_depth?
+	return								; No, Change depth not deep enough, skip!
+	movf	xC+0,W						; load depth in m into WREG
+	cpfsgt	lo							; gas_change_depth < current depth?
+	bra		check_gas_common3			; No, check if we are within the better_gas_window_pos window
+	incf	hi,W						; 1-5
+	movff	WREG,better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
 	movlw	better_gas_window_neg
-	subwf	lo,W                    ; Change depth-better_gas_window_neg
-	cpfslt	xC+0					; current depth<Change depth-better_gas_window_neg?
-    bra     check_gas_common4       ; Ok, now check the better gas ppO2<char_I_ppO2_max
-    return
-
+	subwf	lo,W						; Change depth-better_gas_window_neg
+	cpfslt	xC+0						; current depth<Change depth-better_gas_window_neg?
+	bra		check_gas_common4			; Ok, now check the better gas ppO2<char_I_ppO2_max
+	return
 check_gas_common3:
-	incf    hi,W                    ; 1-5
-	movwf	better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+	incf	hi,W						; 1-5
+	movff	WREG,better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
 	movlw	better_gas_window_pos
-	addwf	lo,W                    ; Change depth+better_gas_window_pos
-	cpfsgt	xC+0					; current depth>Change depth+better_gas_window_pos?
-    bra     check_gas_common4       ; Ok, now check the better gas ppO2<char_I_ppO2_max
-    return
-
+	addwf	lo,W						; Change depth+better_gas_window_pos
+	cpfsgt	xC+0						; current depth>Change depth+better_gas_window_pos?
+	bra		check_gas_common4			; Ok, now check the better gas ppO2<char_I_ppO2_max
+	return
 check_gas_common4:
-    movf    hi,W                    	; gas 0-4 into WREG
-    lfsr    FSR1,char_I_deco_O2_ratio	; load base address char_I_deco_O2_ratio array
-    movff   PLUSW1,lo               	; read O2 ratio from array into lo
+	movf	hi,W						; gas 0-4 into WREG
+	lfsr	FSR1,char_I_deco_O2_ratio	; load base address char_I_deco_O2_ratio array
+	movff	PLUSW1,lo					; read O2 ratio from array into lo
 
-    SAFE_2BYTE_COPY amb_pressure, xA
+	SAFE_2BYTE_COPY amb_pressure, xA
 	movlw	d'10'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16				; xC=p_amb/10
+	call	div16x16					; xC=p_amb/10
 	movff	xC+0,xA+0
 	movff	xC+1,xA+1
-    movff   lo,xB+0                 ; =O2 ratio
+	movff	lo,xB+0						; =O2 ratio
 	clrf	xB+1
-	call	mult16x16               ; lo * p_amb/10
+	call	mult16x16					; lo * p_amb/10
 
-    ; Check very high ppO2 manually
-	tstfsz	xC+2					; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	return                      	; Done.
-    ; Check if ppO2>3,30bar
-	btfsc   xC+1,7
-	return                      	; Done.
+	; Check very high ppO2 manually
+	tstfsz	xC+2						; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
+	return								; Done.
+	; Check if ppO2>3,30bar
+	btfsc	xC+1,7
+	return								; Done.
 
-    ; Check for low ppo2
+	; Check for low ppo2
 	movff	xC+0,sub_b+0
 	movff	xC+1,sub_b+1
-	movff   char_I_ppO2_min,WREG
-	mullw	d'100'		    		; char_I_ppO2_min*100
+	movff	char_I_ppO2_min,WREG
+	mullw	d'100'						; char_I_ppO2_min*100
 	movff	PRODL,sub_a+0
 	movff	PRODH,sub_a+1
-	call	subU16		    		; sub_c = sub_a - sub_b
+	call	subU16						; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	return                      	; Done (Too low).
+	return								; Done (Too low).
 
 	;check if we are within our warning thresholds!
 	movff	xC+0,sub_a+0
 	movff	xC+1,sub_a+1
 	movff	char_I_ppO2_max_deco,WREG	; ppO2 max for MOD calculation and color coding in divemode
-	addlw   .1                  	; e.g. >1.60
-	mullw	d'100'		    		; char_I_ppO2_max*100
+	addlw	.1							; e.g. >1.60
+	mullw	d'100'						; char_I_ppO2_max*100
 	movff	PRODL,sub_b+0
 	movff	PRODH,sub_b+1
-	call	subU16		    		; sub_c = sub_a - sub_b
+	call	subU16						; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-	bsf		better_gas_available	;=1: A better gas is available and a gas change is advised in divemode
-	return                      	; Done.
+	bsf		better_gas_available		;=1: A better gas is available and a gas change is advised in divemode
+	return								; Done.
+
 
-check_dil_common:                   ; With Dil 0-4 in WREG
-    btfsc   better_gas_available	; Better Diluent already found?
-    return                          ; Yes, return
-    lfsr    FSR1,opt_dil_type       ; 0=Disabled, 1=First, 2=Normal
-    tstfsz  PLUSW1                  ; =0?
-    bra     check_dil_common1       ; No
-    return                          ; Yes, skip inactive diluents for test
+check_dil_common:						; With Dil 0-4 in WREG
+	btfsc	better_gas_available		; Better Diluent already found?
+	return								; Yes, return
+	lfsr	FSR1,opt_dil_type			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	PLUSW1						; =0?
+	bra		check_dil_common1			; No
+	return								; Yes, skip inactive diluents for test
 check_dil_common1:
-    incf    WREG,W                  ; 1-5
-    cpfseq  active_gas				; is this the current diluent?
-    bra     check_dil_common2       ; No
-    return                          ; Yes, skip test for active diluent
+	incf	WREG,W						; 1-5
+	cpfseq	active_gas					; is this the current diluent?
+	bra		check_dil_common2			; No
+	return								; Yes, skip test for active diluent
 check_dil_common2:
-    decf    WREG,W                  ; 0-4
-    movwf   hi                      ; Save tested diluent 0-4
-    lfsr    FSR1,char_I_dil_change
-    movff   PLUSW1,lo               ; Change depth into lo
+	decf	WREG,W						; 0-4
+	movwf	hi							; Save tested diluent 0-4
+	lfsr	FSR1,char_I_dil_change
+	movff	PLUSW1,lo					; Change depth into lo
 	movlw	minimum_change_depth
-	cpfsgt	lo  					; Change depth>minimum_change_depth?
-	return                          ; No, Change depth not deep enough, skip!
-	movf	xC+0,W					; load depth in m into WREG
-	cpfsgt	lo  					; gas_change_depth < current depth?
-    return                          ; No, check next gas
-	incf    hi,W                    ; 1-5
-	movwf	better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+	cpfsgt	lo							; Change depth>minimum_change_depth?
+	return								; No, Change depth not deep enough, skip!
+	movf	xC+0,W						; load depth in m into WREG
+	cpfsgt	lo							; gas_change_depth < current depth?
+	return								; No, check next gas
+	incf	hi,W						; 1-5
+	movff	WREG,better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
 	movlw	better_gas_window_neg
-	subwf	lo,W                    ; Change depth-better_gas_window_neg
-	cpfslt	xC+0					; current depth<Change depth-better_gas_window_neg?
-	bsf		better_gas_available	;=1: A better gas is available and a gas change is advised in divemode
-    return
+	subwf	lo,W						; Change depth-better_gas_window_neg
+	cpfslt	xC+0						; current depth<Change depth-better_gas_window_neg?
+	bsf		better_gas_available		;=1: A better gas is available and a gas change is advised in divemode
+	return
 
 
 ;=============================================================================
 ; Check for Auto-SP
 ;
-check_dive_autosp:               	; Check for Auto-SP
-    movff   opt_ccr_mode,WREG       ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .2                      ; opt_ccr_mode = 2 (Auto SP)?
-    bz      check_dive_autosp2      ; Yes, check
-    return                          ; No, return for Sensor or Fixed mode
+check_dive_autosp:						; Check for Auto-SP
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.2							; opt_ccr_mode = 2 (Auto SP)?
+	bz		check_dive_autosp2			; Yes, check
+	return								; No, return for Sensor or Fixed mode
 check_dive_autosp2:
-    SAFE_2BYTE_COPY rel_pressure,xA
+	SAFE_2BYTE_COPY rel_pressure,xA
 	movlw	d'100'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16				; compute depth in full m -> result in xC+0
-    ; Check SP2
-    btfsc   sp2_switched            ; =1: This setpoint has been autoselected already
-    bra     check_dive_autosp3      ; Skip check
-    movff   char_I_setpoint_change+1,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp2a     ; No, continue
-    bra     check_dive_autosp3      ; Skip check
+	call	div16x16					; compute depth in full m -> result in xC+0
+	; Check SP2
+	btfsc	sp2_switched				; =1: This setpoint has been autoselected already
+	bra		check_dive_autosp3			; Skip check
+	movff	char_I_setpoint_change+1,lo	; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp2a			; No, continue
+	bra		check_dive_autosp3			; Skip check
 check_dive_autosp2a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp3      ; lower depth, do not switch
-    ; auto switch to SP2
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp3			; lower depth, do not switch
+	; auto switch to SP2
 	movff	char_I_setpoint_cbar+1,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp2_switched            ; Set flag
+	rcall	xmit_sp_set_flag
+	bsf		sp2_switched				; Set flag
 check_dive_autosp3:
-    ; Check SP3
-    btfsc   sp3_switched            ;=1: This setpoint has been autoselected already
-    bra     check_dive_autosp4      ; Skip check
-    movff   char_I_setpoint_change+2,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp3a      ; No, continue
-    bra     check_dive_autosp4      ; Skip check
+	; Check SP3
+	btfsc	sp3_switched				;=1: This setpoint has been autoselected already
+	bra		check_dive_autosp4			; Skip check
+	movff	char_I_setpoint_change+2,lo	; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp3a			; No, continue
+	bra		check_dive_autosp4			; Skip check
 check_dive_autosp3a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp4      ; lower depth, do not switch
-    ; auto switch to SP3
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp4			; lower depth, do not switch
+	; auto switch to SP3
 	movff	char_I_setpoint_cbar+2,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp3_switched            ; Set flag
+	rcall	xmit_sp_set_flag
+	bsf		sp3_switched				; Set flag
 check_dive_autosp4:
-    ; Check SP4
-    btfsc   sp4_switched            ;=1: This setpoint has been autoselected already
-    bra     check_dive_autosp5      ; Skip check
-    movff   char_I_setpoint_change+3,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp4a     ; No, continue
-    bra     check_dive_autosp5      ; Skip check
+	; Check SP4
+	btfsc	sp4_switched				;=1: This setpoint has been autoselected already
+	bra		check_dive_autosp5			; Skip check
+	movff	char_I_setpoint_change+3,lo ; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp4a			; No, continue
+	bra		check_dive_autosp5			; Skip check
 check_dive_autosp4a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp5      ; lower depth, do not switch
-    ; auto switch to SP4
-	movff	char_I_setpoint_cbar+3,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp4_switched            ; Set flag
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp5			; lower depth, do not switch
+	; auto switch to SP4
+	movff	char_I_setpoint_cbar+3,char_I_const_ppO2 ; Use SetPoint
+	rcall	xmit_sp_set_flag
+	bsf		sp4_switched				; Set flag
 check_dive_autosp5:
-    ; Check SP5
-    btfsc   sp5_switched            ;=1: This setpoint has been autoselected already
-    bra     check_dive_autosp6      ; Skip check
-    movff   char_I_setpoint_change+4,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp5a     ; No, continue
-    bra     check_dive_autosp6      ; Skip check
+	; Check SP5
+	btfsc	sp5_switched				;=1: This setpoint has been autoselected already
+	bra		check_dive_autosp6			; Skip check
+	movff	char_I_setpoint_change+4,lo	; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp5a			; No, continue
+	bra		check_dive_autosp6			; Skip check
 check_dive_autosp5a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp6      ; lower depth, do not switch
-    ; auto switch to SP5
-	movff	char_I_setpoint_cbar+4,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp5_switched            ; Set flag
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp6			; lower depth, do not switch
+	; auto switch to SP5
+	movff	char_I_setpoint_cbar+4,char_I_const_ppO2 ; Use SetPoint
+	rcall	xmit_sp_set_flag
+	bsf		sp5_switched				; Set flag
 check_dive_autosp6:
-    return
+	return
 
 xmit_sp_set_flag:
-    movff   char_I_const_ppO2,WREG
-    call    transmit_setpoint       ; Transmit current setpoint from WREG (in cbar) to external electronics
-    bsf     setpoint_changed        ; Set flag (For profile)
-    bsf		event_occured			; Set global event byte
-    return
+	movff	char_I_const_ppO2,WREG
+	call	transmit_setpoint			; Transmit current setpoint from WREG (in cbar) to external electronics
+	bsf		setpoint_changed			; Set flag (for profile)
+	bsf		event_occured				; Set event flag
+	return
+
+set_logbook_marker:
+	bcf		FLAG_set_marker				; clear flag
+	movlw	d'6'						; set type of Alarm (manual marker)
+	movwf	AlarmType					; copy to Alarm Register
+	bsf		event_occured				; Set event flag
+	return
 
 ;=============================================================================
 ; Setup everything to enter divemode.
 ;
 dive_boot_oc:
-    rcall   get_first_gas_to_WREG			; Gets first gas (1-5) into WREG
-	rcall	setup_gas_registers				; set-up of gas parameters of currently breathed gas (with WREG = gas 1-5)
-	rcall	deco_setup_oc_gases				; set-up of gas list for deco calculations (with WREG = gas 1-5)
-    return
+	rcall	get_first_gas_to_WREG		; Gets first gas (1-5) into WREG
+	rcall	setup_gas_registers			; set-up of gas parameters of currently breathed gas (with WREG = gas 1-5)
+	rcall	deco_setup_oc_gases			; set-up of gas list for deco calculations (with WREG = gas 1-5)
+	return
 
 dive_boot_cc:
-    bcf     is_bailout                      ; =1: Bailout
-    bcf     setpoint_fallback               ; =1: Fallback to SP1 due to external O2 sensor failure
-    bcf		blinking_setpoint               ; Reset blinking SP flag
+	bcf		is_bailout					; =1: Bailout
+	bcf		setpoint_fallback			; =1: Fallback to SP1 due to external O2 sensor failure
+	bcf		blinking_setpoint			; Reset blinking SP flag
 
 	; revoke sensors from usage if they do not have a valid calibration
 	bsf		use_O2_sensor1
@@ -2019,363 +2048,337 @@
 	bcf		use_O2_sensor2
 	btfss	sensor3_calibrated_ok
 	bcf		use_O2_sensor3
-	
+
 	; In pSCR mode, only settings 0 (calculated ppO2) and 1 (ppO2 from sensors) are defined.
 	; In case we still have 3 (auto SP) selected out of previous ccr mode, we reset to 0.
 	btfss	FLAG_pscr_mode
 	bra		dive_boot_cc_1
-	movff   opt_ccr_mode,WREG				; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .2								; opt_ccr_mode = 1 (Auto SP)?
-    bnz     dive_boot_cc_1
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP (CCR) / calculated SP (pSCR), =1: Sensor, =2: Auto SP
+	sublw	.2							; opt_ccr_mode = 1 (Auto SP)?
+	bnz		dive_boot_cc_1
 	movlw	.0
 	movff	WREG,opt_ccr_mode
 
 dive_boot_cc_1:
-    bsf     setpoint_changed                ; Set flag (For profile)
-    bcf     sp2_switched                    ; =1: This setpoint has been autoselected already
-    bcf     sp3_switched                    ; =1: This setpoint has been autoselected already
-    bcf     sp4_switched                    ; =1: This setpoint has been autoselected already
-    bcf     sp5_switched                    ; =1: This setpoint has been autoselected already
+	bsf		setpoint_changed			; set flag (for profile)
+	bcf		sp2_switched				; =1: This setpoint has been auto-selected already
+	bcf		sp3_switched				; =1: This setpoint has been auto-selected already
+	bcf		sp4_switched				; =1: This setpoint has been auto-selected already
+	bcf		sp5_switched				; =1: This setpoint has been auto-selected already
 
-    rcall   get_first_dil_to_WREG           ; get first gas (1-5) into WREG
-    rcall   setup_dil_registers				; set-up of gas parameters for currently breathed gas (with WREG = current gas 1-5)
-	rcall	deco_setup_cc_diluents			; set-up of gas list for deco calculations (with WREG = current gas 1-5)
+	rcall	get_first_dil_to_WREG		; get first gas (1-5) into WREG
+	rcall	setup_dil_registers			; set-up of gas parameters for currently breathed gas (with WREG = current gas 1-5)
+	rcall	deco_setup_cc_diluents		; set-up of gas list for deco calculations (with WREG = current gas 1-5)
 
 	; Start with SP1 (CCR) or 0 (pSCR) as default.
 	; If in sensor mode, this value will be overwritten by calc_deko_divemode_sensor
-	clrf	WREG							; preload WREG with setpoint value 0 for pSCR calculated
-	btfss	FLAG_ccr_mode					; are we in CCR mode?
-	bra		dive_boot_cc_2					; NO  - keep preloaded value
-	movff	char_I_setpoint_cbar+0,WREG		; YES - get value of setpoint 1
+	clrf	WREG						; preload WREG with setpoint value 0 for pSCR calculated
+	btfss	FLAG_ccr_mode				; are we in CCR mode?
+	bra		dive_boot_cc_2				; NO  - keep preloaded value
+	movff	char_I_setpoint_cbar+0,WREG	; YES - get value of setpoint 1
 dive_boot_cc_2:
-	movff	WREG,char_I_const_ppO2			; write setpoint to deco engine
-	call	transmit_setpoint				; transmit current setpoint from WREG (in cbar) to external electronics
-	goto	calc_deko_divemode_sensor		; read & process sensor data (and return)
+	movff	WREG,char_I_const_ppO2		; write setpoint to deco engine
+	call	transmit_setpoint			; transmit current setpoint from WREG (in cbar) to external electronics
+	goto	calc_deko_divemode_sensor	; read & process sensor data (and return)
 
 diveloop_boot:
 	call	restart_set_modes_and_flags
 
-    call    I2C_sleep_accelerometer          ; Stop accelerometer
-    call    I2C_sleep_compass                ; Stop compass
+	call	I2C_sleep_accelerometer		; stop accelerometer
+	call	I2C_sleep_compass			; stop compass
 
 	clrf	WREG
-	movff	WREG,max_pressure+0				; clear some variables
+	movff	WREG,max_pressure+0			; clear some variables
 	movff	WREG,max_pressure+1
-	
+
 	; init in invalid data state
-	clrf	WREG							; set WREG to 0
-	bsf		WREG,int_invalid_flag			; set invalid flag
-	bsf		WREG,int_is_zero				; set zero flag
-	movff	WREG,int_O_tank_pres_need+1		; Set flags for tank pressure needs = 0 before p2_deco.c
-	movff	WREG,int_O_tank_pres_need+3		; can do it. If this is not done here and the gas needs
-	movff	WREG,int_O_tank_pres_need+5		; custom view is shown before p2_deco.c completes the first
-	movff	WREG,int_O_tank_pres_need+7		; deco calculation, some rubbish numbers from last dive of
-	movff	WREG,int_O_tank_pres_need+9		; simulation may be shown
-	
+	clrf	WREG						; set WREG to 0
+	bsf		WREG,int_invalid_flag		; set invalid flag
+	bsf		WREG,int_is_zero			; set zero flag
+	movff	WREG,int_O_tank_pres_need+1	; Set flags for tank pressure needs = 0 before p2_deco.c
+	movff	WREG,int_O_tank_pres_need+3	; can do it. If this is not done here and the gas needs
+	movff	WREG,int_O_tank_pres_need+5	; custom view is shown before p2_deco.c completes the first
+	movff	WREG,int_O_tank_pres_need+7	; deco calculation, some rubbish numbers from last dive of
+	movff	WREG,int_O_tank_pres_need+9	; simulation may be shown
+
 	; configure the deco engine:
-	movff	char_O_deco_status,WREG			; bank-safe copy
-	bsf		WREG,DECO_STATUS_0_FLAG			; configure init ...
-	bsf		WREG,DECO_STATUS_1_FLAG			; ... state,
-	bcf		WREG,DECO_PLAN_FLAG				; normal plan mode,
-	bsf		WREG,DECO_CNS_FLAG				; enable CNS calculation (CNS at end of dive),
-	bcf		WREG,DECO_VOLUME_FLAG			; disable gas volume calculation, and
-	bcf		WREG,DECO_ASCENT_FLAG			; disable delayed ascent calculation
-	movff	WREG,char_O_deco_status			; bank-safe copy back
-	
+	movff	char_O_deco_status,WREG		; bank-safe copy
+	bsf		WREG,DECO_STATUS_0_FLAG		; configure init ...
+	bsf		WREG,DECO_STATUS_1_FLAG		; ... state,
+	bcf		WREG,DECO_PLAN_FLAG			; normal plan mode,
+	bsf		WREG,DECO_CNS_FLAG			; enable CNS calculation (CNS at end of dive),
+	bcf		WREG,DECO_VOLUME_FLAG		; disable gas volume calculation, and
+	bcf		WREG,DECO_ASCENT_FLAG		; disable delayed ascent calculation
+	movff	WREG,char_O_deco_status		; bank-safe copy back
+
 	clrf	WREG
-	movff	WREG,char_O_main_status			; reset char_O_main_status
+	movff	WREG,char_O_main_status		; reset char_O_main_status
 
 	movlw	deco_distance
 	movff	WREG,char_I_deco_distance
 	movff	opt_last_stop,char_I_depth_last_deco
 	movff	opt_GF_low,char_I_GF_Low_percentage
 	movff	opt_GF_high,char_I_GF_High_percentage
-	
-    bcf     use_agf                         ; Start with normal GF set
-    bcf     divemode_menu                   ; clear divemode menu flag
-    
-    bcf	    alternative_divelayout			; Start with default layout
-	
-	bcf		blinking_depth_prev				; clear flag for blinking depth	## NEW BUGFIX
-	bcf		blinking_depth_warning			; clear flag for blinking depth	## NEW BUGFIX
-	bcf		blinking_depth_toggle			; clear flag for blinking depth	## NEW BUGFIX
-	
+
+	bcf		use_agf						; Start with normal GF set
+	bcf		divemode_menu				; clear divemode menu flag
+
+	bcf		alternative_divelayout		; Start with default layout
+
+	bcf		blinking_depth_prev			; clear flag for blinking depth
+	bcf		blinking_depth_warning		; clear flag for blinking depth
+	bcf		blinking_depth_toggle		; clear flag for blinking depth
+
 	movlw	d'1'
 	movwf	apnoe_max_pressure+0
 	clrf	apnoe_max_pressure+1
 ;	clrf	apnoe_surface_mins
-;	clrf	apnoe_surface_secs		
+;	clrf	apnoe_surface_secs
 	clrf	apnoe_mins
 	clrf	divemins+0
 	clrf	divemins+1
-    
+
 	; Copy date and time for logbook
-    movff   year,start_year
-    movff   month,start_month
-    movff   day,start_day
-    movff   hours,start_hours
-    movff   mins,start_mins
-    
-    movff   int_O_CNS_fraction+0,CNS_start+0	; save CNS value at beginning of dive
-    movff   int_O_CNS_fraction+1,WREG			; get high byte to WREG
-	bcf		WREG,int_warning_flag				; clear warning flag bit
-	movff	WREG,CNS_start+1					; move high byte on
-    movff   int_O_gradient_factor+0,GF_start	; save GF value at beginning of dive (only lower byte used for value)
+	movff	year,start_year
+	movff	month,start_month
+	movff	day,start_day
+	movff	hours,start_hours
+	movff	mins,start_mins
+
+	movff	int_O_CNS_fraction+0,CNS_start+0 ; save CNS value at beginning of dive
+	movff	int_O_CNS_fraction+1,WREG		 ; get high byte to WREG
+	bcf		WREG,int_warning_flag			 ; clear warning flag bit
+	movff	WREG,CNS_start+1				 ; move high byte on
+	movff	int_O_gradient_factor+0,GF_start ; save GF value at beginning of dive (only lower byte used for value)
 
-    bcf     no_more_divesecs            		; =1: do no longer show seconds in divemode
+	bcf		no_more_divesecs				 ; =1: do no longer show seconds in divemode
 	bcf		divemode_menu_active
-    clrf    menupos
-    clrf    menupos2                    		; Reset to zero (Zero=no premenu or simulator task)
-	bsf		sensors_agree						; init of sensors disagree warning system
-	
-    btfsc   FLAG_ccr_mode
-    bra	    diveloop_boot_cc
-    btfsc   FLAG_pscr_mode
-    bra	    diveloop_boot_cc
-    rcall   dive_boot_oc
-    bra	    diveloop_boot_cont
+	clrf	menupos1
+	clrf	menupos2						 ; Reset to zero (Zero=no premenu or simulator task)
+	bsf		sensors_agree					 ; init of sensors disagree warning system
+
+	btfsc	FLAG_ccr_mode
+	bra		diveloop_boot_cc
+	btfsc	FLAG_pscr_mode
+	bra		diveloop_boot_cc
+	rcall	dive_boot_oc
+	bra		diveloop_boot_cont
 
 diveloop_boot_cc:
-    rcall	dive_boot_cc
-	
+	rcall	dive_boot_cc
+
 diveloop_boot_cont:
-    ; Copy opt_dil_types into backup (For "lost gas" feature)
-    movff   opt_dil_type+0,opt_dil_type_backup+0    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+1,opt_dil_type_backup+1    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+2,opt_dil_type_backup+2    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+3,opt_dil_type_backup+3    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+4,opt_dil_type_backup+4    				; 0=Disabled, 1=First, 2=Normal
-    ; Copy opt_gas_types into backup (For "lost gas" feature)
-    movff   opt_gas_type+0,opt_gas_type_backup+0    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+1,opt_gas_type_backup+1    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+2,opt_gas_type_backup+2    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+3,opt_gas_type_backup+3    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+4,opt_gas_type_backup+4   					; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    ; Also copy change depths into backup (For "lost gas" feature)
-    movff   char_I_dil_change+0,opt_dil_change_backup+0				; Gas change depths Diluents
-    movff   char_I_dil_change+1,opt_dil_change_backup+1				; Gas change depths Diluents
-    movff   char_I_dil_change+2,opt_dil_change_backup+2				; Gas change depths Diluents
-    movff   char_I_dil_change+3,opt_dil_change_backup+3				; Gas change depths Diluents
-    movff   char_I_dil_change+4,opt_dil_change_backup+4				; Gas change depths Diluents
-    ; Also copy change depths into backup (For "lost gas" feature)
-    movff   opt_OC_bail_gas_change+0,opt_OC_bail_gas_change_backup+0; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+1,opt_OC_bail_gas_change_backup+1; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+2,opt_OC_bail_gas_change_backup+2; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+3,opt_OC_bail_gas_change_backup+3; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+4,opt_OC_bail_gas_change_backup+4; Gas change depths OC/Bailout
+	; Copy opt_dil_types into backup (For "lost gas" feature)
+	movff	opt_dil_type+0,opt_dil_type_backup+0					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+1,opt_dil_type_backup+1					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+2,opt_dil_type_backup+2					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+3,opt_dil_type_backup+3					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+4,opt_dil_type_backup+4					; 0=Disabled, 1=First, 2=Normal
+	; Copy opt_gas_types into backup (For "lost gas" feature)
+	movff	opt_gas_type+0,opt_gas_type_backup+0					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+1,opt_gas_type_backup+1					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+2,opt_gas_type_backup+2					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+3,opt_gas_type_backup+3					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+4,opt_gas_type_backup+4						; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	; Also copy change depths into backup (For "lost gas" feature)
+	movff	char_I_dil_change+0,opt_dil_change_backup+0				; Gas change depths Diluents
+	movff	char_I_dil_change+1,opt_dil_change_backup+1				; Gas change depths Diluents
+	movff	char_I_dil_change+2,opt_dil_change_backup+2				; Gas change depths Diluents
+	movff	char_I_dil_change+3,opt_dil_change_backup+3				; Gas change depths Diluents
+	movff	char_I_dil_change+4,opt_dil_change_backup+4				; Gas change depths Diluents
+	; Also copy change depths into backup (For "lost gas" feature)
+	movff	opt_OC_bail_gas_change+0,opt_OC_bail_gas_change_backup+0; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+1,opt_OC_bail_gas_change_backup+1; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+2,opt_OC_bail_gas_change_backup+2; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+3,opt_OC_bail_gas_change_backup+3; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+4,opt_OC_bail_gas_change_backup+4; Gas change depths OC/Bailout
 
-	clrf	better_gas_number           ; Clear better gas register
+	clrf	WREG
+	movff	WREG,better_gas_number		; clear better gas register
 
 	bcf		show_safety_stop			; =1: Show the safety stop
 	clrf	safety_stop_countdown		; Clear count-down
 
- 	clrf	samplesecs
+	clrf	samplesecs
 	clrf	apnoe_timeout_counter		; timeout in minutes
-	clrf 	timeout_counter				; takes care of the timeout (Low byte)
-	clrf 	timeout_counter2			; takes care of the timeout (High byte)
+	clrf	timeout_counter1+0			; takes care of the timeout (low  byte)
+	clrf	timeout_counter1+1			; takes care of the timeout (high byte)
 	clrf	AlarmType					; Clear all alarms
 	bcf		event_occured				; clear flag
 	clrf	average_depth_hold_total+0
 	clrf	average_depth_hold_total+1
 	clrf	average_depth_hold_total+2
 	clrf	average_depth_hold_total+3	; Clear Non-Resettable Average
-    rcall	reset_average1				; Reset the resettable average depth
-    bcf		decostop_active
-	bcf		better_gas_available        ; =1: A better gas is available and a gas change is advised in divemode
+	rcall	reset_average1				; Reset the resettable average depth
+	bcf		decostop_active
+	bcf		better_gas_available		; =1: A better gas is available and a gas change is advised in divemode
 	call	ghostwriter_short_header	; Write short header with divenumber into profile memory
 
-    btfsc   simulatormode_active
-    bra     diveloop_boot_1
-    ; Normal mode = Surface pressure is the pressure 30mn before dive.
+	btfsc	simulatormode_active
+	bra		diveloop_boot_1
+	; Normal mode = Surface pressure is the pressure 30mn before dive.
 	SAFE_2BYTE_COPY last_surfpressure_30min, int_I_pres_surface	;copy surfacepressure to deco routine
 	SAFE_2BYTE_COPY last_surfpressure_30min, last_surfpressure	;copy surfacepressure to last_surfpressure for correct depth
-    bra     diveloop_boot_2
+	bra		diveloop_boot_2
 
 diveloop_boot_1:
-    ; Simulator mode: Surface pressure is 1bar.
-    movlw   LOW .1000
-	movff	WREG,int_I_pres_surface+0   	; LOW copy surfacepressure to deco routine
-    movlw   HIGH .1000
-	movff	WREG,int_I_pres_surface+1   	; HIGH copy surfacepressure to deco routine
+	; Simulator mode: Surface pressure is 1bar.
+	movlw	LOW .1000
+	movff	WREG,int_I_pres_surface+0	; LOW copy surface pressure to deco routine
+	movlw	HIGH .1000
+	movff	WREG,int_I_pres_surface+1	; HIGH copy surface pressure to deco routine
 
 diveloop_boot_2:
-	SAFE_2BYTE_COPY	temperature,minimum_temperature ; Reset Min-Temp registers
+	SAFE_2BYTE_COPY temperature,minimum_temperature ; Reset Min-Temp registers
 
-; Init profile recording parameters	
-	movff	samplingrate,samplesecs_value	; to avoid EEPROM access in the ISR
-	movlw	div_temperature
-	movwf	divisor_temperature         	; load divisors for profile storage
-	movlw	div_deco
-	movwf	divisor_deco				
-	movlw	div_gf
-	movwf	divisor_gf
-	movlw	div_ppo2_sensors
-	movwf	divisor_ppo2_sensors
-	movlw	div_decoplan
-	movwf	divisor_decoplan
-	movlw	div_cns
-	movwf	divisor_cns
-	movlw	div_tank
-	movwf	divisor_tank
+	call	init_recording_params		; set up all the divisors
 
-	btfss	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		divemode_boot1
-
-	; Overwrite some parameters in Apnoe mode....
-	movlw	samplingrate_apnoe
-	movwf	samplesecs_value				; to avoid EEPROM access in the ISR
-
-divemode_boot1:
-    bsf     ccr_diluent_setup				; For CCR mode (Required to have better gas working)
-    btfsc   FLAG_ccr_mode               	; =1: CCR mode (Fixed ppO2 or Sensor) active
-    bra     divemode_boot2
-    btfsc   FLAG_pscr_mode
-    bra     divemode_boot2
-    
-    ; in OC Mode, disable ppO2 logging
-    movlw   .0
-    movwf   divisor_ppo2_sensors
-    
-    bcf     ccr_diluent_setup				; For OC mode (Required to have better gas working)
+	bsf		ccr_diluent_setup			; For CCR mode (Required to have better gas working)
+	btfsc	FLAG_ccr_mode				; =1: CCR mode (Fixed ppO2 or Sensor) active
+	bra		divemode_boot2
+	btfsc	FLAG_pscr_mode
+	bra		divemode_boot2
+	bcf		ccr_diluent_setup			; For OC mode (Required to have better gas working)
 
 divemode_boot2:
-	bcf		LEDg
-	bcf		LEDr
+	bcf		LEDg						; switch off green LED / release reset to RX circuitry
+	bcf		LEDr						; switch off red LED
 	bcf		realdive
-	btfss	simulatormode_active			; do not disable in simulator mode!					
-	call	disable_rs232					; Disable RS232
-    btfsc   enable_screen_dumps         	; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    call	enable_rs232					; Also sets to speed_normal ...
-    ; Reset divetime seconds
-    movlw   .2                          	; Start at 2seconds
-    movwf   total_divetime_seconds+0
-    clrf    total_divetime_seconds+1
-    movwf   divesecs
-    movwf   apnoe_secs
-    bsf	    divemode2                   	; displayed divetime is running (Divetime starts HERE)
-    return									; Done with divemode boot
+	btfss	simulatormode_active		; do not disable in simulator mode!					
+	call	disable_rs232				; Disable RS232
+	btfsc	enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	call	enable_rs232				; Also sets to speed_normal ...
+	; Reset divetime seconds
+	movlw	.2							; Start at 2seconds
+	movwf	total_divetime_seconds+0
+	clrf	total_divetime_seconds+1
+	movwf	divesecs
+	movwf	apnoe_secs
+	bsf		divemode2					; displayed divetime is running (Divetime starts HERE)
+	return								; Done with divemode boot
+
 
 divemode_check_for_warnings:
-    movlw   .1				    			; One warning at a time in alt. layout mode
-    btfss   alternative_divelayout  
-    movlw   .2				    			; Two warnings at a time in default layout mode
-    cpfsgt  warning_counter		    		; only one (or two) warnings active?
-    bra     divemode_check_for_warnings1    ; Yes, update every second
+	movlw	.1							; One warning at a time in alt. layout mode
+	btfss	alternative_divelayout
+	movlw	.2							; Two warnings at a time in default layout mode
+	cpfsgt	warning_counter				; only one (or two) warnings active?
+	bra		divemode_check_for_warnings1 ; Yes, update every second
 
-    btfss   secs,0                      	; Every two seconds...
-    return
-    btfss   secs,1                      	; Every four seconds...
-    return
+	btfss	secs,0						; Every two seconds...
+	return
+	btfss	secs,1						; Every four seconds...
+	return
 
 divemode_check_for_warnings1:
-	bcf		warning_active						; Clear flag
-	clrf	warning_counter						; Clear counter
+	bcf		warning_active				; Clear flag
+	clrf	warning_counter				; Clear counter
 
 	; warnings sorted by severity, highest severity first
-	
-    ; Warnings for all modes
-    call	check_warn_battery                  ; Check if the battery level should be displayed/warned
-    call    check_divetimeout                   ; Not actually a warning. Check and show the divemode timeout
+
+	; Warnings for all modes
+	call	check_warn_battery			; Check if the battery level should be displayed/warned
+	call	check_divetimeout			; Not actually a warning. Check and show the divemode timeout
+
+	btfsc	FLAG_apnoe_mode				; Done for Apnoe or Gauge mode
+	bra		divemode_check_for_warnings2
+	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
+	bra		divemode_check_for_warnings2
 
-	btfsc	FLAG_apnoe_mode             		; Done for Apnoe or Gauge mode
-    bra     divemode_check_for_warnings2
-	btfsc	FLAG_gauge_mode             		; Done for Apnoe or Gauge mode
-	bra     divemode_check_for_warnings2
+	; Warnings only in deco modes
+	rcall	check_ppO2					; check ppO2 and displays warning, if required
 
-    ; Warnings only in deco modes
-    rcall	check_ppO2							; check ppO2 and displays warning, if required
-	
-	btfss	sensors_agree						; are the sensor values within the threshold range?
-	rcall	check_warn_sensors_disagree			; NO  - further evaluate
-	btfsc	sensors_agree						; are the sensor values within the threshold range?
-	bcf		sensor_warning						; YES - revoke memorized sensor warning
+	btfss	sensors_agree				; are the sensor values within the threshold range?
+	rcall	check_warn_sensors_disagree	; NO  - further evaluate
+	btfsc	sensors_agree				; are the sensor values within the threshold range?
+	bcf		sensor_warning				; YES - revoke memorized sensor warning
+
+	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
+	btfsc	WREG,outside_warning_lock	; are we outside of the ZH-L16 model?
+	rcall	warn_outside				; YES
 
-	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
-	btfsc	WREG,outside_warning_lock			; are we outside of the ZH-L16 model?
-	rcall	warn_outside						; YES
-	
-	rcall	check_IBCD							; check for IBCD attention or warning
-	
-	btfsc	decostop_active						; In deco mode?
-	rcall	check_and_store_gf_violation		; Yes, sets warnings, if required
+	rcall	check_IBCD					; check for IBCD attention or warning
+
+	btfsc	decostop_active				; In deco mode?
+	rcall	check_and_store_gf_violation; Yes, sets warnings, if required
+
+	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
+	btfsc	WREG,mbubble_warning_lock	; do we have a microbubbles warning?
+	rcall	warn_mbubbles				; YES
+
+	rcall	check_cns_violation			; Check CNS value and display it, if required
 
-	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
-	btfsc	WREG,mbubble_warning_lock			; do we have a microbubbles warning?
-	rcall	warn_mbubbles						; YES
-	
-	rcall	check_cns_violation					; Check CNS value and display it, if required	
-	
-	;btfsc	decostop_active						; In deco mode?
-	rcall	check_gas_needs						; show gas needs warning if any gas need is > threshold
+	;btfsc	decostop_active				; In deco mode?
+	rcall	check_gas_needs				; show gas needs warning if any gas need is > threshold
+
+	rcall	check_eod_cns_violation		; Check CNS values for end-of-dive and display warning, if required
+
+	call	TFT_display_ftts			; Show @+x time
 
-	rcall	check_eod_cns_violation				; Check CNS values for end-of-dive and display warning, if required
-	
-    call    TFT_display_ftts					; Show @+x time
-	
-    btfsc   use_agf                             ; In aGF mode?
-    rcall   warn_agf                            ; Yes, show a warning for it
+	btfsc	use_agf						; In aGF mode?
+	rcall	warn_agf					; Yes, show a warning for it
 
-    btfsc   setpoint_fallback                   ; =1: Fallback to SP1 due to external O2 sensor failure
-    rcall   warn_fallback                       ; Show the warning
-	
+	btfsc	setpoint_fallback			; =1: Fallback to SP1 due to external O2 sensor failure
+	rcall	warn_fallback				; Show the warning
+
 divemode_check_for_warnings2:
 ; Display the warning icon?
-	btfsc	warning_active						; Any warning active?
-	bsf	FLAG_TFT_divemode_warning				; Yes
-	btfss	warning_active						; Any warning active?
-	bsf	FLAG_TFT_divemode_warning_clear			; No, clear warning icon
+	btfsc	warning_active				; Any warning active?
+	bsf		FLAG_TFT_divemode_warning	; Yes
+	btfss	warning_active				; Any warning active?
+	bsf		FLAG_TFT_divemode_warning_clear ; No, clear warning icon
 
 ; Setup warning_page number
-    incf    warning_page,F
-    movf    warning_page,W
-    bcf     STATUS,C
-    btfss   alternative_divelayout
-    rlcf    warning_page,W                      ; *2 (But only in standard layout mode)
-    cpfsgt  warning_counter                     ; > warning_counter
-    clrf    warning_page                        ; No, clear
-	
+	incf	warning_page,F
+	movf	warning_page,W
+	bcf		STATUS,C
+	btfss	alternative_divelayout
+	rlcf	warning_page,W				; *2 (But only in standard layout mode)
+	cpfsgt	warning_counter				; > warning_counter
+	clrf	warning_page				; No, clear
+
 ; Clear both rows of warnings if there is nothing to show at all
-	tstfsz	warning_counter						; any warnings?
-	bra	divemode_check_for_warnings3			; YES - look if second row needs to be cleared
-	bsf	FLAG_TFT_dive_warning_text_clear		; Set flag
+	tstfsz	warning_counter				; any warnings?
+	bra		divemode_check_for_warnings3 ; YES - look if second row needs to be cleared
+	bsf		FLAG_TFT_dive_warning_text_clear ; Set flag
 	return
 divemode_check_for_warnings3:
-	
-	
+
+
 ; Clear 2nd row of warnings if there is nothing to show (on this page)
-    btfss   second_row_warning                  ; =1: The second row contains a warning
-    bsf	    FLAG_TFT_dive_warning_text_clr2	; Set flag for 2nd row
-    return                                      ; Done.
+	btfss	second_row_warning			; =1: The second row contains a warning
+	bsf		FLAG_TFT_dive_warning_text_clr2	; Set flag for 2nd row
+	return								; Done.
 
-    global  check_warn_battery
+	global	check_warn_battery
 check_warn_battery:
-    movff   batt_percent,lo
-    movlw	battery_show_level+1
-    cpfslt	lo
-    return                              		; No Display, no warning
-    ; Display Battery, but warn?
-    movff	batt_percent,lo
-    movlw	color_code_battery_low+1
-    cpfsgt	lo                          		;
-    bsf		warning_active						; Set Warning flag
-    
-    movlw   .4
-    cpfseq  menupos3            				; battery shown in Custom View 4?
-    bra     check_warn_battery2					; No
-    return                     					; Yes, do not show twice (in custom view and in warning area)
+	movff	batt_percent,lo
+	movlw	battery_show_level+1
+	cpfslt	lo
+	return								; No Display, no warning
+	; Display Battery, but warn?
+	movff	batt_percent,lo
+	movlw	color_code_battery_low+1
+	cpfsgt	lo
+	bsf		warning_active				; Set Warning flag
+
+	movlw	.4
+	cpfseq	menupos3					; battery shown in Custom View 4?
+	bra		check_warn_battery2			; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_warn_battery2:
-    incf	warning_counter,F					; increase counter
-    goto	TFT_update_batt_percent_divemode	; Show percent (And return)
+	incf	warning_counter,F			; increase counter
+	goto	TFT_update_batt_percent_divemode ; Show percent (And return)
 
 check_divetimeout:
-    btfsc		divemode2				
-    return										; displayed divetime is not running
-	incf	warning_counter,F					; increase counter
-    goto    TFT_divetimeout						; Show timeout counter  (and return)
+	btfsc	divemode2
+	return								; displayed divetime is not running
+	incf	warning_counter,F			; increase counter
+	goto	TFT_divetimeout				; Show timeout counter (and return)
 
 
 check_ppO2:
-	btfsc   FLAG_ccr_mode 				; are we in CCR mode?
+	btfsc	FLAG_ccr_mode				; are we in CCR mode?
 	bra		check_ppO2_loop				; YES
 	btfsc	FLAG_pscr_mode				; are we in pSCR mode?
 	bra		check_ppO2_loop				; YES
@@ -2384,12 +2387,14 @@
 	btfsc	is_bailout					; in bailout?
 	bra		check_ppO2_oc_1				; YES - continue with OC
 	movff	int_O_pure_ppO2+1,hi		; NO  - get upper part of int_O_pure_ppO2
-	btfsc	hi,int_warning_flag			; 		ppO2 of the pure diluent to low or high? 
-	rcall	check_ppO2_d				; 		YES - show warning and return on next line
-	bra		check_ppO2_oc_2				;		      skip pre-warning threshold test on breathed ppO2
+	btfsc	hi,int_warning_flag			;       ppO2 of the pure diluent to low or high?
+	rcall	check_ppo2_display				;       YES - show warning and return on next line
+	btfsc	hi,int_attention_flag		;       ppO2 of the pure diluent close to setpoint?
+	rcall	check_ppo2_display				;       YES - show warning and return on next line
+	bra		check_ppO2_oc_2				;             skip attention threshold test on breathed ppO2
 check_ppO2_oc_1:
 	movff	int_O_breathed_ppO2+1,WREG	; get upper part of int_O_breathed_ppO2
-	btfsc	WREG,int_prewarning_flag	; breathed ppO2 just above pre-warning threshold?
+	btfsc	WREG,int_attention_flag		; breathed ppO2 just above attention threshold?
 	bra		check_ppo2_display			; YES - show ppO2
 check_ppO2_oc_2:
 	movff	int_O_breathed_ppO2+1,WREG	; get upper part of int_O_breathed_ppO2 (perhaps again)
@@ -2397,193 +2402,192 @@
 	bra		check_ppO2_low				; YES - record the warning and show ppO2
 	btfsc	WREG,int_high_flag			; breathed ppO2 to high?
 	bra		check_ppO2_high				; YES - record the warning and show ppO2
-	TSTOSS  opt_showppo2				; show ppO2 anyhow? (0 = no, 1 = show always)
+	TSTOSS	opt_showppo2				; show ppO2 anyhow? (0 = no, 1 = show always)
 	return								; NO  - no warnings, no show
 	bra		check_ppo2_display			; YES - just show ppO2
 check_ppO2_low:
-    movlw	d'4'						; set type of alarm (ppO2 low)
-	bra		check_ppO2_common  			; continue with common part
+	movlw	d'4'						; set type of alarm (ppO2 low)
+	bra		check_ppO2_common			; continue with common part
 check_ppO2_high:
 	movlw	d'5'						; set type of alarm (ppO2 high)
 check_ppO2_common:
 	movwf	AlarmType					; copy alarm type to alarm register
-	bsf		event_occured				; set event   flag
+	bsf		event_occured				; set event flag
 	bsf		warning_active				; set warning flag
 	btfsc	is_bailout					; are we in bailout?
 	bra		check_ppo2_display			; YES - skip CCR/pSCR checks
-	btfsc   FLAG_ccr_mode 				; are we in CCR mode?
+	btfsc	FLAG_ccr_mode				; are we in CCR mode?
 	return								; YES - no extra warning required
 	btfsc	FLAG_pscr_mode				; are we in pSCR mode?
 	return								; YES - no extra warning required
 check_ppo2_display:						; display warning if ppO2 is not already shown in custom view
-    movlw   .9
-    cpfseq  menupos3            		; ppO2 shown in Custom View 9?
-    bra     check_ppO2_a        		; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
+	movlw	.9
+	cpfseq	menupos3					; ppO2 shown in Custom View 9?
+	bra		check_ppO2_a				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_a:
-    movlw   .11
-    cpfseq  menupos3            		; ppO2 shown in Custom View 11?
-    bra     check_ppO2_b        		; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
+	movlw	.11
+	cpfseq	menupos3					; ppO2 shown in Custom View 11?
+	bra		check_ppO2_b				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_b:
-    movlw   .12
-    cpfseq  menupos3            		; ppO2 shown in Custom View 12?
-    bra     check_ppO2_c        		; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
+	movlw	.12
+	cpfseq	menupos3					; ppO2 shown in Custom View 12?
+	bra		check_ppO2_c				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_c:
-    movlw   .10
-    cpfseq  menupos3            		; ppO2 shown in Custom View 10?
-    bra     check_ppO2_d				; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
-check_ppO2_d:    
-    incf	warning_counter,F			; increase counter
-    goto    TFT_display_ppo2			; show breathed gas or diluent ppO2 warning (and return)
-	
+	movlw	.10
+	cpfseq	menupos3					; ppO2 shown in Custom View 10?
+	bra		check_ppO2_d				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
+check_ppO2_d:
+	incf	warning_counter,F			; increase counter
+	goto	TFT_display_ppo2			; show breathed gas or diluent ppO2 warning (and return)
+
 
-    global  check_cns_violation
+	global	check_cns_violation
 check_cns_violation:
-    ; Check if CNS should be displayed
-    movff   int_O_CNS_fraction+1,WREG	; get high byte
-    btfsc	WREG,int_warning_flag		; warning flag set?
-    bra     check_cns_violation2		; Yes - issue warning
-	btfsc	WREG,int_prewarning_flag	; pre-warning flag set?
+	; Check if CNS should be displayed
+	movff	int_O_CNS_fraction+1,WREG	; get high byte
+	btfsc	WREG,int_warning_flag		; warning flag set?
+	bra		check_cns_violation2		; Yes - issue warning
+	btfsc	WREG,int_attention_flag		; attention flag set?
 	bra		display_cns_violation		; YES - just display CNS
-	return                              ; No  - no display, no warning
+	return								; No  - no display, no warning
 check_cns_violation2:
 	bsf		warning_active				; Set Warning flag
 display_cns_violation:					; Show CNS if not shown in the custom view
-	movlw   .11
-	cpfseq  menupos3					; CNS shown in Custom View?
-	bra     display_cns_violation2      ; No
-    return								; Yes, do not show twice (in custom view and in warning area)
+	movlw	.11
+	cpfseq	menupos3					; CNS shown in Custom View?
+	bra		display_cns_violation2		; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 display_cns_violation2:
-	movlw   .8
-	cpfseq  menupos3					; CNS shown through Custom View 8 right now?
-	bra     display_cns_violation3      ; No
-    return								; Yes, do not show twice (in custom view and in warning area)
+	movlw	.8
+	cpfseq	menupos3					; CNS shown through Custom View 8 right now?
+	bra		display_cns_violation3		; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 display_cns_violation3:
-	incf	warning_counter,F	    	; increase counter
-    goto	TFT_display_cns				; Show CNS  (and return)
+	incf	warning_counter,F			; increase counter
+	goto	TFT_display_cns				; Show CNS (and return)
+
 
-	
-    global  check_eod_cns_violation		; check end-of-dive CNS values
+	global	check_eod_cns_violation		; check end-of-dive CNS values
 check_eod_cns_violation:
-	movff   int_O_CNS_fraction+1,WREG	; get high-byte of current CNS value
-    btfsc	WREG,int_warning_flag       ; current CNS value in warning state?
-    return								; YES - inhibit eod warning if current CNS is already in warning
-    movff   int_O_normal_CNS_fraction+1,WREG
+	movff	int_O_CNS_fraction+1,WREG	; get high-byte of current CNS value
+	btfsc	WREG,int_warning_flag		; current CNS value in warning state?
+	return								; YES - inhibit eod warning if current CNS is already in warning
+	movff	int_O_normal_CNS_fraction+1,WREG
 	btfsc	WREG,int_invalid_flag		; flag for invalid value set?
 	bra		check_eod_cns_violation1	; YES - continue with checking the other CNS value
-    btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
-    bra     check_eod_cns_violation2	; 		YES - issue warning
-check_eod_cns_violation1:				; 		NO  - continue with checking the other CNS value
-    movff   int_O_alternate_CNS_fraction+1,WREG
+	btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
+	bra		check_eod_cns_violation2	;       YES - issue warning
+check_eod_cns_violation1:				;       NO  - continue with checking the other CNS value
+	movff	int_O_alternate_CNS_fraction+1,WREG
 	btfsc	WREG,int_invalid_flag		; flag for invalid value set?
 	return								; YES - done with CNS checking
 	btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
-    bra     check_eod_cns_violation2	; 		Yes - issue warning
-	return								; 		NO  - done with CNS checking
+	bra		check_eod_cns_violation2	;       Yes - issue warning
+	return								;       NO  - done with CNS checking
 check_eod_cns_violation2:				; YES - issue warning
 	bsf		warning_active				; set Warning flag
-	movlw   .8							; issue textual warning if CNS values are not shown in the custom view right now
-	cpfseq  menupos3					; CNS values shown through Custom View 8 right now?
-	bra     display_eod_cns_violation	; NO  - issue textual warning
+	movlw	.8							; issue textual warning if CNS values are not shown in the custom view right now
+	cpfseq	menupos3					; CNS values shown through Custom View 8 right now?
+	bra		display_eod_cns_violation	; NO  - issue textual warning
 	return								; YES - do not show twice (in custom view and in warning area)
 display_eod_cns_violation:
-	incf	warning_counter,F	    	; increase counter
-    goto	TFT_display_eod_cns			; issue CNS at end-of-dive warning (and return)
+	incf	warning_counter,F			; increase counter
+	goto	TFT_display_eod_cns			; issue CNS at end-of-dive warning (and return)
 
 
-    global  check_and_store_gf_violation
+	global	check_and_store_gf_violation
 check_and_store_gf_violation:
 	movff	int_O_gradient_factor+1,WREG	; get upper byte of gradient factor
 	btfss	WREG,int_warning_flag			; check if the warning flag is set
-	bra     check_and_store_gf_violation2   ; NO  - continue with checking for pre-warning
-	movlw	d'2'                        	; YES - set type of alarm
-	movwf	AlarmType                   	; 		copy to alarm register
-	bsf		event_occured               	; 		set event   flag
-	bsf		warning_active              	; 		set warning flag
+	bra		check_and_store_gf_violation2	; NO  - continue with checking for attention flag
+	movlw	d'2'							; YES - set type of alarm
+	movwf	AlarmType						;		copy to alarm register
+	bsf		event_occured					;		set event   flag
+	bsf		warning_active					;		set warning flag
 	bra		check_and_store_gf_violation3	;		show gf warning
 check_and_store_gf_violation2:
-	btfsc	WREG,int_prewarning_flag		; check if the pre-warning flag is set
-    bra		check_and_store_gf_violation3	; YES - show gf
+	btfsc	WREG,int_attention_flag			; check if the attention flag is set
+	bra		check_and_store_gf_violation3	; YES - show gf
 	TSTOSS	opt_enable_IBCD					; NO  - IBCD warning activated?
-	bra		check_and_store_gf_violation4	; 		NO  - continue checking of deco info
-	movff	char_O_deco_warnings,WREG		; 		YES - get the deco warnings vector
-	btfss	WREG,IBCD_warning				; 			  is the IBCD warning flag set?
-	bra		check_and_store_gf_violation4	; 			  NO  - continue checking for deco info
-check_and_store_gf_violation3:				;			  YES - show gf
+	bra		check_and_store_gf_violation4	;		NO  - continue checking of deco info
+	movff	char_O_deco_warnings,WREG		;		YES - get the deco warnings vector
+	btfss	WREG,IBCD_warning				;			 is the IBCD warning flag set?
+	bra		check_and_store_gf_violation4	;			 NO  - continue checking for deco info
+check_and_store_gf_violation3:				;			 YES - show gf
 	bsf		warning_active					; set Warning flag
 	incf	warning_counter,F				; increase counter
-    goto    TFT_warning_gf              	; show GF (and return)
+	goto	TFT_warning_gf					; show GF (and return)
 check_and_store_gf_violation4:				; check for deco info
 	btfss	divemode						; in divemode?
 	return									; NO  - done, return
 	movff	char_O_deco_warnings,WREG		; YES - get the deco warnings vector
-	btfss	WREG,deco_flag					; 		check if the deco flag is set
-    return									; 		NO  - all done, return
-	incf	warning_counter,F				; 		YES - increase counter
-    goto    TFT_info_deco	             	; 			  show deco info
-	
-	
+	btfss	WREG,deco_flag					;       check if the deco flag is set
+	return									;       NO  - all done, return
+	incf	warning_counter,F				;       YES - increase counter
+	goto	TFT_info_deco					;             show deco info
+
+
 warn_outside:
 	incf	warning_counter,F			; increase counter
-	bsf		warning_active              ; Set Warning flag
-    goto    TFT_warning_outside			; show microbubbles warning (and return)
+	bsf		warning_active				; Set Warning flag
+	goto	TFT_warning_outside			; show outside warning (and return)
 
-	
+
 	global	warn_mbubbles
 warn_mbubbles:
 	incf	warning_counter,F			; increase counter
-	bsf		warning_active              ; Set Warning flag
-    goto    TFT_warning_mbubbles		; show microbubbles warning (and return)
+	bsf		warning_active				; Set Warning flag
+	goto	TFT_warning_mbubbles		; show microbubbles warning (and return)
 	
 warn_agf:
 	incf	warning_counter,F			; increase counter
-	goto    TFT_warning_agf             ; Show aGF warning  (and return)
+	goto	TFT_warning_agf				; Show aGF warning (and return)
 
 warn_fallback:
-    incf	warning_counter,F			; increase counter
-    bsf		warning_active              ; Set Warning flag
-	goto    TFT_warning_fallback        ; Show fallback warning  (and return)
+	incf	warning_counter,F			; increase counter
+	bsf		warning_active				; Set Warning flag
+	goto	TFT_warning_fallback		; Show fallback warning (and return)
 
-	
+
 check_gas_needs:
 	banksel	int_O_tank_pres_need
-	movf	int_O_tank_pres_need+1,w	; get 				HIGH(pres need of 1st tank)
+	movf	int_O_tank_pres_need+1,w	; get               HIGH(pres need of 1st tank)
 	iorwf	int_O_tank_pres_need+3,w	; inclusive or with HIGH(pres need of 2nd tank)
 	iorwf	int_O_tank_pres_need+5,w	; inclusive or with HIGH(pres need of 3rd tank)
 	iorwf	int_O_tank_pres_need+7,w	; inclusive or with HIGH(pres need of 4th tank)
 	iorwf	int_O_tank_pres_need+9,w	; inclusive or with HIGH(pres need of 5th tank)
 	banksel	common
-	btfsc	WREG,int_invalid_flag						; check if invalid flag is set
+	btfsc	WREG,int_invalid_flag		; check if invalid flag is set
 	return								; YES - no further checking required
 	btfsc	WREG,int_warning_flag		; NO  - check if any gas has a pres_need >= pres_fill
 	bsf		warning_active				; YES - set warning flag
 	btfsc	WREG,int_warning_flag		; NO  - check if any gas has a pres_need >= pres_fill
 	goto	TFT_warning_gas_needs_warn	; Yes - show a warning
-	btfsc	WREG,int_prewarning_flag	; NO  - check if any gas has a pres_need >= pres_fill * threshold
+	btfsc	WREG,int_attention_flag		; NO  - check if any gas has a pres_need >= pres_fill * threshold
 	goto	TFT_warning_gas_needs_att	; YES - show an attention
 	bcf		gas_needs_attention			; NO  - clear flag for a new attention
 	bcf		gas_needs_warning			;       clear flag for a new warning
 	return
 
-	
+
 check_warn_sensors_disagree:
-    incf	warning_counter,F			; increase counter
+	incf	warning_counter,F			; increase counter
 	bsf		warning_active				; YES - set Warning flag
-	goto	TFT_warning_sensor_disagree	; 		show sensor disagree warning (and return)
+	goto	TFT_warning_sensor_disagree	;       show sensor disagree warning (and return)
 
 
 check_IBCD:
 	TSTOSS	opt_enable_IBCD				; IBCD warning activated?
 	return								; NO  - done
 	movff	char_O_deco_warnings,WREG	; YES - get deco warnings vector
-	btfss	WREG,IBCD_warning			; 		IBCD warning flag set?
-	return								; 		NO  - return
-	incf	warning_counter,F			; 		YES - increase counter
-	goto	TFT_warning_IBCD			;			  write warning to display
-	
+	btfss	WREG,IBCD_warning			;       IBCD warning flag set?
+	return								;       NO  - return
+	incf	warning_counter,F			;       YES - increase counter
+	goto	TFT_warning_IBCD			;             write warning to display
 
 
 	global	restart_deco_engine
@@ -2619,15 +2623,51 @@
 	movff	int_O_tank_pres_need+1,WREG
 	bsf		WREG,int_invalid_flag
 	movff	WREG,int_O_tank_pres_need+1
-	
+
 	; restart deco engine
-	movff	char_O_deco_status,WREG			; get current deco engine configuration
-	bcf		WREG,DECO_STATUS_0_FLAG			; set status flags to...
-	bcf		WREG,DECO_STATUS_1_FLAG			; ... DECO_STATUS_START
-	bsf		WREG,DECO_PLAN_FLAG				; fake we came from alternative plan to force normal plan to be done next
-	movff   WREG,char_O_deco_status 		; write back new configuration to restart deco computations
+	movff	char_O_deco_status,WREG		; get current deco engine configuration
+	bcf		WREG,DECO_STATUS_0_FLAG		; set status flags to...
+	bcf		WREG,DECO_STATUS_1_FLAG		; ... DECO_STATUS_START
+	bsf		WREG,DECO_PLAN_FLAG			; fake we came from alternative plan to force normal plan to be done next
+	movff	WREG,char_O_deco_status		; write back new configuration to restart deco computations
+
+	return
+
+;=============================================================================
+; simulator mode
+;
+
+	global	do_demo_divemode
+do_demo_divemode:
+	call	option_save_all					; Save all settings into EEPROM before starting simulation
+	call	deco_push_tissues_to_vault		; C-code: back-up status of the real tissues
+	banksel	common							; Bank1
+
+	; +++ COMMENTED OUT FOR TESTING PURPOSE ONLY !!! +++
+	; +++ DO NOT COMMENT OUT IN OPERATIONAL USE  !!! +++
+	;
+	bsf		restore_deco_data			; Restore tissue and CNS after simulator use
 
-    return
-	
-	
- END
\ No newline at end of file
+	bcf		pressure_refresh
+	btfss	pressure_refresh				; Wait for sensor
+	bra		$-2
+
+	bsf		simulatormode_active			; Set Flag
+	; Compute dive ambient conditions
+	banksel	char_I_bottom_depth
+	movf	char_I_bottom_depth,W
+	mullw	.100
+	movff	PRODL,rel_pressure+0
+	movff	PRODH,rel_pressure+1
+	movlw	LOW  (.1000)
+	addwf	PRODL,W
+	movff	WREG,sim_pressure+0
+	movlw	HIGH (.1000)
+	addwfc	PRODH,W
+	movff	WREG,sim_pressure+1
+	banksel common							; Bank1
+
+	bsf		divemode
+	goto	diveloop						; Switch into Divemode!
+
+	END
\ No newline at end of file
--- a/src/divemode.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/divemode.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File divemode.inc								REFACTORED VERSION V2.91
+;   File divemode.inc								REFACTORED VERSION V2.97
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -8,10 +8,10 @@
 ; HISTORY
 ;  2011-08-15 : [mH] moving from OSTC code
 
-    extern    set_dive_modes
-    extern    diveloop
-    extern    apnoe_calc_maxdepth
-	extern	  calc_deko_divemode_sensor
+	extern	set_dive_modes
+	extern	diveloop
+	extern	apnoe_calc_maxdepth
+	extern	calc_deko_divemode_sensor
 
 
 ; Divemode layout:
@@ -28,112 +28,108 @@
 ;    - header: has the titles (mask)
 ;    - content: has the values
 ;******* Upper content / header row *******
-#DEFINE    dm_mask_depth_row              .0
-#DEFINE    dm_mask_depth_column           .12
-#DEFINE    dm_mask_maxdepth_row           .0
-#DEFINE    dm_mask_maxdepth_column        .73
-#DEFINE    dm_mask_maxdepth_column_nvsi   .63
-#DEFINE    dm_mask_divetime_row           .0
-#DEFINE    dm_mask_divetime_column        .122
+#DEFINE dm_mask_depth_row						.0
+#DEFINE dm_mask_depth_column					.12
+#DEFINE dm_mask_maxdepth_row					.0
+#DEFINE dm_mask_maxdepth_column					.73
+#DEFINE dm_mask_maxdepth_column_nvsi			.63
+#DEFINE dm_mask_divetime_row					.0
+#DEFINE dm_mask_divetime_column					.122
 
 ;   The content row contains 3 columns:
-;    - depth and ascend rate warning
-;    - max depth and warning messages
-;    - dive time, apnea dive times and warning icon
+;   - depth and ascend rate warning
+;   - max depth and warning messages
+;   - dive time, apnea dive times and warning icon
 ;   DIVEMODE_OFFSET=position below the title row
 ;******* Upper content / content row / 1st col *******
 ; GLOBAL
-#DEFINE    dm_offset              .14                    ; 14
+#DEFINE dm_offset								.14								; 14
 ; Depth
-#DEFINE    dm_depth_row           dm_offset              ; TOP  - 14 - start position of the detph numbers
-#DEFINE    dm_depth_column        .0                     ; LEFT - 0
-#DEFINE    dm_depth_bot           dm_depth_row+.61       ; 75
-#DEFINE    dm_depth_rgt           dm_depth_column+.59    ; 59
-#DEFINE    dm_depth_dm_row        dm_depth_row+.25       ; 39 - if metric and d<100, decimeter shown as: ".5"
-#DEFINE    dm_depth_dm_column     dm_depth_column+.40    ; 40 - bottom aligned so it has its own position (2nd content line only)
+#DEFINE dm_depth_row							dm_offset						; TOP  - 14 - start position of the detph numbers
+#DEFINE dm_depth_column							.0								; LEFT - 0
+#DEFINE dm_depth_bot							dm_depth_row+.61				; 75
+#DEFINE dm_depth_rgt							dm_depth_column+.59				; 59
+#DEFINE dm_depth_dm_row							dm_depth_row+.25				; 39 - if metric and d<100, decimeter shown as: ".5"
+#DEFINE dm_depth_dm_column						dm_depth_column+.40				; 40 - bottom aligned so it has its own position (2nd content line only)
 ; Ascend rate
-#DEFINE    dm_velocity_text_row        dm_depth_row+.62             ; 76
-#DEFINE    dm_velocity_text_column     dm_depth_column              ; 0
-#DEFINE    dm_velocity_text_bot        dm_velocity_text_row+.23     ; 99
-#DEFINE    dm_velocity_text_rgt        dm_depth_rgt                 ; 61
+#DEFINE dm_velocity_text_row					dm_depth_row+.62				; 76
+#DEFINE dm_velocity_text_column					dm_depth_column					; 0
+#DEFINE dm_velocity_text_bot					dm_velocity_text_row+.23		; 99
+#DEFINE dm_velocity_text_rgt					dm_depth_rgt					; 61
 ; Ascend/Descend bar
-#DEFINE    dm_velobar_top          dm_offset           ; 14
-#DEFINE    dm_velobar_lft          dm_depth_rgt+.1     ; 62
-#DEFINE    dm_velobar_bot          dm_offset+.70       ; 84
-#DEFINE    dm_velobar_rgt          .73                 ; 73
-#DEFINE    dm_velobar_width        .12
+#DEFINE dm_velobar_top							dm_offset						; 14
+#DEFINE dm_velobar_lft							dm_depth_rgt+.1					; 62
+#DEFINE dm_velobar_bot							dm_offset+.70					; 84
+#DEFINE dm_velobar_rgt							.73								; 73
+#DEFINE dm_velobar_width						.12
 
 ;******* Upper content / content row / 2nd col *******
-#DEFINE    dm_upcnt_2ndcol              .74                            ; 74
-#DEFINE    dm_upcnt_2ndcol_nvsi         .64                            ; 64
+#DEFINE dm_upcnt_2ndcol							.74								; 74
+#DEFINE dm_upcnt_2ndcol_nvsi					.64								; 64
 ; Max depth
-#DEFINE    dm_max_depth_row             dm_offset                      ; 14
-#DEFINE    dm_max_depth_column          dm_upcnt_2ndcol                ; 74
-#DEFINE    dm_max_depth_column_nvsi     dm_upcnt_2ndcol_nvsi           ; 64
-#DEFINE    dm_max_depth_bot             dm_max_depth_row+.34           ; 48
-#DEFINE    dm_max_depth_rgt             dm_max_depth_column+.36        ; 100
-#DEFINE    dm_max_depth_dm_row          dm_max_depth_row+.11           ; 25
-#DEFINE    dm_max_depth_dm_column       dm_max_depth_column+.23        ; 87
-#DEFINE    dm_max_depth_dm_column_nvsi  dm_max_depth_column_nvsi+.23   ; 77
-#DEFINE	   dm_max_alt_column		.0
-#DEFINE	   dm_max_alt_row		.170
-#DEFINE	   dm_max_dm_alt_column		dm_max_alt_column+.60
+#DEFINE dm_max_depth_row						dm_offset						; 14
+#DEFINE dm_max_depth_column						dm_upcnt_2ndcol					; 74
+#DEFINE dm_max_depth_column_nvsi				dm_upcnt_2ndcol_nvsi			; 64
+#DEFINE dm_max_depth_bot						dm_max_depth_row+.34			; 48
+#DEFINE dm_max_depth_rgt						dm_max_depth_column+.36			; 100
+#DEFINE dm_max_depth_dm_row						dm_max_depth_row+.11			; 25
+#DEFINE dm_max_depth_dm_column					dm_max_depth_column+.23			; 87
+#DEFINE dm_max_depth_dm_column_nvsi				dm_max_depth_column_nvsi+.23	; 77
+#DEFINE dm_max_alt_column						.0								; 0
+#DEFINE dm_max_alt_row							.170							; 170
+#DEFINE dm_max_dm_alt_column					dm_max_alt_column+.60			; 60
 ; Warning area (combined)
-#DEFINE    dm_warning_row             dm_offset+.36             ; 50
-#DEFINE    dm_warning_column          dm_upcnt_2ndcol           ; 74
-#DEFINE    dm_warning_bot             dm_warning_row+.49        ; 99
-#DEFINE    dm_warning_rgt             dm_warning_column+.62     ; 136
-#DEFINE    dm_warning_length          .9                        ; total string length
+#DEFINE dm_warning_row							dm_offset+.36					; 50
+#DEFINE dm_warning_column						dm_upcnt_2ndcol					; 74
+#DEFINE dm_warning_bot							dm_warning_row+.49				; 99
+#DEFINE dm_warning_rgt							dm_warning_column+.62			; 136
+#DEFINE dm_warning_length						.9								; total string length
 ; Warning row #1
-#DEFINE    dm_warning1_row            dm_warning_row            ; 36/50
-#DEFINE    dm_warning1_column         dm_warning_column         ; 64
-#DEFINE    dm_warning1_bot            dm_warning1_row+.23       ; 59/73
-#DEFINE    dm_warning1_rgt            dm_warning_rgt            ; 136
+#DEFINE dm_warning1_row							dm_warning_row					; 36/50
+#DEFINE dm_warning1_column						dm_warning_column				; 64
+#DEFINE dm_warning1_bot							dm_warning1_row+.23				; 59/73
+#DEFINE dm_warning1_rgt							dm_warning_rgt					; 136
 ; Warning row #2
-#DEFINE    dm_warning2_row            dm_warning_row+.24        ; 60/74
-#DEFINE    dm_warning2_column         dm_warning_column         ; 64
-#DEFINE    dm_warning2_bot            dm_warning2_row+.23       ; 83/97
-#DEFINE    dm_warning2_rgt            dm_warning_rgt            ; 136
+#DEFINE dm_warning2_row							dm_warning_row+.24				; 60/74
+#DEFINE dm_warning2_column						dm_warning_column				; 64
+#DEFINE dm_warning2_bot							dm_warning2_row+.23				; 83/97
+#DEFINE dm_warning2_rgt							dm_warning_rgt					; 136
 
 ;******* Upper content / content row / 3rd col *******
 ; Dive time
-#DEFINE    dm_divetime_row                dm_offset              ; 14
-#DEFINE    dm_divetime_column             .115                   ; 115
-#DEFINE    dm_divetime_minsonly_column    .111                   ; 111
-#DEFINE    dm_divetime_bot                dm_divetime_row+.34    ; 48
-#DEFINE    dm_divetime_rgt                .159                   ; 159
-#DEFINE    dm_divetime_secs_row           dm_divetime_row+.11    ; 25
-#DEFINE    dm_divetime_secs_column        dm_divetime_column+.24 ; 139
-#DEFINE	   dm_divetime_alt_row		  dm_offset              ; 14
-#DEFINE	   dm_divetime_alt_column	  .68
+#DEFINE dm_divetime_row							dm_offset						; 14
+#DEFINE dm_divetime_column						.115							; 115
+#DEFINE dm_divetime_minsonly_column				.111							; 111
+#DEFINE dm_divetime_bot							dm_divetime_row+.34				; 48
+#DEFINE dm_divetime_rgt							.159							; 159
+#DEFINE dm_divetime_secs_row					dm_divetime_row+.11				; 25
+#DEFINE dm_divetime_secs_column					dm_divetime_column+.24			; 139
+#DEFINE dm_divetime_alt_row						dm_offset						; 14
+#DEFINE dm_divetime_alt_column					.68								; 68
 ; Warning icon
-#DEFINE    dm_warning_icon_row            dm_offset+.41                ; 55
-#DEFINE    dm_warning_icon_column         .137                         ; 137
-#DEFINE    dm_warning_icon_bot            dm_warning_icon_row+.38      ; 93
-#DEFINE    dm_warning_icon_rgt            dm_warning_icon_column+.21   ; 156
+#DEFINE dm_warning_icon_row						dm_offset+.41					; 55
+#DEFINE dm_warning_icon_column					.137							; 137
+#DEFINE dm_warning_icon_bot						dm_warning_icon_row+.38			; 93
+#DEFINE dm_warning_icon_rgt						dm_warning_icon_column+.21		; 156
 ; Apnea dive time
-#DEFINE    dm_divetime_apnoe_row                  dm_offset                        ; 14
-#DEFINE    dm_divetime_apnoe_column               .103                             ; 103
-#DEFINE    dm_divetime_apnoe_secs_row             dm_divetime_apnoe_row+.11        ; 25
-#DEFINE    dm_divetime_apnoe_secs_column          dm_divetime_apnoe_column+.36     ; 139
+#DEFINE dm_divetime_apnoe_row					dm_offset						; 14
+#DEFINE dm_divetime_apnoe_column				.103							; 103
+#DEFINE dm_divetime_apnoe_secs_row				dm_divetime_apnoe_row+.11		; 25
+#DEFINE dm_divetime_apnoe_secs_column			dm_divetime_apnoe_column+.36	; 139
 ; Apnea total time
-#DEFINE    dm_apnoe_total_divetime_row            dm_divetime_apnoe_row+.50        ; 64
-#DEFINE    dm_apnoe_total_divetime_column         dm_divetime_apnoe_column         ; 103
-#DEFINE    dm_apnoe_total_divetime_secs_row       dm_apnoe_total_divetime_row+.11  ; 75
-#DEFINE    dm_apnoe_total_divetime_secs_col       dm_divetime_apnoe_column+.36     ; 139
-#DEFINE    dm_total_apnoe_text_row                dm_apnoe_total_divetime_row-.11  ; 53
-#DEFINE    dm_total_apnoe_text_column             .132                             ; 132
+#DEFINE dm_apnoe_total_divetime_row				dm_divetime_apnoe_row+.50		; 64
+#DEFINE dm_apnoe_total_divetime_column			dm_divetime_apnoe_column		; 103
+#DEFINE dm_apnoe_total_divetime_secs_row		dm_apnoe_total_divetime_row+.11	; 75
+#DEFINE dm_apnoe_total_divetime_secs_col		dm_divetime_apnoe_column+.36	; 139
+#DEFINE dm_total_apnoe_text_row					dm_apnoe_total_divetime_row-.11	; 53
+#DEFINE dm_total_apnoe_text_column				.132							; 132
 ; I. End of the upper content row. (0-99)
 
-
-
 ; 1px space between the 1st and 2nd content rows
-#DEFINE    dm_sep_1_2_row    dm_offset+.86         ; 100
-
-
+#DEFINE dm_sep_1_2_row							dm_offset+.86					; 100
 
 ; II. Custom/selectable content row
-;   The costume view display area is:  101,163,0,159 (t,b,l,r), or 0,101->159,163
+;   The costume view display area is: 101,163,0,159 (t,b,l,r), or 0,101->159,163
 ;   1. Stopwatch with avarage depth
 ;   2. Decoplan - decompression stops up to 6 stops
 ;   3. Time, EAD/END and tissue saturation (graph)
@@ -143,251 +139,248 @@
 ;   7. Gas list
 ;   8. Ceiling (for GF_hi)
 ;******* Custom content / Global *******
-#DEFINE    dm_customview_row              dm_offset+.87             ; 101
-#DEFINE    dm_customview_column           .0                        ; 0
-#DEFINE    dm_customview_bot              dm_customview_row+.62     ; 163
-#DEFINE    dm_customview_rgt              .159                      ; 159
+#DEFINE dm_customview_row						dm_offset+.87					; 101
+#DEFINE dm_customview_column					.0								; 0
+#DEFINE dm_customview_bot						dm_customview_row+.62			; 163
+#DEFINE dm_customview_rgt						.159							; 159
 
 ;******* Custom content / #1 - Avg depth, stopwatch and avg depth *******
 ; Title
-#DEFINE    dm_custom_avr_stop_title_row         dm_customview_row+.1      ; 102
-#DEFINE    dm_custom_avr_stop_title_column1     .2                        ; 2
-#DEFINE    dm_custom_avr_stop_title_column2     .57                       ; 57
-#DEFINE    dm_custom_avr_stop_title_column3     .110                      ; 110
+#DEFINE dm_custom_avr_stop_title_row			dm_customview_row+.1			; 102
+#DEFINE dm_custom_avr_stop_title_column1		.2								; 2
+#DEFINE dm_custom_avr_stop_title_column2		.57								; 57
+#DEFINE dm_custom_avr_stop_title_column3		.110							; 110
 ; Values
-#DEFINE    dm_custom_avr_stop_row               dm_customview_row+.16     ; 117
-#DEFINE    dm_custom_avr_stop_column1           .0                        ; 0
-#DEFINE    dm_custom_avr_stop_column2           .54                       ; 54
-#DEFINE    dm_custom_avr_stop_column3           .118                      ; 118
+#DEFINE dm_custom_avr_stop_row					dm_customview_row+.16			; 117
+#DEFINE dm_custom_avr_stop_column1				.0								; 0
+#DEFINE dm_custom_avr_stop_column2				.54								; 54
+#DEFINE dm_custom_avr_stop_column3				.118							; 118
 
 ;******* Custom content / #2 - Decompressions stops *******
 ; Title
-#DEFINE    dm_custom_decoplan_title_row          dm_customview_row              ; 101
-#DEFINE    dm_custom_decoplan_title_column       .65                            ; 65
+#DEFINE dm_custom_decoplan_title_row			dm_customview_row				; 101
+#DEFINE dm_custom_decoplan_title_column			.65								; 65
 ; 1st col
-#DEFINE    dm_cust_dstop_2nd_stop_row            dm_customview_row+.14          ; 115
-#DEFINE    dm_cust_dstop_2nd_stop_column         .0                             ; 0
-#DEFINE    dm_cust_dstop_3rd_stop_row            dm_customview_row+.37          ; 138
-#DEFINE    dm_cust_dstop_3rd_stop_column         dm_cust_dstop_2nd_stop_column  ; 0
+#DEFINE dm_cust_dstop_2nd_stop_row				dm_customview_row+.14			; 115
+#DEFINE dm_cust_dstop_2nd_stop_column			.0								; 0
+#DEFINE dm_cust_dstop_3rd_stop_row				dm_customview_row+.37			; 138
+#DEFINE dm_cust_dstop_3rd_stop_column			dm_cust_dstop_2nd_stop_column	; 0
 ; 2nd col
-#DEFINE    dm_cust_dstop_4th_stop_row            dm_cust_dstop_2nd_stop_row     ; 116
-#DEFINE    dm_cust_dstop_4th_stop_column         .56                            ; 56
-#DEFINE    dm_cust_dstop_5th_stop_row            dm_cust_dstop_3rd_stop_row     ; 140
-#DEFINE    dm_cust_dstop_5th_stop_column         dm_cust_dstop_4th_stop_column  ; 56
+#DEFINE dm_cust_dstop_4th_stop_row				dm_cust_dstop_2nd_stop_row		; 116
+#DEFINE dm_cust_dstop_4th_stop_column			.56								; 56
+#DEFINE dm_cust_dstop_5th_stop_row				dm_cust_dstop_3rd_stop_row		; 140
+#DEFINE dm_cust_dstop_5th_stop_column			dm_cust_dstop_4th_stop_column	; 56
 ; 3rd col
-#DEFINE    dm_cust_dstop_6th_stop_row            dm_cust_dstop_2nd_stop_row     ; 116
-#DEFINE    dm_cust_dstop_6th_stop_column         .111                           ; 111
-#DEFINE    dm_cust_dstop_7th_stop_row            dm_cust_dstop_3rd_stop_row     ; 140
-#DEFINE    dm_cust_dstop_7th_stop_column         dm_cust_dstop_6th_stop_column  ; 111
+#DEFINE dm_cust_dstop_6th_stop_row				dm_cust_dstop_2nd_stop_row		; 116
+#DEFINE dm_cust_dstop_6th_stop_column			.111							; 111
+#DEFINE dm_cust_dstop_7th_stop_row				dm_cust_dstop_3rd_stop_row		; 140
+#DEFINE dm_cust_dstop_7th_stop_column			dm_cust_dstop_6th_stop_column	; 111
 
 ;******* Custom content / #3 - Time, EAD/END and tissue saturation *******
 ; Clock
-#DEFINE    dm_custom_clock_title_row               dm_customview_row+.1              ; 102
-#DEFINE    dm_custom_clock_row                     dm_customview_row+.16             ; 117
-#DEFINE    dm_custom_clock_column                  .0                                ; 0
-#DEFINE    dm_custom_endtime_row                   dm_custom_clock_row+.23           ; 140 - not used
-#DEFINE    dm_custom_endtime_column                dm_custom_clock_column            ; 0   - not used
+#DEFINE dm_custom_clock_title_row				dm_customview_row+.1			; 102
+#DEFINE dm_custom_clock_row						dm_customview_row+.16			; 117
+#DEFINE dm_custom_clock_column					.0								; 0
+#DEFINE dm_custom_endtime_row					dm_custom_clock_row+.23			; 140 - not used
+#DEFINE dm_custom_endtime_column				dm_custom_clock_column			; 0   - not used
 ; EAD/AND
-#DEFINE    dm_custom_eadend_title_row              dm_customview_row+.1              ; 102
-#DEFINE    dm_custom_ead_row                       dm_customview_row+.16             ; 117
-#DEFINE    dm_custom_ead_column                    .50                               ; 50
-#DEFINE    dm_custom_end_row                       dm_custom_ead_row+.23             ; 140
-#DEFINE    dm_custom_end_column                    dm_custom_ead_column              ; 50
+#DEFINE dm_custom_eadend_title_row				dm_customview_row+.1			; 102
+#DEFINE dm_custom_ead_row						dm_customview_row+.16			; 117
+#DEFINE dm_custom_ead_column					.50								; 50
+#DEFINE dm_custom_end_row						dm_custom_ead_row+.23			; 140
+#DEFINE dm_custom_end_column					dm_custom_ead_column			; 50
 ; Tissue title
-#DEFINE    dm_custom_tissue_title_row              dm_customview_row+.1              ; 102
-#DEFINE    dm_custom_tissue_title_column           .120                              ; 120
+#DEFINE dm_custom_tissue_title_row				dm_customview_row+.1			; 102
+#DEFINE dm_custom_tissue_title_column			.120							; 120
 ; N2 / He values
-#DEFINE    dm_custom_tissue_N2_row                 dm_custom_ead_row+.5              ; 122
-#DEFINE    dm_custom_tissue_N2_column              .105                              ; 105
-#DEFINE    dm_custom_tissue_He_row                 dm_custom_end_row+.5              ; 145
-#DEFINE    dm_custom_tissue_He_column              dm_custom_tissue_N2_column        ; 105
+#DEFINE dm_custom_tissue_N2_row					dm_custom_ead_row+.5			; 122
+#DEFINE dm_custom_tissue_N2_column				.105							; 105
+#DEFINE dm_custom_tissue_He_row					dm_custom_end_row+.5			; 145
+#DEFINE dm_custom_tissue_He_column				dm_custom_tissue_N2_column		; 105
 ; Tissue diagram
-#DEFINE    dm_custom_tissue_diagram_top            dm_customview_row+.16             ; 117
-#DEFINE    dm_custom_tissue_diagram_bottom         dm_custom_tissue_diagram_top+.43  ; 160
-#DEFINE    dm_custom_tissue_diagram_left           .116                              ; 116
-#DEFINE    dm_custom_tissue_diagram_frame_spacing  .8                                ; 8
+#DEFINE dm_custom_tissue_diagram_top			dm_customview_row+.16			; 117
+#DEFINE dm_custom_tissue_diagram_bottom			dm_custom_tissue_diagram_top+.43; 160
+#DEFINE dm_custom_tissue_diagram_left			.116							; 116
+#DEFINE dm_custom_tissue_diagram_frame_spacing	.8								; 8
 
 ;******* Custom content / #4 - GF-lo/hi, aGF-lo/hi, current GF value *******
 ; Title
-#DEFINE    dm_custom_gf_title_row            dm_customview_row+.1        ; 102
-#DEFINE    dm_custom_gf_title_col1           .8                          ; 8
-#DEFINE    dm_custom_gf_title_col2           .62                         ; 62
-#DEFINE    dm_custom_gf_title_col3           .115                        ; 115
+#DEFINE dm_custom_gf_title_row					dm_customview_row+.1			; 102
+#DEFINE dm_custom_gf_title_col1					.8								; 8
+#DEFINE dm_custom_gf_title_col2					.62								; 62
+#DEFINE dm_custom_gf_title_col3					.115							; 115
 ; GF
-#DEFINE    dm_custom_gf_row                  dm_customview_row+.18       ; 119
-#DEFINE    dm_custom_gf_column               .0                          ; 0
+#DEFINE dm_custom_gf_row						dm_customview_row+.18			; 119
+#DEFINE dm_custom_gf_column						.0								; 0
 ; aGF
-#DEFINE    dm_custom_agf_row                 dm_custom_gf_row            ; 119
-#DEFINE    dm_custom_agf_column              .60                         ; 60
+#DEFINE dm_custom_agf_row						dm_custom_gf_row				; 119
+#DEFINE dm_custom_agf_column					.60								; 60
 ; Current GF
-#DEFINE    dm_custom_currentgf_row           dm_custom_gf_row            ; 119
-#DEFINE    dm_custom_currentgf_column        .118                        ; 118
+#DEFINE dm_custom_currentgf_row					dm_custom_gf_row				; 119
+#DEFINE dm_custom_currentgf_column				.118							; 118
 
 ;******* Custom content / #5 - Compass *******
 ; Title
-#DEFINE    dm_custom_compass_mask_row           dm_customview_row        ; 101
-#DEFINE    dm_custom_compass_mask_column        .65                      ; 65
+#DEFINE dm_custom_compass_mask_row				dm_customview_row				; 101
+#DEFINE dm_custom_compass_mask_column			.65								; 65
 ; Head and arrows
-#DEFINE    dm_custom_compass_head_row           dm_customview_row+.39    ; 140
-#DEFINE    dm_custom_compass_head_column        .62                      ; 62
-#DEFINE    dm_custom_compass_ldir_column        .5                       ; 5
-#DEFINE    dm_custom_compass_rdir_column        .140                     ; 140
+#DEFINE dm_custom_compass_head_row				dm_customview_row+.39			; 140
+#DEFINE dm_custom_compass_head_column			.62								; 62
+#DEFINE dm_custom_compass_ldir_column			.5								; 5
+#DEFINE dm_custom_compass_rdir_column			.140							; 140
 ; Ruler
-#DEFINE    dm_custom_compass_graph_row          dm_customview_row                  ; 101
-#DEFINE    dm_custom_compass_graph_height       .33                                ; 33
-#DEFINE    dm_custom_compass_tick_height        .3                                 ; 3
-#DEFINE    dm_custom_compass_tick_top_top       dm_custom_compass_graph_row+.1     ; 102
-#DEFINE    dm_custom_compass_tick_top_bot       dm_custom_compass_graph_row+.4     ; 105
-#DEFINE    dm_custom_compass_label_row          dm_custom_compass_graph_row+.6     ; 107
-#DEFINE    dm_custom_compass_label_height       .24                                ; 24
-#DEFINE    dm_custom_compass_tick_bot_top       dm_custom_compass_graph_row+.30    ; 131
-#DEFINE    dm_custom_compass_tick_bot_bot       dm_custom_compass_graph_row+.33    ; 134
+#DEFINE dm_custom_compass_graph_row				dm_customview_row				; 101
+#DEFINE dm_custom_compass_graph_height			.33								; 33
+#DEFINE dm_custom_compass_tick_height			.3								; 3
+#DEFINE dm_custom_compass_tick_top_top			dm_custom_compass_graph_row+.1	; 102
+#DEFINE dm_custom_compass_tick_top_bot			dm_custom_compass_graph_row+.4	; 105
+#DEFINE dm_custom_compass_label_row				dm_custom_compass_graph_row+.6	; 107
+#DEFINE dm_custom_compass_label_height			.24								; 24
+#DEFINE dm_custom_compass_tick_bot_top			dm_custom_compass_graph_row+.30	; 131
+#DEFINE dm_custom_compass_tick_bot_bot			dm_custom_compass_graph_row+.33	; 134
 
 ;******* Custom content / #6 - HUD / O2 sensor values *******
-#DEFINE    dm_custom_hud_row                dm_customview_row+.1        ; 102
-#DEFINE    dm_custom_hud_column1            .10                         ; 10
-#DEFINE    dm_custom_hud_column2            .65                         ; 65
-#DEFINE    dm_custom_hud_column3            .120                        ; 120
-#DEFINE    dm_custom_hud_data_row           dm_customview_row+.16       ; 117
-#DEFINE    dm_custom_hud_sensor1_column     .6                          ; 6
-#DEFINE    dm_custom_hud_sensor2_column     .62                         ; 62
-#DEFINE    dm_custom_hud_sensor3_column     .118                        ; 118
+#DEFINE dm_custom_hud_row						dm_customview_row+.1			; 102
+#DEFINE dm_custom_hud_column1					.10								; 10
+#DEFINE dm_custom_hud_column2					.65								; 65
+#DEFINE dm_custom_hud_column3					.120							; 120
+#DEFINE dm_custom_hud_data_row					dm_customview_row+.16			; 117
+#DEFINE dm_custom_hud_sensor1_column			.6								; 6
+#DEFINE dm_custom_hud_sensor2_column			.62								; 62
+#DEFINE dm_custom_hud_sensor3_column			.118							; 118
 
 ;******* Custom content / #7 - Gas list *******
 ; Title
-#DEFINE    dm_custom_dyn_gas_mask_row          dm_customview_row        ; 101
-#DEFINE    dm_custom_dyn_gas_mask_column       .59                      ; 59
+#DEFINE dm_custom_dyn_gas_mask_row				dm_customview_row				; 101
+#DEFINE dm_custom_dyn_gas_mask_column			.59								; 59
 ; col #1
-#DEFINE    dm_custom_dyn_gas_row1              dm_customview_row+.14    ; 115
-#DEFINE    dm_custom_dyn_gas_column1           .0                       ; 0
+#DEFINE dm_custom_dyn_gas_row1					dm_customview_row+.14			; 115
+#DEFINE dm_custom_dyn_gas_column1				.0								; 0
 ; col #2
-#DEFINE    dm_custom_dyn_gas_row2              dm_customview_row+.37    ; 138
-#DEFINE    dm_custom_dyn_gas_column2           .80                      ; 80
+#DEFINE dm_custom_dyn_gas_row2					dm_customview_row+.37			; 138
+#DEFINE dm_custom_dyn_gas_column2				.80								; 80
 
 ;******* Custom content / #8 - Ceiling value for GF_hi *******
 ; Title
-#DEFINE    dm_custom_ceiling_text_row       dm_customview_row+.1        ; 102
-#DEFINE    dm_custom_ceiling_text_column    .68                         ; 66
-#DEFINE    dm_custom_ceiling_ppo2_column    .8                          ; 8
-#DEFINE	   dm_custom_ceiling_ppo2_col_dil   .0							; 0 NEW tuned position because text is longer	## (?)
+#DEFINE dm_custom_ceiling_text_row				dm_customview_row+.1			; 102
+#DEFINE dm_custom_ceiling_text_column			.68								; 66
+#DEFINE dm_custom_ceiling_ppo2_column			.8								; 8
+#DEFINE dm_custom_ceiling_ppo2_col_dil			.0								; 0
 
 ; Value
-#DEFINE    dm_custom_ceiling_value_row      dm_customview_row+.18       ; 119
-#DEFINE    dm_custom_ceiling_value_column   .66                         ; 64
-#DEFINE    dm_custom_ceiling_ppo2_val_col   .2                          ; 2
+#DEFINE dm_custom_ceiling_value_row				dm_customview_row+.18			; 119
+#DEFINE dm_custom_ceiling_value_column			.66								; 64
+#DEFINE dm_custom_ceiling_ppo2_val_col			.2								; 2
 
 ;******* Custom content / #10 - Sensor check view *******
 ; Title
-#DEFINE    dm_custom_s_check_text_row       dm_customview_row+.1        ; 102
-#DEFINE    dm_custom_s_check_text_column    .50                         ; 50
-#DEFINE    dm_custom_ppO2_text_column       .115                        ; 115
-#DEFINE    dm_custom_ppDil_text_column      .2				; 2
+#DEFINE dm_custom_s_check_text_row				dm_customview_row+.1			; 102
+#DEFINE dm_custom_s_check_text_column			.50								; 50
+#DEFINE dm_custom_ppO2_text_column				.115							; 115
+#DEFINE dm_custom_ppDil_text_column				.2								; 2
 ; Value
-#DEFINE    dm_custom_s_check_ppo2_o2_column .108                        ; 108
-#DEFINE    dm_custom_s_check_ppo2_dil_col   .8				; 8
-#DEFINE    dm_custom_s_check_value_row      dm_customview_row+.18       ; 119
-    
-;******* Custom content / #12 - PSCR Info   *******
+#DEFINE dm_custom_s_check_ppo2_o2_column		.108							; 108
+#DEFINE dm_custom_s_check_ppo2_dil_col			.8								; 8
+#DEFINE dm_custom_s_check_value_row				dm_customview_row+.18			; 119
+	
+;******* Custom content / #12 - PSCR Info *******
 ; Title
-#DEFINE	   dm_custom_pscr_text_row	    dm_customview_row+.1        ; 102
-#DEFINE	   dm_custom_pscr_text_drop_column  .55    
-#DEFINE	   dm_custom_pscr_text_ratio_column .105
+#DEFINE dm_custom_pscr_text_row					dm_customview_row+.1			; 102
+#DEFINE dm_custom_pscr_text_drop_column			.55
+#DEFINE dm_custom_pscr_text_ratio_column		.105
 ; Value
-#DEFINE	   dm_custom_pscr_drop_column	    .66
-#DEFINE	   dm_custom_pscr_drop_row	    dm_customview_row+.18
-#DEFINE	   dm_custom_pscr_ratio_column	    .110
-#DEFINE	   dm_custom_pscr_ratio_row	    dm_customview_row+.18
-    
+#DEFINE dm_custom_pscr_drop_column				.66
+#DEFINE dm_custom_pscr_drop_row					dm_customview_row+.18
+#DEFINE dm_custom_pscr_ratio_column				.110
+#DEFINE dm_custom_pscr_ratio_row				dm_customview_row+.18
+
 ; II. End of the custom content row. (101-163)
 
-
-
 ; 1px space between the 2nd and 3rd content rows
-#DEFINE    dm_sep_2_3_row    dm_offset+.150         ; 164
-
+#DEFINE dm_sep_2_3_row							dm_offset+.150					; 164
 
 
 ; III. The 3rd content row contains temperature, active gas, NDL/TTS time,
-;      simulator menu, active/dil gas, decostop, Apnea surface time and max depth
+; simulator menu, active/dil gas, decostop, Apnea surface time and max depth
 ;  The content row contains 2 columns:
-;    - temperature, gas names
-;    - NDL/TTS, DecoStop
-#DEFINE    dm_3rdrow_top     dm_offset+.151    ; 165
-#DEFINE    dm_3rdrow_bot     .239              ; 239
-#DEFINE    dm_3rdrow_lft     .0                ; 0
-#DEFINE    dm_3rdrow_rgt     .159              ; 159
+;   - temperature, gas names
+;  - NDL/TTS, DecoStop
+#DEFINE dm_3rdrow_top							dm_offset+.151					; 165
+#DEFINE dm_3rdrow_bot							.239							; 239
+#DEFINE dm_3rdrow_lft							.0								; 0
+#DEFINE dm_3rdrow_rgt							.159							; 159
 
 ;******* Bottom content / 1st col *******
 ; Temperature
-#DEFINE    dm_temp_row               dm_3rdrow_top-.4     ; 161
-#DEFINE    dm_temp_column            .0                ; 0
+#DEFINE dm_temp_row								dm_3rdrow_top-.4				; 161
+#DEFINE dm_temp_column							.0								; 0
 ; Simulation text
-#DEFINE    dm_simtext_row            dm_3rdrow_top     ; 165
-#DEFINE    dm_simtext_column         .35               ; 35
+#DEFINE dm_simtext_row							dm_3rdrow_top					; 165
+#DEFINE dm_simtext_column						.35								; 35
 ; Diluent gas
-#DEFINE    dm_active_dil_row         dm_3rdrow_top+.19 ; 185
-#DEFINE    dm_active_dil_column      .0                ; 0
+#DEFINE dm_active_dil_row						dm_3rdrow_top+.19				; 185
+#DEFINE dm_active_dil_column					.0								; 0
 ; active gas for OC, blinking better gas, setpoint or bailout for CCR
-#DEFINE    dm_active_gas_row         .208              ; 208
-#DEFINE    dm_active_gas_column      .0                ; 0
+#DEFINE dm_active_gas_row						.208							; 208
+#DEFINE dm_active_gas_column					.0								; 0
 
 ;******* Bottom content / 2nd col *******
 ; Next deco stop for TTS
-#DEFINE    dm_decostop_1st_stop_row       dm_3rdrow_top             ; 165
-#DEFINE    dm_decostop_1st_stop_column    .82                       ; 82
+#DEFINE dm_decostop_1st_stop_row				dm_3rdrow_top					; 165
+#DEFINE dm_decostop_1st_stop_column				.82								; 82
 ; Safety Stop
-#DEFINE    dm_safetystop_row              dm_3rdrow_top             ; 165 (pre: 171)
-#DEFINE    dm_safetystop_column           .118                      ; 118
-#DEFINE    dm_safetystop_bot              dm_safetystop_row+.31     ; 196
-#DEFINE    dm_safetystop_text_row         dm_safetystop_row+.1      ; 166 (pre: 175)
-#DEFINE    dm_safetystop_text_column      .80                       ; 80 - for the 4char "Stop"!!!
+#DEFINE dm_safetystop_row						dm_3rdrow_top					; 165
+#DEFINE dm_safetystop_column					.118							; 118
+#DEFINE dm_safetystop_bot						dm_safetystop_row+.31			; 196
+#DEFINE dm_safetystop_text_row					dm_safetystop_row+.1			; 166
+#DEFINE dm_safetystop_text_column				.80								; 80 - for the 4char "Stop"!!!
 ; TTS
-#DEFINE    dm_tts_value_row               dm_3rdrow_top+.32;        ; 197 (pre: 207)
-#DEFINE    dm_tts_value_column            .118                      ; 118
-#DEFINE    dm_tts_text_row                dm_tts_value_row+.5       ; 202 (pre: 211)
-#DEFINE    dm_tts_text_column             .85                       ; 85
+#DEFINE dm_tts_value_row						dm_3rdrow_top+.32;				; 197 (pre: 207)
+#DEFINE dm_tts_value_column						.118							; 118
+#DEFINE dm_tts_text_row							dm_tts_value_row+.5				; 202 (pre: 211)
+#DEFINE dm_tts_text_column						.85								; 85
 ; NDL - the same position as TTS
-#DEFINE    dm_ndl_value_row               dm_tts_value_row          ; 197
-#DEFINE    dm_ndl_value_column            dm_tts_value_column       ; 118
-#DEFINE    dm_ndl_text_row                dm_tts_text_row           ; 202
-#DEFINE    dm_ndl_text_column             dm_tts_text_column        ; 85
+#DEFINE dm_ndl_value_row						dm_tts_value_row				; 197
+#DEFINE dm_ndl_value_column						dm_tts_value_column				; 118
+#DEFINE dm_ndl_text_row							dm_tts_text_row					; 202
+#DEFINE dm_ndl_text_column						dm_tts_text_column				; 85
 ; FTTS (only modded screen)
-#DEFINE    dm_ftts_value_row              dm_3rdrow_top+.64         ; 215
-#DEFINE    dm_ftts_value_column           .97                       ; 97
+#DEFINE dm_ftts_value_row						dm_3rdrow_top+.64				; 215
+#DEFINE dm_ftts_value_column					.97								; 97
 ; Grid line (only modded screen)
-#DEFINE     dm_gassep_row                 dm_sep_2_3_row            ; 164
-#DEFINE     dm_gassep_bot                 .239                      ; .239
-#DEFINE     dm_gassep_column              .78                       ; .78
+#DEFINE dm_gassep_row							dm_sep_2_3_row					; 164
+#DEFINE dm_gassep_bot							.239							; .239
+#DEFINE dm_gassep_column						.78								; .78
 
 ;******* Bottom content / Apnea mode *******;
-#DEFINE    dm_apnoe_surface_time_text_row           .190                   ; 190
-#DEFINE    dm_apnoe_surface_time_text_col           .30                    ; 30
-#DEFINE    dm_apnoe_surface_time_row                .204                   ; 204
-#DEFINE    dm_apnoe_surface_time_column             .15                    ; 15
-#DEFINE    dm_apnoe_last_max_depth_text_row         .190                   ; 190
-#DEFINE    dm_apnoe_last_max_depth_text_col         .100                   ; 100
-#DEFINE    dm_apnoe_last_max_depth_row              .204                   ; 204
-#DEFINE    dm_apnoe_last_max_depth_column           .100                   ; 100
+#DEFINE dm_apnoe_surface_time_text_row			.190							; 190
+#DEFINE dm_apnoe_surface_time_text_col			.30								; 30
+#DEFINE dm_apnoe_surface_time_row				.204							; 204
+#DEFINE dm_apnoe_surface_time_column			.15								; 15
+#DEFINE dm_apnoe_last_max_depth_text_row		.190							; 190
+#DEFINE dm_apnoe_last_max_depth_text_col		.100							; 100
+#DEFINE dm_apnoe_last_max_depth_row				.204							; 204
+#DEFINE dm_apnoe_last_max_depth_column			.100							; 100
 
 
 ; IV. The last set of parameters are for the menus displayed in dive mode
 ; Divemode menu
-#DEFINE    dm_menu_row           .164        ; 164 Upper row -- the frame's top line is the separator
-#DEFINE    dm_menu_lower         .239        ; 239 Lower border
-#DEFINE    dm_menu_left          .0          ; 0   Left
-#DEFINE    dm_menu_right         .159        ; 159 Right
+#DEFINE dm_menu_row								.164							; 164 Upper row -- the frame's top line is the separator
+#DEFINE dm_menu_lower							.239							; 239 Lower border
+#DEFINE dm_menu_left							.0								; 0   Left
+#DEFINE dm_menu_right							.159							; 159 Right
 
-#DEFINE    dm_menu_item1_row         dm_menu_row+.1          ; 165
-#DEFINE    dm_menu_item1_column      .9                      ; 9
-#DEFINE    dm_menu_item2_row         dm_menu_item1_row+.24   ; 189
-#DEFINE    dm_menu_item2_column      dm_menu_item1_column    ; 9
-#DEFINE    dm_menu_item3_row         dm_menu_item2_row+.24   ; 213
-#DEFINE    dm_menu_item3_column      dm_menu_item1_column    ; 9
+#DEFINE dm_menu_item1_row						dm_menu_row+.1					; 165
+#DEFINE dm_menu_item1_column					.9								; 9
+#DEFINE dm_menu_item2_row						dm_menu_item1_row+.24			; 189
+#DEFINE dm_menu_item2_column					dm_menu_item1_column			; 9
+#DEFINE dm_menu_item3_row						dm_menu_item2_row+.24			; 213
+#DEFINE dm_menu_item3_column					dm_menu_item1_column			; 9
 
-#DEFINE    dm_menu_item4_row         dm_menu_row+.1          ; 165
-#DEFINE    dm_menu_item4_column      .89                     ; 89
-#DEFINE    dm_menu_item5_row         dm_menu_item4_row+.24   ; 189
-#DEFINE    dm_menu_item5_column      dm_menu_item4_column    ; 89
-#DEFINE    dm_menu_item6_row         dm_menu_item5_row+.24   ; 213
-#DEFINE    dm_menu_item6_column      dm_menu_item4_column    ; 89
+#DEFINE dm_menu_item4_row						dm_menu_row+.1					; 165
+#DEFINE dm_menu_item4_column					.89								; 89
+#DEFINE dm_menu_item5_row						dm_menu_item4_row+.24			; 189
+#DEFINE dm_menu_item5_column					dm_menu_item4_column			; 89
+#DEFINE dm_menu_item6_row						dm_menu_item5_row+.24			; 213
+#DEFINE dm_menu_item6_column					dm_menu_item4_column			; 89
 
--- a/src/eeprom_rs232.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/eeprom_rs232.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File eeprom_rs232.asm
+;   File eeprom_rs232.asm												V2.98
 ;
 ;   Internal EEPROM, RS232
 ;
@@ -11,26 +11,68 @@
 
 #include "hwos.inc"
 #include "wait.inc"
+#include "shared_definitions.h"
+#include "rtc.inc"
+
+write_int_eeprom	macro	eeprom_address
+	movlw	eeprom_address
+	call	write_int_eeprom_1
+	endm
+
+read_int_eeprom		macro	eeprom_address
+	movlw	eeprom_address
+	call	read_int_eeprom_1
+	endm
+
+;=============================================================================
+eeprom	code	0xF00000+0x10
+; Skip SERIAL number. Should not be overwritten.
+
+	global	eeprom_serial_save
+	global	eeprom_opt_backup
+
+eeprom_serial_save	res 2
+eeprom_opt_backup	res 0x3E
 
 ;=============================================================================
-eeprom   code    0xF00000+0x10
-; Skip SERIAL number. Should not be overwritten.
-    global eeprom_serial_save, eeprom_opt_backup
-eeprom_serial_save  res 2
-eeprom_opt_backup   res 0x3E
+basic	CODE
 
-;=============================================================================
-basic    CODE
-
-	global write_int_eeprom_1
+	global	write_int_eeprom_1
 write_int_eeprom_1:
 	movwf	EEADR
-	bra		write_eeprom                ; writes and "returns" after write
+;	bra		write_eeprom				; writes and "returns" after write
+	
+;=============================================================================
+; writes into internal eeprom
+; Input:   EEADRH:EEADR = EEPROM address.
+;          EEDATA = byte to write.
+; Trashed: WREG.
+	global	write_eeprom
+write_eeprom:
+	bcf	EECON1,EEPGD
+	bcf	EECON1,CFGS
+	bsf	EECON1,WREN
+
+	bcf	INTCON,GIE					; Disable interrupts for the next 5 instructions
+	movlw	0x55
+	movwf	EECON2
+	movlw	0xAA
+	movwf	EECON2
+	bsf	EECON1,WR
+	bsf	INTCON,GIE					; ...but the flag for the ISR routines were still set, so they will interrupt now!
+
+write_eep2:
+	btfsc	EECON1,WR
+	bra	write_eep2					; wait about 4ms...
+	bcf	EECON1,WREN
+	return
+
+
 
 	global read_int_eeprom_1
 read_int_eeprom_1:
 	movwf	EEADR
-	bra		read_eeprom					; reads and "returns" after write
+;	bra		read_eeprom					; reads and "returns" after write
 
 ;=============================================================================
 ; reads from internal eeprom
@@ -38,180 +80,357 @@
 ; Output:  EEDATA.
 ; Trashed: NONE.
 	global	read_eeprom
-read_eeprom: 							
+read_eeprom:
 	bcf		EECON1,EEPGD
 	bcf		EECON1,CFGS
 	bsf		EECON1,RD
 	return
 
-;=============================================================================
-; writes into internal eeprom
-; Input:   EEADRH:EEADR = EEPROM address.
-;          EEDATA = byte to write.
-; Trashed: WREG.
-	global	write_eeprom
-write_eeprom:							
-	bcf		EECON1,EEPGD
-	bcf		EECON1,CFGS
-	bsf		EECON1,WREN
-
-	bcf		INTCON,GIE					; Disable interrups for the next 5 instructions
-	movlw	0x55		
-	movwf	EECON2
-	movlw	0xAA
-	movwf	EECON2
-	bsf		EECON1,WR
-	bsf		INTCON,GIE					; ...but the flag for the ISR routines were still set, so they will interrupt now!
-
-write_eep2:
-	btfsc	EECON1,WR		
-	bra 	write_eep2					; wait about 4ms...
-	bcf		EECON1,WREN
+	global	disable_ir_s8
+disable_ir_s8:
+	banksel	TXSTA2
+	clrf	TXSTA2
+	clrf	RCSTA2
+	banksel	common
+	bcf		ir_power					; IR off
+	bcf		mcp_power					; Power-down instrumentation amp
+	bsf		s8_npower					; Power-down S8 HUD
 	return
 
-    global  disable_ir_s8
-disable_ir_s8:
-    banksel TXSTA2
-	clrf    TXSTA2
-	clrf    RCSTA2
-    banksel common
-    bcf     ir_power                ; IR off
-    bcf     mcp_power               ; Power-down intrumentation amp
-    bsf     s8_npower               ; Power-down S8 HUD
-    return
 
-    global  enable_ir_s8
+	global	enable_ir_s8
 enable_ir_s8:
 ;init serial port2 (TRISG2)
-    btfsc   analog_o2_input
-    bra     enable_s8           ; Start S8
+	btfsc	analog_o2_input
+	bra		enable_s8					; Start S8
 
-    banksel BAUDCON2
-	movlw	b'00100000'			; BRG16=0           ; inverted for IR
+	banksel	BAUDCON2
+	movlw	b'00100000'					; BRG16=0			; inverted for IR
 	movwf	BAUDCON2
-	movlw 	b'00100000'			; BRGH=0, SYNC=0
-	movwf 	TXSTA2
-	movlw 	.102                ; SPBRGH:SPBRG = .102  : 2403 BAUD @ 16MHz
-	movwf 	SPBRG2
-	movlw 	b'10010000'
-	movwf 	RCSTA2
-    banksel common
-    bsf     ir_power            ; Power-up IR
-    btfss   ir_power
-    bra     $-6
-    return
+	movlw	b'00100000'					; BRGH=0, SYNC=0
+	movwf	TXSTA2
+	movlw	.102						; SPBRGH:SPBRG = .102 : 2403 BAUD @ 16MHz
+	movwf	SPBRG2
+	movlw	b'10010000'
+	movwf	RCSTA2
+	banksel	common
+	bsf		ir_power					; Power-up IR
+	btfss	ir_power
+	bra		$-6
+	return
 
 enable_s8:
-    ; Check for Digital/Analog
-    bsf     s8_npower           ; Power-down S8 HUD
-    WAITMS  d'1'                ; Very short delay
-    bsf     mcp_power           ; Power-up intrumentation amp
-    btfss   mcp_power
-    bra     $-6
-    banksel TXSTA2
-	clrf    TXSTA2
-	clrf    RCSTA2
-    banksel common
+	; Check for Digital/Analog
+	bsf		s8_npower					; Power-down S8 HUD
+	WAITMS	d'1'						; Very short delay
+	bsf		mcp_power					; Power-up instrumentation amp
+	btfss	mcp_power
+	bra		$-6
+	banksel	TXSTA2
+	clrf	TXSTA2
+	clrf	RCSTA2
+	banksel	common
 
-    ; It may be digital, check for voltage when isolator is powered
-    bcf     s8_npower           ; Power S8 HUD
-    WAITMS  d'1'                ; Very short delay
+	; It may be digital, check for voltage when isolator is powered
+	bcf		s8_npower					; Power S8 HUD
+	WAITMS	d'1'						; Very short delay
 
-    btfsc   PORTG,2             ; RX2=1?
-    bra     enable_s8_2         ; Yes, digital
-    WAITMS  d'30'
-    btfsc   PORTG,2             ; RX2=1?
-    bra     enable_s8_2         ; Yes, digital
-    
-    ; Not found, set to analog (fail-safe)
+	btfsc	PORTG,2						; RX2=1?
+	bra	enable_s8_2						; Yes, digital
+	WAITMS	d'30'
+	btfsc	PORTG,2						; RX2=1?
+	bra		enable_s8_2					; Yes, digital
+
+	; Not found, set to analog (fail-safe)
 
 enable_s8_analog:
-    ; S8 Analog
-    bsf     s8_npower           ; Power-down S8 HUD
-    bcf     s8_digital          ; Clear flag
-    return
+	; S8 Analog
+	bsf		s8_npower					; Power-down S8 HUD
+	bcf		s8_digital					; Clear flag
+	return
 
-enable_s8_2:                    ; S8 Digital
-    banksel BAUDCON2
-    movlw	b'00000000'			; BRG16=0           ; normal for S8
+enable_s8_2:							; S8 Digital
+	banksel BAUDCON2
+	movlw	b'00000000'					; BRG16=0			; normal for S8
 	movwf	BAUDCON2
-	movlw 	b'00100000'			; BRGH=0, SYNC=0
-	movwf 	TXSTA2
-    movlw 	.25                 ; SPBRGH:SPBRG = .25   : 9615 BAUD @ 16MHz
-	movwf 	SPBRG2
-	movlw 	b'10010000'
-	movwf 	RCSTA2
-    banksel common
-    bsf     s8_digital              ; Set flag
-    return
+	movlw	b'00100000'					; BRGH=0, SYNC=0
+	movwf	TXSTA2
+	movlw	.25							; SPBRGH:SPBRG = .25 : 9615 BAUD @ 16MHz
+	movwf	SPBRG2
+	movlw	b'10010000'
+	movwf	RCSTA2
+	banksel	common
+	bsf		s8_digital					; Set flag
+	return
 
 ;=============================================================================
+
 	global	enable_rs232
 enable_rs232:
-	call	speed_normal			; 16MHz
+	call	speed_normal				; 16MHz
 enable_rs232_2:
-    movlw	T2CON_NORMAL
-    cpfseq  T2CON
-    bra     enable_rs232_2          ; Wait until speed is normal
-    bcf     PORTE,0                 ; Start comms
+	movlw	T2CON_NORMAL
+	cpfseq	T2CON
+	bra		enable_rs232_2				; Wait until speed is normal
+	bcf		PORTE,0						; Start comms
 ;init serial port1 (TRISC6/7)
-	movlw 	b'00100100'			; BRGH=1, SYNC=0
-	movwf 	TXSTA1
-	movlw 	b'10010000'
-	movwf 	RCSTA1
+	movlw	b'00100100'					; BRGH=1, SYNC=0
+	movwf	TXSTA1
+	movlw	b'10010000'
+	movwf	RCSTA1
 	return
 
+
 	global	disable_rs232
 disable_rs232:
 	clrf	RCSTA1
-	clrf	TXSTA1					; UART disable
-    bcf     PORTC,6                 ; TX hard to GND
-    bsf     PORTE,0                 ; Stop comms
+	clrf	TXSTA1						; UART disable
+	bcf		PORTC,6						; TX hard to GND
+	bsf		PORTE,0						; Stop comms
 	return
 
-    
+
 	global	rs232_wait_tx
 rs232_wait_tx:
-	btfss	TXSTA1,TRMT			; RS232 Busy?
-	bra		rs232_wait_tx		; yes, wait...
+	btfss	TXSTA1,TRMT					; RS232 Busy?
+	bra		rs232_wait_tx				; yes, wait...
+
+	btfss	ble_available				; ble available?
+	return								; No, done.
+
+	btfsc	NRTS						; Wait for Bluetooth module
+	bra		rs232_wait_tx				; yes, wait...
+	return								; Done.
 
-    btfss  ble_available        ; ble available?
-    return                      ; No, done.
-  
-    btfsc   NRTS                ; Wait for Bluetooth module
-    bra		rs232_wait_tx       ; yes, wait...
-	return						; Done.
 
-    global  rs232_wait_tx2
+	global	rs232_wait_tx2
 rs232_wait_tx2:
-    banksel TXSTA2
+	banksel	TXSTA2
 rs232_wait_tx2_1:
-	btfss	TXSTA2,TRMT			; RS232 Busy?
-	bra		rs232_wait_tx2_1    ; yes, wait...
-    banksel common
-	return						; Done.
+	btfss	TXSTA2,TRMT					; RS232 Busy?
+	bra		rs232_wait_tx2_1			; yes, wait...
+	banksel	common
+	return								; Done.
 
 	global	rs232_get_byte
 rs232_get_byte:
-	bcf		rs232_recieve_overflow		; clear flag
-    movlw   .10
-	movwf   uart1_temp
-	clrf 	uart2_temp
-    clrf    uart3_temp
+	bcf		rs232_receive_overflow		; clear flag
+	movlw	.10
+	movwf	uart1_temp
+	clrf	uart2_temp
+	clrf	uart3_temp
 rs232_get_byte2:
-	btfsc 	PIR1,RCIF		; data arrived?
-    return                  ; Yes
-	decfsz 	uart3_temp,F
-	bra 	rs232_get_byte2
-	decfsz 	uart2_temp,F
+	btfsc	PIR1,RCIF					; data arrived?
+	return								; Yes
+	decfsz	uart3_temp,F
 	bra		rs232_get_byte2
-	decfsz 	uart1_temp,F
+	decfsz	uart2_temp,F
+	bra		rs232_get_byte2
+	decfsz	uart1_temp,F
 	bra		rs232_get_byte2
-						; timeout occoured (about 400ms)
-	bsf		rs232_recieve_overflow		; set flag
+										; timeout occurred (about 400ms)
+	bsf		rs232_receive_overflow		; set flag
 rs232_get_byte3:
-	bcf		RCSTA1,CREN		; Clear receiver status
+	bcf		RCSTA1,CREN					; Clear receiver status
 	bsf		RCSTA1,CREN
-	return				; and return anyway
+	return								; and return anyway
+
+;=============================================================================
+
+	global	do_logoffset_common_write
+do_logoffset_common_write:
+	; TODO: limit [lo:hi] to 9999 ? may arrive here as >= 10000 because of +10 increment option 
+	; SIMPLER WAY: return without writing to eeprom if hi == 0x27 -> 0x2700 = 9984, this is within 
+	; the save range for a +10 increment, shall do it...
+	; mH
+
+	movff	lo,EEDATA
+	write_int_eeprom 0x0D
+	movff	hi,EEDATA
+	write_int_eeprom 0x0E
+	return
+
+	global	do_logoffset_common_read
+do_logoffset_common_read:
+	clrf	EEADRH
+	read_int_eeprom 0x0D
+	movff	EEDATA,lo
+	read_int_eeprom 0x0E
+	movff	EEDATA,hi						; Existing logbook offset into lo:hi
+	return
+
+
+	global	update_battery_registers
+update_battery_registers:
+	; save battery_gauge:6 into EEPROM 0x07-0x0C
+	clrf	EEADRH
+	movff	battery_gauge+0,EEDATA
+	write_int_eeprom 0x07
+	movff	battery_gauge+1,EEDATA
+	write_int_eeprom 0x08
+	movff	battery_gauge+2,EEDATA
+	write_int_eeprom 0x09
+	movff	battery_gauge+3,EEDATA
+	write_int_eeprom 0x0A
+	movff	battery_gauge+4,EEDATA
+	write_int_eeprom 0x0B
+	movff	battery_gauge+5,EEDATA
+	write_int_eeprom 0x0C
+	movff	battery_type,EEDATA				; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+	write_int_eeprom 0x0F
+	return
+
+
+	global	vault_decodata_into_eeprom
+vault_decodata_into_eeprom:
+	; Vault in EEPROM 512...1023
+	; Write 0xAA at 512 to indicate valid data in vault
+	; Store last time/date
+	; Store 0x700 to 0x780 (pres_tissue_N2 and pres_tissue_He)
+	movlw	HIGH .512						; =2
+	movwf	EEADRH
+	movlw	0xAA
+	movwf	EEDATA
+	write_int_eeprom .0
+	; Store date/time
+	movff	year,EEDATA
+	write_int_eeprom .1
+	movff	month,EEDATA
+	write_int_eeprom .2
+	movff	day,EEDATA
+	write_int_eeprom .3
+	movff	hours,EEDATA
+	write_int_eeprom .4
+	movff	mins,EEDATA
+	write_int_eeprom .5
+	movff	secs,EEDATA
+	write_int_eeprom .6
+
+	movff	int_O_CNS_fraction+0,EEDATA
+	write_int_eeprom .7
+	movff	int_O_CNS_fraction+1,EEDATA
+	write_int_eeprom .8
+	movff	int_O_desaturation_time+0,EEDATA
+	write_int_eeprom .9
+	movff	int_O_desaturation_time+1,EEDATA
+	write_int_eeprom .10
+	movff	surface_interval+0,EEDATA
+	write_int_eeprom .11
+	movff	surface_interval+1,EEDATA
+	write_int_eeprom .12
+	movff	int_O_gradient_factor+0,EEDATA	; value limited to 255, only lower byte in use for value
+	write_int_eeprom .13
+	movff	int_O_nofly_time+0,EEDATA
+	write_int_eeprom .14
+	movff	int_O_nofly_time+1,EEDATA
+	write_int_eeprom .15
 
-	END
\ No newline at end of file
+	; Tissue data from 16 to 144
+	movlw	.16
+	movwf	EEADR
+	movlw	.128
+	movwf	lo
+	lfsr	FSR1,0x700						; pres_tissue_N2+0, 32*4Byte Float = 128Bytes
+vault_decodata_into_eeprom2:
+	movff	POSTINC1,EEDATA
+	call	write_eeprom					; EEDATA into EEPROM@EEADR
+	incf	EEADR,F
+	decfsz	lo,F							; All done?
+	bra		vault_decodata_into_eeprom2		; No
+	clrf	EEADRH
+	return
+
+	global	restore_decodata_from_eeprom
+restore_decodata_from_eeprom:
+	movlw	LOW  .512						; =0
+	movwf	EEADR
+	movlw	HIGH .512						; =2
+	movwf	EEADRH
+
+	; Restore date/time
+	read_int_eeprom .1
+	movff	EEDATA,year
+	read_int_eeprom .2
+	movff	EEDATA,month
+	read_int_eeprom .3
+	movff	EEDATA,day
+	read_int_eeprom .4
+	movff	EEDATA,hours
+	read_int_eeprom .5
+	movff	EEDATA,mins
+	read_int_eeprom .6
+	movff	EEDATA,secs
+	call	rtc_set_rtc
+
+	read_int_eeprom .7
+	movff	EEDATA,int_O_CNS_fraction+0
+	read_int_eeprom .8
+	movff	EEDATA,int_O_CNS_fraction+1
+	read_int_eeprom .9
+	movff	EEDATA,int_O_desaturation_time+0
+	read_int_eeprom .10
+	movff	EEDATA,int_O_desaturation_time+1
+	read_int_eeprom .11
+	movff	EEDATA,surface_interval+0
+	read_int_eeprom .12
+	movff	EEDATA,surface_interval+1
+	read_int_eeprom .13
+	movff	EEDATA,int_O_gradient_factor+0
+	read_int_eeprom .14
+	movff	EEDATA,int_O_nofly_time+0
+	read_int_eeprom .15
+	movff	EEDATA,int_O_nofly_time+1
+
+	; Tissue data from 16 to 144
+	movlw	.16
+	movwf	EEADR
+	movlw	.128
+	movwf	lo
+	lfsr	FSR1,0x700						; pres_tissue_N2+0, 32*4Byte Float = 128Bytes
+restore_decodata_from_eeprom2:
+	call	read_eeprom						; EEPROM@EEADR into EEDATA
+	movff	EEDATA,POSTINC1
+	incf	EEADR,F
+	decfsz	lo,F							; All done?
+	bra		restore_decodata_from_eeprom2	; No
+	clrf	EEADRH
+	return
+
+
+	global	reset_battery_internal_only
+reset_battery_internal_only:
+	clrf	EEADRH
+	clrf	EEDATA							; Delete to zero
+	write_int_eeprom 0x07
+	write_int_eeprom 0x08
+	write_int_eeprom 0x09
+	write_int_eeprom 0x0A
+	write_int_eeprom 0x0B
+	write_int_eeprom 0x0C
+	banksel	battery_gauge+0
+	clrf	battery_gauge+0
+	clrf	battery_gauge+1
+	clrf	battery_gauge+2
+	clrf	battery_gauge+3
+	clrf	battery_gauge+4
+	clrf	battery_gauge+5
+	banksel	common
+	movlw	.100
+	movwf	batt_percent
+	return
+
+
+	global	eeprom_reset_logbook_pointers
+eeprom_reset_logbook_pointers:
+	clrf	EEADRH							; Make sure to select EEPROM bank 0
+	clrf	EEDATA
+	write_int_eeprom .4
+	write_int_eeprom .5
+	write_int_eeprom .6
+	write_int_eeprom .2						; Also, delete total dive counter
+	write_int_eeprom .3
+	write_int_eeprom .16
+	write_int_eeprom .17					; And the backup counter, too
+	return
+
+	END
--- a/src/eeprom_rs232.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/eeprom_rs232.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File eeprom_rs232.inc
+;   File eeprom_rs232.inc												V2.98
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -8,24 +8,34 @@
 ; HISTORY
 ;  2011-08-03 : [mH] moving from OSTC code
 
+
 write_int_eeprom	macro	eeprom_address
 	movlw	eeprom_address
 	call	write_int_eeprom_1
 	endm
 
-read_int_eeprom	macro	eeprom_address
+read_int_eeprom		macro	eeprom_address
 	movlw	eeprom_address
 	call	read_int_eeprom_1
 	endm
 
+
+	extern	enable_rs232
+	extern	disable_rs232
+	extern	rs232_get_byte
+	extern	rs232_wait_tx
+	extern	rs232_wait_tx2
+	extern	enable_ir_s8
+	extern	disable_ir_s8
+
 	extern	write_int_eeprom_1
 	extern	read_int_eeprom_1
 	extern	read_eeprom
 	extern	write_eeprom
-	extern	enable_rs232
-	extern	disable_rs232
-	extern	rs232_get_byte
-	extern	rs232_wait_tx
-    extern	rs232_wait_tx2
-    extern  enable_ir_s8
-    extern  disable_ir_s8
+	extern	update_battery_registers
+	extern	vault_decodata_into_eeprom
+	extern	restore_decodata_from_eeprom
+	extern	do_logoffset_common_write
+	extern	do_logoffset_common_read
+	extern	reset_battery_internal_only
+	extern	eeprom_reset_logbook_pointers
--- a/src/external_flash.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/external_flash.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File external_flash.asm
+;   File external_flash.asm											## V2.98
 ;
 ;   External flash
 ;
@@ -12,333 +12,335 @@
 	#include "hwos.inc"
 	#include "wait.inc"
 
-basic    CODE
+basic	CODE
 ;=============================================================================
 
-	global		incf_ext_flash_address_p1
+	global	incf_ext_flash_address_p1
 incf_ext_flash_address_p1:					; Increase by one
 	movlw		.1
 
 	global	incf_ext_flash_address0
 incf_ext_flash_address0:
-    addwf		ext_flash_address+0,F      ; increase address
-    movlw		d'0'
-    addwfc		ext_flash_address+1,F
-    addwfc		ext_flash_address+2,F
+	addwf	ext_flash_address+0,F			; increase address
+	movlw	d'0'
+	addwfc	ext_flash_address+1,F
+	addwfc	ext_flash_address+2,F
 
-	movlw		0x40
-	cpfseq		ext_flash_address+2			; at address 40FFFF?
+	movlw	0x40
+	cpfseq	ext_flash_address+2				; at address 40FFFF?
 	return									; No, return
-;	clrf		ext_flash_address+0
-;	clrf		ext_flash_address+1
-	clrf		ext_flash_address+2			; Yes, rollover to 0x000000
+;	clrf	ext_flash_address+0
+;	clrf	ext_flash_address+1
+	clrf	ext_flash_address+2				; Yes, rollover to 0x000000
 	return
 
-	global		incf_ext_flash_address0_p1_0x20
+
+	global	incf_ext_flash_address0_p1_0x20
 incf_ext_flash_address0_p1_0x20:			; Increase by one
-	movlw		.1
+	movlw	.1
 
-	global		incf_ext_flash_address0_0x20
-incf_ext_flash_address0_0x20:		 	; with roll-over at 0x200000 to 0x000000
-    addwf		ext_flash_address+0,F      ; increase address
-    movlw		d'0'
-    addwfc		ext_flash_address+1,F
-    addwfc		ext_flash_address+2,F
+	global	incf_ext_flash_address0_0x20
+incf_ext_flash_address0_0x20:				; with roll-over at 0x200000 to 0x000000
+	addwf	ext_flash_address+0,F			; increase address
+	movlw	d'0'
+	addwfc	ext_flash_address+1,F
+	addwfc	ext_flash_address+2,F
+	movlw	0x20
+	cpfseq	ext_flash_address+2				; at address 0x200000?
+	return									; No, return
+;	clrf	ext_flash_address+0
+;	clrf	ext_flash_address+1
+	clrf	ext_flash_address+2				; Yes, rollover to 0x000000
+	return
 
-	movlw		0x20
-	cpfseq		ext_flash_address+2			; at address 0x200000?
-	return									; No, return
-;	clrf		ext_flash_address+0
-;	clrf		ext_flash_address+1
-	clrf		ext_flash_address+2			; Yes, rollover to 0x000000
-	return
 
 	global	decf_ext_flash_address0
 decf_ext_flash_address0:
-    subwf		ext_flash_address+0,F      ; decrease address: do a 16-8bits substract.
-    movlw		d'0'
-    subwfb		ext_flash_address+1,F
-    movlw		d'0'
-    subwfb		ext_flash_address+2,F
-
-	btfss		ext_flash_address+2,7		; Rollover to 0xFFFFFF?
+	subwf	ext_flash_address+0,F			; decrease address: do a 16-8bits subtract
+	movlw	d'0'
+	subwfb	ext_flash_address+1,F
+	movlw	d'0'
+	subwfb	ext_flash_address+2,F
+	btfss	ext_flash_address+2,7			; Rollover to 0xFFFFFF?
 	return									; No, return
-	clrf		ext_flash_address+2			; Set to 0x00FFFFF
-	setf		ext_flash_address+1
-	setf		ext_flash_address+0
+	clrf	ext_flash_address+2				; Set to 0x00FFFFF
+	setf	ext_flash_address+1
+	setf	ext_flash_address+0
 	return
 
-	global	ext_flash_byte_read_plus	; Return data read in WREG and SSP2BUF and 
-ext_flash_byte_read_plus:				; increase address after read
+
+	global	ext_flash_byte_read_plus		; Return data read in WREG and SSP2BUF and 
+ext_flash_byte_read_plus:					; increase address after read
 	rcall	ext_flash_byte_read
-	movwf	temp1						; store received data
-	bra		incf_ext_flash_address_p1	; +1 and return
+	movwf	ext_flash_rw					; store received data
+	bra		incf_ext_flash_address_p1		; +1 and return
 
-	global	ext_flash_byte_read_plus_0x20; Return data read in WREG and SSP2BUF and 
-ext_flash_byte_read_plus_0x20:			; increase address after read with banking at 0x200000
+
+	global	ext_flash_byte_read_plus_0x20	; Return data read in WREG and SSP2BUF and 
+ext_flash_byte_read_plus_0x20:				; increase address after read with banking at 0x200000
 	rcall	ext_flash_byte_read
-	movwf	temp1						; store received data
-	bra		incf_ext_flash_address0_p1_0x20 ;+1 and return
+	movwf	ext_flash_rw					; store received data
+	bra		incf_ext_flash_address0_p1_0x20	;+1 and return
 
 
-	global	ext_flash_byte_read		; Return data read in WREG
+	global	ext_flash_byte_read				; Return data read in WREG
 ext_flash_byte_read:
-	movlw		0x03				; Read command
-	rcall		write_spi
-    rcall       ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI
-	rcall		write_spi			; Dummy write to read data into WREG
-	bsf			flash_ncs			; CS=1
-	movwf		temp1
-	return							; Return data read in WREG and temp1
+	movlw	0x03							; Read command
+	rcall	write_spi
+	rcall	ext_flash_write_address			; Write 24bit address ext_flash_address:3 via SPI
+	rcall	write_spi						; Dummy write to read data into WREG
+	bsf		flash_ncs						; CS=1
+	movwf	ext_flash_rw
+	return									; Return data read in WREG and ext_flash_rw
+
 
-ext_flash_write_address: ; Write 24bit address ext_flash_address:3 via SPI
-	movf		ext_flash_address+2,W	; 24Bit Address
-	rcall		write_spi
-	movf		ext_flash_address+1,W
-	rcall		write_spi
-	movf		ext_flash_address+0,W
-	bra 		write_spi               ; And return....
+ext_flash_write_address:					; Write 24bit address ext_flash_address:3 via SPI
+	movf	ext_flash_address+2,W			; 24Bit Address
+	rcall	write_spi
+	movf	ext_flash_address+1,W
+	rcall	write_spi
+	movf	ext_flash_address+0,W
+	bra 	write_spi						; And return....
+
 
 	global	ext_flash_read_block_start		; Return data read in WREG
 ext_flash_read_block_start:
-	movlw		0x03				; Read command
-	rcall		write_spi
-    rcall       ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI
-	rcall		write_spi			; Dummy write to read data into WREG
-	return							; Return data read in WREG
+	movlw	0x03							; Read command
+	rcall	write_spi
+	rcall	ext_flash_write_address			; Write 24bit address ext_flash_address:3 via SPI
+	rcall	write_spi						; Dummy write to read data into WREG
+	return									; Return data read in WREG
 
-	global	ext_flash_read_block		; Return data read in WREG
+
+	global	ext_flash_read_block			; Return data read in WREG
 ext_flash_read_block:
-	rcall		incf_ext_flash_address_p1	; Increase address +1
-	bra			write_spi1			; Dummy write to read data into WREG and return
+	rcall	incf_ext_flash_address_p1		; Increase address +1
+	bra		write_spi1						; Dummy write to read data into WREG and return
+
 
-	global	ext_flash_read_block_stop	; Return data read in WREG
+	global	ext_flash_read_block_stop		; Return data read in WREG
 ext_flash_read_block_stop:
-	bsf			flash_ncs			; CS=1
-	return							; NO data in WREG
+	bsf		flash_ncs						; CS=1
+	return									; NO data in WREG
+
 
 	global	write_byte_ext_flash_plus_header
-write_byte_ext_flash_plus_header:		; Write from WREG and increase address after write
-	movwf		temp1					; store data
+write_byte_ext_flash_plus_header:			; Write from WREG and increase address after write
+	movwf	ext_flash_rw					; store data
 	; test if write is done at first byte of 4kB block
 	; if yes -> delete 4kB block first
-	tstfsz		ext_flash_address+0			; at 0x00?
-	bra			write_byte_ext_flash_plus_h1	; No, normal Write
+	tstfsz	ext_flash_address+0				; at 0x00?
+	bra		write_byte_ext_flash_plus_h1	; No, normal Write
+	movf	ext_flash_address+1,W
+	andlw	0x0F							; Mask lower nibble
+	tstfsz	WREG							; at 0x.0?
+	bra		write_byte_ext_flash_plus_h1	; No, normal Write
+	; At beginning of 4kB block -> erase first!
+	rcall	ext_flash_erase4kB				; Erases 4kB sector @ext_flash_address:3
+write_byte_ext_flash_plus_h1:
+	movf	ext_flash_rw,W
+	rcall	ext_flash_byte_write			; Write the byte
+	bra		incf_ext_flash_address_p1		; +1 and return
 
-	movf		ext_flash_address+1,W
-	andlw		0x0F						; Mask lower nibble
-	tstfsz		WREG						; at 0x.0?
-	bra			write_byte_ext_flash_plus_h1; No, normal Write
-	
-	; At beginning of 4kB block -> rease first!
-	rcall		ext_flash_erase4kB		; Erases 4kB sector @ext_flash_address:3
-write_byte_ext_flash_plus_h1:
-	movf		temp1,W
-	rcall		ext_flash_byte_write	; Write the byte
-	bra			incf_ext_flash_address_p1	; +1 and return
 
-    global  write_byte_ext_flash_plus_nocnt ; No increase of ext_flash_dive_counter:3
+	global	write_byte_ext_flash_plus_nocnt	; No increase of ext_flash_dive_counter:3
 write_byte_ext_flash_plus_nocnt:
-    movwf		temp1                       ; store data
-    bra         write_byte_ext_flash_plus2
+	movwf	ext_flash_rw					; store data
+	bra		write_byte_ext_flash_plus2
+
 
-    global  write_byte_ext_flash_plus_nodel ; Does NOT delete 4kB Page when required
-write_byte_ext_flash_plus_nodel:            ; Write from WREG and increase address after write with banking at 0x200000
-    movwf		temp1                       ; store data
-    bra         write_byte_ext_flash_plus1  ; Ignore possible begin of 4kB page, there have been written 0xFF already
+	global	write_byte_ext_flash_plus_nodel	; Does NOT delete 4kB Page when required
+write_byte_ext_flash_plus_nodel:			; Write from WREG and increase address after write with banking at 0x200000
+	movwf	ext_flash_rw					; store data
+	bra		write_byte_ext_flash_plus1		; Ignore possible begin of 4kB page, there have been written 0xFF already
 
-	global	write_byte_ext_flash_plus	; Write from WREG and increase address after write with banking at 0x200000
+	global	write_byte_ext_flash_plus		; Write from WREG and increase address after write with banking at 0x200000
 write_byte_ext_flash_plus:
-	movwf		temp1					; store data
-    
-    ; First, increase dive length counter
-    incf        ext_flash_dive_counter+0,F
-    movlw       .0
-    addwfc      ext_flash_dive_counter+1,F
-    addwfc      ext_flash_dive_counter+2,F  ; 24bit++
+	movwf	ext_flash_rw					; store data
+	; First, increase dive length counter
+	incf	ext_flash_dive_counter+0,F
+	movlw	.0
+	addwfc	ext_flash_dive_counter+1,F
+	addwfc	ext_flash_dive_counter+2,F		; 24bit++
 
 write_byte_ext_flash_plus2:
 	; Now test if write is done at first byte of 4kB block
 	; if yes -> delete 4kB block first
-	tstfsz		ext_flash_address+0			; at 0x00?
-	bra			write_byte_ext_flash_plus1	; No, normal Write
+	tstfsz	ext_flash_address+0				; at 0x00?
+	bra		write_byte_ext_flash_plus1		; No, normal Write
+	movf	ext_flash_address+1,W
+	andlw	0x0F							; Mask lower nibble
+	tstfsz	WREG							; at 0x.0?
+	bra		write_byte_ext_flash_plus1		; No, normal Write
+	; At beginning of 4kB block -> erase first!
+	rcall	ext_flash_erase4kB				; Erases 4kB sector @ext_flash_address:3
+write_byte_ext_flash_plus1:
+	movf	ext_flash_rw,W
+	rcall	ext_flash_byte_write			; Write the byte
+	bra		incf_ext_flash_address0_p1_0x20	; +1 and roll over at 0x200000 to 0x000000	and return
 
-	movf		ext_flash_address+1,W
-	andlw		0x0F						; Mask lower nibble
-	tstfsz		WREG						; at 0x.0?
-	bra			write_byte_ext_flash_plus1	; No, normal Write
-	
-	; At beginning of 4kB block -> erase first!
-	rcall		ext_flash_erase4kB		; Erases 4kB sector @ext_flash_address:3
-write_byte_ext_flash_plus1:
-	movf		temp1,W
-	rcall		ext_flash_byte_write	; Write the byte
-	bra			incf_ext_flash_address0_p1_0x20		 ; +1 and roll over at 0x200000 to 0x000000	and return
 
-	global	ext_flash_byte_write	; Write from WREG
+	global	ext_flash_byte_write			; Write from WREG
 ext_flash_byte_write:
-	movwf		temp1				; store data byte
-	bsf			flash_ncs			; CS=1
-	movlw		0x06				; WREN command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-	movlw		0x02				; Write (PP, Page-Program) command
-	rcall		write_spi
-	rcall       ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI
-	movf		temp1,W				; load data byte
-	rcall		write_spi			; write one byte of data!
-	bra	ext_flash_wait_write	    ; And return...
+	movwf	ext_flash_rw					; store data byte
+	bsf		flash_ncs						; CS=1
+	movlw	0x06							; WREN command
+	rcall	write_spi
+	bsf		flash_ncs						; CS=1
+	movlw	0x02							; Write (PP, Page-Program) command
+	rcall	write_spi
+	rcall	ext_flash_write_address			; Write 24bit address ext_flash_address:3 via SPI
+	movf	ext_flash_rw,W					; load data byte
+	rcall	write_spi						; write one byte of data!
+	bra		ext_flash_wait_write			; And return...
 
-	global	ext_flash_byte_write_comms  ; without wait, ~86us fixed delay due to 115200 Bauds
+
+	global	ext_flash_byte_write_comms		; without wait, ~86us fixed delay due to 115200 Bauds
 ext_flash_byte_write_comms:
-	movwf		temp1				; store data byte
-	bsf			flash_ncs			; CS=1
-	movlw		0x06				; WREN command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-	movlw		0x02				; Write (PP, Page-Program) command
-	rcall		write_spi
-	rcall       ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI
-	movf		temp1,W				; load data byte
-	rcall		write_spi			; write one byte of data!
-	bsf			flash_ncs			; CS=1
+	movwf	ext_flash_rw					; store data byte
+	bsf		flash_ncs						; CS=1
+	movlw	0x06							; WREN command
+	rcall	write_spi
+	bsf		flash_ncs						; CS=1
+	movlw	0x02							; Write (PP, Page-Program) command
+	rcall	write_spi
+	rcall	ext_flash_write_address			; Write 24bit address ext_flash_address:3 via SPI
+	movf	ext_flash_rw,W					; load data byte
+	rcall	write_spi						; write one byte of data!
+	bsf		flash_ncs						; CS=1
 	return
-	
-	global	ext_flash_disable_protection		; Disable write protection
-ext_flash_disable_protection:
-    ; unlock old memory
-	bsf			flash_ncs			; CS=1
-	movlw		0x50				; EWSR command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
+
 
-	movlw		0x01				; WRSR command
-	rcall		write_spi
-	movlw		b'00000000'			; New status
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-
-    ; unlock new memory
-	movlw		0x06				; WREN command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-	movlw		0x98				; ULBPR command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-	
-	movlw		0x06				; WREN command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-	movlw		0x42				; WBPR command
-	rcall		write_spi
-	movlw       .18
-	movwf       temp2
+	global	ext_flash_disable_protection	; Disable write protection
+ext_flash_disable_protection:
+	; unlock old memory
+	bsf		flash_ncs						; CS=1
+	movlw	0x50							; EWSR command
+	rcall	write_spi
+	bsf		flash_ncs						; CS=1
+	movlw	0x01							; WRSR command
+	rcall	write_spi
+	movlw	b'00000000'						; New status
+	rcall	write_spi
+	bsf		flash_ncs						; CS=1
+	; unlock new memory
+	movlw	0x06							; WREN command
+	rcall	write_spi
+	bsf		flash_ncs						; CS=1
+	movlw	0x98							; ULBPR command
+	rcall	write_spi
+	bsf		flash_ncs						; CS=1
+	movlw	0x06							; WREN command
+	rcall	write_spi
+	bsf		flash_ncs						; CS=1
+	movlw	0x42							; WBPR command
+	rcall	write_spi
+	movlw	.18
+	movwf	lo
 ext_flash_disable_protection2:
-	movlw       0x00
-	rcall		write_spi
-        decfsz      temp2,F             ; 18 bytes with 0x00
-	bra         ext_flash_disable_protection2
-        bsf			flash_ncs			; CS=1
+	movlw	0x00
+	rcall	write_spi
+	decfsz	lo,F							; 18 bytes with 0x00
+	bra		ext_flash_disable_protection2
+	bsf		flash_ncs						; CS=1
 	return
 
 	global	ext_flash_enable_protection
 ext_flash_enable_protection:
-    ; lock old memory
-	bsf			flash_ncs			; CS=1
-	movlw		0x50				; EWSR command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-
-	movlw		0x01				; WRSR command
-	rcall		write_spi
-	movlw		b'00011100'			; New status (Write protect on)
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-
-    ; lock new memory
-;    	movlw		0x06				; WREN command
-;	rcall		write_spi
-;	bsf			flash_ncs			; CS=1
-;	movlw		0x8D				; LBPR command
-;	rcall		write_spi
-;	bsf			flash_ncs			; CS=1
-	movlw		0x06				; WREN command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-	movlw		0x42				; WBPR command
-	rcall		write_spi
-    movlw       .18
-    movwf       temp2
+	; lock old memory
+	bsf		flash_ncs					; CS=1
+	movlw	0x50						; EWSR command
+	rcall	write_spi
+	bsf		flash_ncs					; CS=1
+	movlw	0x01						; WRSR command
+	rcall	write_spi
+	movlw	b'00011100'					; New status (Write protect on)
+	rcall	write_spi
+	bsf		flash_ncs					; CS=1
+	; lock new memory
+;	movlw	0x06						; WREN command
+;	rcall	write_spi
+;	bsf		flash_ncs					; CS=1
+;	movlw	0x8D						; LBPR command
+;	rcall	write_spi
+;	bsf		flash_ncs					; CS=1
+	movlw	0x06						; WREN command
+	rcall	write_spi
+	bsf		flash_ncs					; CS=1
+	movlw	0x42						; WBPR command
+	rcall	write_spi
+	movlw	.18
+	movwf	lo
 ext_flash_enable_protection2:
-    movlw       0xFF
-    rcall		write_spi
-    decfsz      temp2,F             ; 18 bytes with 0xFF
-    bra         ext_flash_enable_protection2
-    bsf			flash_ncs			; CS=1
+	movlw	0xFF
+	rcall	write_spi
+	decfsz	lo,F						; 18 bytes with 0xFF
+	bra		ext_flash_enable_protection2
+	bsf		flash_ncs					; CS=1
 	return
 
 
-	global	ext_flash_erase4kB		; Erases 4kB sector
+	global	ext_flash_erase4kB			; Erases 4kB sector
 ext_flash_erase4kB:
-	bsf			flash_ncs			; CS=1
-	movlw		0x06				; WREN command
-	rcall		write_spi
-	bsf			flash_ncs			; CS=1
-	movlw		0x20				; Sector erase command
-	rcall		write_spi
-    rcall       ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI
-;	bra			ext_flash_wait_write	; Wait for write... and return
+	bsf		flash_ncs					; CS=1
+	movlw	0x06						; WREN command
+	rcall	write_spi
+	bsf		flash_ncs					; CS=1
+	movlw	0x20						; Sector erase command
+	rcall	write_spi
+	rcall	ext_flash_write_address		; Write 24bit address ext_flash_address:3 via SPI
+;	bra		ext_flash_wait_write		; Wait for write... and return
 ext_flash_wait_write:
-	bsf			flash_ncs			; CS=1
-;	WAITMS		d'1'				; TBE/TSE=25ms...
-	movlw		0x05				; RDSR command
-	rcall		write_spi			; Read status
-	rcall		write_spi			; Read status into WREG
-	bsf			flash_ncs			; CS=1
-	btfsc		SSP2BUF,0			; Write operation in process?
-	bra			ext_flash_wait_write	; Yes, wait more..
+	bsf		flash_ncs					; CS=1
+;	WAITMS	d'1'						; TBE/TSE=25ms...
+	movlw	0x05						; RDSR command
+	rcall	write_spi					; Read status
+	rcall	write_spi					; Read status into WREG
+	bsf		flash_ncs					; CS=1
+	btfsc	SSP2BUF,0					; Write operation in process?
+	bra		ext_flash_wait_write		; Yes, wait more..
 	return
 
-	global	ext_flash_erase_logbook	; erases logbook memory (000000h -> 2FFFFFh -> 3MByte -> 3145728 Bytes)
+
+	global	ext_flash_erase_logbook		; erases logbook memory (000000h -> 2FFFFFh -> 3MByte -> 3145728 Bytes)
 ext_flash_erase_logbook:
-	bsf			flash_ncs			; CS=1
-	clrf		ext_flash_address+0
-	clrf		ext_flash_address+1
-	clrf		ext_flash_address+2
+	bsf		flash_ncs					; CS=1
+	clrf	ext_flash_address+0
+	clrf	ext_flash_address+1
+	clrf	ext_flash_address+2
 
-	setf		temp1				; 256*12kB=3145728 Bytes
+	setf	ext_flash_rw				; 256*12kB=3145728 Bytes
 ext_flash_erase_logbook_loop:
-    rcall       ext_flash_erase4kB  ; 4kB
-    rcall       ext_flash_add_4kB   ; Increase ext_flash_address:3 by 4kB
-    rcall       ext_flash_erase4kB  ; 4kB
-    rcall       ext_flash_add_4kB   ; Increase ext_flash_address:3 by 4kB
-    rcall       ext_flash_erase4kB  ; 4kB
-    rcall       ext_flash_add_4kB   ; Increase ext_flash_address:3 by 4kB
-	decfsz		temp1,F
-	bra			ext_flash_erase_logbook_loop
+	rcall	ext_flash_erase4kB			; 4kB
+	rcall	ext_flash_add_4kB			; Increase ext_flash_address:3 by 4kB
+	rcall	ext_flash_erase4kB			; 4kB
+	rcall	ext_flash_add_4kB			; Increase ext_flash_address:3 by 4kB
+	rcall	ext_flash_erase4kB			; 4kB
+	rcall	ext_flash_add_4kB			; Increase ext_flash_address:3 by 4kB
+	decfsz	ext_flash_rw,F
+	bra		ext_flash_erase_logbook_loop
 	return
 
 ext_flash_add_4kB:
-    movlw       0x10
-    addwf       ext_flash_address+1,F
-    movlw		d'0'
-    addwfc		ext_flash_address+2,F
-    return
+	movlw	0x10
+	addwf	ext_flash_address+1,F
+	movlw	d'0'
+	addwfc	ext_flash_address+2,F
+	return
 
 
-write_spi:		; With data in WREG...
-	bcf			flash_ncs			; CS
+write_spi:								; With data in WREG...
+	bcf		flash_ncs					; CS
 	global	write_spi1
-write_spi1:		; With data in WREG...
-	bcf			SSP2STAT,WCOL		; Clear flag	
-	movwf		SSP2BUF				; Write to buffer
-	btfsc		SSP2STAT,WCOL		; Was buffer full?
-	bra			write_spi1			; Yes, try again
+write_spi1:								; With data in WREG...
+	bcf		SSP2STAT,WCOL				; Clear flag
+	movwf	SSP2BUF						; Write to buffer
+	btfsc	SSP2STAT,WCOL				; Was buffer full?
+	bra		write_spi1					; Yes, try again
+write_spi2:								; Wait for write command
+	btfss	SSP2STAT, BF				; Buffer full?
+	bra		write_spi2					; No, wait.
+	movf	SSP2BUF,W
+	return								; Returns RX data in WREG and SSP2BUF
 
-write_spi2:	; Wait for write command
-	btfss		SSP2STAT, BF		; Buffer full?
-	bra			write_spi2			; No, wait.
-	movf		SSP2BUF,W			
-	return	; Returns RX data in WREG and SSP2BUF
-
-	END
\ No newline at end of file
+	END
--- a/src/external_flash.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/external_flash.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File external_flash.inc
+;   File external_flash.inc												V2.98
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -9,51 +9,54 @@
 ;  2011-08-12 : [mH] creation
 
 ; Misc
-  extern	incf_ext_flash_address_p1	; +1 for the ext_flash_address:3
- extern ext_flash_disable_protection; Disables write protection
- extern	ext_flash_enable_protection	; Enables write protection
- 
+	extern	incf_ext_flash_address_p1			; +1 for the ext_flash_address:3
+	extern	ext_flash_disable_protection		; Disables write protection
+	extern	ext_flash_enable_protection			; Enables write protection
+
 ; Writes
- extern	write_byte_ext_flash_plus	; Write from WREG and increase address after write with banking at 0x200000
- extern write_byte_ext_flash_plus_nocnt ; No increase of ext_flash_dive_counter:3
- extern write_byte_ext_flash_plus_nodel ; Does NOT delete 4kB Page when required
- extern write_byte_ext_flash_plus_header ; Write from WREG and increase address after write
- extern ext_flash_byte_write		; Writes one byte from WREG @ext_flash_address:3
- extern	ext_flash_byte_write_comms	; without wait, ~86us fixed delay due to 115200 Bauds (Use with caution)
- extern	write_spi1					; Just (dummy)write to read a byte
+	extern	write_byte_ext_flash_plus			; Write from WREG and increase address after write with banking at 0x200000
+	extern	write_byte_ext_flash_plus_nocnt		; No increase of ext_flash_dive_counter:3
+	extern	write_byte_ext_flash_plus_nodel		; Does NOT delete 4kB Page when required
+	extern	write_byte_ext_flash_plus_header	; Write from WREG and increase address after write
+	extern	ext_flash_byte_write				; Writes one byte from WREG @ext_flash_address:3
+	extern	ext_flash_byte_write_comms			; without wait, ~86us fixed delay due to 115200 Bauds (Use with caution)
+	extern	write_spi1							; Just (dummy)write to read a byte
 
-; Delelte
- extern ext_flash_erase_logbook		; erases logbook memory (000000h -> 2FFFFFh -> 3MByte)
- extern ext_flash_erase4kB			; Erases 4kB sector @ext_flash_address:3
- 
+; Delete
+	extern	ext_flash_erase_logbook				; erases logbook memory (000000h -> 2FFFFFh -> 3MByte)
+	extern	ext_flash_erase4kB					; Erases 4kB sector @ext_flash_address:3
+
 ; Reads
- extern ext_flash_read_block_start	; Block read start and reads one byte@ext_flash_address:3 into WREG
- extern ext_flash_read_block		; Read another byte into WREG
- extern ext_flash_read_block_stop	; Stop block read
- extern ext_flash_byte_read			; Reads one byte@ext_flash_address:3 into WREG and temp1 
- extern	ext_flash_byte_read_plus	; Return data read in WREG and temp1 and increase address after read with banking at 0x200000
- extern	ext_flash_byte_read_plus_0x20; Return data read in WREG and temp1
+	extern	ext_flash_read_block_start			; Block read start and reads one byte@ext_flash_address:3 into WREG
+	extern	ext_flash_read_block				; Read another byte into WREG
+	extern	ext_flash_read_block_stop			; Stop block read
+	extern	ext_flash_byte_read					; Reads one byte@ext_flash_address:3 into WREG and ext_flash_rw 
+	extern	ext_flash_byte_read_plus			; Return data read in WREG and ext_flash_rw and increase address after read with banking at 0x200000
+	extern	ext_flash_byte_read_plus_0x20		; Return data read in WREG and ext_flash_rw
+
 
 ; Will decrease ext_flash_address:2 with the 8Bit value "ext_flash_temp1"
 	extern	decf_ext_flash_address0
 decf_ext_flash_address	macro	ext_flash_temp1
-        movlw	ext_flash_temp1
-        call 	decf_ext_flash_address0
-    endm
-
-	extern	incf_ext_flash_address0
-; Will increase ext_flash_address:2 with the 8Bit value "ext_flash_temp1"
-incf_ext_flash_address	macro	ext_flash_temp1	
-    	movlw	ext_flash_temp1                
-    	call 	incf_ext_flash_address0
-	endm
-
-; With banking at 0x200000
-	extern	incf_ext_flash_address0_0x20
-; Will increase ext_flash_address:2 with the 8Bit value "ext_flash_temp1"
-incf_ext_flash_address_0x20	macro	ext_flash_temp1	
-    	movlw	ext_flash_temp1                
-    	call 	incf_ext_flash_address0_0x20
+		movlw	ext_flash_temp1
+		call	decf_ext_flash_address0
 	endm
 
 
+; Will increase ext_flash_address:2 with the 8Bit value "ext_flash_temp1"
+	extern	incf_ext_flash_address0
+incf_ext_flash_address	macro	ext_flash_temp1
+		movlw	ext_flash_temp1
+		call	incf_ext_flash_address0
+	endm
+
+
+; With banking at 0x200000
+; Will increase ext_flash_address:2 with the 8Bit value "ext_flash_temp1"
+	extern	incf_ext_flash_address0_0x20
+incf_ext_flash_address_0x20	macro	ext_flash_temp1
+		movlw	ext_flash_temp1
+		call	incf_ext_flash_address0_0x20
+	endm
+
+
--- a/src/gaslist.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/gaslist.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File gaslist.asm												## V2.95
+;   File gaslist.asm												## V2.98
 ;
 ;   Managing OSTC gas list
 ;
@@ -9,738 +9,718 @@
 ; HISTORY
 ;   2011-08-11 : [jDG] Creation.
 
-#include    "hwos.inc"                  ; Mandatory header
-#include    "convert.inc"
-#include    "math.inc"                  ; div16x16 for MOD calculations
-#include    "strings.inc"
-#include    "tft.inc"
-#include    "tft_outputs.inc"
-
-#include    "shared_definitions.h"
+#include "hwos.inc"						; Mandatory header
+#include "convert.inc"
+#include "math.inc"						; div16x16 for MOD calculations
+#include "strings.inc"
+#include "tft.inc"
+#include "tft_outputs.inc"
+#include "shared_definitions.h"
 
-        CBLOCK  tmp+0x40                ; Keep space for menu processor
-            gaslist_gas     ; Check ram position in menu_tree.asm, too!
-            gaslist_O2
-            gaslist_He
-            gaslist_depth
-            gaslist_Type
-		; Reserved to tmp+0x5F
-        ENDC
+	extern	convert_mbar_to_feet
+	extern	customview_show_mix
+	extern	tGasDisabled
+	extern	tDilDisabled
+	extern	tbar
 
-    extern	convert_mbar_to_feet
+gui		CODE
 
-gui     CODE
 ;=============================================================================
 ; Append gas description to current string.
-; Input: PRODL : gas number (0..4)
-;        FSR2 : Current string position.
+; Input:  PRODL : gas number (0..4)
+;         FSR2  : Current string position.
 ; Output: Text appended into buffer pointed by FSR2.
-        extern  customview_show_mix
-        global  gaslist_strcat_gas
+
+	global	gaslist_strcat_gas
 gaslist_strcat_gas:
-        rcall   gaslist_setgas          ; Sets gaslist_gas (0-4 for OC/Bailout, 5-9 for Diluents)
-        ; Retrieve gas definition:
+	rcall	gaslist_setgas				; Sets gaslist_gas (0-4 for OC/Bailout, 5-9 for Diluents)
+	; Retrieve gas definition:
 gaslist_strcat_gas_0:
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_O2_ratio   ; Read opt_gas_O2_ratio[WREG]
-        movff   PLUSW1,gaslist_O2
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_He_ratio   ; Read opt_gas_He_ratio[WREG]
-        movff   PLUSW1,gaslist_He
-
-        movff   gaslist_O2,lo
-        movff   gaslist_He,hi
-        goto    customview_show_mix     ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2, and RETURN
-
-
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_O2_ratio		; Read opt_gas_O2_ratio[WREG]
+	movff	PLUSW1,lo					; O2 ratio
+	;movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_He_ratio		; Read opt_gas_He_ratio[WREG]
+	movff	PLUSW1,hi					; He ratio
+	goto	customview_show_mix			; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2, and RETURN
 
 ;=============================================================================
 ; Append current mix to current string (For divemode)
 ; Input: FSR2 : Current string position.
 ; Output: Text appended into buffer pointed by FSR2.
-    global  gaslist_strcat_gas6
-gaslist_strcat_gas6:        ; Show current O2/He mix
-        STRCAT_TEXT tGas
-        STRCAT  ": "
-        movff   gas6_O2_ratio,lo
-        movff   gas6_He_ratio,hi
-        goto	customview_show_mix     ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2, and RETURN
+	global	gaslist_strcat_gas6
+gaslist_strcat_gas6:					; Show current O2/He mix
+	STRCAT_TEXT tGas
+	STRCAT	": "
+	movff	gas6_O2_ratio,lo
+	movff	gas6_He_ratio,hi
+	goto	customview_show_mix			; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2, and RETURN
 
-    global  gaslist_show_type
-    extern  tGasDisabled
-    extern  tDilDisabled
+
+	global	gaslist_show_type
 gaslist_show_type:
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_type       ; Read opt_gas_type[WREG]
-        movff   PLUSW1,gaslist_Type
-        STRCAT_TEXT tType
-        lfsr    FSR1,tGasDisabled       ; Base text number
-        btfsc   ccr_diluent_setup       ; In CCR setup?
-        lfsr    FSR1,tDilDisabled       ; Base text number
-        movff   gaslist_Type,WREG       ; 0-3
-        rlncf   WREG                    ; x2
-        addwf   FSR1L,F
-        movlw   .0
-        addwfc  FSR1H,F
-        call    strcat_text
-        return
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_type			; Read opt_gas_type[WREG]
+	movff	PLUSW1,lo					; lo holds gas type
+	STRCAT_TEXT tType
+	lfsr	FSR1,tGasDisabled			; Base text number
+	btfsc	ccr_diluent_setup			; In CCR setup?
+	lfsr	FSR1,tDilDisabled			; Base text number
+	movff	lo,WREG						; 0-3
+	rlncf	WREG						; x2
+	addwf	FSR1L,F
+	movlw	.0
+	addwfc	FSR1H,F
+	call	strcat_text
+	return
 
-    global  gaslist_toggle_type
+	global	gaslist_toggle_type
 gaslist_toggle_type:
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_type       ; Read opt_gas_type[WREG]
-        movff   PLUSW1,gaslist_Type
-        incf    gaslist_Type,F          ; 0-3/0-2
-        btfsc   ccr_diluent_setup       ; In CCR setup?
-        bra     gaslist_toggle_type2    ; Yes
-        btfsc   gaslist_Type,2          ; >3?
-        clrf    gaslist_Type            ; Clear to zero
-        movff   gaslist_Type,PLUSW1     ; Copy back result
-        return
-
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_type			; Read opt_gas_type[WREG]
+	movff	PLUSW1,lo					; lo holds gas type
+	incf	lo,F						; 0-3/0-2
+	btfsc	ccr_diluent_setup			; In CCR setup?
+	bra		gaslist_toggle_type2		; Yes
+	btfsc	lo,2						; >3?
+	clrf	lo							; Clear to zero
+	movff	lo,PLUSW1					; Copy back result
+	return
 gaslist_toggle_type2:
-        movlw   .3
-        cpfslt  gaslist_Type            ; >2?
-        clrf    gaslist_Type            ; Clear to zero
-        movf    gaslist_gas,W
-        movff   gaslist_Type,PLUSW1     ; Copy back result
-        return
+	movlw	.3
+	cpfslt	lo							; >2?
+	clrf	lo							; Clear to zero
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; Copy back result
+	return
 
-        global  gaslist_setSP
+	global	gaslist_setSP
 gaslist_setSP:
-        movff   PRODL,gaslist_gas       ; 0-4
-        return
+	movff	PRODL,gaslist_gas			; 0-4
+	return
 
-        extern  tbar
-        global  gaslist_strcat_setpoint
-        global  gaslist_strcat_setpoint_0
+
+	global	gaslist_strcat_setpoint
+	global	gaslist_strcat_setpoint_0
 gaslist_strcat_setpoint:
-        call    gaslist_setSP
+	call	gaslist_setSP
 gaslist_strcat_setpoint_0:
-        bsf     leftbind
-        btfsc   short_gas_decriptions       ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-        bra     gaslist_strcat_setpoint2    ; Short version
-        STRCAT_TEXT tSP
-        incf    gaslist_gas,W
-        movwf   lo
-        output_8
-        bcf     leftbind
-        PUTC    ":"
-gaslist_strcat_setpoint2:                   ; Short version
-        btfsc   divemode
-        bra     gaslist_strcat_setpoint4    ; no "*" in divemode
-        movf    gaslist_gas,W               ; Number-1 into WREG
-        bnz     gaslist_strcat_setpoint3    ; Not SP1
-        PUTC    "*"
-        bra     gaslist_strcat_setpoint4
+	bsf		leftbind
+	btfsc	short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	bra		gaslist_strcat_setpoint2	; Short version
+	STRCAT_TEXT tSP
+	incf	gaslist_gas,W
+	movwf	lo
+	output_8
+	bcf		leftbind
+	PUTC	":"
+gaslist_strcat_setpoint2:				; Short version
+	btfsc	divemode
+	bra		gaslist_strcat_setpoint4	; no "*" in divemode
+	movf	gaslist_gas,W				; Number-1 into WREG
+	bnz		gaslist_strcat_setpoint3	; Not SP1
+	PUTC	"*"
+	bra		gaslist_strcat_setpoint4
 gaslist_strcat_setpoint3:
-        PUTC    " "
+	PUTC	" "
 gaslist_strcat_setpoint4:
-        movf    gaslist_gas,W
-        lfsr    FSR1,char_I_setpoint_cbar
-        movf    PLUSW1,W
-        movwf   lo
-    	clrf	hi
-        bsf     leftbind
-    	output_16dp d'3'
-        btfsc   divemode
-        bra     gaslist_strcat_setpoint5        ; Skip text in divemode
-        STRCAT_TEXT	 tbar
+	movf	gaslist_gas,W
+	lfsr	FSR1,char_I_setpoint_cbar
+	movf	PLUSW1,W
+	movwf	lo
+	clrf	hi
+	bsf		leftbind
+	output_16dp d'3'
+	btfsc	divemode
+	bra		gaslist_strcat_setpoint5	; Skip text in divemode
+	STRCAT_TEXT tbar
 gaslist_strcat_setpoint5:
-        PUTC    " "
-       ; Read switch depth
-        movf    gaslist_gas,W
-        lfsr    FSR1,char_I_setpoint_change
-        movff   PLUSW1,lo
-	
-        bsf	ccr_diluent_setup		; inhibit output of "----" for depth 
-	call	gaslist_strcat_5 
-	bcf	ccr_diluent_setup 
+	PUTC	" "
+	; Read switch depth
+	movf	gaslist_gas,W
+	lfsr	FSR1,char_I_setpoint_change
+	movff	PLUSW1,lo
+
+	bsf		ccr_diluent_setup			; inhibit output of "----" for depth 
+	call	gaslist_strcat_5
+	bcf		ccr_diluent_setup
 	return
 
 ;----------------------------------------------------------------------------
 ; Append gas description to current string.
-; Input: PRODL : gas number (0..4)
-;        FSR2 : Current string position.
+; Input:  PRODL : gas number (0..4)
+;         FSR2  : Current string position.
 ; Output: Text appended into buffer pointed by FSR2.
 ;
 ; NOTE: used in the menu-tree for the MENU_CALLBACK entry.
 
-gaslist_strcat_gas_better:   ; Yes, check if this is a "better gas"
-        bcf     win_invert
-        decf    better_gas_number,W         ; better_gas_number-1 -> WREG
-        btfsc   ccr_diluent_setup           ; in CCR menus?
-        addlw   .5                          ; Yes, offset to gases 5-9
-        cpfseq  gaslist_gas                 ; 0-4 for OC/Bailout, 5-9 for Diluents
-        return
-        call    TFT_attention_color         ; show in yellow
-        bsf     win_invert                  ; And invert
-        return
-
-        global  gaslist_strcat_gas_mod
-gaslist_strcat_gas_mod:
-        rcall   gaslist_setgas          ; Sets gaslist_gas (0-4 for OC/Bailout, 5-9 for Diluents)
-
-        global  gaslist_gastitle
-gaslist_gastitle:
-        btfsc   short_gas_decriptions       ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-        bra     gaslist_gastitle2           ; Short version
-        STRCAT_TEXT tGas
-        incf    gaslist_gas,W
-        movwf   lo
-        bsf     leftbind
-        output_8
-        bcf     leftbind
-        PUTC    ":"
+gaslist_strcat_gas_better:				; Yes, check if this is a "better gas"
+	bcf		win_invert
+	movff	better_gas_number,WREG		; get better gas number into WREG
+	decf	WREG,W						; better_gas_number = better_gas_number -1
+	btfsc	ccr_diluent_setup			; in CCR menus?
+	addlw	.5							; Yes, offset to gases 5-9
+	cpfseq	gaslist_gas					; 0-4 for OC/Bailout, 5-9 for Diluents
+	return
+	call	TFT_attention_color			; show in yellow
+	bsf	win_invert						; And invert
+	return
 
-gaslist_gastitle2:                          ; Short version
-        lfsr    FSR1,opt_gas_type
-        btfsc   divemode
-        bra     gaslist_gastitle3           ; no "*" in divemode
-        movf    gaslist_gas,W
-        decf    PLUSW1,W                    ; Type-1 into WREG
-        bnz     gaslist_gastitle1           ; Not "First"
-        PUTC    "*"
-        bra     gaslist_gastitle3
-gaslist_gastitle1:
-        PUTC    " "
-gaslist_gastitle3:                          ; Short version
-        call    TFT_standard_color
-
-        btfsc   divemode                    ; In divemode?
-        rcall   gaslist_strcat_gas_better   ; Yes, check if this is a "better gas"
-
-        movf    gaslist_gas,W           ; (0-4 for OC/Bailout, 5-9 for Diluents)
-        movf    PLUSW1,W
-        bnz     gaslist_strcat_3
-        call    TFT_disabled_color
-	bra	gaslist_strcat_4	; NEW ; No MOD-check and red color for disabled gases
-gaslist_strcat_3:
-        rcall   gaslist_strcat_gas_0
-	PUTC	" "
-        ; Read switch depth
-        lfsr    FSR1,char_I_dil_change-.5   ; Setup Diluents-5
-        movlw   .4
-        cpfsgt  gaslist_gas                 ; >4? (-> Diluents)
-        lfsr    FSR1,opt_OC_bail_gas_change ; Setup OC Gases
+	global	gaslist_strcat_gas_mod
+gaslist_strcat_gas_mod:
+	rcall	gaslist_setgas				; Sets gaslist_gas (0-4 for OC/Bailout, 5-9 for Diluents)
+	bsf		space_gas_decriptions		; add a space in front for gas numbers < 10 for alignment
+	;bra	gaslist_gastitle
 
-        movf    gaslist_gas,W           ; (0-4 for OC/Bailout, 5-9 for Diluents)
-        movff   PLUSW1,lo
-        rcall   gaslist_calc_mod        ; Compute MOD into WREG
-        cpfsgt  lo
-        bra	gaslist_strcat_5
-	call    TFT_warnings_color      ; Turn red if bigger
-	bra	gaslist_strcat_5	; skip gaslist_strcat_gas_0 here
-gaslist_strcat_4:
-        rcall   gaslist_strcat_gas_0
+	global	gaslist_gastitle
+gaslist_gastitle:
+	btfsc	short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	bra		gaslist_gastitle1			; Short version
+	STRCAT_TEXT tGas
+	incf	gaslist_gas,W
+	movwf	lo
+	btfss	space_gas_decriptions		; add a space in front for gas numbers < 10 for alignment?
+	bra		gaslist_gastitle0			; NO
+	bcf		space_gas_decriptions		; YES - clear flag again
+	movlw	.10							;       load a 10
+	cpfslt	lo							;       gas# < 10 ?
+	bra		gaslist_gastitle0			;       NO
+	PUTC	" "							;       YES - add a space
+gaslist_gastitle0:
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	PUTC	":"
+gaslist_gastitle1:
+	lfsr	FSR1,opt_gas_type
+	btfsc	divemode
+	bra		gaslist_gastitle3			; no "*" in divemode
+	movf	gaslist_gas,W
+	decf	PLUSW1,W					; Type-1 into WREG
+	bnz		gaslist_gastitle2			; Not "First"
+	PUTC	"*"
+	bra		gaslist_gastitle3
+gaslist_gastitle2:
 	PUTC	" "
- 	
-	; Dummy code, needs some cleanup somedays...
-        ; Read switch depth
-        lfsr    FSR1,char_I_dil_change-.5   ; Setup Diluents-5
-        movlw   .4
-	cpfsgt  gaslist_gas                 ; >4? (-> Diluents)
-        lfsr    FSR1,opt_OC_bail_gas_change ; Setup OC Gases
+gaslist_gastitle3:
+	call	TFT_standard_color
+	btfsc	divemode					; In divemode?
+	rcall	gaslist_strcat_gas_better	; Yes, check if this is a "better gas"
+	movf	gaslist_gas,W				; (0-4 for OC/Bailout, 5-9 for Diluents)
+	movf	PLUSW1,W
+	bnz		gaslist_strcat_3
+	call	TFT_disabled_color
+	bra		gaslist_strcat_4			; no MOD-check and red color for disabled gases
+gaslist_strcat_3:
+	rcall	gaslist_strcat_gas_0
+	PUTC	" "
+	; Read switch depth
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents-5
+	movlw	.4
+	cpfsgt	gaslist_gas					; >4? (-> Diluents)
+	lfsr	FSR1,opt_OC_bail_gas_change	; Setup OC Gases
 
-        movf    gaslist_gas,W           ; (0-4 for OC/Bailout, 5-9 for Diluents)
-        movff   PLUSW1,lo
-        ;rcall   gaslist_calc_mod        ; Compute MOD into WREG
-	
+	movf	gaslist_gas,W				; (0-4 for OC/Bailout, 5-9 for Diluents)
+	movff	PLUSW1,lo
+	rcall	gaslist_calc_mod			; Compute MOD into WREG
+	cpfsgt	lo							; within MOD range?
+	bra		gaslist_strcat_5			; YES
+	call	TFT_warnings_color			; NO  - turn red
+	bra		gaslist_strcat_5			; skip gaslist_strcat_gas_0 here
+gaslist_strcat_4:
+	rcall	gaslist_strcat_gas_0
+	PUTC	" "
+	; Dummy code, needs some cleanup someday...
+	; Read switch depth
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents-5
+	movlw	.4
+	cpfsgt	gaslist_gas					; >4? (-> Diluents)
+	lfsr	FSR1,opt_OC_bail_gas_change	; Setup OC Gases
+	movf	gaslist_gas,W				; (0-4 for OC/Bailout, 5-9 for Diluents)
+	movff	PLUSW1,lo
+	rcall	gaslist_calc_mod			; Compute MOD into WREG
 gaslist_strcat_5:
-	TSTOSS	opt_units               ; 0=Meters, 1=Feets
-	bra	gaslist_strcat_3_metric
+	PUTC	" "
+	TSTOSS	opt_units					; 0=Meter, 1=Feet
+	bra		gaslist_strcat_3_metric
 ;gaslist_strcat_3_imperial:
-        btfsc   ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-        bra     gaslist_imperial_non_travel
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_type       ; Read opt_gas_type[WREG]
-        movff   PLUSW1,gaslist_Type
-        movlw   .2                      ; 2=Travel
-        cpfseq  gaslist_Type
-        bra     gaslist_imperial_non_travel   ; Non-Travel Gas
-        bra     gaslist_strcat_depth_travel   ; Show "---" instead of "0m"...
-
+	btfsc	ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	bra		gaslist_imperial_non_travel
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_type			; Read opt_gas_type[WREG]
+	movff	PLUSW1,up					; up holds gas type
+	movlw	.2							; 2=Travel
+	cpfseq	up							; compare gas type with type 2=Travel
+	bra		gaslist_imperial_non_travel	; Non-Travel Gas
+	bra		gaslist_strcat_depth_travel	; Show "---" instead of "0m"...
 gaslist_imperial_non_travel:
-        movf    lo,W
-        mullw   .100                    ; convert meters to mbar
-        movff   PRODL,lo
-        movff   PRODH,hi
-	call	convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
-        bsf     leftbind
-        output_16_3                     ; limit to 999 and display only (0-999)
-        STRCAT_TEXT	 tFeets				; "ft"
-        return
-		
+	movf	lo,W
+	mullw	.100						; convert meters to mbar
+	movff	PRODL,lo
+	movff	PRODH,hi
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	bsf		leftbind
+	output_16_3							; limit to 999 and display only (0-999)
+	STRCAT_TEXT tFeets					; "ft"
+	return
 gaslist_strcat_3_metric:
-        btfsc   ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-        bra     gaslist_metric_non_travel
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_type       ; Read opt_gas_type[WREG]
-        movff   PLUSW1,gaslist_Type
-        movlw   .2                      ; 2=Travel
-        cpfseq  gaslist_Type
-        bra     gaslist_metric_non_travel   ; Non-Travel Gas
-gaslist_strcat_depth_travel:            ; Show "---" instead of "0m"...
-        STRCAT  "---"
-        return
+	btfsc	ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	bra		gaslist_metric_non_travel
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_type			; Read opt_gas_type[WREG]
+	movff	PLUSW1,up					; up holds gas type
+	movlw	.2							; 2=Travel
+	cpfseq	up							; compare gas type with type 2=Travel
+	bra		gaslist_metric_non_travel	; Non-Travel Gas
+gaslist_strcat_depth_travel:			; Show "---" instead of "0m"...
+	STRCAT	"---"
+	return
 gaslist_metric_non_travel:
-        output_99
-        STRCAT_TEXT	tMeters				; "m"
-        return
+	output_99
+	STRCAT_TEXT	tMeters					; "m"
+	return
 
 ;----------------------------------------------------------------------------
 ; Store current menu item, and display gas description later.
 ; Input: PRODL : gas number (0..4)
 ; NOTE: used in the menu-tree for the MENU_CALLBACK entry.
-        global  gaslist_setgas
+
+	global	gaslist_setgas
 gaslist_setgas:
-        movff   PRODL,gaslist_gas
-        movlw   .5
-        btfsc   ccr_diluent_setup       ; in CCR menus?
-        addwf   gaslist_gas,F           ; Yes, offset to gases 5-9
-        return
+	movff	PRODL,gaslist_gas
+	movlw	.5
+	btfsc	ccr_diluent_setup			; in CCR menus?
+	addwf	gaslist_gas,F				; Yes, offset to gases 5-9
+	return
 
 
-    global  gaslist_cleanup_list    ; Takes care that only one gas can be first and first has 0m change depth
+	global	gaslist_cleanup_list		; Takes care that only one gas can be first and first has 0m change depth
 gaslist_cleanup_list:
-        bcf     ignore_last_edited_gas
-        movlw   .0
-        btfsc   ccr_diluent_setup       ; In CCR-Menu?
-        addlw   .5                      ; Yes, adjust offset
-        subwf   gaslist_gas,F
+	bcf		ignore_last_edited_gas
+	movlw	.0
+	btfsc	ccr_diluent_setup			; In CCR-Menu?
+	addlw	.5							; Yes, adjust offset
+	subwf	gaslist_gas,F
 gaslist_cleanup_list1:
-        clrf    lo
-        lfsr    FSR1,opt_gas_type       ; Read opt_gas_type[WREG]
-        movlw   .5                      ; Check 5 gases
-        movwf   hi
+	clrf	lo
+	lfsr	FSR1,opt_gas_type			; Read opt_gas_type[WREG]
+	movlw	.5							; Check 5 gases
+	movwf	hi
 gaslist_cleanup_list2:
-        decf    hi,w                    ; 0-4
-        btfsc   ccr_diluent_setup       ; In CCR-Menu?
-        addlw   .5                      ; Yes, adjust offset
-        movff   PLUSW1,hi_temp
-        movlw   .1
-        cpfseq  hi_temp                 ; gas = first ?
-        bra     gaslist_cleanup_list3   ; No
-        incf    lo,F                    ; Yes, count "first gases"
-
-        btfss   ignore_last_edited_gas  ; If we are not in the second-pass mode
-        bra     gaslist_cleanup_list2b
-
-        decf    hi,w                    ; 0-4
-        cpfseq  gaslist_gas             ; Do not disable last edited gas
+	decf	hi,w						; 0-4
+	btfsc	ccr_diluent_setup			; In CCR-Menu?
+	addlw	.5							; Yes, adjust offset
+	movff	PLUSW1,WREG					; read gas type
+	decfsz	WREG						; is gas = first (ex 1)?
+	bra		gaslist_cleanup_list3		; NO
+	incf	lo,F						; YES - count "first gases"
+	btfss	ignore_last_edited_gas		; If we are not in the second-pass mode
+	bra		gaslist_cleanup_list2b
+	decf	hi,w						; 0-4
+	cpfseq	gaslist_gas					; Do not disable last edited gas
 gaslist_cleanup_list2b:
-        movff   hi,lo_temp              ; Keep the last "first gas" found
+	movff	hi,up						; Keep the last "first gas" found
 gaslist_cleanup_list3:
-        decfsz  hi,F
-        bra     gaslist_cleanup_list2   ; Loop
-
-        tstfsz  lo                      ; No gas active?
-        bra     gaslist_cleanup_list4   ; No, at least one is active
-
-        btfsc   ccr_diluent_setup       ; In CCR-Menu?
-        bra     gaslist_cleanup_list3a  ; Yes.
-        ; make gas1 first and zero
-        movlw   .1                      ; First
-        movwf   lo_temp
-        movwf   INDF1
-        bra     gaslist_cleanup_list5   ; Set change depth to zero
-
+	decfsz	hi,F
+	bra		gaslist_cleanup_list2		; Loop
+	tstfsz	lo							; No gas active?
+	bra		gaslist_cleanup_list4		; No, at least one is active
+	btfsc	ccr_diluent_setup			; In CCR-Menu?
+	bra		gaslist_cleanup_list3a		; Yes.
+	; make gas1 first and zero
+	movlw	.1							; First
+	movwf	up
+	movwf	INDF1
+	bra	gaslist_cleanup_list5			; Set change depth to zero
 gaslist_cleanup_list3a:
-        movlw   .5
-        addwf   FSR1L,F
-        movlw   .0
-        addwfc  FSR1H,F                 ; Setup to Diluents
-        ; make dil1 first and zero
-        movlw   .1                      ; First
-        movwf   lo_temp
-        movwf   INDF1
-        bra     gaslist_cleanup_list5   ; Set change depth to zero
-
+	movlw	.5
+	addwf	FSR1L,F
+	movlw	.0
+	addwfc	FSR1H,F						; Setup to Diluents
+	; make dil1 first and zero
+	movlw	.1							; First
+	movwf	up
+	movwf	INDF1
+	bra		gaslist_cleanup_list5		; Set change depth to zero
 gaslist_cleanup_list4:
-        movlw   .1
-        cpfsgt  lo                      ; More then one "first gas"?
-        bra     gaslist_cleanup_list5   ; No, done.
-        ; More then one Gas is "first gas"
-        ; Disable last found "first gas" but keep it's change depth
-        decf    lo_temp,W               ; 0-4
-        cpfseq  gaslist_gas             ; Do not disable last edited gas
-        bra     gaslist_cleanup_list4b
-        ; Do not disable last edited gas
-        ; search again but ignore last edited gas
-        bsf     ignore_last_edited_gas
-        bra     gaslist_cleanup_list1   ; Loop until only one "first gas" is left
-
+	movlw	.1
+	cpfsgt	lo							; More then one "first gas"?
+	bra		gaslist_cleanup_list5		; No, done.
+	; More then one Gas is "first gas"
+	; Disable last found "first gas" but keep it's change depth
+	decf	up,W						; 0-4
+	cpfseq	gaslist_gas					; Do not disable last edited gas
+	bra		gaslist_cleanup_list4b
+	; Do not disable last edited gas
+	; search again but ignore last edited gas
+	bsf		ignore_last_edited_gas
+	bra		gaslist_cleanup_list1		; Loop until only one "first gas" is left
 gaslist_cleanup_list4b:
-        btfsc   ccr_diluent_setup       ; In CCR-Menu?
-        addlw   .5                      ; Yes, adjust offset
-        clrf    PLUSW1                  ; Disable gas
-        bra     gaslist_cleanup_list    ; Loop until only one "first gas" is left
-
+	btfsc	ccr_diluent_setup			; In CCR-Menu?
+	addlw	.5							; Yes, adjust offset
+	clrf	PLUSW1						; Disable gas
+	bra		gaslist_cleanup_list		; Loop until only one "first gas" is left
 gaslist_cleanup_list5:
-        ; Read switch depth
-        lfsr    FSR1,char_I_dil_change-.5   ; Setup Diluents-5
-        btfss   ccr_diluent_setup           ; In CCR-Menu?
-        lfsr    FSR1,opt_OC_bail_gas_change ; No, setup OC Gases
-        decf    lo_temp,W
-        btfsc   ccr_diluent_setup       ; In CCR-Menu?
-        addlw   .5                      ; Yes, adjust offset
-        clrf    PLUSW1                  ; Set First gas to zero m
-        return
+	; Read switch depth
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents-5
+	btfss	ccr_diluent_setup			; In CCR-Menu?
+	lfsr	FSR1,opt_OC_bail_gas_change	; No, setup OC Gases
+	decf	up,W
+	btfsc	ccr_diluent_setup			; In CCR-Menu?
+	addlw	.5							; Yes, adjust offset
+	clrf	PLUSW1						; Set First gas to zero m
+	return
 
 ;----------------------------------------------------------------------------
 ; Increment/Decrement O2 ratio
-        global  gaslist_pO2
+
+	global	gaslist_pO2
 gaslist_pO2:
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_He_ratio   ; Read opt_gas_He_ratio[WREG]
-        movff   PLUSW1,gaslist_He
-        lfsr    FSR1,opt_gas_O2_ratio   ; Read opt_gas_O2_ratio[WREG]
-        movff   PLUSW1,gaslist_O2
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_He_ratio		; Read opt_gas_He_ratio[WREG]
+	movff	PLUSW1,hi					; hi holds He ratio
+	lfsr	FSR1,opt_gas_O2_ratio		; Read opt_gas_O2_ratio[WREG]
+	movff	PLUSW1,lo					; lo holds O2 ratio
 
-        incf    gaslist_O2,F            ; O2++
-        movf    gaslist_He,W
-        addwf   gaslist_O2,W
-        movwf   lo
-        movlw   .101
-        cpfslt  lo                      ; O2+He<101?
-        decf    gaslist_O2,F            ; O2-- (Unchanged)
-     
-        movf    gaslist_gas,W
-        movff   gaslist_O2,PLUSW1       ; And write back to opt_gas_O2_ratio[WREG]
-        return
-        
-        global  gaslist_mO2
+	incf	lo,F						; O2++
+	movf	hi,W						; get He ratio into WREG
+	addwf	lo,W						; add O2 ratio to WREG
+	movwf	up							; move sum He + O2 to up
+	movlw	.101						;
+	cpfslt	up							; O2 + He < 101?
+	decf	lo,F						; O2-- (revoke ++)
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; write back O2 ratio to opt_gas_O2_ratio[WREG]
+	return
+
+	global	gaslist_mO2
 gaslist_mO2:
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_O2_ratio   ; Read opt_gas_O2_ratio[WREG]
-        movff   PLUSW1,gaslist_O2
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_O2_ratio		; Read opt_gas_O2_ratio[WREG]
+	movff	PLUSW1,lo					; lo holds O2 ratio
 
-        decf    gaslist_O2,F
-        movlw   gaslist_min_o2
-        cpfslt  gaslist_O2
-        bra     gaslist_mO2_1
-        movlw   gaslist_min_o2
-        movwf   gaslist_O2
+	decf	lo,F						; O2--
+	movlw	gaslist_min_o2				; get minimum allowed O2 ratio
+	cpfslt	lo							; current O2 ratio below allowed minimum?
+	bra		gaslist_mO2_1				; NO
+	movlw	gaslist_min_o2				; YES - load minimum
+	movwf	lo							;       write minimum to current O2 ratio
 gaslist_mO2_1:
-        movf    gaslist_gas,W
-        movff   gaslist_O2,PLUSW1       ; And write back to opt_gas_O2_ratio[WREG]
-        return
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; write back O2 ratio to opt_gas_O2_ratio[WREG]
+	return
 
 ;----------------------------------------------------------------------------
 ; Increment/Decrement He ratio
-        global  gaslist_pHe
+
+	global	gaslist_pHe
 gaslist_pHe:
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_O2_ratio   ; Read opt_gas_O2_ratio[WREG]
-        movff   PLUSW1,gaslist_O2
-        lfsr    FSR1,opt_gas_He_ratio   ; Read opt_gas_He_ratio[WREG]
-        movff   PLUSW1,gaslist_He
-
-        incf    gaslist_He,F            ; He++
-        movf    gaslist_He,W
-        addwf   gaslist_O2,W
-        movwf   lo
-        movlw   .101
-        cpfslt  lo                      ; O2+He<101?
-        decf    gaslist_He,F            ; Yes, He-- (Unchanged)
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_O2_ratio		; Read opt_gas_O2_ratio[WREG]
+	movff	PLUSW1,lo					; lo holds O2 ratio
+	lfsr	FSR1,opt_gas_He_ratio		; Read opt_gas_He_ratio[WREG]
+	movff	PLUSW1,hi					; hi holds He ratio
 
-        movf    gaslist_gas,W
-        movff   gaslist_He,PLUSW1       ; And write back to opt_gas_He_ratio[WREG]
-        return
+	incf	hi,F						; He++
+	movf	hi,W						; get He ratio into WREG
+	addwf	lo,W						; add O2 ratio to WREG
+	movwf	up							; move sum He + O2 to up
+	movlw	.101						;
+	cpfslt	up							; O2 + He < 101?
+	decf	hi,F						; He-- (revoke ++)
+	movf	gaslist_gas,W
+	movff	hi,PLUSW1					; write back He ratio to opt_gas_He_ratio[WREG]
+	return
 
-        global  gaslist_mHe
+	global	gaslist_mHe
 gaslist_mHe:
-        movf    gaslist_gas,W
-        lfsr    FSR1,opt_gas_He_ratio   ; Read opt_gas_He_ratio[WREG]
-        movff   PLUSW1,gaslist_He
+	movf	gaslist_gas,W
+	lfsr	FSR1,opt_gas_He_ratio		; Read opt_gas_He_ratio[WREG]
+	movff	PLUSW1,hi					; hi holds He ratio
 
-        decf    gaslist_He,F
-        bnn     gaslist_mHe_1
-        clrf    gaslist_He
+	decf	hi,F						; He--
+	bnn		gaslist_mHe_1				; He ratio negative?
+	clrf	hi							; YES - set He to 0
 gaslist_mHe_1:
-        movf    gaslist_gas,W
-        movff   gaslist_He,PLUSW1       ; And write back to opt_gas_He_ratio[WREG]
-        return
+	movf	gaslist_gas,W
+	movff	hi,PLUSW1					; write back He ratio to opt_gas_He_ratio[WREG]
+	return
 
 ;----------------------------------------------------------------------------
 ; Increment/Decrement switch depth
-        global  gaslist_pDepth
-gaslist_pDepth:
-        lfsr    FSR1,char_I_dil_change-.5   ; Setup Diluents-5
-        movlw   .4
-        cpfsgt  gaslist_gas                 ; >4? (-> Diluents)
-        lfsr    FSR1,opt_OC_bail_gas_change ; Setup OC Gases
-
-        movf    gaslist_gas,W
-        movff   PLUSW1,gaslist_O2       ; Read char_I_deco_gas_change[WREG]
 
-        incf    gaslist_O2,F
-        movlw   gaslist_max_change_depth
-        cpfsgt  gaslist_O2
-        bra     gaslist_pDepth_1
-        movlw   gaslist_max_change_depth
-        movwf   gaslist_O2
+	global	gaslist_pDepth
+gaslist_pDepth:
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents-5
+	movlw	.4
+	cpfsgt	gaslist_gas					; >4? (-> Diluents)
+	lfsr	FSR1,opt_OC_bail_gas_change	; Setup OC Gases
+	movf	gaslist_gas,W
+	movff	PLUSW1,lo					; Read char_I_deco_gas_change[WREG]
+	incf	lo,F
+	movlw	gaslist_max_change_depth
+	cpfsgt	lo
+	bra		gaslist_pDepth_1
+	movlw	gaslist_max_change_depth
+	movwf	lo
 gaslist_pDepth_1:
-        movf    gaslist_gas,W
-        movff   gaslist_O2,PLUSW1       ; Write back to char_I_deco_gas_change[WREG]
-        return
-        
-        global  gaslist_mDepth
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; Write back to char_I_deco_gas_change[WREG]
+	return
+
+	global	gaslist_mDepth
 gaslist_mDepth:
-        lfsr    FSR1,char_I_dil_change-.5   ; Setup Diluents-5
-        movlw   .4
-        cpfsgt  gaslist_gas                 ; >4? (-> Diluents)
-        lfsr    FSR1,opt_OC_bail_gas_change ; Setup OC Gases
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents-5
+	movlw	.4
+	cpfsgt	gaslist_gas					; >4? (-> Diluents)
+	lfsr	FSR1,opt_OC_bail_gas_change	; Setup OC Gases
 
-        movf    gaslist_gas,W
-        movff   PLUSW1,gaslist_O2       ; Read char_I_deco_gas_change[WREG]
+	movf	gaslist_gas,W
+	movff	PLUSW1,lo					; Read char_I_deco_gas_change[WREG]
+
+	decf	lo,F
+	btfsc	STATUS,N
+	clrf	lo
 
-        decf    gaslist_O2,F
-        btfsc   STATUS,N
-        clrf    gaslist_O2
-       
-        movf    gaslist_gas,W
-        movff   gaslist_O2,PLUSW1       ; And write back to char_I_deco_gas_change[WREG]
-        return
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; And write back to char_I_deco_gas_change[WREG]
+	return
 
-    global  gaslist_spplus
+	global	gaslist_spplus
 gaslist_spplus:
-        movf    gaslist_gas,W
-        lfsr    FSR1,char_I_setpoint_cbar
-        movff   PLUSW1,lo               ; Read char_I_setpoint_cbar[WREG]
-        movlw	gaslist_sp_stepsize
-        addwf	lo,F
-        movlw	gaslist_sp_max
-        cpfsgt	lo
-        bra     gaslist_spplus2
-        movlw	gaslist_sp_min
-        movwf	lo
+	movf	gaslist_gas,W
+	lfsr	FSR1,char_I_setpoint_cbar
+	movff	PLUSW1,lo					; Read char_I_setpoint_cbar[WREG]
+	movlw	gaslist_sp_stepsize
+	addwf	lo,F
+	movlw	gaslist_sp_max
+	cpfsgt	lo
+	bra		gaslist_spplus2
+	movlw	gaslist_sp_min
+	movwf	lo
 gaslist_spplus2:
-        movf    gaslist_gas,W
-        movff   lo,PLUSW1               ; Write back to char_I_setpoint_cbar
-        return
-    
-    global  gaslist_spdepthplus
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; Write back to char_I_setpoint_cbar
+	return
+
+	global	gaslist_spdepthplus
 gaslist_spdepthplus:
-        movf    gaslist_gas,W
-        bz      gaslist_spdepthplus3    ; Setpoint 1 is always 0m
-        lfsr    FSR1,char_I_setpoint_change
-        movff   PLUSW1,gaslist_O2       ; Read char_I_deco_gas_change[WREG]
-        incf    gaslist_O2,F
-        movlw   gaslist_max_change_depth
-        cpfsgt  gaslist_O2
-        bra     gaslist_spdepthplus_1
-        movlw   gaslist_max_change_depth
-        movwf   gaslist_O2
+	movf	gaslist_gas,W
+	bz		gaslist_spdepthplus3		; Setpoint 1 is always 0m
+	lfsr	FSR1,char_I_setpoint_change
+	movff	PLUSW1,lo					; Read char_I_deco_gas_change[WREG]
+	incf	lo,F
+	movlw	gaslist_max_change_depth
+	cpfsgt	lo
+	bra		gaslist_spdepthplus_1
+	movlw	gaslist_max_change_depth
+	movwf	lo
 gaslist_spdepthplus_1:
-        movf    gaslist_gas,W
-        movff   gaslist_O2,PLUSW1       ; Write back to char_I_deco_gas_change[WREG]
-        return
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; Write back to char_I_deco_gas_change[WREG]
+	return
 
 gaslist_spdepthplus3:
-        movlw   .0
-        movff   WREG,char_I_setpoint_change+0   ; Reset to 0m
-        return
+	movlw	.0
+	movff	WREG,char_I_setpoint_change+0	; Reset to 0m
+	return
 
-    global  gaslist_spdepthminus
+	global	gaslist_spdepthminus
 gaslist_spdepthminus:
-        movf    gaslist_gas,W
-        bz      gaslist_spdepthplus3    ; Setpoint 1 is always 0m
-        lfsr    FSR1,char_I_setpoint_change
-        movff   PLUSW1,gaslist_O2       ; Read opt_gas_O2_ratio[WREG]
-        decf    gaslist_O2,F
-        btfsc   STATUS,N
-        clrf    gaslist_O2
-        movf    gaslist_gas,W
-        movff   gaslist_O2,PLUSW1       ; And write back to opt_gas_O2_ratio[WREG]
-        return
+	movf	gaslist_gas,W
+	bz		gaslist_spdepthplus3		; Setpoint 1 is always 0m
+	lfsr	FSR1,char_I_setpoint_change
+	movff	PLUSW1,lo					; Read char_I_deco_gas_change[WREG]
+	decf	lo,F
+	btfsc	STATUS,N
+	clrf	lo
+	movf	gaslist_gas,W
+	movff	lo,PLUSW1					; Write back to char_I_deco_gas_change[WREG]
+	return
 
 ;----------------------------------------------------------------------------
 ; Compute MOD from char_I_ppO2_max/char_I_ppO2_max_deco and current O2 Ratio.
 ;
-; Input:  gaslist_gas = current gas index.
+; Input:  gaslist_gas                   = current gas index.
 ;         opt_gas_O2_ratio[gaslist_gas] = current O2 ratio
-; Output: WREG = MOD [m]
+; Output: WREG                          = MOD [m]
 ;
 gaslist_calc_mod:
-	movff	gaslist_gas,gaslist_gas_global	; copy for color coding
-        movf    gaslist_gas,W           ; Read current gas O2 ratio
-        lfsr    FSR1,opt_gas_O2_ratio   ; Read opt_gas_O2_ratio[WREG]
-        movf    PLUSW1,W
+	movf	gaslist_gas,W				; get gas number (0...5)
+	lfsr	FSR1,opt_gas_O2_ratio		; read opt_gas_O2_ratio[WREG]
+	movf	PLUSW1,W
+
+	btfsc	divemode					; in divemode?
+	bra		gaslist_calc_mod_divemode	; YES
 
-        btfsc   divemode                ; In divemode?
-        bra     gaslist_calc_mod_divemode   ; Yes.
+	; Pamb max = ppO2 Max / O2 ratio
+	movwf	xB+0
 
-        ; Pamb max = ppO2 Max / O2 ratio
-        movwf   xB+0
+	movf	gaslist_gas,W				; get gas number (0...5)
+	lfsr	FSR1,opt_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
+	movff	PLUSW1,xA+0					; xA+0 used as temp here -> holds type
 
-	movf    gaslist_gas,W           ; Read current gas O2 ratio
-	lfsr	FSR1,opt_gas_type	; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
-	movff   PLUSW1,xA+0		; xA+0 used as temp here -> holds type
-	
-	movff   char_I_ppO2_max_deco,xB+1	; xB+1 used as temp here
-	movlw	.3			
-	cpfseq	xA+0			; Deco?
-	movff   char_I_ppO2_max,xB+1	; No, overwrite with travel/bottom max
-	movf	xB+1,W			; Result in WREG
-	
-	clrf	xB+1			; Clear for div16x16
-        mullw   .10
-        movff   PRODL,xA+0
-        movff   PRODH,xA+1
-        call    div16x16
-        
-        ; Prof = Pamb - 1bar.
-        movf    xC+0,W
-        addlw   -.10
-        return
+	movff	char_I_ppO2_max_deco,xB+1	; xB+1 used as temp here
+	movlw	.3
+	cpfseq	xA+0						; Deco?
+	movff	char_I_ppO2_max,xB+1		; No, overwrite with travel/bottom max
+	movf	xB+1,W						; Result in WREG
+
+	clrf	xB+1						; Clear for div16x16
+	mullw	.10
+	movff	PRODL,xA+0
+	movff	PRODH,xA+1
+	call	div16x16
+
+	; Prof = Pamb - 1 bar
+	movf	xC+0,W
+	addlw	-.10
+	return
 
 gaslist_calc_mod_divemode:
-    extern  TFT_color_code1
-        movwf   hi                          ; Copy O2%
-        movlw	warn_gas_in_gaslist
-        call	TFT_color_code1             ; Color-code current row in Gaslist (%O2 in hi), char_I_ppO2_max/char_I_ppO2_max_deco as threshold
-        return
+	movwf	hi							; Copy O2%
+	call	TFT_color_code_gaslist		; Color-code current row in Gaslist (%O2 in hi), char_I_ppO2_max/char_I_ppO2_max_deco as threshold
+	return
+
 ;----------------------------------------------------------------------------
 
-        global  gaslist_ppo2
+	global	gaslist_ppo2
 gaslist_ppo2:
-        STRCAT_TEXT tppO2                ; ppO2:
-        movf    gaslist_gas,W
-        lfsr    FSR1,char_I_dil_change-.5      ; Setup Diluents
-        btfss   ccr_diluent_setup           ; In CCR-Menu?
-        lfsr    FSR1,opt_OC_bail_gas_change ; No, setup OC/Bailout Gases
-        movf    PLUSW1,W
-        mullw   .10                     ; PROD=Depth in mbar/10 (100 = 1.00 bar)
-        movlw   .100
-        addwf   PRODL,F
-        movlw   .0
-        addwfc  PRODH,F                 ; add 1bar
-        movff   PRODL,xA+0
-        movff   PRODH,xA+1
-        movf    gaslist_gas,W           ; Read current gas O2 ratio
-        lfsr    FSR1,opt_dil_O2_ratio-.5   ; Read dil_gas_O2_ratio[WREG]
-        btfss   ccr_diluent_setup       ; In CCR-Menu?
-        lfsr    FSR1,opt_gas_O2_ratio   ; No, read opt_gas_O2_ratio[WREG]
-        movff   PLUSW1,xB+0
-        clrf	xB+1
-        call	mult16x16				; char_I_O2_ratio * (p_amb/10)
-        movff	xC+0,xA+0
-        movff	xC+1,xA+1
-        movlw	d'100'
-        movwf	xB+0
-        clrf	xB+1
-        call	div16x16				; xC=(char_I_O2_ratio * p_amb/10)/100
-; Check very high ppO2 manually
-        tstfsz	xC+2                       ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-        bra		gaslist_ppo2_2             ; Yes, display fixed Value!
-        movff	xC+0,lo
-        movff	xC+1,hi
-        bcf		ignore_digit4
-        bsf     leftbind
-        output_16dp	d'3'                ; x.xx
-        STRCAT_TEXT tbar                ; bar
-        return
+	STRCAT_TEXT tppO2					; ppO2:
+	movf	gaslist_gas,W
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents
+	btfss	ccr_diluent_setup			; In CCR-Menu?
+	lfsr	FSR1,opt_OC_bail_gas_change	; No, setup OC/Bailout Gases
+	movf	PLUSW1,W
+	mullw	.10							; PROD=Depth in mbar/10 (100 = 1.00 bar)
+	movlw	.100
+	addwf	PRODL,F
+	movlw	.0
+	addwfc	PRODH,F						; add 1bar
+	movff	PRODL,xA+0
+	movff	PRODH,xA+1
+	movf	gaslist_gas,W				; Read current gas O2 ratio
+	lfsr	FSR1,opt_dil_O2_ratio-.5	; Read dil_gas_O2_ratio[WREG]
+	btfss	ccr_diluent_setup			; In CCR-Menu?
+	lfsr	FSR1,opt_gas_O2_ratio		; No, read opt_gas_O2_ratio[WREG]
+	movff	PLUSW1,xB+0
+	clrf	xB+1
+	call	mult16x16					; char_I_O2_ratio * (p_amb/10)
+	movff	xC+0,xA+0
+	movff	xC+1,xA+1
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16					; xC=(char_I_O2_ratio * p_amb/10)/100
+	; Check very high ppO2 manually
+	tstfsz	xC+2						; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
+	bra		gaslist_ppo2_2				; Yes, display fixed Value!
+	movff	xC+0,lo
+	movff	xC+1,hi
+	bcf		ignore_digit4
+	bsf		leftbind
+	output_16dp d'3'					; x.xx
+	STRCAT_TEXT tbar					; bar
+	return
 gaslist_ppo2_2:
-        STRCAT  ">6.6"
-        return
+	STRCAT	">6.6"
+	return
 
-        global  gaslist_MOD_END
+	global	gaslist_MOD_END
 gaslist_MOD_END:
-        rcall   gaslist_calc_mod        ; Compute MOD into WREG
-        movwf   lo                      ; Copy to lo
-        STRCAT_TEXT tMOD                ; MOD:
-   		TSTOSS	opt_units               ; 0=Meters, 1=Feets
-		bra		gaslist_MOD_metric
-;gaslist_MOD_imperial:
-        movf    lo,W
-        mullw   .100                    ; convert meters to mbar
-        movff   PRODL,lo
-        movff   PRODH,hi
-		call	convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
-        bsf     leftbind
-        output_16_3                     ; limit to 999 and display only (0-999)
-        STRCAT_TEXT	 tFeets				; "ft"
-        bra     gaslist_MOD_common
+	rcall	gaslist_calc_mod			; Compute MOD into WREG
+	movwf	lo							; Copy to lo
+	STRCAT_TEXT tMOD					; MOD:
+	TSTOSS	opt_units					; 0=Meters, 1=Feets
+	bra		gaslist_MOD_metric
+	;gaslist_MOD_imperial:
+	movf	lo,W
+	mullw	.100						; convert meters to mbar
+	movff	PRODL,lo
+	movff	PRODH,hi
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	bsf		leftbind
+	output_16_3							; limit to 999 and display only (0-999)
+	STRCAT_TEXT tFeets					; "ft"
+	bra		gaslist_MOD_common
 gaslist_MOD_metric:
-        output_8
-        STRCAT_TEXT tMeters             ; m
+	output_8
+	STRCAT_TEXT tMeters					; m
 gaslist_MOD_common:
-        PUTC      "/"
-        STRCAT_TEXT tEND                ; END:
-        rcall    gaslist_calc_mod       ; Output: WREG = MOD [m]
-        addlw   .10                     ; MOD=MOD+10m
-        movwf   xB+0
-        clrf    xB+1
-    	movlw	d'100'
-    	movwf	xA+0
-    	movf	gaslist_He,W                ; He value in % -> WREG
-    	subwf	xA+0,F                      ; xA+0 = 100 - He Value in %
-    	clrf	xA+1
-    	call	mult16x16                   ; xA*xB=xC
-        movff	xC+0,xA+0
-        movff	xC+1,xA+1
-        movlw	d'100'
-        movwf	xB+0
-        clrf	xB+1
-        call	div16x16                    ; xA/xB=xC with xA as remainder
-        ;	xC:2 = ((MOD+10) * 100 - HE Value in %) / 100
-        movlw	d'10'
-        subwf	xC+0,F				        ; Subtract 10m...
-        movff	xC+0,lo
-; END 8Bit only
-;    	movlw	d'0'
-;    	subwfb	xC+1,F
-;        movff	xC+1,hi
-   		TSTOSS	opt_units               ; 0=Meters, 1=Feets
-		bra		gaslist_END_metric
-;gaslist_END_imperial:
-        movf    lo,W
-        mullw   .100                    ; convert meters to mbar
-        movff   PRODL,lo
-        movff   PRODH,hi
-		call	convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
-        bsf     leftbind
-        output_16_3                     ; limit to 999 and display only (0-999)
-        STRCAT_TEXT	 tFeets				; "ft"
-        return
+	PUTC	"/"
+	STRCAT_TEXT tEND					; END:
+	rcall	gaslist_calc_mod			; Output: WREG = MOD [m]
+	addlw	.10							; MOD=MOD+10m
+	movwf	xB+0
+	clrf	xB+1
+	movlw	d'100'
+	movwf	xA+0
+	movf	gaslist_gas,W				; get gas number (0...5)
+	lfsr	FSR1,opt_gas_He_ratio		; read opt_gas_O2_ratio[WREG]
+	movf	PLUSW1,W					; He value in %
+	subwf	xA+0,F						; xA+0 = 100 - He Value in %
+	clrf	xA+1
+	call	mult16x16					; xA*xB=xC
+	movff	xC+0,xA+0
+	movff	xC+1,xA+1
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16					; xA/xB=xC with xA as remainder
+	;									; xC:2 = ((MOD+10) * 100 - HE Value in %) / 100
+	movlw	d'10'
+	subwf	xC+0,F						; Subtract 10m...
+	movff	xC+0,lo
+	;; END 8Bit only
+	;movlw	d'0'
+	;subwfb	xC+1,F
+	;movff	xC+1,hi
+	TSTOSS	opt_units					; 0=Meter, 1=Feet
+	bra		gaslist_END_metric
+	;gaslist_END_imperial:
+	movf	lo,W
+	mullw	.100						; convert meters to mbar
+	movff	PRODL,lo
+	movff	PRODH,hi
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	bsf		leftbind
+	output_16_3							; limit to 999 and display only (0-999)
+	STRCAT_TEXT tFeets					; "ft"
+	return
 gaslist_END_metric:
-        output_8
-        STRCAT_TEXT tMeters             ; m
-        return
+	output_8
+	STRCAT_TEXT tMeters					; m
+	return
 
 ;----------------------------------------------------------------------------
-        global  gaslist_reset_mod_title
+	global	gaslist_reset_mod_title
 gaslist_reset_mod_title:
-        STRCAT_TEXT tDepthReset
+	STRCAT_TEXT tDepthReset
 
 gaslist_reset_mod_title2:
-        rcall   gaslist_calc_mod        ; Compute MOD into WREG
-        movwf   lo                      ; Copy to lo
+	rcall	gaslist_calc_mod			; Compute MOD into WREG
+	movwf	lo							; Copy to lo
 
-        movf    gaslist_gas,W           ; Compare to switch depth
-        lfsr    FSR1,char_I_dil_change-.5  ; Setup Diluents
-        btfss   ccr_diluent_setup           ; In CCR-Menu?
-        lfsr    FSR1,opt_OC_bail_gas_change ; No, setup OC Gases
-        movf   	PLUSW1,W
-        cpfslt  lo
-        bra     gaslist_strcat_5        ; And return...
-        call    TFT_warnings_color      ; Turn red if bigger !
-        bra     gaslist_strcat_5        ; And return...
+	movf	gaslist_gas,W				; Compare to switch depth
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents
+	btfss	ccr_diluent_setup			; In CCR-Menu?
+	lfsr	FSR1,opt_OC_bail_gas_change	; No, setup OC Gases
+	movf	PLUSW1,W
+	cpfslt	lo
+	bra		gaslist_strcat_5			; and return...
+	call	TFT_warnings_color			; turn red if bigger !
+	bra		gaslist_strcat_5			; and return...
 
 ;----------------------------------------------------------------------------
-        global  gaslist_reset_mod
+	global	gaslist_reset_mod
 gaslist_reset_mod:
-        rcall   gaslist_calc_mod        ; Compute MOD
-        movwf   gaslist_depth
-
-        movf    gaslist_gas,W           ; Read current gas O2 ratio
-
-        lfsr    FSR1,char_I_dil_change-.5   ; Setup Diluents
-        btfss   ccr_diluent_setup           ; In CCR-Menu?
-        lfsr    FSR1,opt_OC_bail_gas_change ; No, setup OC Gases
-
-        movff   gaslist_depth,PLUSW1    ; And save new change depth
-        return
+	rcall	gaslist_calc_mod			; Compute MOD, it is returned in WREG
+	movwf	lo							; buffer MOD to lo
+	movf	gaslist_gas,W				; Read current gas O2 ratio
+	lfsr	FSR1,char_I_dil_change-.5	; Setup Diluents
+	btfss	ccr_diluent_setup			; In CCR-Menu?
+	lfsr	FSR1,opt_OC_bail_gas_change	; NO - setup OC Gases
+	movff	lo,PLUSW1					; write back new change depth
+	return
 ;----------------------------------------------------------------------------
-        END
\ No newline at end of file
+	END
--- a/src/gaslist.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/gaslist.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -9,25 +9,32 @@
 ; HISTORY
 ;   2011-08-11 : [jDG] Creation.
 
-    ; Utils
-    extern  gaslist_strcat_gas
-    extern  gaslist_strcat_gas_mod
-    extern  gaslist_strcat_setpoint
+	; Utils
+	extern	gaslist_strcat_gas
+	extern	gaslist_strcat_gas_mod
+	extern	gaslist_strcat_setpoint
 
-    ;Setpoint Setup
-    extern  gaslist_spplus,gaslist_spdepthplus, gaslist_spdepthminus,gaslist_setSP
+	;Setpoint Setup
+	extern	gaslist_spplus
+	extern	gaslist_spdepthplus
+	extern	gaslist_spdepthminus
+	extern	gaslist_setSP
+
+	; Select currently edited gas
+	extern	gaslist_setgas
+	extern	gaslist_gastitle
 
-    ; Select currently edited gas
-    extern  gaslist_setgas, gaslist_gastitle
-    
-    ; Main gaslist menu
-    extern  gaslist_pO2, gaslist_mO2
-    extern  gaslist_pHe, gaslist_mHe
-    extern  gaslist_show_type
-    extern  gaslist_toggle_type
-    extern  gaslist_cleanup_list    ; Takes care that only one gas can be first and first has 0m change depth
+	; Main gaslist menu
+	extern	gaslist_pO2, gaslist_mO2
+	extern	gaslist_pHe, gaslist_mHe
+	extern	gaslist_show_type
+	extern	gaslist_toggle_type
+	extern	gaslist_cleanup_list		; Takes care that only one gas can be first and first has 0m change depth
 
-    ; Depth submennu
-    extern  gaslist_pDepth, gaslist_mDepth
-    extern  gaslist_MOD_END, gaslist_ppo2
-    extern  gaslist_reset_mod_title,  gaslist_reset_mod
+	; Depth submennu
+	extern	gaslist_pDepth
+	extern	gaslist_mDepth
+	extern	gaslist_MOD_END
+	extern	gaslist_ppo2
+	extern	gaslist_reset_mod_title
+	extern	gaslist_reset_mod
--- a/src/ghostwriter.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/ghostwriter.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File ghostwriter.asm							REFACTORED VERSION 2.94
+;   File ghostwriter.asm							REFACTORED VERSION 2.98
 ;
 ;   Ghostwriter (Log profile recorder)
 ;
@@ -9,204 +9,253 @@
 ; HISTORY
 ;  2011-11-27 : [mH] Creation
 
-#include    "hwos.inc"                  ; Mandatory header
-#include 	"shared_definitions.h"         ; Mailbox from/to p2_deco.c
-#include	"external_flash.inc"
-#include	"surfmode.inc"
-#include    "eeprom_rs232.inc"
-#include 	"strings.inc"
-#include	"isr.inc"
-#include	"tft_outputs.inc"
-#include	"divemode.inc"
-#include    "rtc.inc"
+#include "hwos.inc"						; Mandatory header
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
+#include "external_flash.inc"
+#include "surfmode.inc"
+#include "eeprom_rs232.inc"
+#include "strings.inc"
+#include "isr.inc"
+#include "tft_outputs.inc"
+#include "divemode.inc"
+#include "rtc.inc"
+
+
+	;---- Private local variables -------------------------------------------------
+
+	CBLOCK	local2						; max size is 16 Byte !!!
+		divisor_temperature				; divisor used to time the sampling of dive data
+		divisor_deco					; divisor used to time the sampling of dive data
+		divisor_gf						; divisor used to time the sampling of dive data
+		divisor_ppo2_sensors			; divisor used to time the sampling of dive data
+		divisor_decoplan				; divisor used to time the sampling of dive data
+		divisor_cns						; divisor used to time the sampling of dive data
+		divisor_tank					; divisor used to time the sampling of dive data
+		ProfileFlagByte					; used to store events
+	ENDC								; used: 8 byte, remaining: 8 byte
+
+
+ghostwriter		CODE
+
+;=============================================================================
+
 
-ghostwriter	CODE
+	global	init_recording_params		; Initialize profile recording parameters
+init_recording_params:
+	movff	samplingrate,samplesecs_value; to avoid EEPROM access in the ISR
+	movlw	div_temperature
+	movwf	divisor_temperature			; load divisors for profile storage
+	movlw	div_deco
+	movwf	divisor_deco
+	movlw	div_gf
+	movwf	divisor_gf
+	movlw	div_ppo2_sensors
+	movwf	divisor_ppo2_sensors
+	movlw	div_decoplan
+	movwf	divisor_decoplan
+	movlw	div_cns
+	movwf	divisor_cns
+	movlw	div_tank
+	movwf	divisor_tank
+	btfss	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		init_recording_params_1		; NO
+	movlw	samplingrate_apnoe			; YES - overwrite some parameters in Apnoe mode
+	movwf	samplesecs_value			;       to avoid EEPROM access in the ISR
+init_recording_params_1:
+	btfsc	FLAG_ccr_mode				; in CCR mode?
+	bra		init_recording_params_2		; YES
+	btfsc	FLAG_pscr_mode				; in pSCR mode?
+	bra		init_recording_params_2		; YES
+	; in OC Mode, disable ppO2 logging
+	movlw	.0
+	movwf	divisor_ppo2_sensors
+init_recording_params_2:
+	return
+
 
 	global	store_dive_data
 store_dive_data:
-	bcf		store_sample		; clear flag
+	bcf		store_sample				; clear flag
 
-    ifndef __DEBUG
-    	btfsc	simulatormode_active    ; Are we in simulator mode?
-    	return                          ; Yes, discard everything
-    endif
+	ifndef __DEBUG
+		btfsc	simulatormode_active	; Are we in simulator mode?
+		return							; Yes, discard everything
+	endif
 
-    btfsc	FLAG_apnoe_mode             ; In Apnoe mode?
-    return                              ; Yes, discard everything
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	return								; Yes, discard everything
 
-    SAFE_2BYTE_COPY rel_pressure, lo
-	movf	lo,W				        ; store depth with every sample
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY rel_pressure, lo
+	movf	lo,W						; store depth with every sample
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movf	hi,W
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-;First, find out how many bytes will append to this sample....
-	clrf	ProfileFlagByte					; clear number of bytes to append
+; First, find out how many bytes will append to this sample....
+	clrf	ProfileFlagByte				; clear number of bytes to append
 
-; Check Extented informations
-	decfsz	divisor_temperature,W	; Check divisor
-	bra		check_extended1		
+; Check Extended informations
+	decfsz	divisor_temperature,W		; Check divisor
+	bra		check_extended1
 	movlw	infolength_temperature
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended1:
-	decfsz	divisor_deco,W		; Check divisor
-	bra		check_extended2		
+	decfsz	divisor_deco,W				; Check divisor
+	bra		check_extended2
 	movlw	infolength_deco
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended2:
-	decfsz	divisor_gf,W		; Check divisor
-	bra		check_extended3		
+	decfsz	divisor_gf,W				; Check divisor
+	bra		check_extended3
 	movlw	infolength_gf
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended3:
 	decfsz	divisor_ppo2_sensors,W		; Check divisor
-	bra		check_extended4		
+	bra		check_extended4
 	movlw	infolength_ppo2_sensors
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended4:
-	decfsz	divisor_decoplan,W     ; Check divisor
-	bra		check_extended5		
+	decfsz	divisor_decoplan,W			; Check divisor
+	bra		check_extended5
 	movlw	infolength_decoplan
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended5:
-	decfsz	divisor_cns,W		; Check divisor
-	bra		check_extended6		
+	decfsz	divisor_cns,W				; Check divisor
+	bra		check_extended6
 	movlw	infolength_cns
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended6:
-	decfsz	divisor_tank,W		; Check divisor
+	decfsz	divisor_tank,W				; Check divisor
 	bra		check_extended7
 	movlw	infolength_tank
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended7:
 
 ; Second, check global event flag
-	btfss	event_occured		; Check global event flag
-	bra		store_dive_data3	; No Event
+	btfss	event_occured				; Check global event flag
+	bra		store_dive_data3			; No Event
 
-	incf    ProfileFlagByte,F	; add one byte (The EventByte)
+	incf	ProfileFlagByte,F			; add one byte (The EventByte1)
 
-	clrf	EventByte			; reset EventByte
-    clrf	EventByte2			; reset EventByte2
+	clrf	EventByte1					; reset EventByte1
+	clrf	EventByte2					; reset EventByte2
 
-	movf	AlarmType,W			; Type of Alarm Bit 0-3
-	addwf	EventByte,F			; Copy to EventByte Bit 0-3
-	clrf	AlarmType			; Reset AlarmType
-	
+	movf	AlarmType,W					; Type of Alarm Bit 0-3
+	addwf	EventByte1,F				; Copy to EventByte1 Bit 0-3
+	clrf	AlarmType					; Reset AlarmType
+
 ; Third, check events and add additional bytes
-	btfss	gas6_changed    	; Check flag
+	btfss	gas6_changed				; Check flag
 	bra		check_event2
-	movlw	d'2'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte,4			; Also set Flag in EventByte!
+	movlw	d'2'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte1,4				; Also set Flag in EventByte1!
 check_event2:
-	btfss	stored_gas_changed	; Check flag
+	btfss	stored_gas_changed			; Check flag
 	bra		check_event3
-	movlw	d'1'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte,5			; Also set Flag in EventByte!
+	movlw	d'1'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte1,5				; Also set Flag in EventByte1!
 check_event3:
-    btfss	setpoint_changed	; Check flag
+	btfss	setpoint_changed			; Check flag
 	bra		check_event4
-	movlw	d'1'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte,6			; Also set Flag in EventByte!
+	movlw	d'1'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte1,6				; Also set Flag in EventByte1!
 check_event4:
-    btfss   bailoutgas_event    ; =1: bailout was selected or a gaschange during bailout
-    bra     check_event5
-	movlw	d'2'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte2,0		; set flag in EventByte2!
-    bsf     EventByte,7			; =1: Another Eventbyte is available
+	btfss	bailoutgas_event			; =1: bailout was selected or a gas change during bailout
+	bra		check_event5
+	movlw	d'2'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte2,0				; set flag in EventByte2!
+	bsf		EventByte1,7				; =1: Another EventByte1 is available
 
 check_event5:
 	; more events?
 
 store_dive_data3:
-    btfsc   EventByte,7                 ; =1: Another Eventbyte is available
-    incf    ProfileFlagByte,F           ; add one byte (The EventByte2)
+	btfsc	EventByte1,7				; =1: Another EventByte1 is available
+	incf	ProfileFlagByte,F			; add one byte (The EventByte2)
 
-    btfsc	event_occured               ; Check global event flag
-	bsf		ProfileFlagByte,7           ; Set EventByte Flag in ProfileFlagByte
+	btfsc	event_occured				; Check global event flag
+	bsf		ProfileFlagByte,7			; Set EventByte1 Flag in ProfileFlagByte
 
-	movf	ProfileFlagByte,W           ; finally, write ProfileFlagByte!
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	movf	ProfileFlagByte,W			; finally, write ProfileFlagByte!
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-	btfss	event_occured               ; Check global event flag (again)
-	bra		store_dive_data4            ; No Event
+	btfss	event_occured				; Check global event flag (again)
+	bra		store_dive_data4			; No Event
 
 ; Store the EventByte(s) + additional bytes now
-	movf	EventByte,W		
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	movf	EventByte1,W
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-    movf    EventByte2,W                ; Write second event byte...
-    btfsc   EventByte,7                 ; =1: Another Eventbyte is available
-    rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	movf	EventByte2,W				; Write second event byte...
+	btfsc	EventByte1,7				; =1: Another EventByte1 is available
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-	btfss	gas6_changed                ; Check flag
+	btfss	gas6_changed				; Check flag
 	bra		store_dive_data3b
-    movff   char_I_O2_ratio,WREG
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
-    movff   char_I_He_ratio,WREG
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
-	bcf		gas6_changed    	; Clear this event
+	movff	char_I_O2_ratio,WREG		; store gas 6 o2 ratio
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_I_He_ratio,WREG		; store gas 6 He ratio
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		gas6_changed				; Clear this event
 store_dive_data3b:
-	btfss	stored_gas_changed	; Check flag
+	btfss	stored_gas_changed			; Check flag
 	bra		store_dive_data3c
-	movf	active_gas,W		; Store active gas
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	bcf		stored_gas_changed	; Clear this event
+	movf	active_gas,W				; Store active gas
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		stored_gas_changed			; Clear this event
 store_dive_data3c:
-	btfss	setpoint_changed	; Check flag
+	btfss	setpoint_changed			; Check flag
 	bra		store_dive_data3d
-	movff	char_I_const_ppO2,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	bcf		setpoint_changed	; Clear this event
+	movff	char_I_const_ppO2,WREG		; store setpoint
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		setpoint_changed			; Clear this event
 store_dive_data3d:
-	btfss	bailoutgas_event	; Check flag
-	bra		store_dive_data3e
-    movff   char_I_O2_ratio,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movff   char_I_He_ratio,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	bcf		bailoutgas_event	; Clear this event
-store_dive_data3e:
+	btfss	bailoutgas_event			; Check flag
+	bra		store_dive_data4
+	movff	char_I_O2_ratio,WREG		; store O2 ratio of bailout gas
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_I_He_ratio,WREG		; store He ratio of bailout gas
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		bailoutgas_event			; Clear this event
 
 store_dive_data4:
-
 ; Store extended informations
-	decfsz	divisor_temperature,F	; Check divisor
+	decfsz	divisor_temperature,F		; Check divisor
 	bra		store_extended1	
 	rcall	store_dive_temperature
 store_extended1:
-	decfsz	divisor_deco,F			; Check divisor
+	decfsz	divisor_deco,F				; Check divisor
 	bra		store_extended2	
 	rcall	store_dive_decodata
 store_extended2:
-	decfsz	divisor_gf,F			; Check divisor
-	bra		store_extended3	
+	decfsz	divisor_gf,F				; Check divisor
+	bra		store_extended3
 	rcall	store_dive_gf
 store_extended3:
-	decfsz	divisor_ppo2_sensors,F	; Check divisor
-	bra		store_extended4	
+	decfsz	divisor_ppo2_sensors,F		; Check divisor
+	bra		store_extended4
 	rcall	store_dive_ppO2_sensors
 store_extended4:
-	decfsz	divisor_decoplan,F		; Check divisor
-	bra		store_extended5	
+	decfsz	divisor_decoplan,F			; Check divisor
+	bra		store_extended5
 	rcall	store_dive_decoplan
 store_extended5:
-	decfsz	divisor_cns,F			; Check divisor
-	bra		store_extended6	
+	decfsz	divisor_cns,F				; Check divisor
+	bra		store_extended6
 	rcall	store_dive_cns
 store_extended6:
-	decfsz	divisor_tank,F			; Check divisor
+	decfsz	divisor_tank,F				; Check divisor
 	bra		store_extended7
 	rcall	store_dive_tank
 store_extended7:
 
 ; The next block is required to take care of "store never"
-	btfsc	divisor_temperature,7	; Test highest Bit (Register must have been zero before the "decfsz" command!)
-	clrf	divisor_temperature		; And clear register again, so it will never reach zero...
+	btfsc	divisor_temperature,7		; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_temperature			; And clear register again, so it will never reach zero...
 	btfsc	divisor_deco,7
 	clrf	divisor_deco
 	btfsc	divisor_gf,7
@@ -221,101 +270,114 @@
 	clrf	divisor_tank
 
 store_dive_data5:
-	bcf		event_occured		; Clear the global event flag
-	clrf	EventByte			; reset EventByte
-    clrf	EventByte2			; reset EventByte2
-	return						; Done. (Sample with all informations written to external flash)
-	
+	bcf		event_occured				; Clear the global event flag
+	clrf	EventByte1					; reset EventByte1
+	clrf	EventByte2					; reset EventByte2
+	return								; Done. (Sample with all informations written to external flash)
+
 store_dive_cns:
 	movff	int_O_CNS_fraction+0,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movff	int_O_CNS_fraction+1,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movlw	div_cns
-	movwf	divisor_cns						; Reload divisor from CF
+	movwf	divisor_cns					; Reload divisor from CF
 	return
 
 store_dive_tank:
 	movlw	div_tank
-	movwf	divisor_tank						; Reload divisor from CF
+	movwf	divisor_tank				; Reload divisor from CF
 	return
 
 store_dive_decoplan:
-    ; Store the decoplan
-    lfsr    FSR1,char_O_deco_time_for_log+.0
-    movlw   .15
-    movwf   lo
+	; Store the deco plan
+	lfsr	FSR1,char_O_deco_time_for_log+.0
+	movlw	.15
+	movwf	lo
 store_dive_decoplan_loop:
-    movf    POSTINC1,W
-    rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    decfsz  lo,F
-    bra     store_dive_decoplan_loop
+	movf	POSTINC1,W
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	decfsz	lo,F
+	bra		store_dive_decoplan_loop
 	movlw	div_decoplan
-	movwf	divisor_decoplan             ; Reload divisor from CF
+	movwf	divisor_decoplan			; Reload divisor from CF
 	return
 
 store_dive_ppO2_sensors:
-    movf    o2_ppo2_sensor1,W            ; Sensor1 ppO2 (in 0.01bar steps)
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor1,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
-    movf    lo,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movf    hi,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	movf	o2_ppo2_sensor1,W			; Sensor1 ppO2 (in 0.01bar steps)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY o2_mv_sensor1,lo	; o2_mv_sensor may be modified via ISR during the two writes here...
+	movf	lo,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movf	hi,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-    movf    o2_ppo2_sensor2,W            ; Sensor2 ppO2 (in 0.01bar steps)
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor2,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
-    movf    lo,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movf    hi,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	movf	o2_ppo2_sensor2,W			; Sensor2 ppO2 (in 0.01bar steps)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY o2_mv_sensor2,lo	; o2_mv_sensor may be modified via ISR during the two writes here...
+	movf	lo,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movf	hi,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-    movf    o2_ppo2_sensor3,W            ; Sensor3 ppO2 (in 0.01bar steps)
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor3,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
-    movf    lo,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movf    hi,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	movf	o2_ppo2_sensor3,W			; Sensor3 ppO2 (in 0.01bar steps)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY o2_mv_sensor3,lo	; o2_mv_sensor may be modified via ISR during the two writes here...
+	movf	lo,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movf	hi,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
 	movlw	div_ppo2_sensors
-	movwf	divisor_ppo2_sensors        ; Reload divisor
+	movwf	divisor_ppo2_sensors		; Reload divisor
 	return
 
 store_dive_gf:
-	movff	int_O_gradient_factor+0,WREG	; gradient factor absolute (range is limited to 255, only lower byte used for value)
-	rcall   ghostwrite_byte_profile			; WREG -> Profile in ext. Flash
+	movff	int_O_gradient_factor+0,WREG; gradient factor absolute (range is limited to 255, only lower byte used for value)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movlw	div_gf
-	movwf	divisor_gf						; Reload divisor
+	movwf	divisor_gf					; Reload divisor
 	return
 
 store_dive_decodata:
-	movf	decodata+0,W					; =0:no stop dive, if in deco mode: ceiling in m
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	movf	decodata+1,W					; no stop time of length of first stop
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	; Check if deco stops are necessary
+	movff	char_O_first_deco_depth,WREG; get ceiling
+	tstfsz	WREG						; ceiling < 0m (aka in deco) ?
+	bra		store_dive_decodata_deco	; YES
+	; NO - within NDL
+	clrf	WREG						; =0: no stop dive
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_O_nullzeit,WREG		; remaining NDL time
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bra		store_dive_decodata_common
+store_dive_decodata_deco:
+	; YES - in deco
+	movff	char_O_first_deco_depth,WREG; ceiling in m
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_O_first_deco_time,WREG	; length of first stop in minutes
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+store_dive_decodata_common:
 	movlw	div_deco
-	movwf	divisor_deco					; Reload divisor
+	movwf	divisor_deco				; Reload divisor
 	return
 
 store_dive_temperature:
-    SAFE_2BYTE_COPY temperature,lo
-	movf	lo,W			            	; append temperature to current sample!
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY temperature,lo
+	movf	lo,W						; append temperature to current sample!
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movf	hi,W
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movlw	div_temperature
-	movwf	divisor_temperature				; Reload divisor
+	movwf	divisor_temperature			; Reload divisor
 	return
 
 ghostwrite_byte_header:
-	goto	write_byte_ext_flash_plus_header	; (This call will also delete the 4kB TOC entry first)
-    ; returns...
+	goto	write_byte_ext_flash_plus_header ; (This call will also delete the 4kB TOC entry first)
+	; returns...
 
 ghostwrite_byte_profile:
-    goto    write_byte_ext_flash_plus	; writes byte and increases address with banking at 0x200000
-    ; returns...
+	goto	write_byte_ext_flash_plus	; writes byte and increases address with banking at 0x200000
+	; returns...
 
 	global	ghostwriter_end_dive
 ghostwriter_end_dive:
@@ -323,53 +385,52 @@
 	movff	ext_flash_address+1,ext_flash_log_pointer+1
 	movff	ext_flash_address+2,ext_flash_log_pointer+2	; Save end-of-profile pointer to store in header
 
-    movff   menupos3,customview_divemode            ; store last customview
+	movff	menupos3,customview_divemode ; store last custom view
 
 	btfss	realdive					; dive longer then one minute
-	goto	ghostwriter_end_dive_common				; No, discard everything
+	goto	ghostwriter_end_dive_common	; No, discard everything
 
 ; In DEBUG compile, keep all simulated dives in logbook, Desat time, nofly, etc...
-    ifndef __DEBUG
-    	btfsc	simulatormode_active		; Are we in simulator mode?
-    	goto	ghostwriter_end_dive_common_sim		; Yes, discard everything
-    endif
+	ifndef __DEBUG
+		btfsc	simulatormode_active			; Are we in simulator mode?
+		goto	ghostwriter_end_dive_common_sim	; Yes, discard everything
+	endif
 
-    btfsc	FLAG_apnoe_mode                         ; In Apnoe mode?
-    goto	ghostwriter_end_dive_common				; Yes, discard everything
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	goto	ghostwriter_end_dive_common	; Yes, discard everything
 
 	; Dive finished (and longer then one minute)
 
-	btfsc	FLAG_apnoe_mode					; Calc max. depth (again) for very short apnoe dives
+	btfsc	FLAG_apnoe_mode				; Calc max. depth (again) for very short apnoe dives
 	call	apnoe_calc_maxdepth
 
 	; calculate desaturation time
-	movff	last_surfpressure_30min+0,int_I_pres_surface+0          ; Pass surface to desat routine !
+	movff	last_surfpressure_30min+0,int_I_pres_surface+0	; Pass surface to desat routine !
 	movff	last_surfpressure_30min+1,int_I_pres_surface+1
 
-	call	deco_calc_wo_deco_step_1_min						; calculate deco in surface mode
-	
-	call	deco_calc_desaturation_time							; calculate desaturation time
-	movlb	b'00000001'											; select ram bank 1
-	
-	movlw	0xFD						; .... End-of-Profile Bytes
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	call	deco_calc_dive_interval_1min	; calculate deco in surface mode
+	call	deco_calc_desaturation_time		; calculate desaturation time
+	banksel	common							; select ram bank 1
+
+	movlw	0xFD							; .... End-of-Profile Bytes
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. Flash
 	movlw	0xFD
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. Flash
 	movff	ext_flash_address+0,ext_flash_log_pointer+0
 	movff	ext_flash_address+1,ext_flash_log_pointer+1
 	movff	ext_flash_address+2,ext_flash_log_pointer+2	; Save end-of-profile pointer to store in header
 
-    ; Set to first address again to store dive length ext_flash_dive_counter:3
-    rcall   ghostwriter_load_pointer        ; Load ext_flash_address:3 from EEPROM .4-.6
+	; Set to first address again to store dive length ext_flash_dive_counter:3
+	rcall	ghostwriter_load_pointer		; Load ext_flash_address:3 from EEPROM .4-.6
 
-    incf_ext_flash_address_0x20	d'6'        ; Skip internal "0xFA 0xFA #Divenumber:2 0xFA 0xFA" Header
-    ; Store dive length
-    movf   ext_flash_dive_counter+0,W
-	call    write_byte_ext_flash_plus_nodel ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
-    movf   ext_flash_dive_counter+1,W
-	call    write_byte_ext_flash_plus_nodel ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
-    movf   ext_flash_dive_counter+2,W
-	call    write_byte_ext_flash_plus_nodel ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
+	incf_ext_flash_address_0x20	d'6'		; Skip internal "0xFA 0xFA #Divenumber:2 0xFA 0xFA" Header
+	; Store dive length
+	movf	ext_flash_dive_counter+0,W
+	call	write_byte_ext_flash_plus_nodel	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
+	movf	ext_flash_dive_counter+1,W
+	call	write_byte_ext_flash_plus_nodel	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
+	movf	ext_flash_dive_counter+2,W
+	call	write_byte_ext_flash_plus_nodel	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
 
 ; profile recording done.
 
@@ -378,16 +439,17 @@
 	movff	EEDATA,lo
 	read_int_eeprom .3
 	movff	EEDATA,hi
-	; +1                        increase total dive counter
-    infsnz  lo,F
+	; +1									; increase total dive counter
+	infsnz	lo,F
 	incf	hi,F
 	; Store new number in EEPROM
 	movff	lo,EEDATA
-	write_int_eeprom	.2
+	write_int_eeprom .2
 	movff	hi,EEDATA
-	write_int_eeprom	.3
+	write_int_eeprom .3
 
-	decf	lo,F		; -1
+	decf	lo,F							; -1
+
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
 	; 2nd: 201000h-201FFFh -> lo=1
@@ -399,382 +461,382 @@
 	movlw	0x20
 	movwf	ext_flash_address+2
 	movlw	.16
-	mulwf	lo							; lo*16 = offset to 0x2000 (up:hi)
+	mulwf	lo								; lo*16 = offset to 0x2000 (up:hi)
 	movf	PRODL,W
 	addwf	ext_flash_address+1,F
 	movf	PRODH,W
 	addwfc	ext_flash_address+2,F
-	
+
 ; Now, write header
 
-	movlw	0xFA						; Header start
-    rcall   ghostwrite_byte_header  ; (This call will also delete the 4kB TOC entry first)
+	movlw	0xFA							; Header start
+	rcall	ghostwrite_byte_header			; (This call will also delete the 4kB TOC entry first)
 	movlw	0xFA
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	; store pointer to begin of diveprofile
-	read_int_eeprom	.4
+	; store pointer to begin of dive profile
+	read_int_eeprom .4
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	read_int_eeprom	.5
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	read_int_eeprom .5
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	read_int_eeprom	.6
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	read_int_eeprom .6
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	; store pointer to end of diveprofile
+	; store pointer to end of dive profile
 	movf	ext_flash_log_pointer+0,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	ext_flash_log_pointer+1,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	ext_flash_log_pointer+2,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	; write rest of header
-	movlw	logbook_profile_version     ; Defined in hwos.inc
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movlw	logbook_profile_version			; Defined in hwos.inc
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Store dive length
-    movf    ext_flash_dive_counter+0,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movf    ext_flash_dive_counter+1,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movf    ext_flash_dive_counter+2,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	; Store dive length
+	movf	ext_flash_dive_counter+0,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movf	ext_flash_dive_counter+1,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movf	ext_flash_dive_counter+2,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	movff	start_year,WREG         ; Date
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movff	start_year,WREG					; Date
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	start_month,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	start_day,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	movff	start_hours,WREG    	; Start of dive time
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	start_hours,WREG				; Start of dive time
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	start_mins,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	btfss	FLAG_apnoe_mode				; Store apnoe max or normal max (Which is only max from the last descent)
-	bra		end_dive1					; Store normal depth
+	btfss	FLAG_apnoe_mode					; Store apnoe max or normal max (Which is only max from the last descent)
+	bra		end_dive1						; Store normal depth
 
 	movff	apnoe_max_pressure+0,lo
 	movff	apnoe_max_pressure+1,hi
-	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
 	movff	lo,apnoe_max_pressure+0
 	movff	hi,apnoe_max_pressure+1
 	
-	movf	apnoe_max_pressure+0,W		; Max. depth
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movf	apnoe_max_pressure+0,W			; Max. depth
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	apnoe_max_pressure+1,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	bra		end_dive2					; skip normal max. depth
-		
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	bra		end_dive2						; skip normal max. depth
+
 end_dive1:
 	movff	max_pressure+0,lo
 	movff	max_pressure+1,hi
-	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
 	movff	lo,max_pressure+0
 	movff	hi,max_pressure+1
-	
+
 	movff	max_pressure+0,WREG				; Max. depth
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	max_pressure+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 end_dive2:
-	movf	divemins+0,W            		; divetime minutes
+	movf	divemins+0,W					; dive time minutes
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	divemins+1,W
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movf	divesecs,W						; divetime seconds
+	movf	divesecs,W						; dive time seconds
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	minimum_temperature+0,WREG		; minimum temperature
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movff	minimum_temperature+1,WREG		
+	movff	minimum_temperature+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movff	last_surfpressure_30min+0,WREG	; airpressure before dive
+	movff	last_surfpressure_30min+0,WREG	; air pressure before dive
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movff	last_surfpressure_30min+1,WREG		
+	movff	last_surfpressure_30min+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	int_O_desaturation_time+0,WREG	; desaturation time in minutes
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	int_O_desaturation_time+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    btfss   FLAG_ccr_mode           ; In CCR mode...
-    bra     end_dive_oc_gaslist     ; No, write OC gases
-    ; Write Diluents...
+	btfss	FLAG_ccr_mode					; In CCR mode...
+	bra		end_dive_oc_gaslist				; No, write OC gases
+	; Write Diluents...
 	movff	opt_dil_O2_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+0,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+0,WREG                   
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+0,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+1,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+1,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+1,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+2,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+2,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+2,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+3,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+3,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+3,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+4,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+4,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
-    bra     end_dive_oc_cc_common
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+4,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
+	bra		end_dive_oc_cc_common
 
-end_dive_oc_gaslist:            	; OC Gases...
+end_dive_oc_gaslist:						; OC Gases...
 	movff	opt_gas_O2_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+0,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+0,WREG                   
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+0,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+1,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+1,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+1,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+2,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+2,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+2,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+3,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+3,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+3,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+4,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+4,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
-;    bra     end_dive_oc_cc_common
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+4,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
+;	bra	 end_dive_oc_cc_common
 
 end_dive_oc_cc_common:
-	movlw	softwareversion_x		; Firmware version
+	movlw	softwareversion_x				; Firmware version
 	rcall	ghostwrite_byte_header
 	movlw	softwareversion_y
 	rcall	ghostwrite_byte_header
-	movf	batt_voltage+0,W		; Battery voltage 
+	movf	batt_voltage+0,W				; Battery voltage 
 	rcall	ghostwrite_byte_header
 	movf	batt_voltage+1,W
 	rcall	ghostwrite_byte_header
 
-	movf    samplingrate,W			; Sampling rate
-    btfsc	FLAG_apnoe_mode         ; Apnoe mode?
-	movlw	samplingrate_apnoe		; Apnoe sampling rate
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movf	samplingrate,W					; Sampling rate
+	btfsc	FLAG_apnoe_mode					; Apnoe mode?
+	movlw	samplingrate_apnoe				; Apnoe sampling rate
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; CNS at beginning of dive
+	; CNS at beginning of dive
 	movff	CNS_start+0,WREG
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movff	CNS_start+1,WREG
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    ; Gradient factor
-    movff	GF_start,WREG
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movff	int_O_gradient_factor+0,WREG	; value limited to 255, only lower byte in use
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	CNS_start+1,WREG
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	; Gradient factor
+	movff	GF_start,WREG
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	int_O_gradient_factor+0,WREG	; value limited to 255, only lower byte in use
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Logbook offset
-    call    do_logoffset_common_read; Read into lo:hi
-    movf    lo,W
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movf    hi,W
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	; Logbook offset
+	call	do_logoffset_common_read		; Read into lo:hi
+	movf	lo,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movf	hi,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Battery info at Byte 59
-    movf    batt_percent,W		; 0-100
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    ; Store 5 Setpoints
-    movff   char_I_setpoint_cbar+0,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+0,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+1,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+1,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+2,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+2,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+3,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+3,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+4,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+4,WREG
-    rcall	ghostwrite_byte_header	; Change depth
+	; Battery info at Byte 59
+	movf	batt_percent,W					; 0-100
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	; Store 5 Setpoints
+	movff	char_I_setpoint_cbar+0,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+0,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+1,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+1,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+2,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+2,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+3,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+3,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+4,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+4,WREG
+	rcall	ghostwrite_byte_header			; Change depth
 
-    movff   opt_salinity,WREG       ; Salinity (0-4%)
-	rcall	ghostwrite_byte_header	; Store Salinity to Dive
+	movff	opt_salinity,WREG				; Salinity (0-4%)
+	rcall	ghostwrite_byte_header			; Store Salinity to Dive
 
 	movff	int_O_CNS_fraction+0,WREG		; copy into bank1
-    rcall	ghostwrite_byte_header; Stores CNS%
-    movff	int_O_CNS_fraction+1,WREG		; copy into bank1
-	rcall	ghostwrite_byte_header; Stores CNS%
+	rcall	ghostwrite_byte_header			; Stores CNS%
+	movff	int_O_CNS_fraction+1,WREG		; copy into bank1
+	rcall	ghostwrite_byte_header			; Stores CNS%
 
 	movff	avg_rel_pressure_total+0,WREG	; Average Depth
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	avg_rel_pressure_total+1,WREG	; Average Depth
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	total_divetime_seconds+0,WREG	; Total dive time (Regardless of start_dive_threshold)
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	total_divetime_seconds+1,WREG	; Total dive time (Regardless of start_dive_threshold)
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	char_I_GF_Low_percentage,WREG	; GF_lo
 	movff	char_I_deco_model,lo
 	decfsz	lo,F							; jump over next line if char_I_deco_model == 1
 	movff	char_I_saturation_multiplier,WREG ; Saturation Multiplier
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	char_I_GF_High_percentage,WREG	; GF_hi
 	movff	char_I_deco_model,lo
 	decfsz	lo,F							; jump over next line if char_I_deco_model == 1
 	movff	char_I_desaturation_multiplier,WREG ; Desaturation Multiplier
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	char_I_deco_model,WREG			; 0 = ZH-L16, 1 = ZH-L16-GF
-	rcall	ghostwrite_byte_header; writes byte and increases address (no banking)
+	rcall	ghostwrite_byte_header			; writes byte and increases address (no banking)
 
-	read_int_eeprom	.2
+	read_int_eeprom .2
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header  ; Total dive counter, low
-	read_int_eeprom	.3
+	rcall	ghostwrite_byte_header			; Total dive counter, low
+	read_int_eeprom .3
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header  ; Total dive counter, high
+	rcall	ghostwrite_byte_header			; Total dive counter, high
 
-    movff   opt_dive_mode,WREG
-	rcall	ghostwrite_byte_header  ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	movff	opt_dive_mode,WREG
+	rcall	ghostwrite_byte_header			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
 
-;   Store all tissue data available
-    movlw   .16
-    movwf   lo
-    lfsr    FSR1,char_O_tissue_N2_saturation+0
+; Store all tissue data available
+	movlw	.16
+	movwf	lo
+	lfsr	FSR1,char_O_tissue_N2_saturation+0
 end_dive_store_tissues_N2:
-    movf    POSTINC1,W
-	bcf		WREG,7						; clear flag bit for ongassing/offgassing
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_N2   ; No
+	movf	POSTINC1,W
+	bcf		WREG,7							; clear flag bit for ongassing/offgassing
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_N2		; No
 
-    movlw   .64
-    movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0 ; 16*4Byte Float = 64Bytes
+	movlw	.64
+	movwf	lo
+	lfsr	FSR1,0x700						; pres_tissue_N2+0 ; 16*4Byte Float = 64Bytes
 end_dive_store_tissues_N2_2:
-    movf    POSTINC1,W
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_N2_2 ; No
+	movf	POSTINC1,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_N2_2		; No
 
-    movlw   .16
-    movwf   lo
-    lfsr    FSR1,char_O_tissue_He_saturation+0
+	movlw	.16
+	movwf	lo
+	lfsr	FSR1,char_O_tissue_He_saturation+0
 end_dive_store_tissues_He:
-    movf    POSTINC1,W
-	bcf		WREG,7						; clear flag bit for ongassing/offgassing
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_He   ; No
+	movf	POSTINC1,W
+	bcf		WREG,7							; clear flag bit for ongassing/offgassing
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_He		; No
 
-    movlw   .64
-    movwf   lo
-    lfsr    FSR1,0x740;pres_tissue_He+0 ; 16*4Byte Float = 64Bytes
+	movlw	.64
+	movwf	lo
+	lfsr	FSR1,0x740						; pres_tissue_He+0 ; 16*4Byte Float = 64Bytes
 end_dive_store_tissues_He_2:
-    movf    POSTINC1,W
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_He_2 ; No
+	movf	POSTINC1,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_He_2		; No
 
-    ; Some deco stuff
-    movff   char_I_depth_last_deco,WREG ; last stop [m]
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   char_I_deco_distance,WREG   ; assumed distance to shown stop
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
+	; Some deco stuff
+	movff	char_I_depth_last_deco,WREG		; last stop [m]
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	char_I_deco_distance,WREG		; assumed distance to shown stop
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Last HUD data
-    movff   hud_battery_mv+0,WREG       ; Last HUD battery value
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   hud_battery_mv+1,WREG       ; Last HUD battery value
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   hud_status_byte,WREG        ; Last HUD status
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
+	; Last HUD data
+	movff	hud_battery_mv+0,WREG			; Last HUD battery value
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	hud_battery_mv+1,WREG			; Last HUD battery value
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	hud_status_byte,WREG			; Last HUD status
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Battery gauge registers [nAs]
-    movff   battery_gauge+0,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+1,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+2,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+3,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+4,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+5,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
+	; Battery gauge registers [nAs]
+	movff	battery_gauge+0,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+1,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+2,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+3,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+4,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+5,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Header stop
+	; Header stop
 	movlw	0xFB
-	rcall	ghostwrite_byte_header		; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movlw	0xFB
-	rcall	ghostwrite_byte_header		; WREG -> Header in ext. flash
-	
-	call	divemode_store_statistics	; Store/update statistics for this unit
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+
+	call	divemode_store_statistics		; Store/update statistics for this unit
 
 	clrf	surface_interval+0
-	clrf	surface_interval+1			; Clear surface interval timer
+	clrf	surface_interval+1				; Clear surface interval timer
 
 ghostwriter_end_dive_common:
 ; Update ext_flash_log_pointer into EEPROM
@@ -786,191 +848,194 @@
 	movff	ext_flash_log_pointer+2,EEDATA
 	write_int_eeprom .6
 
-	bcf		simulatormode_active		; if we were in simulator mode
+	bcf		simulatormode_active			; if we were in simulator mode
 
 ; In DEBUG compile, keep all simulated dives in logbook, Desat time, nofly, etc...
-    ifndef __DEBUG
-	extern	deco_pull_tissues_from_vault
-	btfsc	restore_deco_data					; Restore decodata?
-    call    deco_pull_tissues_from_vault
-	banksel common                  			; Bank1
+	ifndef __DEBUG
+		extern	deco_pull_tissues_from_vault
+		btfsc	restore_deco_data				; Restore decodata?
+		call	deco_pull_tissues_from_vault
+		banksel common							; Bank1
 	endif
 	call	update_battery_registers			; update battery registers into EEPROM
-	goto	surfloop							; and return to surfaceloop
+	goto	surfloop							; and return to surface loop
 
 ghostwriter_end_dive_common_sim:
-    tstfsz  surface_interval+0              	; Was interval zero?
-    bra     ghostwriter_end_dive_common_sim2    ; No
-    tstfsz  surface_interval+1              	; Was interval zero?
-    bra     ghostwriter_end_dive_common_sim2    ; No
-    bra     ghostwriter_end_dive_common     	; Yes, done.
+	tstfsz	surface_interval+0					; Was interval zero?
+	bra		ghostwriter_end_dive_common_sim2	; No
+	tstfsz	surface_interval+1					; Was interval zero?
+	bra		ghostwriter_end_dive_common_sim2	; No
+	bra		ghostwriter_end_dive_common			; Yes, done.
 
 ghostwriter_end_dive_common_sim2:
-    movf    divemins+0,W
-    addwf   surface_interval+0,F
-    movf    divemins+1,W
-	addwfc  surface_interval+1			; Add simulated divetime to surface interval
-    bra     ghostwriter_end_dive_common
+	movf	divemins+0,W
+	addwf	surface_interval+0,F
+	movf	divemins+1,W
+	addwfc	surface_interval+1				; Add simulated dive time to surface interval
+	bra		ghostwriter_end_dive_common
 
-ghostwriter_load_pointer:               ; Load ext_flash_address:3 from EEPROM .4-.6
-	clrf    EEADRH                      ; Make sure to select eeprom bank 0
+ghostwriter_load_pointer:					; Load ext_flash_address:3 from EEPROM .4-.6
+	clrf	EEADRH							; Make sure to select EEPROM bank 0
 	read_int_eeprom	.4
 	movff	EEDATA,ext_flash_address+0
 	read_int_eeprom	.5
 	movff	EEDATA,ext_flash_address+1
 	read_int_eeprom	.6
 	movff	EEDATA,ext_flash_address+2
-    return
+	return
 
-ghostwriter_short_header_init:          ; Proceed one page forward
-    clrf    EEDATA
-    write_int_eeprom .4                 ; ext_flash_address+0 = 0
-    movlw   .16
-    addwf   ext_flash_address+1,F
-    movlw   .0
-    addwfc  ext_flash_address+2,F
-    movlw	0x20
-	cpfseq	ext_flash_address+2			; at address 0x200000?
-	bra     ghostwriter_short_header_init2  ; No
-	clrf	ext_flash_address+2			; Yes, rollover to 0x000000
+ghostwriter_short_header_init:				; Proceed one page forward
+	clrf	EEDATA
+	write_int_eeprom .4						; ext_flash_address+0 = 0
+	movlw	.16
+	addwf	ext_flash_address+1,F
+	movlw	.0
+	addwfc	ext_flash_address+2,F
+	movlw	0x20
+	cpfseq	ext_flash_address+2				; at address 0x200000?
+	bra		ghostwriter_short_header_init2	; No
+	clrf	ext_flash_address+2				; Yes, rollover to 0x000000
 ghostwriter_short_header_init2:
-    movlw   0xF0
-    andwf   ext_flash_address+1,F       ; keep higher nibble, set lower nibble to 0
+	movlw	0xF0
+	andwf	ext_flash_address+1,F			; keep higher nibble, set lower nibble to 0
 
-    movff   ext_flash_address+1,EEDATA
-    write_int_eeprom .5                 ; Write new pointer
-    movff   ext_flash_address+2,EEDATA
-    write_int_eeprom .6                 ; Write new pointer
-    bra     ghostwriter_short_header2   ; Done.
+	movff	ext_flash_address+1,EEDATA
+	write_int_eeprom .5						; Write new pointer
+	movff	ext_flash_address+2,EEDATA
+	write_int_eeprom .6						; Write new pointer
+	bra		ghostwriter_short_header2		; Done.
 
 	global	ghostwriter_short_header
-ghostwriter_short_header:	; Write short header with divenumber into profile memory
+ghostwriter_short_header:					; Write short header with dive number into profile memory
 	; load pointer for profile storing into RAM (Updated in EEPROM after the dive)
-    rcall   ghostwriter_load_pointer        ; Load ext_flash_address:3 from EEPROM .4-.6
+	rcall	ghostwriter_load_pointer		; Load ext_flash_address:3 from EEPROM .4-.6
 
-    ; The following code is used to write a clean new dive after the previous hasn't been
-    ; stored correctly. e.g. after a battery fail during the dive
-    call    ext_flash_byte_read_plus_0x20   ; Into temp1
-    incfsz  temp1,F
-    bra     ghostwriter_short_header_init   ; Not 0xFF -> init page
-    call    ext_flash_byte_read_plus_0x20   ; Into temp1
-    incfsz  temp1,F
-    bra     ghostwriter_short_header_init   ; Not 0xFF -> init page
+	; The following code is used to write a clean new dive after the previous hasn't been
+	; stored correctly. e.g. after a battery fail during the dive
+	call	ext_flash_byte_read_plus_0x20	; Into ext_flash_rw
+	incfsz	ext_flash_rw,F
+	bra		ghostwriter_short_header_init	; Not 0xFF -> init page
+	call	ext_flash_byte_read_plus_0x20	; Into ext_flash_rw
+	incfsz	ext_flash_rw,F
+	bra		ghostwriter_short_header_init	; Not 0xFF -> init page
 
 ghostwriter_short_header2:
-    ; All ok, reload the pointer and start
-    rcall   ghostwriter_load_pointer        ; Load ext_flash_address:3 from EEPROM .4-.6
+	; All ok, reload the pointer and start
+	rcall	ghostwriter_load_pointer		; Load ext_flash_address:3 from EEPROM .4-.6
 
-    ; Clear dive length counter
-    clrf    ext_flash_dive_counter+0
-    clrf    ext_flash_dive_counter+1
-    clrf    ext_flash_dive_counter+2
+	; Clear dive length counter
+	clrf	ext_flash_dive_counter+0
+	clrf	ext_flash_dive_counter+1
+	clrf	ext_flash_dive_counter+2
 
-	; Write short header with divenumber into profile memory
+	; Write short header with dive number into profile memory
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	; Load total number of dives (low byte only)
 	read_int_eeprom .2
-	incf	EEDATA,W							;+1	
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	incf	EEDATA,W						;+1	
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	read_int_eeprom .3
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    ; Keep room for dive length ext_flash_dive_counter:3 (Stored at the end of the dive)
-    ; Writing 0xFF three times here is mandatory
-    ; - 0xFF can be overwritten after the dive
-    ; - ghostwrite_byte_profile takes care of 4kB Page switching
-    ; - fixes an issue when we are at exactly 0xXXX000 here...
+	; Keep room for dive length ext_flash_dive_counter:3 (Stored at the end of the dive)
+	; Writing 0xFF three times here is mandatory
+	; - 0xFF can be overwritten after the dive
+	; - ghostwrite_byte_profile takes care of 4kB Page switching
+	; - fixes an issue when we are at exactly 0xXXX000 here...
 
-    movlw   0xFF
-    call    write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
-    movlw   0xFF
-    call    write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
-    movlw   0xFF
-    call    write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
+	movlw	0xFF
+	call	write_byte_ext_flash_plus_nocnt	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
+	movlw	0xFF
+	call	write_byte_ext_flash_plus_nocnt	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
+	movlw	0xFF
+	call	write_byte_ext_flash_plus_nocnt	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
 
-	movf	samplingrate,W  			; Sampling rate
-	btfsc	FLAG_apnoe_mode				; Apnoe mode?
-	movlw	samplingrate_apnoe			; Apnoe sampling rate
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movf	samplingrate,W					; Sampling rate
+	btfsc	FLAG_apnoe_mode					; Apnoe mode?
+	movlw	samplingrate_apnoe				; Apnoe sampling rate
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .7                          ; Number of divisors
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.7								; Number of divisors
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .0                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.0								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_temperature
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_temperature             ; Divisor temperature
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_temperature					; Divisor temperature
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .1                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.1								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_deco
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_deco                    ; Divisor decodata
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_deco						; Divisor deco data
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .2                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.2								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_gf
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_gf                      ; Divisor gf
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_gf							; Divisor gf
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .3                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.3								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_ppo2_sensors
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_ppo2_sensors            ; Divisor ppO2
-    btfss   FLAG_ccr_mode               ; =1: CCR mode (Fixed ppO2 or Sensor) active
-    movlw   .0                          ; No ppO2 data in OC mode
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_ppo2_sensors				; Divisor ppO2
+	btfss	FLAG_ccr_mode					; =1: CCR mode (Fixed ppO2 or Sensor) active
+	movlw	.0								; No ppO2 data in OC mode
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .4                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.4								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_decoplan
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_decoplan                ; Divisor debug
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_decoplan					; Divisor debug
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .5                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.5								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_cns
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_cns                     ; Divisor CNS
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_cns							; Divisor CNS
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .6                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.6								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_tank
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_tank                    ; Divisor Tank
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_tank						; Divisor Tank
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
 	return
-divemode_store_statistics:	; Store/update statistics for this unit
-    rcall   vault_decodata_into_eeprom  ; update deco data
-	rcall	do_logoffset_common_read	; Existing logbook offset into lo:hi
-	
-	tstfsz	lo							; lo=0?
-	bra		change_logbook_offset1		; No, adjust offset	
-	tstfsz	hi							; hi=0?
-	bra		change_logbook_offset1		; No, adjust offset
-	bra		change_logbook_offset2		; lo=0 and hi=0 -> skip Offset routine
+
+divemode_store_statistics:					; Store/update statistics for this unit
+	call	vault_decodata_into_eeprom		; update deco data
+	call	do_logoffset_common_read		; Existing logbook offset into lo:hi
+
+	tstfsz	lo								; lo=0?
+	bra		change_logbook_offset1			; No, adjust offset	
+	tstfsz	hi								; hi=0?
+	bra		change_logbook_offset1			; No, adjust offset
+	bra		change_logbook_offset2			; lo=0 and hi=0 -> skip Offset routine
+
 change_logbook_offset1:
 	movlw	d'1'
 	addwf	lo
 	movlw	d'0'
 	addwfc	hi
-	rcall	do_logoffset_common_write	; lo:hi -> EEPROM
+	call	do_logoffset_common_write		; lo:hi -> EEPROM
+
 change_logbook_offset2:
 	; Clear lastdive:4
 	banksel	lastdive_time+0
@@ -980,172 +1045,12 @@
 	clrf	lastdive_time+3
 	movff	divemins+0,lastdive_duration+0
 	movff	divemins+1,lastdive_duration+1
-	movff	divesecs,lastdive_duration+2
+	movff	divesecs,  lastdive_duration+2
 	movff	max_pressure+0,lastdive_maxdepth+0
 	movff	max_pressure+1,lastdive_maxdepth+1
 	banksel	common
 
 	; Add more here...
-	return	
-
-	global	do_logoffset_common_write
-do_logoffset_common_write:
-	; TODO: limit [lo:hi] to 9999 ? may arrive here as >= 10000 because of +10 increment option 
-	; SIMPLER WAY: return without writing to eeprom if hi == 0x27 -> 0x2700 = 9984, this is within 
-	; the save range for a +10 increment, shall do it...
-	; mH
-    
-	movff	lo,EEDATA
-	write_int_eeprom	0x0D
-	movff	hi,EEDATA
-	write_int_eeprom	0x0E
-	return
-
-	global	do_logoffset_common_read
-do_logoffset_common_read:
-	clrf	EEADRH
-	read_int_eeprom		0x0D
-	movff	EEDATA,lo
-	read_int_eeprom		0x0E
-	movff	EEDATA,hi					; Existing logbook offset into lo:hi
-	return
-
-
-	global		update_battery_registers
-update_battery_registers:
-	; save battery_gauge:6 into EEPROM 0x07-0x0C
-	clrf	EEADRH
-	movff	battery_gauge+0,EEDATA
-	write_int_eeprom 0x07
-	movff	battery_gauge+1,EEDATA
-	write_int_eeprom 0x08
-	movff	battery_gauge+2,EEDATA
-	write_int_eeprom 0x09
-	movff	battery_gauge+3,EEDATA
-	write_int_eeprom 0x0A
-	movff	battery_gauge+4,EEDATA
-	write_int_eeprom 0x0B
-	movff	battery_gauge+5,EEDATA
-	write_int_eeprom 0x0C
-	movff	battery_type,EEDATA	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
-	write_int_eeprom 0x0F
 	return
 
-
-    global  vault_decodata_into_eeprom
-vault_decodata_into_eeprom:
-    ; Vault in EEPROM 512...1023
-    ; Write 0xAA at 512 to indicate valid data in vault
-    ; Store last time/date
-    ; Store 0x700 to 0x780 (pres_tissue_N2 and pres_tissue_He)
-    movlw   HIGH .512           ; =2
-    movwf   EEADRH
-    movlw   0xAA
-    movwf   EEDATA
-    write_int_eeprom .0
-    ; Store date/time
-    movff   year,EEDATA
-    write_int_eeprom .1
-    movff   month,EEDATA
-    write_int_eeprom .2
-    movff   day,EEDATA
-    write_int_eeprom .3
-    movff   hours,EEDATA
-    write_int_eeprom .4
-    movff   mins,EEDATA
-    write_int_eeprom .5
-    movff   secs,EEDATA
-    write_int_eeprom .6
-
-    movff   int_O_CNS_fraction+0,EEDATA
-    write_int_eeprom .7
-    movff   int_O_CNS_fraction+1,EEDATA
-    write_int_eeprom .8
-    movff   int_O_desaturation_time+0,EEDATA
-    write_int_eeprom .9
-    movff   int_O_desaturation_time+1,EEDATA
-    write_int_eeprom .10
-    movff   surface_interval+0,EEDATA
-    write_int_eeprom .11
-    movff   surface_interval+1,EEDATA
-    write_int_eeprom .12
-    movff   int_O_gradient_factor+0,EEDATA		; value limited to 255, only lower byte in use for value
-    write_int_eeprom .13
-    movff   int_O_nofly_time+0,EEDATA
-    write_int_eeprom .14
-    movff   int_O_nofly_time+1,EEDATA
-    write_int_eeprom .15
-
-    ; Tissue data from 16 to 144
-    movlw   .16
-    movwf   EEADR
-    movlw   .128
-    movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0 ; 32*4Byte Float = 128Bytes
-vault_decodata_into_eeprom2:
-    movff   POSTINC1,EEDATA
-    call    write_eeprom                ; EEDATA into EEPROM@EEADR
-    incf    EEADR,F
-    decfsz  lo,F                        ; All done?
-    bra     vault_decodata_into_eeprom2 ; No
-    clrf    EEADRH
-    return
-
-    global  restore_decodata_from_eeprom
-restore_decodata_from_eeprom:
-    movlw   LOW  .512           ; =0
-    movwf   EEADR
-    movlw   HIGH .512           ; =2
-    movwf   EEADRH
-
-    ; Restore date/time
-    read_int_eeprom .1
-    movff   EEDATA,year
-    read_int_eeprom .2
-    movff   EEDATA,month
-    read_int_eeprom .3
-    movff   EEDATA,day
-    read_int_eeprom .4
-    movff   EEDATA,hours
-    read_int_eeprom .5
-    movff   EEDATA,mins
-    read_int_eeprom .6
-    movff   EEDATA,secs
-    call    rtc_set_rtc
-
-    read_int_eeprom .7
-    movff   EEDATA,int_O_CNS_fraction+0
-    read_int_eeprom .8
-    movff   EEDATA,int_O_CNS_fraction+1
-    read_int_eeprom .9
-    movff   EEDATA,int_O_desaturation_time+0
-    read_int_eeprom .10
-    movff   EEDATA,int_O_desaturation_time+1
-    read_int_eeprom .11
-    movff   EEDATA,surface_interval+0
-    read_int_eeprom .12
-    movff   EEDATA,surface_interval+1
-    read_int_eeprom .13
-    movff   EEDATA,int_O_gradient_factor+0
-    read_int_eeprom .14
-    movff   EEDATA,int_O_nofly_time+0
-    read_int_eeprom .15
-    movff   EEDATA,int_O_nofly_time+1
-
-    ; Tissue data from 16 to 144
-    movlw   .16
-    movwf   EEADR
-    movlw   .128
-    movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0		; 32*4Byte Float = 128Bytes
-restore_decodata_from_eeprom2:
-    call    read_eeprom						; EEPROM@EEADR into EEDATA
-    movff   EEDATA,POSTINC1
-    incf    EEADR,F
-    decfsz  lo,F                        	; All done?
-    bra     restore_decodata_from_eeprom2   ; No
-    clrf    EEADRH
-    return
-
-
- END
\ No newline at end of file
+	END
--- a/src/ghostwriter.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/ghostwriter.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File ghostwriter.inc
+;   File ghostwriter.inc												V2.98
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -8,11 +8,6 @@
 ; HISTORY
 ;  2011-11-27 : [mH] Creation
 
-	extern 	store_dive_data
+	extern	store_dive_data
 	extern	ghostwriter_end_dive
 	extern	ghostwriter_short_header
-	extern	update_battery_registers
-	extern	do_logoffset_common_write
-	extern	do_logoffset_common_read
-
- 
\ No newline at end of file
--- a/src/hwos.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/hwos.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File hwos.inc									REFACTORED VERSION V2.95a1
+;   File hwos.inc									REFACTORED VERSION V2.98
 ;
 ;   OSTC Platform definitions
 ;
@@ -11,173 +11,156 @@
 
 ;=============================================================================
 
-        LIST      P=18F87K22	; change also: Configure->SelectDevice from Mplab
+	LIST	P=18F87K22		; change also: Configure->SelectDevice from Mplab
 
 ;#DEFINE __DEBUG
 
-;#DEFINE french_italian	    	; If defined, use french and italian instead of english and german	
-	
+;#DEFINE french_italian		; If defined, use french and italian instead of english and german
+
 #include <p18f87k22.inc>
-#include <ports.inc>                        ; Portmap
+#include <ports.inc>		; Portmap
 
 ; Firmware definition
-#DEFINE	softwareversion_x		d'2'		; Software version  XX.YY
-#DEFINE	softwareversion_y		d'97'		; Software version  XX.YY
-#DEFINE softwareversion_beta 	0 			; (and 0 for release)
+#DEFINE softwareversion_x		.2			; Software version  XX.YY
+#DEFINE softwareversion_y		.97			; Software version  XX.YY
+#DEFINE softwareversion_beta	.0			; (and 0 for release)
 
 ; Firmware version will appear in "Change Firmware" style
-#DEFINE firmware_expire_year    .18
-#DEFINE firmware_expire_month   .2
-#DEFINE firmware_expire_day     .22
+#DEFINE firmware_expire_year	.19
+#DEFINE firmware_expire_month	.2
+#DEFINE firmware_expire_day	.24
 
-#DEFINE comm_service_key        0xABCDEF
+#DEFINE comm_service_key		0xABCDEF
 
+;-----------------------------EEPROM DATA ------------------------------------
+; Automatic reset of all options when this is changed:
+#define eeprom_opt_serial		0x0006		; Version 0.6
 ;-----------------------------------------------------------------------------
 
-#DEFINE	CCP1CON_VALUE		b'00001100'		; PWM1 for LED dimming
-#DEFINE T2CON_ECO           b'00000100'		; 1:1 Postscaler, 1:1 Prescaler, Timer 2 start -> 980Hz (Good compromise of no-flicker and efficiency)
-#DEFINE T2CON_NORMAL        b'00001110'
-#DEFINE T2CON_FASTEST       b'00001110'		; 1:2 Postscaler, 1:16 Prescaler, Timer 2 start -> 1960Hz (no-flicker)
-
-#DEFINE TMR0H_VALUE         .245             ; RX Timeout (~3ms)
+#DEFINE CCP1CON_VALUE					b'00001100'	; PWM1 for LED dimming
+#DEFINE T2CON_ECO						b'00000100'	; 1:1 Postscaler, 1:1 Prescaler, Timer 2 start -> 980Hz (Good compromise of no-flicker and efficiency)
+#DEFINE T2CON_NORMAL					b'00001110'
+#DEFINE T2CON_FASTEST					b'00001110'	; 1:2 Postscaler, 1:16 Prescaler, Timer 2 start -> 1960Hz (no-flicker)
 
 ; Timing for button hold-down flags
-#DEFINE TMR1H_VALUE_FIRST        .255-.128  ; in steps of 7,8125ms -> 1s
-#DEFINE TMR1H_VALUE_CONT         .255-.32   ; in steps of 7,8125ms -> 0.25s
-#DEFINE TMR1H_VALUE_CONT_DIVE    .255-.64   ; in steps of 7,8125ms -> 0.5s
+#DEFINE TMR1H_VALUE_FIRST				.255-.128	; in steps of 7,8125ms -> 1s
+#DEFINE TMR1H_VALUE_CONT				.255-.32	; in steps of 7,8125ms -> 0.25s
+#DEFINE TMR1H_VALUE_CONT_DIVE			.255-.64	; in steps of 7,8125ms -> 0.5s
 
 ; Color Definitions: 8Bit RGB b'RRRGGGBB'
-#DEFINE	color_red	        b'11100000'     ; (7,0,0)
-#DEFINE	color_dark_red	    b'10000101'     ; (4,1,1)
-#DEFINE	color_violet	    b'11101011'     ; (7,2,3)
-#DEFINE	color_blue	        b'11000111'     ; (6,1,3)
-#DEFINE	color_green	        b'00011100'     ; (0,7,0)
-#DEFINE	color_greenish      b'00111110'     ; (1,7,2)
-#DEFINE color_dark_green    b'00111001'     ; (1,6,1)
-#DEFINE	color_yellow 	    b'11111101'     ; (7,7,1)
-#DEFINE	color_white         b'11111111'     ; (7,7,3)
-#DEFINE	color_black         b'00000000'     ; (0,0,0)
-#DEFINE	color_deepblue      b'00000010'     ; (0,0,2)
-#DEFINE	color_grey	        b'11011111'     ; (6,7,3)
-#DEFINE	color_cyan	        b'11011111'     ; (6,7,3)
-#DEFINE	color_lightblue     b'11011011'     ; (6,7,3)
-#DEFINE color_orange        b'11111000'     ; (7,6,0)
-#DEFINE color_pink          b'11111010'     ; (7,6,2)
+#DEFINE color_red						b'11100000'	; (7,0,0)
+#DEFINE color_dark_red					b'10000101'	; (4,1,1)
+#DEFINE color_violet					b'11101011'	; (7,2,3)
+#DEFINE color_blue						b'11000111'	; (6,1,3)
+#DEFINE color_green						b'00011100'	; (0,7,0)
+#DEFINE color_greenish					b'00111110'	; (1,7,2)
+#DEFINE color_dark_green				b'00111001'	; (1,6,1)
+#DEFINE color_yellow					b'11111101'	; (7,7,1)
+#DEFINE color_white						b'11111111'	; (7,7,3)
+#DEFINE color_black						b'00000000'	; (0,0,0)
+#DEFINE color_deepblue					b'00000010'	; (0,0,2)
+#DEFINE color_grey						b'11011111'	; (6,7,3)
+#DEFINE color_cyan						b'11011111'	; (6,7,3)
+#DEFINE color_lightblue					b'11011011'	; (6,7,3)
+#DEFINE color_orange					b'11111000'	; (7,6,0)
+#DEFINE color_pink						b'11111010'	; (7,6,2)
 
-#DEFINE	FT_TINY             .0
-#DEFINE	FT_SMALL            .1
-#DEFINE	FT_MEDIUM           .2
-#DEFINE	FT_LARGE            .3
-
-#DEFINE warn_depth          .1
-#DEFINE warn_cns            .2
-#DEFINE warn_gf             .3
-#DEFINE warn_ppo2           .4
-#DEFINE warn_ceiling        .5
-#DEFINE warn_gas_in_gaslist .6
-#DEFINE warn_ppo2_hud		.7
-#DEFINE warn_battery        .8
-#DEFINE warn_stop			.9
+#DEFINE FT_TINY							.0
+#DEFINE FT_SMALL						.1
+#DEFINE FT_MEDIUM						.2			; not used
+#DEFINE FT_LARGE						.3			; not used
 
 ; External O2 cell input parameters
-#DEFINE	min_mv		    .80		; = 8mV
-#DEFINE max_mv              .2500       ; = 250mV
-#DEFINE ignore_mv           .3500       ; = 350mV (To suppress ghost readings for long, open cables)
+#DEFINE min_mv							.80			; = 8mV
+#DEFINE max_mv							.2500		; = 250mV
+#DEFINE ignore_mv						.3500		; = 350mV (to suppress ghost readings for long, open cables)
 
 ; Profile recording parameters
-#DEFINE	logbook_profile_version	0x24
-#DEFINE	samplingrate_apnoe	.1	; [seconds]
+#DEFINE logbook_profile_version			0x24
+#DEFINE samplingrate_apnoe				.1			; [seconds]
 
 ; Warning: Divisors must be <.16 !
-#DEFINE	div_temperature		.6	; x samplingrate [s]
-#DEFINE	div_deco			.6	; x samplingrate [s]
-#DEFINE	div_gf				.12	; x samplingrate [s]
-#DEFINE	div_ppo2_sensors    .2	; x samplingrate [s]
-#DEFINE	div_decoplan		.12	; x samplingrate [s]
-#DEFINE div_cns				.12	; x samplingrate [s]
-#DEFINE div_tank			.0	; x samplingrate [s]
+#DEFINE div_temperature					.6			; x samplingrate [s]
+#DEFINE div_deco						.6			; x samplingrate [s]
+#DEFINE div_gf							.12			; x samplingrate [s]
+#DEFINE div_ppo2_sensors				.2			; x samplingrate [s]
+#DEFINE div_decoplan					.12			; x samplingrate [s]
+#DEFINE div_cns							.12			; x samplingrate [s]
+#DEFINE div_tank						.0			; x samplingrate [s]
 
 ; Warning: Information lengths must be <.16 !
-#DEFINE infolength_temperature  .2  ; [byte]
-#DEFINE infolength_deco         .2  ; [byte]
-#DEFINE infolength_gf           .1  ; [byte]
-#DEFINE infolength_ppo2_sensors .9  ; [byte]
-#DEFINE infolength_decoplan     .15 ; [byte]
-#DEFINE infolength_cns          .2  ; [byte]
-#DEFINE infolength_tank         .0  ; [byte]
+#DEFINE infolength_temperature			.2			; [byte]
+#DEFINE infolength_deco					.2			; [byte]
+#DEFINE infolength_gf					.1			; [byte]
+#DEFINE infolength_ppo2_sensors			.9			; [byte]
+#DEFINE infolength_decoplan				.15			; [byte]
+#DEFINE infolength_cns					.2			; [byte]
+#DEFINE infolength_tank					.0			; [byte]
 
 ; "Better Gas" behavior
 ; better_gas_window <= minimum_change_depth !
 ; minimum_change_depth >=5 !
-#DEFINE	minimum_change_depth	.3 			; [m]
-#DEFINE	better_gas_window_neg   .3			; [m] (Depth above change depth)
-#DEFINE	better_gas_window_pos   .1			; [m] (Depth below change depth, if ppO2<opt_ppO2_max)
+#DEFINE minimum_change_depth			.3			; [m]
+#DEFINE better_gas_window_neg			.3			; [m] (Depth above change depth)
+#DEFINE better_gas_window_pos			.1			; [m] (Depth below change depth, if ppO2<opt_ppO2_max)
 
 ; Dive mode limits and thresholds
-#DEFINE	start_dive_threshold 		.100	; [cm]
-#DEFINE	high_altitude_dive_threshold .300	; [cm]
-#DEFINE	apnoe_timeout				.15 	; [min]
-#DEFINE divemode_menuview_timeout   .10		; [s]
-#DEFINE	divemode_timeout_default	.5		; [min]
-#DEFINE	divemode_menu_timeout		.30		; [s]
+#DEFINE start_dive_threshold			.100		; [cm]
+#DEFINE high_altitude_dive_threshold	.300		; [cm]
+#DEFINE apnoe_timeout					.15			; [min]
+#DEFINE divemode_menuview_timeout		.10			; [s]
+#DEFINE divemode_menu_timeout			.30			; [s]
 
-#DEFINE	ppo2_warning_low			.19     ; [cbar] (Default value)
-#DEFINE ppo2_lowest_setting     	.16     ; [cbar] (Minimum value)
-;#DEFINE ppo2_display_high			.120	; [cbar]											## V2.94 moved to p2_deco.c
-#DEFINE	ppo2_warning_high			.160    ; [cbar] (Default value) for bottom/travel gases
-#DEFINE	ppo2_warning_high_deco		.160    ; [cbar] (Default value) for deco gases
-#DEFINE ppo2_highest_setting    	.160    ; [cbar] (Max. Value) for bottom/travel gases
-#DEFINE ppo2_highest_setting_deco	.160    ; [cbar] (Max. Value) for deco gases
+#DEFINE ppo2_warning_low_lowest			.16			; [cbar] (Min.    value) for minimum on OC
+#DEFINE ppo2_warning_low_default		.19			; [cbar] (Default value) for minimum on OC
+#DEFINE ppo2_warning_low_highest		.21			; [cbar] (Max.    value) for minimum on OC
+
+#DEFINE ppo2_warning_loop_lowest		.20			; [cbar] (Min.    value) for minimum on loop
+#DEFINE ppo2_warning_loop_default		.40			; [cbar] (Default Value) for minimum on loop
+#DEFINE ppo2_warning_loop_highest		.60			; [cbar] (Max.    value) for minimum on loop
 
-; NEW	## min ppO2 CC
-#DEFINE	ppo2_warning_low_cc		.40		; [cbar] Default value for loop
-#DEFINE	ppo2_warning_low_cc_min	.20		; [cbar] Default value for loop
-#DEFINE	ppo2_warning_low_cc_max	.60		; [cbar] Default value for loop
+#DEFINE ppo2_warning_high_lowest		.120		; [cbar] (Min.    value) for maximum in none-deco phase
+#DEFINE ppo2_warning_high_default		.140		; [cbar] (Default value) for maximum in none-deco phase
+#DEFINE ppo2_warning_high_highest		.160		; [cbar] (Max.    value) for maximum in none-deco phase
 
-;#DEFINE cns_display_high		.70		; [%]													## V2.94 moved to p2_deco.c
-;#DEFINE cns_warning_high		.100    ; [%]													## V2.94 moved to p2_deco.c
-;#DEFINE gf_display_high    	.75		; [%]													## V2.94 moved to p2_deco.c
-;#DEFINE gf_warning_high	    .100    ; [%]													## V2.94 moved to p2_deco.c
-#DEFINE	depth_warn_mbar 		.13000	; [mbar]
-#DEFINE	wake_up_from_sleep		.1160	; [mbar]
-#DEFINE	gf_display_threshold	.20		; [%]
-#DEFINE simulator_timeout       .15     ; [s]
+#DEFINE ppo2_warning_deco_lowest		.120		; [cbar] (Min.    value) for maximum in deco phase
+#DEFINE ppo2_warning_deco_default		.160		; [cbar] (Default Value) for maximum in deco phase
+#DEFINE ppo2_warning_deco_highest		.160		; [cbar] (Max.    value) for maximum in deco phase
 
-#DEFINE sensor_voting_logic_threshold   .10 ; Threshold in 0.01bar
+#DEFINE depth_warn_mbar					.13000		; [mbar]
+#DEFINE wake_up_from_sleep				.1160		; [mbar]
+#DEFINE simulator_timeout				.15			; [s]
+
+#DEFINE sensor_voting_logic_threshold	.10			; Threshold in 0.01bar
 
 ; Surface mode limits and thresholds
-#DEFINE	cns_display_surface_high .70	; [%]
-#DEFINE	high_altitude_threshold	 .880	; [mbar]
-#DEFINE	max_surfpressure		 .1080	; [mbar]
-#DEFINE	timeout_surfacemode		 .90	; [s]
-#DEFINE timeout_calibrate_menu   .240   ; [s]
-#DEFINE timeout_ccr_surface      .240   ; [s]
+#DEFINE high_altitude_threshold			.880		; [mbar]
+#DEFINE max_surfpressure				.1080		; [mbar]
+#DEFINE timeout_surfacemode				.90			; [s]
+#DEFINE timeout_calibrate_menu			.240		; [s]
+#DEFINE timeout_ccr_surface				.240		; [s]
 
 ; Decomodel paramters
-#DEFINE	deco_distance			.10		; [dm]
+#DEFINE deco_distance					.10			; [dm]
 
 ; Color-code parameters for the divemode
-;#DEFINE	color_code_cns_high			.100	; [%]											## V2.94 moved to p2_deco.c
-;#DEFINE	color_code_gf_warn_high 	.101	; [%]											## V2.94 moved to p2_deco.c
-#DEFINE	color_code_velocity_warn_high 	.11		;[m/min]
-#DEFINE	color_code_velocity_attn_high 	.10		;[m/min]
-
-; Velocity threshold
-#DEFINE	velocity_display_threshold_1	.3	; [m/min]
+#DEFINE color_code_velocity_warn_high	.11			; [m/min]
+#DEFINE color_code_velocity_attn_high	.10			; [m/min]
+#DEFINE velocity_display_threshold_1	.3			; [m/min]
 
 ; Battery thresholds
-#DEFINE lithium_36v_empty       .2400   ; [mV] Saft 3,6V LS14500 AA - threshold for battery percent display
-#DEFINE	lithium_36v_low			.2000	; [mV] (Must be bigger then aa_15v_high!)
-#DEFINE	aa_15v_high				.1550	; [mV] Energizer 1,5V E2 AA
-#DEFINE	aa_15v_low				.1100	; [mV] According to Energizer Datasheet EBC-4201R, Page 2
-#DEFINE color_code_battery_low  .10     ; [%]
-#DEFINE battery_show_level      .24     ; [%]
+#DEFINE lithium_36v_empty				.2400		; [mV] Saft 3,6V LS14500 AA - threshold for battery percent display
+#DEFINE lithium_36v_low					.2000		; [mV] (Must be bigger then aa_15v_high!)
+#DEFINE aa_15v_high						.1550		; [mV] Energizer 1,5V E2 AA
+#DEFINE aa_15v_low						.1100		; [mV] According to Energizer Datasheet EBC-4201R, Page 2
+#DEFINE color_code_battery_low			.10			; [%]
+#DEFINE battery_show_level				.24			; [%]
 
 ; 3,6V battery sensing data points at 70mA load
-#DEFINE lithium_36v_75          .3000   ; [mV]
-#DEFINE lithium_36v_50          .2900   ; [mV]
-#DEFINE lithium_36v_25          .2600   ; [mV]
-#DEFINE lithium_36v_10          .2500   ; [mV]
+#DEFINE lithium_36v_75					.3000		; [mV]
+#DEFINE lithium_36v_50					.2900		; [mV]
+#DEFINE lithium_36v_25					.2600		; [mV]
+#DEFINE lithium_36v_10					.2500		; [mV]
 	
 ; Capacity for 2.4Ah Saft LS14500 and 0.8Ah Panasonic UR14500P
 ; battery_gauge:6 is nAs
@@ -186,719 +169,799 @@
 ; or b) devide through 121 -> Result is in percent of a 0.8Ah Battery
 
 ; For internal battery gauging
-#DEFINE	internal_saft_capacity		.364
-#DEFINE	internal_panasonic_capacity	.121
+#DEFINE internal_saft_capacity			.364
+#DEFINE internal_panasonic_capacity		.121
 
 ; For gauge IC	
-#DEFINE	saft_capacity		.281	; 2.4Ah/0.085mAh/100 [%]
-#DEFINE	saft_offset			.37300  ; 65536-(2.4Ah/0.085mAh)
+#DEFINE saft_capacity					.281		; 2.4Ah/0.085mAh/100 [%]
+#DEFINE saft_offset						.37300		; 65536-(2.4Ah/0.085mAh)
 
-#DEFINE	panasonic_capacity	.94		; 0.8Ah/0.085mAh/100 [%]
-#DEFINE	panasonic_offset	.56124	; 65536-(0.8Ah/0.085mAh)
+#DEFINE panasonic_capacity				.94			; 0.8Ah/0.085mAh/100 [%]
+#DEFINE panasonic_offset				.56124		; 65536-(0.8Ah/0.085mAh)
+
+#DEFINE ncr18650_capacity				.364		; 3.1Ah/0.085mAh/100 [%]
+#DEFINE ncr18650_offset					.29065		; 65536-(3.1Ah/0.085mAh)
 
-#DEFINE	ncr18650_capacity	.364	; 3.1Ah/0.085mAh/100 [%]
-#DEFINE	ncr18650_offset		.29065	; 65536-(3.1Ah/0.085mAh)
-	
-#DEFINE	ur16650_capacity	.271	; 2.3Ah/0.085mAh/100 [%]
-#DEFINE	ur16650_offset		.38477	; 65536-(2.3Ah/0.085mAh)
-	
-#DEFINE	current_sleepmode           .31
-#DEFINE	current_backlight_multi     .115    ; *CCPR1L+current_backlight_offset
-#DEFINE	current_backlight_offset    .216
-#DEFINE	current_speed_eco           .1914
-#DEFINE	current_speed_normal        .4027
-#DEFINE	current_speed_fastest       .5050
-#DEFINE current_ir_reciever         .139
-#DEFINE current_compass             .28
+#DEFINE ur16650_capacity				.271		; 2.3Ah/0.085mAh/100 [%]
+#DEFINE ur16650_offset					.38477		; 65536-(2.3Ah/0.085mAh)
+
+#DEFINE current_sleepmode				.31
+#DEFINE current_backlight_multi			.115		; * CCPR1L + current_backlight_offset
+#DEFINE current_backlight_offset		.216
+#DEFINE current_speed_eco				.1914
+#DEFINE current_speed_normal			.4027
+#DEFINE current_speed_fastest			.5050
+#DEFINE current_ir_receiver				.139
+#DEFINE current_compass					.28
 
 ; Brightness thresholds (between zero (off) and 255 (max. power))
-#DEFINE	ambient_light_max_high_36V	.170
-#DEFINE	ambient_light_max_high_cr  	.240
-#DEFINE	ambient_light_max_high_15V  .140
-#DEFINE	ambient_light_min_high		.35
-#DEFINE	ambient_light_max_medium 	.125
-#DEFINE	ambient_light_min_medium 	.25
-#DEFINE	ambient_light_max_eco		.70
-#DEFINE	ambient_light_min_eco		.10         ; Must be the lowest value!
+#DEFINE ambient_light_max_high_36V		.170
+#DEFINE ambient_light_max_high_cr		.240
+#DEFINE ambient_light_max_high_15V		.140
+#DEFINE ambient_light_min_high			.35
+#DEFINE ambient_light_max_medium		.125
+#DEFINE ambient_light_min_medium		.25
+#DEFINE ambient_light_max_eco			.70
+#DEFINE ambient_light_min_eco			.10			; must be the lowest value!
 
 ; IR Link timeout
-#DEFINE ir_timeout_value            .64         ; multiples of 62,5ms
+#DEFINE ir_timeout_value				.64			; multiples of 62,5ms
 
 ; Sp control constants
-#DEFINE surface_sp                  .50         ; in cbar
+#DEFINE surface_sp						.50			; in cbar
 
 ; Gaslist hard-coded limits
-#DEFINE gaslist_min_o2              .7          ; Minimum O2 [%]
-#DEFINE gaslist_max_change_depth    .99         ; Max. change depth [m]
-#DEFINE gaslist_sp_stepsize         .10         ; Steps for Setpoint Setup [cbar]
-#DEFINE gaslist_sp_max              .160        ; Max. Setpoint [cbar]
-#DEFINE gaslist_sp_min              .50         ; Min. Setpoint [cbar]
+#DEFINE gaslist_min_o2					.5					; Minimum O2 [%]
+#DEFINE gaslist_max_He					.100-gaslist_min_o2	; Maximum He [%]
+
+#DEFINE gaslist_max_change_depth		.99			; Max. change depth [m]
+#DEFINE gaslist_sp_stepsize				.10			; Steps for Setpoint Setup [cbar]
+#DEFINE gaslist_sp_max					.160		; Max. Setpoint [cbar]
+#DEFINE gaslist_sp_min					.50			; Min. Setpoint [cbar]
 
 ; Compass display
-#DEFINE compass_fast_treshold       .9          ; show new heading instantly if new and old > compass_fast_treshold
-#DEFINE compass_averaging           .10         ; numbers of extra averaging
-
-; Hardware defines
-#DEFINE battery_gauge_available		hardware_flag,0	; OSTC has rechargeable battery with battery management chip
-#DEFINE ambient_sensor			hardware_flag,1	; OSTC has an ambient light sensor
-#DEFINE analog_o2_input			hardware_flag,2	; OSTC has analog inputs and S8 digital
-#DEFINE optical_input			hardware_flag,3	; OSTC has an digital optical input
-#DEFINE ble_available			hardware_flag,4	; OSTC has an BLE module
-#DEFINE	ostc_rx_present			hardware_flag,5	; OSTC_RX circuity present
-;unused
-;unused
-
-; Hardware flag byte:
-; BIT0 = OSTC has rechargeable battery with battery management chip
-; BIT1 = OSTC has an ambient light sensor
-; BIT2 = OSTC has analog inputs and S8 digital
-; BIT3 = OSTC has an digital optical input
-; BIT4 = OSTC has an BLE module
-; BIT5 = OSTC_RX circuity present
-; BIT6 = unused
-; BIT7 = unused
-	
-	
-;---------------------------- Macros ------------------------------------
-
-TSTOSS  macro opt_reg           ; TeST Option Skip if not Zero
-    movff   opt_reg,WREG
-    tstfsz  WREG,A
-    bra     $+4
-    endm
-
-;---------------------------- Bank0 DATA ------------------------------------
-isr_backup  equ		    0x60
-isr_backup  udata_ovr   isr_backup    ; Reserved space for interupt data
- 
-;---- Backup for general registers
-isr_prod    			res 2
-
-;---- MS5541 subroutines
-amb_pressure			res	2
-temperature				res	2
+#DEFINE compass_fast_treshold			.9			; show new heading instantly if new and old > compass_fast_treshold
+#DEFINE compass_averaging				.10			; numbers of extra averaging
 
-C1 			            res 2   ; Decoded calibration data
-C2          			res 2
-C3              		res 2
-C4              		res 2   ; Here: C4-250
-C5              		res 2   ; Here: Reference Temperature UT1 = 8*C5 + 10000 (u16 range 10.000 .. +42.760)
-C6              		res 2
-D1              		res 2   ; raw pressure
-D2              		res 2   ; raw temperature
-xdT						res	2
-xdT2					res	2
-OFF						res	2
-SENS					res	2
-dLSB            		res 1   ; Pressure sensor interface 
-dMSB            		res 1
-clock_count     		res 1
-sensor_state_counter 	res 1	; counts to eight for state maschine
-amb_pressure_avg 		res 2
-temperature_avg			res	2
-minimum_temperature		res 2	; minimum temperature
-last_temperature		res 2
-last_pressure			res 2
-last_pressure_velocity	res 2   ; For velocity
-last_surfpressure 		res 2
-last_surfpressure_15min res 2
-last_surfpressure_30min res 2
-rel_pressure			res 2
-sim_pressure			res 2   ; hold simulated pressure in mbar if in Simulator mode
-max_pressure			res 2
-avg_rel_pressure		res 2
-avg_rel_pressure_total 	res 2
-;---- Data for ISR math subroutines
-isr_xC          		res 4
-isr_xA       		   	res 2
-isr_xB         			res 2
-
-;---- Data for ISR routines
-isr1_temp       	res 1		; ISR temp variable, used in ms5541.asm, isr_rtcc, isr_battery_gauge
-isr2_temp       	res 1		; ISR temp variable, used isr_battery_gauge
-
-;---- Display brightness
-max_CCPR1L			res	1		; Max. brightness value for CCPR1L
-
-; Battery gauge (nAs, nC)
-battery_gauge		res	6		; 48Bit -> 78Ah max...
-
-; IR/S8-Link
-ir_s8_buffer        res .18     ; temporally used in get_calibration_data for the raw (packed) calibration data
-ir_s8_counter       res 1
-ir_S8_timeout       res 1       ; Timeout for valid data
-
-; Compass raw data
-compass_DX          res 2
-compass_DY          res 2
-compass_DZ          res 2
-
-accel_DX            res 2
-accel_DY            res 2
-accel_DZ            res 2
-
-; Compass FILTERED data
-compass_DX_f        res 2
-compass_DY_f        res 2
-compass_DZ_f        res 2
+; Bit Masks	for communication with p2_deco.c - char_O_deco_status
+#define DECO_STATUS_MASK				.3
 
-accel_DX_f          res 2
-accel_DY_f          res 2
-accel_DZ_f          res 2
-
-; Compass calibration data
-compass_CX_f        res 2
-compass_CY_f        res 2
-compass_CZ_f        res 2
-
-; Compass more data
-compass_heading     res 2       ; Corrected heading (in 1°) : -180 .. 180
-compass_heading_old res 2       ; Old heading (For smoother display)
-compass_heading_shown res 2     ; Displayed heading
-;compass_roll       res 2       ; Rotation around the X axis
-;compass_pitch      res 2       ; Rotation around the Y axis
-
-compass_a           res 2       ; Tmp data for Q15 arithmetics
-compass_b           res 2
-compass_r           res 3
-
-CNS_start           res 2       ; CNS value at beginning of dive
-GF_start            res 1       ; GF value at beginning of dive
-
-speed_setting       res 1       ; =1: Eco, =2: Normal, =3: Fastest
-
-;---- Data for graphical compass
-xRD             	res 2       ; virtual compass ruler offset
-xRDr            	res 2       ; virtual compass ruler offset - right end
-xRD180          	res 2       ; virtual compass ruler offset for the -180 marker
-xLO             	res 1       ; lo backup to prevent trashing
-xHI             	res 1       ; hi backup to prevent trashing
-xCM             	res 1       ; compass bearing relative position
-compass_bearing 	res 2       ; this is where the bearing menu stores the actual heading for bearing
-
-;---------------------------- Common DATA ------------------------------------
-
-common          equ         0x100       ; Alias for "banksel common"
-common          udata_ovr   common      ; Bank1 general variables
-
-;---- Time and Date
-secs					res 1           
-mins					res 1
-hours					res 1
-day						res 1
-month					res 1
-year					res 1
-surface_interval		res 2
+; Bit Flags for communication with p2_deco.c - char_O_deco_status
+#define DECO_STATUS_0_FLAG				.0
+#define DECO_STATUS_1_FLAG				.1
+#define DECO_MODE_LOOP_FLAG				.2
+#define DECO_MODE_PSCR_FLAG				.3
+#define DECO_PLAN_FLAG					.4
+#define DECO_CNS_FLAG					.5
+#define DECO_VOLUME_FLAG				.6
+#define DECO_ASCENT_FLAG				.7
 
-flag1					res 1
-flag2					res 1
-flag3					res 1
-flag4					res 1
-flag5					res 1
-flag6					res 1
-flag7					res 1
-flag8					res 1
-flag9					res 1
-flag10					res 1
-flag11					res 1
-flag12					res 1
-flag13					res 1
-flag14					res 1
-
-hardware_flag			res 1           ; hardware descriptor flag
-
-temp1			res 1
-temp2			res 1
-
-;---- Interface to wait macros
-wait_temp       res 1
-waitms_temp     res 1
-
-;---- Interface to graphic subroutines (aa_wordprocessor, color_processor, ...)
-win_leftx2      res 1
-win_top         res 1
-win_width       res 2
-win_height      res 1
-win_bargraph    res 1
-win_color1      res 1
-win_color2      res 1
-win_font        res 1
-
-;---- Draw subroutines
-tft_temp4       res 1
-tft_temp3       res 1
-tft_temp2       res 1
-tft_temp1       res 1
-
-;---- data conversion subroutines
-lo              res 1
-hi              res 1
-up				res 1
-
-;---- RS232 temp variables
-uart1_temp      res 1
-uart2_temp      res 1
-uart3_temp      res 1
-
-;---- Data for math subroutines
-divA            res 2
-divB            res 1
-xC              res 4
-xA              res 2
-xB              res 2
-sub_c           res 2
-sub_a           res 2
-sub_b           res 2
-
-;---- Data for conversion subroutines
-cvt_flags       res 2
-ignore_digits   res 1
+; Bit Flags for communication with p2_deco.c - char_O_main_status
+;										.0			; unused
+;										.1			; unused
+;       DECO_MODE_LOOP_FLAG				.2			; defined below, also used for char_O_main_status
+;       DECO_MODE_PSCR_FLAG				.3			; defined below, also used for char_O_main_status
+#define DECO_GASCHANGE_OVRD				.4
+;										.5			; unused
+#define DECO_BOTTOM_FLAG				.6
+;										.7			; unused
 
-#define leftbind            cvt_flags,0
-#define ignore_digit3       cvt_flags,1
-#define ignore_digit4       cvt_flags,2
-#define ignore_digit5       cvt_flags,3
-#DEFINE enable_screen_dumps cvt_flags,4 ; =1: Ignore vin_usb, wait for "l" command (Screen dump
-#DEFINE screen_type         cvt_flags,5 ; =1: display1, =0; display0
-#DEFINE	compass_type	    cvt_flags,6 ; =1: compass1, =0: compass0
-#DEFINE	analog_switches	    cvt_flags,7 ; =1: Analog switches available
-
-#DEFINE	compass_type2	    cvt_flags+1,0   ; =1: Compass2, =0: Compass1 or compass0
-
-
-;---- Misc.
-timeout_counter 		res 1
-timeout_counter2		res 1
-timeout_counter3		res 1
-batt_voltage			res 2			; Battery voltage in mV
-batt_percent            res 1           ; Battery in percent (1-100)
-ambient_light			res 2			; ambient_light level
-lo_temp					res 1
-hi_temp					res 1
-convert_value_temp      res 3           ; used in menu_battery_state_convert_date
-active_gas				res 1			; the currently breathed gas (1-5)
-active_diluent          res 1           ; backup when switching back from bailout to CCR/pSCR loop
-warning_counter			res 1			; Counts amount of warning in divemode
-warning_page            res 1           ; current # of warning page
-
-; Remind history for menu processor (and such):
-menustack               res 5           ; menu stack
-menupos					res 1           ; Logbook and divemode menu
-menupos2				res 1           ; For dive mode simulator and pre-menu
-menupos3				res 1           ; For Customviews
-menupos4				res 1           ; For divemode menu
-
-; Apnoe stuff that must be in bank common
-apnoe_mins				res 1
-apnoe_secs				res 1
-apnoe_max_pressure		res 2
-
-; Divemode
-divemins				res 2
-divesecs				res 1
-samplingrate            res 1
-samplesecs_value		res 1
-divisor_temperature		res 1
-divisor_deco			res 1
-divisor_gf				res 1
-divisor_ppo2_sensors	res 1
-divisor_decoplan		res 1
-divisor_cns				res 1
-divisor_tank            res 1
-average_depth_hold      res 4
-average_depth_hold_total res 4
-total_divetime_seconds	res 2
-average_divesecs        res 2   ; For the resettable stopwatch
-decodata				res 2
-apnoe_timeout_counter 	res 1
-apnoe_surface_mins 		res 1
-apnoe_surface_secs		res 1
-
-; Profile storing
-AlarmType				res 1
-samplesecs				res 1
-EventByte				res 1
-EventByte2				res 1
-ProfileFlagByte			res 1
-
-; External flash
-ext_flash_address		res 3	; 24bit Address
-ext_flash_log_pointer	res 3	; 24bit Address for logbook profile storing
-ext_flash_dive_counter  res 3   ; 24bit Counter for dive length (increased in write_byte_ext_flash_plus)
-
-; I2C
-i2c_temp            res 2       ; Temp
-
-; O2 Sensor data
-o2_mv_sensor1       res 2       ; in 0.1mV steps
-o2_mv_sensor2       res 2       ; in 0.1mV steps
-o2_mv_sensor3       res 2       ; in 0.1mV steps
-o2_ppo2_sensor1     res 1       ; Sensor1 ppO2 (in 0.01bar steps)
-o2_ppo2_sensor2     res 1       ; Sensor2 ppO2 (in 0.01bar steps)
-o2_ppo2_sensor3     res 1       ; Sensor3 ppO2 (in 0.01bar steps)
-hud_status_byte     res 1
-;Status Byte/
-#DEFINE hud_connection_ok       hud_status_byte,0	;Bit0 = 1 -> HUD connection ok
-;Bit1 = 1 -> HUD is calibrated
-;Bit2 = 1 -> HUD Battery is low (<3000mV)
-#DEFINE	sensor1_active          hud_status_byte,3	;=1: Sensor1 is active
-#DEFINE	sensor2_active          hud_status_byte,4   ;=1: Sensor2 is active
-#DEFINE	sensor3_active          hud_status_byte,5   ;=1: Sensor3 is active
-;Bit6 unused in stand-alone HUD
-;Bit7 unused in stand-alone HUD
-
-sensor_setpoint     	res 1       ; sensor ppo2 in 0.01bar for deco routine
-
-better_gas_number	res 1       ; number (1-5) of the "better gas" in divemode, =0: no better gas available
-customview_divemode 	res 1       ; keeps last custom view
-customview_surfmode 	res 1
-safety_stop_countdown	res 1		; counts seconds of safety stop
-tft_update_flags	res 3		; probably more then needed...
-
-; bank common 1 Byte left here...
-
-
-;---------------------------- TMP DATA ---------------------------------------
-; Space for various overlayed data from color, word, menu processors, etc.
-; 
-
-tmp             udata_ovr   0x1A0       ; Bank1 shared TMP space
-tmp             equ         0x1A0       ; Alias for CBLOCK directive.
-                res         0x05F       ; RESERVED area.
-
-;---------------------------- Common2 DATA ------------------------------------
+; Bit Values for communication with p2_deco.c
+#define DECO_STATUS_INIT				.3
+#define DECO_MODE_LOOP					.4
+#define DECO_MODE_PSCR					.8
+#define DECO_PLAN_ALTERNATE				.16
+#define DECO_CNS_CALCULATE				.32
+#define DECO_VOLUME_CALCULATE			.64
+#define DECO_ASCENT_DELAYED				.128
 
-common2          equ         0xA00       ; Alias for "banksel common"
-common2          udata_ovr   common2     ; Bank1 general variables
-
-s8_rawdata_sensor1			res 3	; 24bit A/D raw data from S8 HUD sensor 1
-s8_rawdata_sensor2			res 3	; 24bit A/D raw data from S8 HUD sensor 2
-s8_rawdata_sensor3			res 3	; 24bit A/D raw data from S8 HUD sensor 3
-
-hud_battery_mv				res 2   ; hud/ppo2 monitor battery voltage in mV
-start_day					res 1   ; At start of dive (For logbook)
-start_month					res 1   ; At start of dive (For logbook)
-start_year					res 1   ; At start of dive (For logbook)
-start_hours					res 1   ; At start of dive (For logbook)
-start_mins					res 1   ; At start of dive (For logbook)
-
-old_velocity				res 4   ; Stores the last 4 speeds (8 seconds) in m/min
-opt_gas_type_backup			res 5   ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-opt_dil_type_backup			res 5   ; 0=Disabled, 1=First, 2=Normal
-
-opt_OC_bail_gas_change_backup	res 5   ; Gas change depths OC/Bailout
-opt_dil_change_backup  			res 5	; Gas change depths Diluents
-  
-internal_battery_capacity	res 2	; For internal battery gauging
-battery_capacity			res 2	; For battery gauge IC
-battery_offset				res 2	; For battery gauge IC
-
-analog_sw1_raw				res 2	; idle values (average)
-analog_sw2_raw				res 2	; idle values (average)
-analog_counter				res 1	; for averaging
-analog_sw1					res 1	; analog value for switch 1
-analog_sw2					res 1	; analog value for switch 2
-battery_type				res 1	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
-uptime						res 4	; Uptime [s]
-lastdive_time				res 4	; Time since last dive [s]
-lastdive_duration			res 3	; mins:2 and secs
-lastdive_maxdepth			res 2	; in mbar	
-battery_acumulated_charge   res 2   ; Raw values in battery gauge IC
-gauge_status_byte			res 1	; Gauge IC status byte
-button_polarity				res 1	; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
-gaslist_gas_global			res 1	; for color coding the gas lists
-;active_gas_type			res 1	; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents	
-rx_buffer					res .48 ; Buffer for RX data (Slots 0-7)
-rx_firmware					res 2	; The RX firmware version xx.yy
-
-gas6_O2_ratio				res 1	; gas6 O2 ratio
-gas6_He_ratio				res 1	; gas6 He ratio
-gas6_temp					res 1	; temp used in divemenu_tree.asm
-
-
-;-----------------------------------------------------------------------------
-; Reserve BANK2 for general purpose buffer (strings, images, etc).
-; NOTE: Needs to be aligned with a bank (LOW(buffer)==0).
-buffer          udata_ovr   0x200
-buffer          res .256
-
-opt_table       equ         0xE00
-opt_table       udata_ovr   opt_table
+; Bit Flags for char_O_deco_warnings
+#define IBCD_warning					.0
+#define IBCD_warning_lock				.1
+#define mbubble_warning					.2
+#define mbubble_warning_lock			.3
+#define outside_warning					.4
+#define outside_warning_lock			.5
+#define stoptable_overflow				.6
+#define deco_flag						.7
 
-;---- Dive Options
-opt_gas_O2_ratio        res 5   ; Needed because deco gaslist use N2
-opt_dil_O2_ratio        res 5   ; Must be in line with opt_gas_O2_ratio
-opt_gas_He_ratio        res 5   ; He ratio Gas1-5
-opt_dil_He_ratio        res 5   ; Must be in line with opt_gas_He_ratio
-opt_gas_type            res 5   ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-opt_dil_type            res 5   ; 0=Disabled, 1=First, 2=Normal -> ; Must be in line with opt_gas_type
-opt_dive_mode           res 1   ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-opt_ccr_mode            res 1   ; =0: Fixed SP, =1: Sensor
-opt_OC_bail_gas_change  res 5   ; Gas change depths OC/Bailout
-char_I_dil_change	res 5	; Work-Around for 2.97 stable
-	
-;---- Managing Settings
-opt_brightness          res 1   ; =0: Eco, =1:Medium, =2:Full
-opt_salinity            res 1	; 0-5%
-#DEFINE opt_name_length    .60  ; Custom text string 5 rows with 12 chars
-opt_name                res opt_name_length
-opt_language            res 1   ; Current language. 0=EN, 1=DE, 2=FR, 3=SP
-opt_units               res 1   ; 0:m/°C, 1:ft/°F
-opt_dateformat		res 1	; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
-opt_last_stop           res 1   ; =3:3m, =4:4m, =5:5m, =6:6m
-opt_aGF_high            res 1   ; Alternative GF HIGH
-opt_aGF_low             res 1   ; Alternative GF LOW
-opt_GF_high             res 1   ; GF HIGH
-opt_GF_low              res 1   ; GF LOW
-opt_enable_aGF          res 1   ; =1: aGF can be selected underwater
-opt_compass_gain        res 1   ; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
-opt_sampling_rate       res 1   ; =1: 10s, =0: 2s
-opt_dive_color_scheme   res 1   ; 0-3
-opt_pressure_adjust     res 1   ; SIGNED int (two's complement), -20/+20mbar max.
-opt_enable_safetystop   res 1   ; =1: A safety stop is shown
-opt_calibration_O2_ratio    res 1   ; %O2 of calibration gas
-opt_x_s1                res 2	; calibration factor (Not stored in EEPROM)
-opt_x_s2                res 2	; calibration factor (Not stored in EEPROM)
-opt_x_s3                res 2	; calibration factor (Not stored in EEPROM)
-opt_sensor_fallback     res 1   ; NOT USED ANY MORE, KEPT FOR COMPATIBILITY WITH EEPROM IMAGE
-opt_flip_screen         res 1   ; =1: Flip the screen
-opt_cR_button_left      res 1   ; Left button sensitivity (cR hardware)
-opt_cR_button_right     res 1   ; Right button sensitivity (cR hardware)
-opt_modwarning          res 1   ; =1:do a red blinking warning, =0:default behaviour
-opt_vsitextv2           res 1   ; =1:use the depth dependent ascend rate limits
-opt_vsigraph            res 1   ; =1:draw the graphical VSI bar
-opt_showppo2            res 1   ; =1:always show the ppO2 value in the warning position
-opt_temperature_adjust  res 1   ; SIGNED int (two's complement), -2.0/+2.0 °C max.
-opt_safety_stop_length  res 1   ; [s]
-opt_safety_stop_start   res 1   ; [cbar]
-opt_safety_stop_end     res 1   ; [cbar]
-opt_safety_stop_reset   res 1   ; [cbar]
-opt_diveTimeout			res 1	; Timeout for Divemode [min]
-opt_sim_setpoint_number	res 1	; NEW setpoint to use for deco calculation
-opt_calc_asc_gasvolume	res 1	; NEW calculate OC gas volume needs for ascent
-opt_sim_use_aGF			res 1	; NEW use GF (no) or aGF (yes) for deco calculation
-opt_enable_IBCD			res 1	; NEW enable IBCD warning
-opt_sat_multiplier_gf		res 1	; Bühlmann safety factor for GF deco
-opt_desat_multiplier_gf		res 1	; Bühlmann safety factor for GF deco
-opt_sat_multiplier_non_gf	res 1	; Bühlmann safety factor for NON-GF deco
-opt_desat_multiplier_non_gf	res 1	; Bühlmann safety factor for NON-GF deco
+; Bit Flags for status on CHARs
+#define char_invalid_flag				.7
 
-;-----------------------------EEPROM DATA ------------------------------------
-; Automatic reset of all options when this is changed:
-#define    eeprom_opt_serial   0x0006   ; Version 0.6
+; Bit Flags for status on INTs
+#define int_invalid_flag				.2
+#define int_not_yet_computed			.3
+#define int_is_zero						.3
+#define int_low_flag					.4
+#define int_high_flag					.5
+#define int_attention_flag				.6
+#define int_warning_flag				.7
 
 ;-----------------------------------------------------------------------------
 ; Flags
-#DEFINE	switch_left				flag1,0
-#DEFINE	switch_right			flag1,1			
-#DEFINE neg_flag				flag1,2	;     e.g. sub16 (sub_c = sub_a - sub_b)
-#DEFINE pressure_refresh 		flag1,3	; =1: A new pressure/temperature is available
-#DEFINE	sleepmode				flag1,4	; =1: In Sleepmode
-#DEFINE	tft_is_dimming			flag1,5	; =1: The TFT is dimming, ignore light sensor
-#DEFINE	display_velocity		flag1,6	; =1: show velocity
-#DEFINE	no_sensor_int			flag1,7	; =1: block any further access to pressure sensor
+
+; Hardware defines
+#DEFINE battery_gauge_available	hardware_flag,0		; =1: OSTC has rechargeable battery with battery management chip
+#DEFINE ambient_sensor			hardware_flag,1		; =1: OSTC has an ambient light sensor
+#DEFINE analog_o2_input			hardware_flag,2		; =1: OSTC has analog inputs and S8 digital
+#DEFINE optical_input			hardware_flag,3		; =1: OSTC has an digital optical input
+#DEFINE ble_available			hardware_flag,4		; =1: OSTC has an BLE module
+#DEFINE ostc_rx_present			hardware_flag,5		; =1: OSTC RX circuity present
+;								hardware_flag,6		; unused
+;								hardware_flag,7		; unused
+
+#DEFINE leftbind				cvt_flags+0,0
+#DEFINE ignore_digit3			cvt_flags+0,1
+#DEFINE ignore_digit4			cvt_flags+0,2
+#DEFINE ignore_digit5			cvt_flags+0,3
+#DEFINE enable_screen_dumps		cvt_flags+0,4		; =1: Ignore vin_usb, wait for "l" command (Screen dump
+#DEFINE screen_type				cvt_flags+0,5		; =1: display1, =0; display0
+#DEFINE compass_type			cvt_flags+0,6		; =1: compass1, =0: compass0
+#DEFINE analog_switches			cvt_flags+0,7		; =1: Analog switches available
 
-#DEFINE	rs232_recieve_overflow	flag2,0	; =1: An RS232 timeout overflow occoured
-#DEFINE	stored_gas_changed		flag2,1	; =1: Stored Gas changed
-#DEFINE	high_altitude_mode		flag2,2	; =1: Unit was manually turned on with ambient pressure <880mbar
-#DEFINE	FLAG_apnoe_mode			flag2,3	; =1: Apnoe mode selected
-#DEFINE	restore_deco_data		flag2,4	; =1: Restore deco data (After simulation)
-#DEFINE premenu					flag2,5	; =1: Premenu/Divemenu selected
-#DEFINE	menubit					flag2,6	;     menu
-#DEFINE	simulatormode_active	flag2,7	; =1: Simulator mode active, override pressure sensor readings
+#define pre_zero_flag			cvt_flags+1,0
+#define all_zeros_flag			cvt_flags+1,1
+#define DP_done					cvt_flags+1,2
+#define DP_done2				cvt_flags+1,3
+#define show_last3				cvt_flags+1,4
+#define leading_zeros			cvt_flags+1,5
+#define show_last4				cvt_flags+1,6
+#DEFINE compass_type2			cvt_flags+1,7		; =1: Compass2, =0: Compass1 or compass0
+
 
-#DEFINE divemode_menu           flag3,0	; =1: Divemode menu is shown
-#DEFINE	onesecupdate			flag3,1	; =1: after any second
-#DEFINE twosecupdate			flag3,2	; =1: New two-second update
-#DEFINE	toggle_customview		flag3,3	; =1: Next customview
-#DEFINE	oneminupdate			flag3,4	; =1: after any minute
-#DEFINE	divemode				flag3,5	; =1: in Divemode
-#DEFINE	battery_is_36v          flag3,6	; =1: 3,6V Battery is in use
-#DEFINE	warning_active          flag3,7	; =1: A warning is active in divemode or surfacemode
+; HUD Status Byte
+#DEFINE hud_connection_ok		hud_status_byte,0	; =1 -> HUD connection ok
+;								hud_status_byte,1	; =1 -> HUD is calibrated
+;								hud_status_byte,2	; =1 -> HUD Battery is low (<3000mV)
+#DEFINE sensor1_active			hud_status_byte,3	; =1: Sensor1 is active
+#DEFINE sensor2_active			hud_status_byte,4	; =1: Sensor2 is active
+#DEFINE sensor3_active			hud_status_byte,5	; =1: Sensor3 is active
+;								hud_status_byte,6	; unused in stand-alone HUD
+;								hud_status_byte,7	; unused in stand-alone HUD
 
-#DEFINE	better_gas_available	flag4,0	; =1: A better gas is available
-#DEFINE	blinking_better_gas		flag4,1	; =1: Gas is blinking
-#DEFINE menuview                flag4,2 ; =1: A menuview is shown in divemode (e.g. "Menu?")
-#DEFINE quarter_second_update   flag4,3 ; =1: A new 1/4 second has begun
-#DEFINE divemode_gaschange      flag4,4 ; =1: The gas will change very soon
-#DEFINE	decostop_active			flag4,5	; =1: Decompression stop shown
-#DEFINE depth_greater_100m      flag4,6 ; =1: Current Depth > 100m
-#DEFINE	realdive				flag4,7	; =1: A real dive during divemode
+#DEFINE switch_left				flag1,0				; =1: left  button was pressed
+#DEFINE switch_right			flag1,1				; =1: right button was pressed
+#DEFINE neg_flag				flag1,2				;     e.g. sub16 (sub_c = sub_a - sub_b)
+#DEFINE pressure_refresh		flag1,3				; =1: A new pressure/temperature is available
+#DEFINE sleepmode				flag1,4				; =1: in Sleepmode
+#DEFINE tft_is_dimming			flag1,5				; =1: the TFT is dimming, ignore light sensor
+#DEFINE display_velocity		flag1,6				; =1: show velocity
+#DEFINE no_sensor_int			flag1,7				; =1: block any further access to pressure sensor
 
-#DEFINE	dive_warning_displayed	flag5,0	; =1: The warning sign is shown
-#DEFINE	reset_average_depth		flag5,1	; =1: Reset the average depth
-#DEFINE	store_sample			flag5,2	; =1: Store a new sample
-#DEFINE	divemode2				flag5,3	; =1: Dive longer then one minute
-#DEFINE	FLAG_active_descent		flag5,4	;     Used in Apnoe mode
-#DEFINE	event_occured			flag5,5	; =1: An event occured, store it!
-#DEFINE	divemode_menu_active	flag5,6 ; =1: The divemode menu is shown
-#DEFINE	temp_changed			flag5,7	; =1: The temperature changed
+#DEFINE rs232_receive_overflow	flag2,0				; =1: a RS232 timeout overflow occoured
+#DEFINE stored_gas_changed		flag2,1				; =1: Stored Gas changed
+#DEFINE high_altitude_mode		flag2,2				; =1: unit was manually turned on with ambient pressure <880mbar
+#DEFINE FLAG_apnoe_mode			flag2,3				; =1: Apnoe mode selected
+#DEFINE restore_deco_data		flag2,4				; =1: restore deco data (After simulation)
+#DEFINE premenu					flag2,5				; =1: Premenu/Divemenu selected
+#DEFINE menubit					flag2,6				;     menu
+#DEFINE simulatormode_active	flag2,7				; =1: simulator mode active, override pressure sensor readings
 
-#DEFINE gas6_changed            flag6,0	; =1: Gas 6 has been selected/changed underwater
-#DEFINE	onehourupdate			flag6,1	; =1: A new hour has just begun
-#DEFINE	settime_setdate			flag6,2	; =1: In the Set Time or Set Date Menu
-#DEFINE setpoint_changed        flag6,3	; =1: Setpoint has been changed
-#DEFINE second_row_warning      flag6,4	; =1: The second row contains a warning
-#DEFINE FLAG_ccr_mode           flag6,5	; =1: CCR mode (Fixed ppO2 or Sensor) active
-#DEFINE dive_hud1_displayed     flag6,6 ; =1: The Sensor1 HUD reading is displayed
-#DEFINE dive_hud2_displayed     flag6,7 ; =1: The Sensor2 HUD reading is displayed
+#DEFINE divemode_menu			flag3,0				; =1: divemode menu is shown
+#DEFINE onesecupdate			flag3,1				; =1: after any second
+#DEFINE twosecupdate			flag3,2				; =1: new two-second update
+#DEFINE toggle_customview		flag3,3				; =1: next customview
+#DEFINE oneminupdate			flag3,4				; =1: after any minute
+#DEFINE divemode				flag3,5				; =1: in Divemode
+#DEFINE battery_is_36v			flag3,6				; =1: 3,6V Battery is in use
+#DEFINE warning_active			flag3,7				; =1: a warning is active in divemode or surfacemode
 
-#DEFINE dive_hud3_displayed     flag7,0 ; =1: The Sensor3 HUD reading is displayed
-#DEFINE no_more_divesecs        flag7,1 ; =1: Do no longer show seconds in divemode
-#DEFINE FLAG_gauge_mode         flag7,2 ; =1: In Gauge mode
-#DEFINE ignore_last_edited_gas  flag7,3 ;     Used in gaslist_cleanup_list
-#DEFINE ccr_diluent_setup       flag7,4 ; =1: Setting up Diluents ("Gas6-10")
-#DEFINE menu_show_sensors       flag7,5 ; =1: Update HUD data in menu			## NOT USED ANYMORE ##
-#DEFINE short_gas_decriptions   flag7,6 ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-#DEFINE max_depth_greater_100m  flag7,7 ; =1: Max. Depth > 100m
+#DEFINE better_gas_available	flag4,0				; =1: a better gas is available
+#DEFINE blinking_better_gas		flag4,1				; =1: gas is blinking
+#DEFINE menuview				flag4,2				; =1: a menuview is shown in divemode (e.g. "Menu?")
+#DEFINE quarter_second_update	flag4,3				; =1: a new 1/4 second has begun
+#DEFINE divemode_gaschange		flag4,4				; =1: the gas will change very soon
+#DEFINE decostop_active			flag4,5				; =1: decompression stop shown
+#DEFINE depth_greater_100m		flag4,6				; =1: current depth > 100m
+#DEFINE realdive				flag4,7				; =1: a real dive during divemode
+
+#DEFINE dive_warning_displayed	flag5,0				; =1: the warning sign is shown
+#DEFINE reset_average_depth		flag5,1				; =1: reset the average depth
+#DEFINE store_sample			flag5,2				; =1: store a new sample
+#DEFINE divemode2				flag5,3				; =1: dive longer than one minute
+#DEFINE FLAG_active_descent		flag5,4				;     used in Apnoe mode
+#DEFINE event_occured			flag5,5				; =1: an event occured, store it!
+#DEFINE divemode_menu_active	flag5,6				; =1: the divemode menu is shown
+#DEFINE temp_changed			flag5,7				; =1: the temperature changed
 
-#DEFINE is_bailout              flag8,0 ; =1: Bailout
-#DEFINE is_bailout_menu         flag8,1 ; =1: Bailout
-#DEFINE toggle_gf               flag8,2 ; =1: Toggle GF/aGF
-#DEFINE use_agf                 flag8,3 ; =1: Use aGF (instead of GF)
-#DEFINE battery_removed_in_usb  flag8,4 ; =1: The battery has been removed in USB
-#DEFINE adc_running             flag8,5 ; =1: The ADC is in use
-#DEFINE comm_service_enabled    flag8,6 ; =1: COMM Service mode unlocked
-#DEFINE compass_enabled         flag8,7 ; =1: The compass and accelerometer chip is active
+#DEFINE gas6_changed			flag6,0				; =1: gas 6 has been selected/changed underwater
+#DEFINE onehourupdate			flag6,1				; =1: a new hour has just begun
+#DEFINE settime_setdate			flag6,2				; =1: in the Set Time or Set Date Menu
+#DEFINE setpoint_changed		flag6,3				; =1: setpoint has been changed
+#DEFINE second_row_warning		flag6,4				; =1: the second row contains a warning
+#DEFINE FLAG_ccr_mode			flag6,5				; =1: CCR mode (fixed ppO2 or sensor) active
+#DEFINE FLAG_back_to_loop		flag6,6				; =1: a switchback from bailout to loop occured
+#DEFINE FLAG_set_marker			flag6,7				; =1: set a marker in the logbook
+
+;								flag7,0				; unused
+#DEFINE no_more_divesecs		flag7,1				; =1: Do no longer show seconds in divemode
+#DEFINE FLAG_gauge_mode			flag7,2				; =1: In Gauge mode
+#DEFINE ignore_last_edited_gas	flag7,3				;     Used in gaslist_cleanup_list
+#DEFINE ccr_diluent_setup		flag7,4				; =1: Setting up Diluents ("Gas6-10")
+#DEFINE space_gas_decriptions	flag7,5				; =1: add a space in front of gas numbers < 9 for alignment
+#DEFINE short_gas_decriptions	flag7,6				; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+#DEFINE max_depth_greater_100m	flag7,7				; =1: Max. Depth > 100m
 
-#DEFINE compass_fast_mode       flag9,0 ; =1: The compass is in fast mode
-#DEFINE in_color_menu           flag9,1 ; =1: In the color scheme menu
-#DEFINE bailoutgas_event        flag9,2 ; =1: bailout was selected or a gaschange during bailout
-#DEFINE win_invert              flag9,3 ; =1: Invert font output
-#DEFINE show_safety_stop		flag9,4	; =1: Show the safety stop
-#DEFINE	safety_stop_active      flag9,5	; =1: The safety stop is currently displayed
-#DEFINE new_s8_data_available   flag9,6 ; =1: New data frame recieved
-#DEFINE print_compass_label     flag9,7 ; =1: print the graphical comapss label
+#DEFINE is_bailout				flag8,0				; =1: Bailout
+#DEFINE is_bailout_menu			flag8,1				; =1: Bailout
+#DEFINE toggle_gf				flag8,2				; =1: Toggle GF/aGF
+#DEFINE use_agf					flag8,3				; =1: Use aGF (instead of GF)
+#DEFINE battery_removed_in_usb	flag8,4				; =1: The battery has been removed in USB (probably not used for anything useful)
+#DEFINE adc_running				flag8,5				; =1: The ADC is in use
+#DEFINE comm_service_enabled	flag8,6				; =1: COMM Service mode unlocked
+#DEFINE compass_enabled			flag8,7				; =1: The compass and accelerometer chip is active
 
-#DEFINE s8_digital              flag10,0; =1: Digital I/O
-#DEFINE menu_show_sensors2      flag10,1; =1: Update mV data in calibration menu
-#DEFINE use_O2_sensor1          flag10,2; =1: Use this sensor for deco
-#DEFINE use_O2_sensor2          flag10,3; =1: Use this sensor for deco
-#DEFINE use_O2_sensor3          flag10,4; =1: Use this sensor for deco
-#DEFINE setpoint_fallback       flag10,5; =1: Fallback to SP1 due to external O2 sensor failure
-#DEFINE	blinking_setpoint       flag10,6; =1: SP is blinking
-#DEFINE flip_screen             flag10,7; =1: Screen is flipped by 180°
+#DEFINE compass_fast_mode		flag9,0				; =1: The compass is in fast mode
+#DEFINE in_color_menu			flag9,1				; =1: In the color scheme menu
+#DEFINE bailoutgas_event		flag9,2				; =1: bailout was selected or a gaschange during bailout
+#DEFINE win_invert				flag9,3				; =1: Invert font output
+#DEFINE show_safety_stop		flag9,4				; =1: Show the safety stop
+#DEFINE safety_stop_active		flag9,5				; =1: The safety stop is currently displayed
+#DEFINE new_s8_data_available	flag9,6				; =1: New data frame received
+#DEFINE print_compass_label		flag9,7				; =1: print the graphical comapss label
+
+#DEFINE s8_digital				flag10,0			; =1: Digital I/O
+#DEFINE menu_show_sensors2		flag10,1			; =1: Update mV data in calibration menu
+#DEFINE use_O2_sensor1			flag10,2			; =1: Use this sensor
+#DEFINE use_O2_sensor2			flag10,3			; =1: Use this sensor
+#DEFINE use_O2_sensor3			flag10,4			; =1: Use this sensor
+#DEFINE setpoint_fallback		flag10,5			; =1: Fallback to SP1 due to external O2 sensor failure
+#DEFINE blinking_setpoint		flag10,6			; =1: SP is blinking
+#DEFINE flip_screen				flag10,7			; =1: Screen is flipped by 180°
 
-#DEFINE sensor1_calibrated_ok   flag11,0; =1: This sensor has been calibrated ok
-#DEFINE sensor2_calibrated_ok   flag11,1; =1: This sensor has been calibrated ok
-#DEFINE sensor3_calibrated_ok   flag11,2; =1: This sensor has been calibrated ok
-#DEFINE voting_logic_sensor1    flag11,3; =1: This sensor is within the voting logic threshold
-#DEFINE voting_logic_sensor2    flag11,4; =1: This sensor is within the voting logic threshold
-#DEFINE voting_logic_sensor3    flag11,5; =1: This sensor is within the voting logic threshold
-#DEFINE cc_active               flag11,6; =1: Constant Current active (cR Hardware)
-#DEFINE cv_active               flag11,7; =1: Constant Voltage active (cR Hardware)
+#DEFINE sensor1_calibrated_ok	flag11,0			; =1: This sensor has been calibrated ok
+#DEFINE sensor2_calibrated_ok	flag11,1			; =1: This sensor has been calibrated ok
+#DEFINE sensor3_calibrated_ok	flag11,2			; =1: This sensor has been calibrated ok
+#DEFINE voting_logic_sensor1	flag11,3			; =1: This sensor is within the voting logic threshold
+#DEFINE voting_logic_sensor2	flag11,4			; =1: This sensor is within the voting logic threshold
+#DEFINE voting_logic_sensor3	flag11,5			; =1: This sensor is within the voting logic threshold
+#DEFINE cc_active				flag11,6			; =1: Constant Current active (cR Hardware)
+#DEFINE cv_active				flag11,7			; =1: Constant Voltage active (cR Hardware)
 
-#DEFINE compass_bearing_set     flag12,0    ; bearing set
-#DEFINE compass_bearing_eq      flag12,1    ; bearing is in direction? do not show << or >> 
-#DEFINE compass_bearing_lft     flag12,2    ; bearing is to the left/<< if set, otherwise to the right/>>
-#DEFINE compass_bearing_vis     flag12,3    ; bearing is visible? (either ahead or behind/-180°)
-#DEFINE compass_bearing_ahd     flag12,4    ; bearing is ahead or behind?
-#DEFINE blinking_depth_warning  flag12,5    ; set by the color_depth. =1: warning color
-#DEFINE blinking_depth_prev     flag12,6    ; set by the TFT_depth.   =1: prev display had warning color
-#DEFINE blinking_depth_toggle   flag12,7    ; toggle to blink
+#DEFINE compass_bearing_set		flag12,0			; bearing set
+#DEFINE compass_bearing_eq		flag12,1			; bearing is in direction? do not show << or >> 
+#DEFINE compass_bearing_lft		flag12,2			; bearing is to the left/<< if set, otherwise to the right/>>
+#DEFINE compass_bearing_vis		flag12,3			; bearing is visible? (either ahead or behind/-180°)
+#DEFINE compass_bearing_ahd		flag12,4			; bearing is ahead or behind?
+#DEFINE blinking_depth_warning	flag12,5			; set by the color_depth. =1: warning color
+#DEFINE blinking_depth_prev		flag12,6			; set by the TFT_depth.   =1: prev display had warning color
+#DEFINE blinking_depth_toggle	flag12,7			; toggle to blink
 
-#DEFINE neg_flag_velocity       flag13,0    ; neg_flag backup for velocity logic
-#DEFINE	analog_sw1_pressed		flag13,1    ; =1: Analog switch 1 pressed
-#DEFINE	analog_sw2_pressed		flag13,2    ; =1: Analog switch 2 pressed
-#DEFINE sp2_switched            flag13,3    ; =1: This setpoint has been autoselected already
-#DEFINE sp3_switched            flag13,4    ; =1: This setpoint has been autoselected already
-#DEFINE sp4_switched            flag13,5    ; =1: This setpoint has been autoselected already
-#DEFINE sp5_switched            flag13,6    ; =1: This setpoint has been autoselected already
-#DEFINE	use_old_batt_flag		flag13,7    ; =1: load old battery information after power-on reset
-		
-#DEFINE	FLAG_pscr_mode			flag14,0    ; =1: OSTC is in PSCR mode
-#DEFINE	deep_sleep				flag14,1    ; OSTC is in deep sleep (ignore buttons, etc)
-#DEFINE sensors_agree			flag14,2    ; =1: the ppO2 of all sensors are within the threshold range
-#DEFINE	gas_needs_attention		flag14,3    ; =1: the gas needs attention      has been raised before
-#DEFINE	gas_needs_warning		flag14,4    ; =1: the gas needs warning        has been raised before
-#DEFINE	sensor_warning			flag14,5    ; =1: the sensors disagree warning has been raised before
-#DEFINE	alternative_divelayout	flag14,6    ; =1: the alternative divelayout is used (aka Blind Mode)
-#DEFINE	i2c_error_flag			flag14,7    ; =1: An I2C error occured
+#DEFINE neg_flag_velocity		flag13,0			; neg_flag backup for velocity logic
+#DEFINE analog_sw1_pressed		flag13,1			; =1: Analog switch 1 pressed
+#DEFINE analog_sw2_pressed		flag13,2			; =1: Analog switch 2 pressed
+#DEFINE sp2_switched			flag13,3			; =1: This setpoint has been autoselected already
+#DEFINE sp3_switched			flag13,4			; =1: This setpoint has been autoselected already
+#DEFINE sp4_switched			flag13,5			; =1: This setpoint has been autoselected already
+#DEFINE sp5_switched			flag13,6			; =1: This setpoint has been autoselected already
+#DEFINE use_old_batt_flag		flag13,7			; =1: load old battery information after power-on reset
+
+#DEFINE FLAG_pscr_mode			flag14,0			; =1: OSTC is in PSCR mode
+#DEFINE deep_sleep				flag14,1			; =1: OSTC is in deep sleep (ignore buttons, etc)
+#DEFINE sensors_agree			flag14,2			; =1: the ppO2 of all sensors are within the threshold range
+#DEFINE gas_needs_attention		flag14,3			; =1: the gas needs attention      has been raised before
+#DEFINE gas_needs_warning		flag14,4			; =1: the gas needs warning        has been raised before
+#DEFINE sensor_warning			flag14,5			; =1: the sensors disagree warning has been raised before
+#DEFINE alternative_divelayout	flag14,6			; =1: the alternative divelayout is used (aka Blind Mode)
+#DEFINE i2c_error_flag			flag14,7			; =1: an I2C error occured
+
+#define aa_antialias			aa_flags,0			; used by aa_wordprocessor
+#define aa_color_quart			aa_flags,1			; used by aa_wordprocessor
+#define aa_color_half			aa_flags,2			; used by aa_wordprocessor
+;								aa_flags,3			; unused
+;								aa_flags,4			; unused
+;								aa_flags,5			; unused
+;								aa_flags,6			; unused
+;								aa_flags,7			; unused
 
 
 ; Update flags in divemode, =1: Update the screen
-#DEFINE	FLAG_TFT_divemode_mask				tft_update_flags+0,0
-#DEFINE	FLAG_TFT_display_ndl_mask			tft_update_flags+0,1
+#DEFINE FLAG_TFT_divemode_mask				tft_update_flags+0,0
+#DEFINE FLAG_TFT_display_ndl_mask			tft_update_flags+0,1
 #DEFINE FLAG_TFT_depth						tft_update_flags+0,2
 #DEFINE FLAG_TFT_divemins					tft_update_flags+0,3
-#DEFINE	FLAG_TFT_show_safety_stop			tft_update_flags+0,4	
-#DEFINE	FLAG_TFT_display_ndl				tft_update_flags+0,5
-#DEFINE	FLAG_TFT_display_deko_mask			tft_update_flags+0,6
-#DEFINE	FLAG_TFT_display_deko				tft_update_flags+0,7
-#DEFINE	FLAG_TFT_display_tts				tft_update_flags+1,0
-#DEFINE	FLAG_TFT_temp_divemode				tft_update_flags+1,1
-#DEFINE	FLAG_TFT_divemode_warning			tft_update_flags+1,2
-#DEFINE	FLAG_TFT_divemode_warning_clear		tft_update_flags+1,3
-#DEFINE	FLAG_TFT_active_gas_divemode		tft_update_flags+1,4
-#DEFINE	FLAG_TFT_clear_safety_stop			tft_update_flags+1,5
-#DEFINE	FLAG_TFT_max_depth					tft_update_flags+1,6
-#DEFINE	FLAG_TFT_divemode_mask_alt			tft_update_flags+1,7
-#DEFINE	FLAG_TFT_dive_warning_text_clear	tft_update_flags+2,0
-#DEFINE	FLAG_TFT_dive_warning_text_clr2		tft_update_flags+2,1
-#DEFINE	FLAG_TFT_max_depth_alt				tft_update_flags+2,2
-#DEFINE	FLAG_TFT_big_deco_alt				tft_update_flags+2,3
-#define FLAG_TFT_not_defined_yet			tft_update_flags+2,7	; last usable flag within tft_update_flags memory space
+#DEFINE FLAG_TFT_show_safety_stop			tft_update_flags+0,4
+#DEFINE FLAG_TFT_display_ndl				tft_update_flags+0,5
+#DEFINE FLAG_TFT_display_deko_mask			tft_update_flags+0,6
+#DEFINE FLAG_TFT_display_deko				tft_update_flags+0,7
+#DEFINE FLAG_TFT_display_tts				tft_update_flags+1,0
+#DEFINE FLAG_TFT_temp_divemode				tft_update_flags+1,1
+#DEFINE FLAG_TFT_divemode_warning			tft_update_flags+1,2
+#DEFINE FLAG_TFT_divemode_warning_clear		tft_update_flags+1,3
+#DEFINE FLAG_TFT_active_gas_divemode		tft_update_flags+1,4
+#DEFINE FLAG_TFT_clear_safety_stop			tft_update_flags+1,5
+#DEFINE FLAG_TFT_max_depth					tft_update_flags+1,6
+#DEFINE FLAG_TFT_divemode_mask_alt			tft_update_flags+1,7
+#DEFINE FLAG_TFT_dive_warning_text_clear	tft_update_flags+2,0
+#DEFINE FLAG_TFT_dive_warning_text_clr2		tft_update_flags+2,1
+#DEFINE FLAG_TFT_max_depth_alt				tft_update_flags+2,2
+#DEFINE FLAG_TFT_big_deco_alt				tft_update_flags+2,3
+;											tft_update_flags+2,4	; unused
+;											tft_update_flags+2,5	; unused
+;											tft_update_flags+2,6	; unused
+;											tft_update_flags+2,7	; unused
+
+
+;---------------------------- Macros ------------------------------------
+
+TSTOSS	macro opt_reg		; TeST Option Skip if not Zero
+	movff	opt_reg,WREG
+	tstfsz	WREG,A
+	bra		$+4
+	endm
+
+;---------------------------- C-code Routines ----------------------------
+
+	extern	deco_calc_desaturation_time
+	extern	deco_calc_hauptroutine
+	extern	deco_calc_dive_interval_1min
+	extern	deco_calc_dive_interval_10min
+	extern	deco_calc_dive_interval
+	extern	deco_clear_tissue
+	extern	deco_pull_tissues_from_vault
+	extern	deco_push_tissues_to_vault
 
 
-; Bit Masks	for communication with p2_deco.c
-#define	DECO_STATUS_MASK		.3
+;---------------------------- Bank0 DATA ------------------------------------
+isr_backup	equ			0x60
+isr_backup	udata_ovr	isr_backup			; Reserved space for interupt data
+ 
+;---- Backup for general registers
+isr_prod						res 2
+
+;---- MS5541 subroutines
+amb_pressure					res 2
+temperature						res 2
+
+C1								res 2		; Decoded calibration data
+C2								res 2
+C3								res 2
+C4								res 2		; Here: C4-250
+C5								res 2		; Here: Reference Temperature UT1 = 8*C5 + 10000 (u16 range 10.000 .. +42.760)
+C6								res 2
+D1								res 2		; raw pressure
+D2								res 2		; raw temperature
+xdT								res 2
+xdT2							res 2
+OFF								res 2
+SENS							res 2
+dLSB							res 1		; Pressure sensor interface 
+dMSB							res 1
+clock_count						res 1
+sensor_state_counter			res 1		; counts to eight for state maschine
+amb_pressure_avg				res 2
+temperature_avg					res 2
+minimum_temperature				res 2		; minimum temperature
+last_temperature				res 2
+last_pressure					res 2
+last_pressure_velocity			res 2		; For velocity
+last_surfpressure				res 2
+last_surfpressure_15min			res 2
+last_surfpressure_30min			res 2
+rel_pressure					res 2
+sim_pressure					res 2		; hold simulated pressure in mbar if in Simulator mode
+max_pressure					res 2
+avg_rel_pressure				res 2
+avg_rel_pressure_total			res 2
+
+;---- Data for ISR math subroutines
+isr_xC							res 4
+isr_xA							res 2
+isr_xB							res 2
 
-; Bit Flags for communication with p2_deco.c - char_O_deco_status
-#define DECO_STATUS_0_FLAG		.0
-#define DECO_STATUS_1_FLAG		.1
-#define DECO_MODE_LOOP_FLAG 	.2
-#define DECO_MODE_PSCR_FLAG 	.3
-#define DECO_PLAN_FLAG 			.4
-#define DECO_CNS_FLAG 			.5
-#define DECO_VOLUME_FLAG 		.6
-#define DECO_ASCENT_FLAG 		.7
+;---- Data for ISR routines
+isr1_temp						res 1		; ISR temp variable, used in ms5541.asm, isr_rtcc, isr_battery_gauge
+isr2_temp						res 1		; ISR temp variable, used isr_battery_gauge
+
+;---- Display brightness
+max_CCPR1L						res 1		; Max. brightness value for CCPR1L
+
+; Battery gauge (nAs, nC)
+battery_gauge					res 6		; 48Bit -> 78Ah max...
+
+; IR/S8-Link
+ir_s8_buffer					res .18		; temporally used in get_calibration_data for the raw (packed) calibration data
+ir_s8_counter					res 1
+ir_s8_timeout					res 1		; Timeout for valid data
+
+; Compass raw data
+compass_DX						res 2
+compass_DY						res 2
+compass_DZ						res 2
+
+accel_DX						res 2
+accel_DY						res 2
+accel_DZ						res 2
 
-; Bit Flags for communication with p2_deco.c - char_O_main_status
-;#define DECO_MODE_LOOP_FLAG 	.2
-;#define DECO_MODE_PSCR_FLAG 	.3
-#define DECO_GASCHANGE_OVRD		.4
-#define DECO_BOTTOM_FLAG		.6
+; Compass FILTERED data
+compass_DX_f					res 2
+compass_DY_f					res 2
+compass_DZ_f					res 2
+
+accel_DX_f						res 2
+accel_DY_f						res 2
+accel_DZ_f						res 2
+
+; Compass calibration data
+compass_CX_f					res 2
+compass_CY_f					res 2
+compass_CZ_f					res 2
+
+; Compass more data
+compass_heading					res 2		; Corrected heading (in 1°) : -180 .. 180
+compass_heading_old				res 2		; Old heading (For smoother display)
+compass_heading_shown			res 2		; Displayed heading
+;compass_roll					res 2		; Rotation around the X axis
+;compass_pitch					res 2		; Rotation around the Y axis
+
+compass_a						res 2		; Tmp data for Q15 arithmetics
+compass_b						res 2
+compass_r						res 3
+
+CNS_start						res 2		; CNS value at beginning of dive
+GF_start						res 1		; GF value at beginning of dive
+
+speed_setting					res 1		; =1: Eco, =2: Normal, =3: Fastest
 
-; Bit Values for communication with p2_deco.c
-#define DECO_STATUS_INIT		.3
-#define	DECO_MODE_LOOP			.4
-#define DECO_MODE_PSCR			.8
-#define DECO_PLAN_ALTERNATE		.16
-#define DECO_CNS_CALCULATE		.32
-#define DECO_VOLUME_CALCULATE	.64
-#define	DECO_ASCENT_DELAYED		.128
+;---- Data for graphical compass
+xRD								res 2		; virtual compass ruler offset
+xRDr							res 2		; virtual compass ruler offset - right end
+xRD180							res 2		; virtual compass ruler offset for the -180 marker
+xLO								res 1		; lo backup to prevent trashing
+xHI								res 1		; hi backup to prevent trashing
+xCM								res 1		; compass bearing relative position
+compass_bearing					res 2		; this is where the bearing menu stores the actual heading for bearing
+
+;---------------------------- Common DATA ------------------------------------
+common		equ			0x100	; Alias for "banksel common"
+common		udata_ovr	common	; Bank 1 general variables
+
+;---- Time and Date
+secs							res 1
+mins							res 1
+hours							res 1
+day								res 1
+month							res 1
+year							res 1
+surface_interval				res 2
+
+;---- State Information
+flag1							res 1
+flag2							res 1
+flag3							res 1
+flag4							res 1
+flag5							res 1
+flag6							res 1
+flag7							res 1
+flag8							res 1
+flag9							res 1
+flag10							res 1
+flag11							res 1
+flag12							res 1
+flag13							res 1
+flag14							res 1
+hardware_flag					res 1		; hardware descriptor flag
+tft_update_flags				res 3
+
+;---- Interface to Data Conversion &
+;---- Output Functions, as well as
+;---- General-Purpose Temp Storage
+lo								res 1
+hi								res 1
+up								res 1
+ignore_digits					res 1
+
+;---- Interface to Graphic Functions
+win_leftx2						res 1
+win_top							res 1
+win_width						res 2
+win_height						res 1
+win_bargraph					res 1
+win_color1						res 1
+win_color2						res 1
+win_font						res 1
 
-; Bit Flags for char_O_deco_warnings
-#define IBCD_warning			.0
-#define IBCD_warning_lock		.1
-#define mbubble_warning			.2
-#define mbubble_warning_lock	.3
-#define	outside_warning			.4
-#define	outside_warning_lock	.5
-#define stoptable_overflow		.6
-#define	deco_flag				.7
+;---- Interface to Math Functions
+divA							res 2
+divB							res 1
+xC								res 4
+xA								res 2
+xB								res 2
+sub_c							res 2
+sub_a							res 2
+sub_b							res 2
+
+;---- Misc.
+timeout_counter1				res 2		; timeout for dive operations
+timeout_counter2				res 1		; timeout for menu operations
+batt_voltage					res 2		; battery voltage in mV
+batt_percent					res 1		; battery in percent (1-100)
+warning_counter					res 1		; counts amount of warning in divemode
+warning_page					res 1		; current # of warning page
+
+;---- Dive Mode / General
+divemins						res 2
+divesecs						res 1
+total_divetime_seconds			res 2
+average_divesecs				res 2		; for the resettable stopwatch
+safety_stop_countdown			res 1		; counts seconds of safety stop
+gaslist_gas						res 1		; used for transfer between gaslist.asm and menu_tree.asm
+active_gas						res 1		; the currently breathed gas (1-5)
+;active_gas_type				res 1		; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents	
 
-#define char_invalid_flag		.7
+;---- Dive Mode / Apnoe
+apnoe_surface_mins				res 1
+apnoe_surface_secs				res 1
+apnoe_mins						res 1
+apnoe_secs						res 1
+apnoe_max_pressure				res 2
+
+;---- Profile Recording
+samplingrate					res 1
+samplesecs						res 1
+samplesecs_value				res 1
+AlarmType						res 1
+EventByte1						res 1
+EventByte2						res 1
 
-#define int_invalid_flag		.2
-#define int_not_yet_computed	.3
-#define	int_is_zero				.3
-#define int_low_flag			.4
-#define int_high_flag			.5
-#define	int_prewarning_flag		.6
-#define	int_warning_flag		.7
+;---- External Flash
+ext_flash_rw					res 1		; transfer register for data read / write
+ext_flash_address				res 3		; 24 bit address
+ext_flash_log_pointer			res 3		; 24 bit address for logbook profile storing
+ext_flash_end_pointer			res 3		; 24 bit address for logbook profile storing
+ext_flash_dive_counter			res 3		; 24 bit counter for dive length (increased in write_byte_ext_flash_plus)
+
+;---- O2 Sensor Data
+o2_mv_sensor1					res 2		; in 0.1mV steps
+o2_mv_sensor2					res 2		; in 0.1mV steps
+o2_mv_sensor3					res 2		; in 0.1mV steps
+o2_ppo2_sensor1					res 1		; Sensor1 ppO2 (in 0.01bar steps)
+o2_ppo2_sensor2					res 1		; Sensor2 ppO2 (in 0.01bar steps)
+o2_ppo2_sensor3					res 1		; Sensor3 ppO2 (in 0.01bar steps)
+hud_status_byte					res 1
 
 
+;========================= privte Variables ===================================
+;        do not access from outside of the respective source files!
 
-;=============================================================================
-; C-code Routines
-; PART 2
-    extern deco_calc_CNS_decrease_15min    
-    extern deco_calc_desaturation_time
-    extern deco_calc_hauptroutine
-    extern deco_calc_wo_deco_step_1_min
-    extern deco_calc_dive_interval
-    extern deco_clear_tissue
-    extern deco_pull_tissues_from_vault
-    extern deco_push_tissues_to_vault
-	
\ No newline at end of file
+;---- aa_wordprocessor.asm
+aa_flags						res 1		; various flags for aa_wordprocessor
+aa_bitlen						res 1		; count of pixels when decoding bitmaps
+aa_start						res 2		; PROM ptr to start of encoded bitmap
+aa_end							res 2		; and end of it
+aa_temp							res 2		; current color, divided by 2 or 4
+
+;--- adc_lightsensor.asm
+get_bat_volt_counter			res 1		; counter for 10x reading the charger chip
+
+;---- convert.asm
+cvt_flags						res 2
+cvt_temp1						res 1
+cvt_temp2						res 1
+cvt_temp3						res 1
+cvt_temp4						res 1
+lo_temp							res 1
+hi_temp							res 1
+
+;---- color_processor.asm
+img_pixels						res 3		; used by color_processor.asm
+img_count						res 2		; used by color_processor.asm
+
+;---- comm.asm
+comm_timeout					res 1		; timeout for communication
+
+;---- eeprom_rs232.asm
+uart1_temp						res 1
+uart2_temp						res 1
+uart3_temp						res 1
+
+;---- i2c.asm
+i2c_temp1						res 1		; temporary data
+i2c_temp2						res 1		; temporary data
+
+;---- menu_processor.asm
+menupos1						res 1		; logbook and divemode menu
+menupos2						res 1		; used for dive mode simulator and pre-menu
+menupos3						res 1		; used for Customviews
+menupos4						res 1		; used for divemode menu
+menu_flags						res 1		; flags for menu entries
+menu_item						res 1		; index of the current item
+start_item						res 1		; index of the first item (scrolling)
+item_max						res 1		; number of items in menu
+selected_item					res 1		; index of the current item
+value_type						res 1		; type for vertical menu
+dynamic_item					res 3		; callback addr
+menu_block						res 3		; address of the menu block (i.e. item 0)
+menu_title						res 3		; text or proc for dynamic menu
+menu_center						res 1		; centering for line menu
+proc_item						res 3		; address of the current proc
+text_item						res 2		; address of the current text
+
+;---- options.asm
+opt_type						res 1		;
+opt_default						res 1		;
+opt_inc							res 1		; also used for default+1 (string) and enum low
+opt_min							res 1		; also used for enum high
+opt_max							res 1		;
+opt_unit						res 2		; multi-lingual unit text
+opt_eeprom						res 1		;
+opt_backup_tbl					res 3		; buffer for table pointer
+
+;---- tft.asm
+save_top						res 1
+save_height						res 1
+save_left						res 1
+save_width						res 1
+ds_line							res 1		; current line (0..239)
+ds_column						res 1		; current columnx2 (0..159)
+ds_pixel						res 2		; current pixel color
+ds_count						res 1		; repetition count
+tft_temp1						res 1
+tft_temp2						res 1
+tft_temp3						res 1
+tft_temp4						res 1
+
+;---- wait.asm
+wait_counter					res 1
+
+; ==> 187 bytes used - 21 bytes free
+
+
+;============================ LOCAL DATA ======================================
+; Space for various overlayed local data from top-level applications,
+; i.e. applications that never run in parallel to each other
+;
+; --------------------- local Data Users --------------------------------------
+;					-------------- Applications using -------------
+;	Mode			local1				local2				local3
+; -----------------------------------------------------------------------------
+;	sleepmode		sleepmode.asm		(unused)			(unused)
+;	surfmode		surfmode.asm*		(unused)			(unused)
+;	simulator		simulator.asm		(unused)			(unused)
+;	divemode		divemode.asm		ghostwriter.asm		(unused)
+;	logbook			logboock.asm		logbook.asm			logbook.asm
+;
+; * assigned to this slot, but currently no local memory used
+
+local1			equ			0x1D0	; Alias for CBLOCK directive
+local1			udata_ovr	0x1D0	; Bank1 shared local space
+				res			0x10	; 16 Byte (0x1D0 ... 0x1DF)
+
+local2			equ			0x1E0	; Alias for CBLOCK directive
+local2			udata_ovr	0x1E0	; Bank1 shared local space
+				res			0x10	; 16 Byte (0x1E0 ... 0x1EF)
+
+local3			equ			0x1F0	; Alias for CBLOCK directive
+local3			udata_ovr	0x1F0	; Bank1 shared local space
+				res			0x10	; 16 Byte (0x1F0 ... 0x1FF)
+
+
+;---------------------------- Common2 DATA ------------------------------------
+common2		equ			0xA00	; Alias for "banksel common2"
+common2		udata_ovr	common2	; Bank 10 general variables
+
+s8_rawdata_sensor1				res 3		; 24bit A/D raw data from S8 HUD sensor 1
+s8_rawdata_sensor2				res 3		; 24bit A/D raw data from S8 HUD sensor 2
+s8_rawdata_sensor3				res 3		; 24bit A/D raw data from S8 HUD sensor 3
+hud_battery_mv					res 2		; hud/ppo2 monitor battery voltage in mV
+
+start_day						res 1		; At start of dive (For logbook)
+start_month						res 1		; At start of dive (For logbook)
+start_year						res 1		; At start of dive (For logbook)
+start_hours						res 1		; At start of dive (For logbook)
+start_mins						res 1		; At start of dive (For logbook)
+
+opt_gas_type_backup				res 5		; 0=Disabled, 1=First, 2=Travel, 3=Deco			* need to be in same bank
+opt_dil_type_backup				res 5		; 0=Disabled, 1=First, 2=Normal					+ need to be in same bank
+opt_OC_bail_gas_change_backup	res 5		; Gas change depths OC/Bailout					*
+opt_dil_change_backup			res 5		; Gas change depths Diluents					+
+
+internal_battery_capacity		res 2		; For internal battery gauging
+battery_capacity				res 2		; For battery gauge IC
+battery_offset					res 2		; For battery gauge IC
+battery_type					res 1		; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+battery_acumulated_charge		res 2		; Raw values in battery gauge IC
+gauge_status_byte				res 1		; Gauge IC status byte
+
+analog_sw1_raw					res 2		; idle values (average)
+analog_sw2_raw					res 2		; idle values (average)
+analog_counter					res 1		; for averaging
+analog_sw1						res 1		; analog value for switch 1
+analog_sw2						res 1		; analog value for switch 2
+button_polarity					res 1		; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only)
+
+uptime							res 4		; Uptime [s]
+lastdive_time					res 4		; Time since last dive [s]
+lastdive_duration				res 3		; mins:2 and secs
+lastdive_maxdepth				res 2		; in mbar
+
+rx_buffer						res .48		; Buffer for RX data (Slots 0-7)
+rx_firmware						res 2		; The RX firmware version xx.yy
+
+customview_surfmode				res 1		; storage to remember last selected custom view in surface mode
+customview_divemode				res 1		; storage to remember last selected custom view in dive mode
+
+ambient_light					res 2		; ambient_light level
+better_gas_number				res 1		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+old_velocity					res 4		; Stores the last 4 speeds (8 seconds) in m/min
+
+menustack						res 5		; menu stack from menu_processor.asm
+
+gas6_O2_ratio					res 1		; gas6 O2 ratio
+gas6_He_ratio					res 1		; gas6 He ratio
+gas6_temp						res 1		; temp used in divemenu_tree.asm
+
+; ==> 134 bytes used - 122 bytes free
+
+
+;---------------------------- Bank 2 general purpose buffer -------------------
+; Reserved for general purpose buffer (strings, images, etc).
+; NOTE: Needs to be aligned with a bank (LOW(buffer)==0).
+
+buffer		udata_ovr	0x200
+
+buffer							res	.256
+
+
+;---------------------------- Bank 14 for options table -----------------------
+opt_table	equ			0xE00
+opt_table	udata_ovr	opt_table
+
+;---- Dive Options
+opt_gas_O2_ratio				res 5		; Needed because deco gaslist use N2
+opt_dil_O2_ratio				res 5		; Must be in line with opt_gas_O2_ratio
+opt_gas_He_ratio				res 5		; He ratio Gas1-5
+opt_dil_He_ratio				res 5		; Must be in line with opt_gas_He_ratio
+opt_gas_type					res 5		; 0=Disabled, 1=First, 2=Travel, 3=Deco
+opt_dil_type					res 5		; 0=Disabled, 1=First, 2=Normal ; Must be in line with opt_gas_type
+opt_dive_mode					res 1		; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+opt_ccr_mode					res 1		; =0: Fixed SP, =1: Sensor
+opt_OC_bail_gas_change			res 5		; Gas change depths OC/Bailout
+
+;---- Managing Settings
+opt_brightness					res 1		; =0: Eco, =1:Medium, =2:Full
+opt_salinity					res 1		; 0-5%
+#DEFINE opt_name_length			.60			; Custom text string 5 rows with 12 chars
+opt_name						res opt_name_length
+opt_language					res 1		; Current language. 0=EN, 1=DE, 2=FR, 3=SP
+opt_units						res 1		; 0:m/°C, 1:ft/°F
+opt_dateformat					res 1		; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
+opt_last_stop					res 1		; =3:3m, =4:4m, =5:5m, =6:6m
+opt_aGF_high					res 1		; Alternative GF HIGH
+opt_aGF_low						res 1		; Alternative GF LOW
+opt_GF_high						res 1		; GF HIGH
+opt_GF_low						res 1		; GF LOW
+opt_enable_aGF					res 1		; =1: aGF can be selected underwater
+opt_compass_gain				res 1		; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
+opt_sampling_rate				res 1		; =1: 10s, =0: 2s
+opt_dive_color_scheme			res 1		; 0-3
+opt_pressure_adjust				res 1		; SIGNED char (two's complement), -20/+20mbar max.
+opt_enable_safetystop			res 1		; =1: A safety stop is shown
+opt_calibration_O2_ratio		res 1		; %O2 of calibration gas
+opt_x_s1						res	2		; calibration factor (Not stored in EEPROM)
+opt_x_s2						res	2		; calibration factor (Not stored in EEPROM)
+opt_x_s3						res	2		; calibration factor (Not stored in EEPROM)
+opt_sensor_fallback				res 1		; NOT USED ANY MORE, KEPT FOR COMPATIBILITY WITH EEPROM IMAGE
+opt_flip_screen					res 1		; =1: Flip the screen
+opt_cR_button_left				res 1		; Left button sensitivity (cR hardware)
+opt_cR_button_right				res 1		; Right button sensitivity (cR hardware)
+opt_modwarning					res 1		; =1:do a red blinking warning, =0:default behaviour
+opt_vsitextv2					res 1		; =1:use the depth dependent ascend rate limits
+opt_vsigraph					res 1		; =1:draw the graphical VSI bar
+opt_showppo2					res 1		; =1:always show the ppO2 value in the warning position
+opt_temperature_adjust			res 1		; SIGNED char (two's complement), -2.0/+2.0 °C max.
+opt_safety_stop_length			res 1		; [s]
+opt_safety_stop_start			res 1		; [cbar]
+opt_safety_stop_end				res 1		; [cbar]
+opt_safety_stop_reset			res 1		; [cbar]
+opt_diveTimeout					res 1		; Timeout for Divemode [min]
+opt_sim_setpoint_number			res 1		; setpoint to use for deco calculation
+opt_calc_asc_gasvolume			res 1		; calculate OC gas volume needs for ascent
+opt_sim_use_aGF					res 1		; =0: use GF, =1: use aGF for deco calculation
+opt_enable_IBCD					res 1		; enable IBCD warning
+opt_sat_multiplier_gf			res 1		; Buhlmann safety factor for GF deco
+opt_desat_multiplier_gf			res 1		; Buhlmann safety factor for GF deco
+opt_sat_multiplier_non_gf		res 1		; Buhlmann safety factor for NON-GF deco
+opt_desat_multiplier_non_gf		res 1		; Buhlmann safety factor for NON-GF deco
+
+;-----------------------------------------------------------------------------
--- a/src/i2c.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/i2c.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,987 +1,995 @@
 ;=============================================================================
 ;
-;   File i2c.asm
+;   File i2c.asm														V2.98
 ;
 ;   I2C Interface
-;   
-    ; Compass0
-;   HMC5883L's read address (8-Bit):    0x3D
-;   HMC5883L's write address (8-Bit):   0x3C
-;   MMA8452Q's read address (8-Bit):    0x39
-;   MMA8452Q's write address (8-Bit):   0x38
-;
-    ; Compass1
-;   LSM303D's read address (8-Bit):    0x3D
-;   LSM303D's write address (8-Bit):   0x3C
-;
-    ; Compass2
-;   LSM303AGR's Compass read address (8-Bit):    0x3D
-;   LSM303AGR's Compass write address (8-Bit):   0x3C
-;   LSM303AGR's Acceleration read address (8-Bit):    0x33
-;   LSM303AGR's Acceleration write address (8-Bit):   0x32
-;    
-    ; RX Circuity
-;   RX Circuity read address (8-Bit):    0x51
-;   RX Circuity write address (8-Bit):   0x50
-;
 ;
 ;   Copyright (c) 2012, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
+;
+;   Compass0
+;   --------
+;   HMC5883L's read address  (8-Bit):  0x3D
+;   HMC5883L's write address (8-Bit):  0x3C
+;   MMA8452Q's read address  (8-Bit):  0x39
+;   MMA8452Q's write address (8-Bit):  0x38
+;
+;   Compass1
+;   --------
+;   LSM303D's read address  (8-Bit):   0x3D
+;   LSM303D's write address (8-Bit):   0x3C
+;
+;   Compass2
+;   --------
+;   LSM303AGR's Compass read address       (8-Bit):  0x3D
+;   LSM303AGR's Compass write address      (8-Bit):  0x3C
+;   LSM303AGR's Acceleration read address  (8-Bit):  0x33
+;   LSM303AGR's Acceleration write address (8-Bit):  0x32
+;
+;   RX Circuity
+;   -----------
+;   RX Circuity read address  (8-Bit):  0x51
+;   RX Circuity write address (8-Bit):  0x50
+;
+;
+
 ; HISTORY
 ;  2012-08-22 : [mH] Creation
 ;  2018-02-18 : [mH] Sync with hwOS Sport release
 
 
-#include "hwos.inc"                ; Mandatory header
+#include "hwos.inc"						; Mandatory header
 #include "wait.inc"
 #include "math.inc"
 #include "external_flash.inc"
 
-i2c    CODE
+
+i2c		CODE
+
+;=============================================================================
 
 WaitMSSP:
-	decfsz		i2c_temp,F          ; check for timeout during I2C action
+	decfsz	i2c_temp1,F					; check for timeout during I2C action
 	bra		WaitMSSP2
-	bra		I2CFail             ; timeout occured
+	bra		I2CFail						; timeout occurred
 WaitMSSP2:
-	btfss		PIR1,SSP1IF
+	btfss	PIR1,SSP1IF
 	bra		WaitMSSP
-	clrf		i2c_temp
+	clrf	i2c_temp1
 	bcf		PIR1,SSP1IF
 	return
 
 I2C_WaitforACK:
-	btfss		SSP1CON2,ACKSTAT     ; checks for ACK bit from slave
+	btfss	SSP1CON2,ACKSTAT			; checks for ACK bit from slave
 	return
 I2CFail:
-	rcall		I2CReset            ; I2C Reset
+	rcall	I2CReset					; I2C Reset
 	bcf		PIR1,SSP1IF
-	clrf		i2c_temp
-	bsf		i2c_error_flag		; set error flag
+	clrf	i2c_temp1
+	bsf		i2c_error_flag				; set error flag
 	return
 
-I2CReset:                           ; Something went wrong (Slave holds SDA low?)
-	clrf		SSP1CON1            ; wake-up slave and reset entire module
-	clrf		SSP1CON2
-	clrf		SSP1STAT
-	bcf			TRISC,3             ; SCL OUTPUT
-	bsf			TRISC,4             ; SDA Input
-	bcf			PORTC,3
-	movlw		d'9'
-	movwf		i2c_temp            ; clock-out 9 clock cycles manually
+I2CReset:								; Something went wrong (Slave holds SDA low?)
+	clrf	SSP1CON1					; wake-up slave and reset entire module
+	clrf	SSP1CON2
+	clrf	SSP1STAT
+	bcf		TRISC,3						; SCL OUTPUT
+	bsf		TRISC,4						; SDA Input
+	bcf		PORTC,3
+	movlw	d'9'
+	movwf	i2c_temp1					; clock-out 9 clock cycles manually
 I2CReset_1:
-	bsf			PORTC,3             ; SCL=1
+	bsf		PORTC,3						; SCL=1
 	nop
 	nop
 	nop
 	nop
-	btfsc		PORTC,4             ; SDA=1?
-	bra			I2CReset_2          ; =1, SDA has been released from slave
-	bcf			PORTC,3             ; SCL=0
+	btfsc	PORTC,4						; SDA=1?
+	bra		I2CReset_2					; =1, SDA has been released from slave
+	bcf		PORTC,3						; SCL=0
 	nop
 	nop
-	bcf			PORTC,3
+	bcf		PORTC,3
 	nop
 	nop
-	decfsz		i2c_temp,F
-	bra         I2CReset_1          ; check for nine clock cycles
+	decfsz	i2c_temp1,F
+	bra		I2CReset_1					; check for nine clock cycles
 I2CReset_2:
-	bsf			TRISC,3             ; SCL Input
-	clrf		SSP1CON1            ; setup I²C Mode
-	WAITMS		d'10'               ; Reset-Timeout for I2C devices
-	movlw		b'00000000'         ; with slew rate control
-	movwf		SSP1STAT
-	movlw		b'00101000'
-	movwf		SSP1CON1
-	movlw		b'00000000'
-	movwf		SSP1CON2
-    movlw       0x27
-	movwf		SSP1ADD
+	bsf		TRISC,3						; SCL Input
+	clrf	SSP1CON1					; setup I²C Mode
+	WAITMS	d'10'						; Reset-Timeout for I2C devices
+	movlw	b'00000000'					; with slew rate control
+	movwf	SSP1STAT
+	movlw	b'00101000'
+	movwf	SSP1CON1
+	movlw	b'00000000'
+	movwf	SSP1CON2
+	movlw	0x27
+	movwf	SSP1ADD
 	return
 
 I2C_TX:
-	movwf		SSP1BUF
-	rcall		WaitMSSP
-	bra 		I2C_WaitforACK      ; Returns...
+	movwf	SSP1BUF
+	rcall	WaitMSSP
+	bra		I2C_WaitforACK				; Returns...
 
-I2C_TwoBytesRX_div16:       ; Get two bytes and devide lo:hi/16 (signed)
-    rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,hi          ; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,lo          ; Data Byte
-I2C_TwoBytesRX_div16_2:     ; devide lo:hi/16 (signed) only
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /2
-    rrcf		lo
-I2C_TwoBytesRX_div8_2:     ; devide lo:hi/8 (signed) only
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /4
-    rrcf		lo
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /8
-	rrcf		lo
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /16
-	rrcf		lo
-    return
+I2C_TwoBytesRX_div16:					; Get two bytes and divide lo:hi/16 (signed)
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+I2C_TwoBytesRX_div16_2:					; divide lo:hi/16 (signed) only
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /2
+	rrcf	lo
+I2C_TwoBytesRX_div8_2:					; divide lo:hi/8 (signed) only
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /4
+	rrcf	lo
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /8
+	rrcf	lo
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /16
+	rrcf	lo
+	return
 
-    global  I2C_RX_accelerometer
+	global	I2C_RX_accelerometer
 I2C_RX_accelerometer:
-    btfsc   compass_type2	    ; compass2
-    bra	    I2C_RX_accelerometer_compass2    ; yes
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_RX_accelerometer_compass1    ; yes
+	btfsc	compass_type2					; compass2
+	bra		I2C_RX_accelerometer_compass2	; yes
+	btfsc	compass_type					; compass1?
+	bra		I2C_RX_accelerometer_compass1	; yes
 I2C_RX_accelerometer_compass0:
-    bsf			SSP1CON2,SEN		; Start condition
-    rcall		WaitMSSP
-    movlw		0x38                ; address
-    rcall       I2C_TX
-    movlw		0x00
-    rcall       I2C_TX
-    bsf			SSP1CON2,RSEN		; Repeated start condition (!)
-    rcall		WaitMSSP
-    movlw		0x39                ; address
-    rcall       I2C_TX
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x00
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x39						; address
+	rcall	I2C_TX
 
-    rcall       I2C_OneByteRX       ; Get Status Byte
-    movf        SSP1BUF,W
+	rcall	I2C_OneByteRX				; Get Status Byte
+	movf	SSP1BUF,W
 
-    ; Non-flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = -x
-    ; y = -y
-    ; z = -z
+	; Non-flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = -x
+	; y = -y
+	; z = -z
 
-    ; Flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = x
-    ; y = y
-    ; z = -z
+	; Flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = x
+	; y = y
+	; z = -z
 
-    rcall       I2C_TwoBytesRX_div16 ; Get two bytes and devide /16 (signed)
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer2   ; Yes
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	rcall	I2C_TwoBytesRX_div16		; Get two bytes and divide /16 (signed)
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer2		; Yes
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer2:
-    movff       lo,accel_DX+0
-    movff       hi,accel_DX+1       ; Copy result
+	movff	lo,accel_DX+0
+	movff	hi,accel_DX+1				; Copy result
 
-    rcall       I2C_TwoBytesRX_div16 ; Get two bytes and devide /16 (signed)
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer3   ; Yes
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	rcall	I2C_TwoBytesRX_div16		; Get two bytes and divide /16 (signed)
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer3		; Yes
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer3:
-    movff       lo,accel_DY+0
-    movff       hi,accel_DY+1       ; Copy result
+	movff	lo,accel_DY+0
+	movff	hi,accel_DY+1				; Copy result
 
-    rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,hi          ; Data Byte
-	bsf			SSP1CON2, RCEN      ; Enable recieve mode
-    rcall		WaitMSSP
-; According to datasheet there should be no Master Acknowlegde for the last Byte (accel_DZ+0)...
-	movff		SSP1BUF,lo          ; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+; According to data sheet there should be no Master Acknowledge for the last Byte (accel_DZ+0)...
+	movff	SSP1BUF,lo					; Data Byte
 
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-    movff       lo,accel_DZ+0
-    movff       hi,accel_DZ+1       ; Copy result
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+	movff	lo,accel_DZ+0
+	movff	hi,accel_DZ+1				; Copy result
 
-	bsf			SSP1CON2,PEN		; Stop condition
-	bra		WaitMSSP	; (And return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 I2C_RX_accelerometer_compass1:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	b'10101000'	    ; 0x28 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-I2C_RX_accelerometer_compass1_xx:   ; compass2 continues here... 
-    rcall       I2C_TX
-    ; Non-flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = -x (Compass 1)
-    ; x = x (Compass 2)
-    ; y = -y
-    ; z = -z
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	b'10101000'					; 0x28 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+I2C_RX_accelerometer_compass1_xx:		; compass2 continues here... 
+	rcall	I2C_TX
+
+	; Non-flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = -x (Compass 1)
+	; x = x (Compass 2)
+	; y = -y
+	; z = -z
+
+	; Flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = x (Compass 1)
+	; x = -x (Compass 2)
+	; y = y
+	; z = -z
 
-    ; Flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = x (Compass 1)
-    ; x = -x (Compass 2)
-    ; y = y
-    ; z = -z
-    
-    ; Dump the accelerator data
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,lo  ;accel_DX+0
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,hi  ;accel_DX+1
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    btfss	compass_type2	    ; compass 2?
-    bra		I2C_RX_accelerometer1_c1    ; No, compass 1
-    ; compass 2
-    btfss       flip_screen             ; 180° rotation ?
-    bra		I2C_RX_accelerometer2_c1    ; No, continue with normal compass1 routines for Y and Z
-    ; flipped compass 2, negate x
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-    bra		I2C_RX_accelerometer2_c1    ; continue with normal compass1 routines for Y and Z
-    
-I2C_RX_accelerometer1_c1:    
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer2_c1   ; Yes
-    ; non-flipped compass 1, negate x
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	; Dump the accelerator data
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,lo					; accel_DX+0
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,hi  ;accel_DX+1
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	btfss	compass_type2				; compass 2?
+	bra		I2C_RX_accelerometer1_c1	; No, compass 1
+	; compass 2
+	btfss	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer2_c1	; No, continue with normal compass1 routines for Y and Z
+	; flipped compass 2, negate x
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+	bra		I2C_RX_accelerometer2_c1	; continue with normal compass1 routines for Y and Z
+
+I2C_RX_accelerometer1_c1:
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer2_c1	; Yes
+	; non-flipped compass 1, negate x
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer2_c1:
-    ; flipped compass 1, non-flipped compass 2
-    movff       lo,accel_DX+0
-    movff       hi,accel_DX+1       ; Copy result
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,lo  ;accel_DY+0
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,hi  ;accel_DY+1
-    
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer3_c1   ; Yes
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	; flipped compass 1, non-flipped compass 2
+	movff	lo,accel_DX+0
+	movff	hi,accel_DX+1				; Copy result
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,lo					; accel_DY+0
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,hi					; accel_DY+1
+
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer3_c1	; Yes
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer3_c1:
-    movff       lo,accel_DY+0
-    movff       hi,accel_DY+1       ; Copy result
+	movff	lo,accel_DY+0
+	movff	hi,accel_DY+1				; Copy result
 
-    rcall       I2C_OneByteRX     
-    movff	SSP1BUF,lo  ;accel_DZ+0
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-; According to datasheet there should be no Master Acknowlegde for the last Byte (accel_DZ+1)...
-    movff	SSP1BUF,hi  ;accel_DZ+1
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    comf        hi                    ; 16bit sign change for Z
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-    movff       lo,accel_DZ+0
-    movff       hi,accel_DZ+1       ; Copy result
-    return
-    
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,lo					;accel_DZ+0
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+; According to data sheet there should be no Master Acknowledge for the last Byte (accel_DZ+1)...
+	movff	SSP1BUF,hi					;accel_DZ+1
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	comf	hi							; 16bit sign change for Z
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+	movff	lo,accel_DZ+0
+	movff	hi,accel_DZ+1				; Copy result
+	return
+
 I2C_RX_accelerometer_compass2:
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x32                ; address
-    rcall       I2C_TX
-    movlw	b'10101000'	    ; 0x28 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x33                ; address
-    bra		I2C_RX_accelerometer_compass1_xx
-    
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; address
+	rcall	I2C_TX
+	movlw	b'10101000'					; 0x28 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x33						; address
+	bra		I2C_RX_accelerometer_compass1_xx
+
 I2C_OneByteRX:
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-    bsf		SSP1CON2,ACKEN	    ; Master acknowlegde
-    bra		WaitMSSP	    ; And return!
+	bsf		SSP1CON2,RCEN				; Enable receive mode
+	rcall	WaitMSSP
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
+	bra		WaitMSSP					; And return!
 
-    global  I2C_RX_compass
+	global	I2C_RX_compass
 I2C_RX_compass:
-    btfsc   compass_type2	    ; compass2
-    bra	    I2C_RX_compass2    ; yes
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_RX_compass1    ; yes
+	btfsc	compass_type2				; compass2
+	bra		I2C_RX_compass2				; yes
+	btfsc	compass_type				; compass1?
+	bra		I2C_RX_compass1				; yes
 I2C_RX_compass0:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x03
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x03
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    bcf		PIR1,SSP1IF
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-    rcall       I2C_TX
+	bcf		PIR1,SSP1IF
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
 
-    ; Compass IC sends data in following order:
-    ; x MSB
-    ; x LSB
-    ; z MSB
-    ; z LSB
-    ; y MSB
-    ; y LSB
+	; Compass IC sends data in following order:
+	; x MSB
+	; x LSB
+	; z MSB
+	; z LSB
+	; y MSB
+	; y LSB
 
-    ; Non-flipped screen
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = -y
-    ; z = z
-    ; y = x
+	; Non-flipped screen
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = -y
+	; z = z
+	; y = x
 
-    ; Flipped screen
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = y
-    ; z = z
-    ; y = -x
+	; Flipped screen
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = y
+	; z = z
+	; y = -x
 
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DY+1; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DY+0; Data Byte
-    btfsc       flip_screen         ; 180° rotation ?
-    bra         I2C_RX_compass0_2     ; Yes
-    banksel compass_DY
-    comf        compass_DY+1        ; 16bit sign change.
-    negf        compass_DY+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DY+1,F      ; YES: do it.
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DY+1		; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DY+0		; Data Byte
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass0_2			; Yes
+	banksel	compass_DY
+	comf	compass_DY+1				; 16bit sign change.
+	negf	compass_DY+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DY+1,F				; YES: do it.
 I2C_RX_compass0_2:
-    banksel common
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DZ+1; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DZ+0; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DX+1; Data Byte
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-    movff	SSP1BUF,compass_DX+0; Data Byte
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    rcall	WaitMSSP
-    btfss       flip_screen         ; 180° rotation ?
-    return                          ; No, done.
-    ; Yes, flip X
-    banksel compass_DX
-    comf        compass_DX+1        ; 16bit sign change.
-    negf        compass_DX+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DX+1,F      ; YES: do it.
-    banksel common
-    return
-    
-I2C_RX_compass1: ; New compass
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	b'10001000'	    ; 0x08 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-    rcall       I2C_TX
-;rcall	WaitMSSP	    ; Needed? (mH)
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-    rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DX+0
-    movff	hi,compass_DX+1
-    btfss       flip_screen         ; 180° rotation ?
-    bra		I2C_RX_compass1_1              ; Yes
-    ; Yes, flip X
-    banksel compass_DX
-    comf        compass_DX+1        ; 16bit sign change.
-    negf        compass_DX+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DX+1,F      ; YES: do it.
-    banksel common
+	banksel	common
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DZ+1		; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DZ+0		; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DX+1		; Data Byte
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,compass_DX+0		; Data Byte
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+	btfss	flip_screen					; 180° rotation ?
+	return								; No, done.
+	; Yes, flip X
+	banksel	compass_DX
+	comf	compass_DX+1				; 16bit sign change.
+	negf	compass_DX+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DX+1,F				; YES: do it.
+	banksel	common
+	return
+
+I2C_RX_compass1:						; New compass
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	b'10001000'					; 0x08 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
+	;rcall	WaitMSSP					; Needed? (mH)
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DX+0
+	movff	hi,compass_DX+1
+	btfss	   flip_screen				; 180° rotation ?
+	bra		I2C_RX_compass1_1			; Yes
+	; Yes, flip X
+	banksel compass_DX
+	comf	compass_DX+1				; 16bit sign change.
+	negf	compass_DX+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DX+1,F				; YES: do it.
+	banksel	common
 I2C_RX_compass1_1:
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-    rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DY+0
-    movff	hi,compass_DY+1
-    btfss       flip_screen         ; 180° rotation ?
-    bra         I2C_RX_compass1_2   ; Yes
-    ; Yes, flip Y
-    banksel compass_DY
-    comf        compass_DY+1        ; 16bit sign change.
-    negf        compass_DY+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DY+1,F      ; YES: do it.
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DY+0
+	movff	hi,compass_DY+1
+	btfss	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass1_2			; Yes
+	; Yes, flip Y
+	banksel compass_DY
+	comf	compass_DY+1				; 16bit sign change.
+	negf	compass_DY+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DY+1,F				; YES: do it.
 I2C_RX_compass1_2:
-    banksel common
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-    movff	SSP1BUF,hi	    ; Data Byte
-    rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DZ+0
-    movff	hi,compass_DZ+1
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    bra		WaitMSSP ;(And return)
+	banksel	common
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DZ+0
+	movff	hi,compass_DZ+1
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(And return)
 
-I2C_RX_compass2:    ; newest compass
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0xE8		    ; 0x68 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-    rcall       I2C_TX
-;    rcall	WaitMSSP
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-;    rcall	I2C_TwoBytesRX_div8_2
-    btfsc       flip_screen         ; 180° rotation ?
-    bra		I2C_RX_compass2_1   ; Yes, do nothing with X
-    ; No, flip X
-    comf        hi                  ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-I2C_RX_compass2_1:   
-    movff	lo,compass_DX+0
-    movff	hi,compass_DX+1
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-;    rcall	I2C_TwoBytesRX_div8_2
-    btfss       flip_screen         ; 180° rotation ?
-    bra		I2C_RX_compass2_2   ; No, do nothing with Y
-    ; Yes, flip Y
-    comf        hi                  ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+I2C_RX_compass2:						; newest compass
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0xE8						; 0x68 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
+;	rcall	WaitMSSP
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+;	rcall	I2C_TwoBytesRX_div8_2
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass2_1			; Yes, do nothing with X
+	; No, flip X
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+I2C_RX_compass2_1:
+	movff	lo,compass_DX+0
+	movff	hi,compass_DX+1
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+;	rcall	I2C_TwoBytesRX_div8_2
+	btfss	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass2_2			; No, do nothing with Y
+	; Yes, flip Y
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_compass2_2:   
-    movff	lo,compass_DY+0
-    movff	hi,compass_DY+1
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-    ;rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DZ+0
-    movff	hi,compass_DZ+1
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    bra		WaitMSSP ;(And return)
-    
-    
-    global  I2C_init_compass
+	movff	lo,compass_DY+0
+	movff	hi,compass_DY+1
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+;	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DZ+0
+	movff	hi,compass_DZ+1
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP ;(And return)
+
+
+	global	I2C_init_compass
 I2C_init_compass:
-    bsf     compass_enabled
-    bcf	    compass_type2
-    ; probe compass 2
-    bsf	SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x32			; Address byte + Write bit
-    movwf	SSP1BUF			; control byte
-    rcall	WaitMSSP
-    btfss	SSP1CON2,ACKSTAT	; ACK?
-    bsf	    compass_type2		; ACK send. compass2 present
-    bsf	SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-    
-    btfsc   compass_type2
-    bra	    I2C_init_compass2		; Compass2
-    ; Check for compass0 or compass1...
-    bsf	    compass_type	    ; set flag
-    bsf	    SSP1CON2,SEN		; Start condition
-    rcall   WaitMSSP
-    movlw   0x3C                ; address
-    rcall   I2C_TX
-    movlw   0x0F
-    rcall   I2C_TX
-    bsf	    SSP1CON2,PEN		; Stop condition
-    rcall   WaitMSSP
-    bcf	    PIR1,SSP1IF
-    bsf	    SSP1CON2,SEN		; Start condition
-    rcall   WaitMSSP
-    movlw   0x3D                ; address
-    rcall   I2C_TX
-    rcall   I2C_OneByteRX       ; Get one byte
-    movlw   0x49		; 0x49 = Compass1
-    cpfseq  SSP1BUF
-    bcf	    compass_type	    ; clear flag
-    bsf	    SSP1CON2,PEN		; Stop condition
-    rcall   WaitMSSP
+	bsf		compass_enabled
+	bcf		compass_type2
+	; probe compass 2
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
+	rcall	WaitMSSP
+	btfss	SSP1CON2,ACKSTAT			; ACK?
+	bsf		compass_type2				; ACK send. compass2 present
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_init_compass1	    ; yes
+	btfsc	compass_type2
+	bra		I2C_init_compass2			; Compass2
+	; Check for compass0 or compass1...
+	bsf		compass_type				; set flag
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x0F
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall   WaitMSSP
+	bcf		PIR1,SSP1IF
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
+	rcall	I2C_OneByteRX				; Get one byte
+	movlw	0x49						; 0x49 = Compass1
+	cpfseq	SSP1BUF
+	bcf		compass_type				; clear flag
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+
+	btfsc	compass_type				; compass1?
+	bra		I2C_init_compass1			; yes
 ; init compass0
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x00
-    rcall       I2C_TX
-;	movlw	b'01101001'        ; ConfigA:  3Hz, 8 Samples averaged, Test Mode (Positive Bias)
-    movlw	b'01101000'        ; ConfigA:  3Hz, 8 Samples averaged
-    rcall       I2C_TX
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x00
+	rcall	I2C_TX
+;	movlw	b'01101001'					; ConfigA:  3Hz, 8 Samples averaged, Test Mode (Positive Bias)
+	movlw	b'01101000'					; ConfigA:  3Hz, 8 Samples averaged
+	rcall	I2C_TX
 I2C_init_compass_common:
-    movff       opt_compass_gain,i2c_temp    ; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
-    swapf       i2c_temp,F
-    comf        i2c_temp,F
-    bcf         STATUS,C
-    rlcf        i2c_temp
-    movf        i2c_temp,W
-    clrf        i2c_temp
-    rcall       I2C_TX
-    movlw	b'00000000'        ; Continous Mode
-    rcall       I2C_TX
-    bsf	SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
+	movff	opt_compass_gain,i2c_temp1	; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
+	swapf	i2c_temp1,F
+	comf	i2c_temp1,F
+	bcf		STATUS,C
+	rlcf	i2c_temp1
+	movf	i2c_temp1,W
+	clrf	i2c_temp1
+	rcall	I2C_TX
+	movlw	b'00000000'					; Continuous Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 I2C_init_compass1:
-    bsf		SSP1CON2,SEN	; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C            ; address
-    rcall       I2C_TX
-    movlw	0x9F		; 1F with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL0
-    rcall       I2C_TX
-    movlw	b'00101111'	; CTRL1 (6,25Hz, BDU=0, x,y,z = ON)
-    rcall       I2C_TX
-    movlw	b'11000000'	; CTRL2 (50Hz, +/-2g, 
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL3
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL4
-    rcall       I2C_TX
-    movlw	b'01100100'	; CTRL5 HIGH res, 6,25Hz
-    rcall       I2C_TX
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x9F						; 1F with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL0
+	rcall	I2C_TX
+	movlw	b'00101111'					; CTRL1 (6,25Hz, BDU=0, x,y,z = ON)
+	rcall	I2C_TX
+	movlw	b'11000000'					; CTRL2 (50Hz, +/-2g, 
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL3
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL4
+	rcall	I2C_TX
+	movlw	b'01100100'					; CTRL5 HIGH res, 6,25Hz
+	rcall	I2C_TX
 init_compass1_common:
-    movff       opt_compass_gain,i2c_temp    ; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
-    movlw	b'01100000'	; CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
-    dcfsnz	i2c_temp,F	; = 1?
-    movlw	b'01100000'	; Yes, CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
-    dcfsnz	i2c_temp,F	; = 2?
-    movlw	b'01000000'	; Yes, CTRL6 (+/-8 Gauss)
-    dcfsnz	i2c_temp,F	; = 3?
-    movlw	b'01000000'	; Yes, CTRL6 (+/-8 Gauss)
-    dcfsnz	i2c_temp,F	; = 4?
-    movlw	b'00100000'	; Yes, CTRL6 (+/-4 Gauss)
-    dcfsnz	i2c_temp,F	; = 5?
-    movlw	b'00100000'	; Yes, CTRL6 (+/-4 Gauss)
-    dcfsnz	i2c_temp,F	; = 6?
-    movlw	b'00000000'	; Yes, CTRL6 (+/-2 Gauss)
-    dcfsnz	i2c_temp,F	; = 7?
-    movlw	b'00000000'	; Yes, CTRL6 (+/-2 Gauss)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL7 Continuous Mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
-    
+	movff	opt_compass_gain,i2c_temp1	; 0-7 (230LSB/Gauss to 1370LSB/Gauss) +++
+	movlw	b'01100000'					; CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
+	dcfsnz	i2c_temp1,F					; = 1?
+	movlw	b'01100000'					; Yes, CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
+	dcfsnz	i2c_temp1,F					; = 2?
+	movlw	b'01000000'					; Yes, CTRL6 (+/-8 Gauss)
+	dcfsnz	i2c_temp1,F					; = 3?
+	movlw	b'01000000'					; Yes, CTRL6 (+/-8 Gauss)
+	dcfsnz	i2c_temp1,F					; = 4?
+	movlw	b'00100000'					; Yes, CTRL6 (+/-4 Gauss)
+	dcfsnz	i2c_temp1,F					; = 5?
+	movlw	b'00100000'					; Yes, CTRL6 (+/-4 Gauss)
+	dcfsnz	i2c_temp1,F					; = 6?
+	movlw	b'00000000'					; Yes, CTRL6 (+/-2 Gauss)
+	dcfsnz	i2c_temp1,F					; = 7?
+	movlw	b'00000000'					; Yes, CTRL6 (+/-2 Gauss)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL7 Continuous Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
+
 I2C_init_compass2:
-    bsf		SSP1CON2,SEN	; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C            ; address
-    rcall       I2C_TX
-    movlw	0xE0		; 0x60 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CFG_REG_A_M (10Hz, Continuous)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CFG_REG_B_M (Low-Pass Filter off)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CFG_REG_C_M BDU=0
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	; Stop condition
-    bra		WaitMSSP	;(And return)
-    
-    global  I2C_sleep_compass
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0xE0						; 0x60 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CFG_REG_A_M (10Hz, Continuous)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CFG_REG_B_M (Low-Pass Filter off)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CFG_REG_C_M BDU=0
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(And return)
+
+
+	global	I2C_sleep_compass
 I2C_sleep_compass:
-    bcf         compass_enabled
-    btfsc	compass_type2	    ; compass2?
-    bra		I2C_sleep_compass2  ; yes
-    btfsc	compass_type	    ; compass1?
-    bra		I2C_sleep_compass1  ; yes
+	bcf		 compass_enabled
+	btfsc	compass_type2				; compass2?
+	bra		I2C_sleep_compass2			; yes
+	btfsc	compass_type				; compass1?
+	bra		I2C_sleep_compass1			; yes
 I2C_sleep_compass0:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x00
-    rcall       I2C_TX
-    movlw	b'01101000'        ; ConfigA
-    rcall       I2C_TX
-    movlw	b'00100000'        ; ConfigB
-    rcall       I2C_TX
-    movlw	b'00000010'        ; Idle Mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x00
+	rcall	I2C_TX
+	movlw	b'01101000'					; ConfigA
+	rcall	I2C_TX
+	movlw	b'00100000'					; ConfigB
+	rcall	I2C_TX
+	movlw	b'00000010'					; Idle Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 I2C_sleep_compass1:
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x20		    ; CTRL_REG1
-    rcall       I2C_TX
-    movlw	b'00000000'         ; data for CTRL_REG1: acceleration sensor Power-down mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    rcall	WaitMSSP
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x26		    ; CTRL_REG7
-    rcall       I2C_TX
-    movlw	b'00000010'         ; data for CTRL_REG7: magnetic sensor Power-down mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    bra		WaitMSSP	;(And return)
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x20						; CTRL_REG1
+	rcall	I2C_TX
+	movlw	b'00000000'					; data for CTRL_REG1: acceleration sensor Power-down mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x26						; CTRL_REG7
+	rcall	I2C_TX
+	movlw	b'00000010'					; data for CTRL_REG7: magnetic sensor Power-down mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(And return)
 
-    
 I2C_sleep_compass2:
-    ; magnetic
-    bsf		SSP1CON2,SEN	; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C            ; address
-    rcall       I2C_TX
-    movlw	0xE0		; 0x60 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000010'	; CFG_REG_A_M (Idle mode)
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	; Stop condition
-    bra		WaitMSSP	; (And return)
-    
+	; magnetic
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0xE0						; 0x60 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000010'					; CFG_REG_A_M (Idle mode)
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
+
 I2C_sleep_accelerometer2:
-    ; accelerometer
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x32            ; address
-    rcall       I2C_TX
-    movlw	0x9F		; 1F with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; TEMP_CFG_REG_A (Temp sensor off)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL_REG1_A (All off)
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	; Stop condition
-    bra		WaitMSSP	; (And return)
+	; accelerometer
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; address
+	rcall	I2C_TX
+	movlw	0x9F						; 1F with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; TEMP_CFG_REG_A (Temp sensor off)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL_REG1_A (All off)
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
-   global  I2C_init_accelerometer
+	global	I2C_init_accelerometer
 I2C_init_accelerometer:
-    btfsc   compass_type2	    ; compass2?
-    bra	    I2C_init_accelerometer2 ; Yes.
+	btfsc	compass_type2				; compass2?
+	bra		I2C_init_accelerometer2		; Yes.
 
-    btfsc   compass_type	    ; compass1?
-    return			    ; yes, ignore
+	btfsc	compass_type				; compass1?
+	return								; yes, ignore
 
-    rcall       I2C_sleep_accelerometer ; Regs can only be changed in St.By mode
+	rcall	I2C_sleep_accelerometer		; Regs can only be changed in St.By mode
 
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x38                ; address
-    rcall       I2C_TX
-    movlw	0x0E                ; XYZ_DATA_CFG
-    rcall       I2C_TX
-    movlw	b'00000000'         ; High pass Filter=0 , +/- 2g range
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x0E						; XYZ_DATA_CFG
+	rcall	I2C_TX
+	movlw	b'00000000'					; High pass Filter=0 , +/- 2g range
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x38                ; address
-    rcall       I2C_TX
-    movlw	0x2A                ; CTRL_REG1
-    rcall       I2C_TX
-;	movlw		b'00110000'         ; CTRL_REG1: 160ms data rate, St.By Mode
-    movlw	b'00110100'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode
-    rcall       I2C_TX
-    movlw	b'00000010'         ; CTRL_REG2: High Res in Active mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x2A						; CTRL_REG1
+	rcall	I2C_TX
+;	movlw	b'00110000'					; CTRL_REG1: 160ms data rate, St.By Mode
+	movlw	b'00110100'					; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode
+	rcall	I2C_TX
+	movlw	b'00000010'					; CTRL_REG2: High Res in Active mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x38                ; address
-    rcall       I2C_TX
-    movlw	0x2A                ; CTRL_REG1
-    rcall       I2C_TX
-;	movlw		b'00110001'         ; CTRL_REG1: 160ms data rate, Active Mode
-    movlw	b'00110101'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode, Active Mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
-    
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x2A						; CTRL_REG1
+	rcall	I2C_TX
+;	movlw	b'00110001'					; CTRL_REG1: 160ms data rate, Active Mode
+	movlw	b'00110101'					; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode, Active Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
+
 I2C_init_accelerometer2:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x32            ; address
-    rcall       I2C_TX
-    movlw	0x9F		; 1F with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; TEMP_CFG_REG_A (Temp sensor off)
-    rcall       I2C_TX
-    movlw	b'01010111'	; CTRL_REG1_A (100Hz, x,y,z = ON)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL_REG2_A
-    rcall       I2C_TX
-;    movlw	b'00000000'	; CTRL_REG3_A
-;    rcall       I2C_TX
-;    movlw	b'00000000'	; CTRL_REG4_A (BDU=0, +/-2g, 
-;    rcall       I2C_TX
-;    movlw	b'00000000'	; CTRL_REG5_A
-;    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; address
+	rcall	I2C_TX
+	movlw	0x9F						; 1F with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; TEMP_CFG_REG_A (Temp sensor off)
+	rcall	I2C_TX
+	movlw	b'01010111'					; CTRL_REG1_A (100Hz, x,y,z = ON)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL_REG2_A
+	rcall	I2C_TX
+;	movlw	b'00000000'					; CTRL_REG3_A
+;	rcall	I2C_TX
+;	movlw	b'00000000'					; CTRL_REG4_A (BDU=0, +/-2g,
+;	rcall	I2C_TX
+;	movlw	b'00000000'					; CTRL_REG5_A
+;	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
-    global  I2C_sleep_accelerometer
+	global	I2C_sleep_accelerometer
 I2C_sleep_accelerometer:
-    btfsc   compass_type2	    ; Compass2
-    bra	    I2C_sleep_accelerometer2	; Yes
-    btfsc   compass_type	    ; compass1?
-    return			    ; yes, ignore
+	btfsc	compass_type2				; Compass2
+	bra		I2C_sleep_accelerometer2	; Yes
+	btfsc	compass_type				; compass1?
+	return								; yes, ignore
 
-	bsf			SSP1CON2,SEN		; Start condition
-	rcall		WaitMSSP
-	movlw		0x38                ; address
-    rcall       I2C_TX
-	movlw		0x2A                ; CTRL_REG1
-    rcall       I2C_TX
-	movlw		b'00000000'         ; St. By Mode
-    rcall       I2C_TX
-	bsf			SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP	    ; (And return)
-   
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x2A						; CTRL_REG1
+	rcall	I2C_TX
+	movlw	b'00000000'					; St. By Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra	WaitMSSP						; (And return)
+
 lt2942_init_again:
-	clrf	i2c_temp
-	movlw	0x02                ; Point to accumulated charge registers
+	clrf	i2c_temp1
+	movlw	0x02						; Point to accumulated charge registers
 	rcall	I2C_TX_GAUGE
-	movff	battery_acumulated_charge+1,SSP1BUF       ; Data Byte
+	movff	battery_acumulated_charge+1,SSP1BUF	; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movff	battery_acumulated_charge+0,SSP1BUF       ; Data Byte
+	movff	battery_acumulated_charge+0,SSP1BUF	; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	movff	battery_acumulated_charge+1,sub_a+1
 	movff	battery_acumulated_charge+0,sub_a+0
 	; and init again...
 
-	global  lt2942_init
-lt2942_init:                    ; Setup Control register B
-	clrf	i2c_temp
-	movlw	0x01                ; Point to control reg B
+	global	lt2942_init
+lt2942_init:							; Setup Control register B
+	clrf	i2c_temp1
+	movlw	0x01						; Point to control reg B
 	rcall	I2C_TX_GAUGE
-	movlw   b'11111000'         ; Automatic conversion every two seconds
-	movff	WREG, SSP1BUF       ; Data Byte
+	movlw	b'11111000'					; Automatic conversion every two seconds
+	movff	WREG, SSP1BUF				; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP ;   (And return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 	global	lt2942_get_status
-lt2942_get_status:          ; Read status register
-    bcf     battery_gauge_available     ; Clear flag
-	clrf	i2c_temp
-	movlw	0x00            ; Point to Status reg
+lt2942_get_status:						; Read status register
+	bcf		battery_gauge_available		; Clear flag
+	clrf	i2c_temp1
+	movlw	0x00						; Point to Status reg
 	rcall	I2C_TX_GAUGE
 	rcall	I2C_RX_GAUGE
 	movff	SSP1BUF,WREG
-        btfss   WREG,7          ; 2942 found?
-        bsf     battery_gauge_available     ; Yes, set flag
-	bsf	SSP1CON2,PEN	; Stop condition
-	bra	WaitMSSP ;   (And return)
+	btfss	WREG,7						; 2942 found?
+	bsf		battery_gauge_available		; Yes, set flag
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 
 	global	lt2942_get_voltage
-lt2942_get_voltage:		; Read battery voltage registers
-	clrf	i2c_temp
-	movlw	0x08        ; Point to voltage registers
+lt2942_get_voltage:						; Read battery voltage registers
+	clrf	i2c_temp1
+	movlw	0x08						; Point to voltage registers
 	rcall	I2C_TX_GAUGE
 	rcall	I2C_RX_GAUGE
-	bsf		SSP1CON2,ACKEN		; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
 	movff	SSP1BUF,xA+1
-	bsf		SSP1CON2, RCEN		; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,xA+0
-	bsf		SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 
 ;	banksel	common
-    ; xA:2 loaded with raw values
-    movlw   LOW     .6000
-    movwf   xB+0
-    movlw   HIGH    .6000
-    movwf   xB+1
-    call    mult16x16		;xA*xB=xC
+	; xA:2 loaded with raw values
+	movlw	LOW  .6000
+	movwf	xB+0
+	movlw	HIGH .6000
+	movwf	xB+1
+	call	mult16x16					; xA*xB=xC
 
-    ; devide xC (32bit)/65535 for result in mV (16bit)
-    movlw   .16
-    movwf   i2c_temp
+	; divide xC (32bit)/65535 for result in mV (16bit)
+	movlw	.16
+	movwf	i2c_temp1
 lt2942_get_voltage2:
-    bcf     STATUS,C
-    rrcf    xC+3,F
-    rrcf    xC+2,F
-    rrcf    xC+1,F
-    rrcf    xC+0,F
-    decfsz  i2c_temp,F
-    bra     lt2942_get_voltage2
+	bcf		STATUS,C
+	rrcf	xC+3,F
+	rrcf	xC+2,F
+	rrcf	xC+1,F
+	rrcf	xC+0,F
+	decfsz	i2c_temp1,F
+	bra		lt2942_get_voltage2
 
-    ; Update battery voltage in mV
-    movff   xC+1,batt_voltage+1
-    movff   xC+0,batt_voltage+0
-    
-    tstfsz  batt_voltage+1  ; <256mV?
-    return		    ; No, done.
+	; Update battery voltage in mV
+	movff	xC+1,batt_voltage+1
+	movff	xC+0,batt_voltage+0
 
-    bra	   lt2942_init	;(and return)
+	tstfsz	batt_voltage+1				; <256mV?
+	return								; No, done.
+	bra		lt2942_init					;(and return)
 
 ;	global	lt2942_get_temperature
-;lt2942_get_temperature:		; Read temperature registers
-;	clrf	i2c_temp
-;	movlw	0x0C            ; Point to temperature registers
+;lt2942_get_temperature:				; Read temperature registers
+;	clrf	i2c_temp1
+;	movlw	0x0C						; Point to temperature registers
 ;	call	I2C_TX_GAUGE
 ;	call	I2C_RX
-;	bsf		SSP1CON2,ACKEN	; Master acknowlegde
+;	bsf		SSP1CON2,ACKEN				; Master acknowledge
 ;	rcall	WaitMSSP
 ;	movff	SSP1BUF,xA+1
-;	bsf		SSP1CON2, RCEN	; Enable recieve mode
+;	bsf		SSP1CON2, RCEN				; Enable receive mode
 ;	rcall	WaitMSSP
 ;	movff	SSP1BUF,xA+0
-;	bsf		SSP1CON2,PEN	; Stop condition
+;	bsf		SSP1CON2,PEN				; Stop condition
 ;	rcall	WaitMSSP
 ;
 ;;	banksel	common
-;    ; xA:2 loaded with raw values
-;    movlw   LOW     .6000
-;    movwf   xB+0
-;    movlw   HIGH    .6000
-;    movwf   xB+1
-;    call    mult16x16		;xA*xB=xC
+;	; xA:2 loaded with raw values
+;	movlw	LOW  .6000
+;	movwf	xB+0
+;	movlw	HIGH .6000
+;	movwf	xB+1
+;	call	mult16x16					; xA*xB=xC
 ;
-;    ; devide xC (32bit)/65535 for result in 0.1K (16bit)
-;    movlw   .16
-;    movwf   i2c_temp
+;	; devide xC (32bit)/65535 for result in 0.1K (16bit)
+;	movlw	.16
+;	movwf	i2c_temp1
 ;lt2942_get_temperature2:
-;    bcf     STATUS,C
-;    rrcf    xC+3,F
-;    rrcf    xC+2,F
-;    rrcf    xC+1,F
-;    rrcf    xC+0,F
-;    decfsz  i2c_temp,F
-;    bra     lt2942_get_temperature2
+;	bcf		STATUS,C
+;	rrcf	xC+3,F
+;	rrcf	xC+2,F
+;	rrcf	xC+1,F
+;	rrcf	xC+0,F
+;	decfsz	i2c_temp1,F
+;	bra		lt2942_get_temperature2
 ;
-;    movff   xC+1,sub_a+1
-;    movff   xC+0,sub_a+0
-;    movlw   LOW     .2731       ; Kelvin to Celcius offset
-;    movwf   sub_b+0
-;    movlw   HIGH    .2731       ; Kelvin to Celcius offset
-;    movwf   sub_b+1
-;    call    subU16  ;  sub_c = sub_a - sub_b (with UNSIGNED values)
+;	movff	xC+1,sub_a+1
+;	movff	xC+0,sub_a+0
+;	movlw	LOW	  .2731					; Kelvin to Celsius offset
+;	movwf	sub_b+0
+;	movlw	HIGH .2731					; Kelvin to Celsius offset
+;	movwf	sub_b+1
+;	call	subU16						; sub_c = sub_a - sub_b (with UNSIGNED values)
 ;
-;    ; Update batttery_temperature in 0.1°C
-;    movff   sub_c+1,battery_temperature+1
-;    movff   sub_c+0,battery_temperature+0
+;	; Update batttery_temperature in 0.1°C
+;	movff	sub_c+1,battery_temperature+1
+;	movff	sub_c+0,battery_temperature+0
 ;	return
 
 	global	lt2942_get_accumulated_charge
-lt2942_get_accumulated_charge:	; Read accumulated charge and compute percent
-	clrf	i2c_temp
-	movlw	0x00                ; Point to status register
+lt2942_get_accumulated_charge:			; Read accumulated charge and compute percent
+	clrf	i2c_temp1
+	movlw	0x00						; Point to status register
 	rcall	I2C_TX_GAUGE
 	rcall	I2C_RX_GAUGE
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
 	movff	SSP1BUF,gauge_status_byte
 
-	bsf	SSP1CON2, RCEN      ; Enable recieve mode
-	rcall	WaitMSSP	    ; Dummy read (Control byte)
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP					; Dummy read (Control byte)
 	movf	SSP1BUF,W
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	
-	bsf	SSP1CON2, RCEN      ; Enable recieve mode
+
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,sub_a+1
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	
-	bsf	SSP1CON2, RCEN      ; Enable recieve mode
+
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,sub_a+0
-	bsf	SSP1CON2,PEN        ; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
-	
-	movff	gauge_status_byte,sub_b+0   ; copy into bank common
-	btfsc	sub_b+0,0		    ; =1: UVLO Event
+
+	movff	gauge_status_byte,sub_b+0	; copy into bank common
+	btfsc	sub_b+0,0					; =1: UVLO Event
 	rcall	lt2942_init_again
 
-	movff	sub_a+1,battery_acumulated_charge+1 ; Save raw value
-	movff	sub_a+0,battery_acumulated_charge+0 ; Save raw value
-	
-    ; Compute batt_percent
-    ; (charge-battery_offset)/365
-    movff   battery_offset+0,sub_b+0
-    movff   battery_offset+1,sub_b+1
-    call    subU16          ;  sub_c = sub_a - sub_b (with signed values)
+	movff	sub_a+1,battery_acumulated_charge+1	; Save raw value
+	movff	sub_a+0,battery_acumulated_charge+0	; Save raw value
+
+	; Compute batt_percent
+	; (charge-battery_offset)/365
+	movff	battery_offset+0,sub_b+0
+	movff	battery_offset+1,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b (with signed values)
 
-    clrf    batt_percent   ; Set to zero
-    btfsc   neg_flag                ; result negative?
-    bra	    lt2942_set_to_zero_percent	; Yes, keep LT2942 at zero percent and return
+	clrf	batt_percent				; Set to zero
+	btfsc	neg_flag					; result negative?
+	bra		lt2942_set_to_zero_percent	; Yes, keep LT2942 at zero percent and return
 
-    ; > Zero, set batt_percent properly
-    movff   sub_c+0,xA+0
-    movff   sub_c+1,xA+1
-    movff   battery_capacity+0,xB+0
-    movff   battery_capacity+1,xB+1
-    call    div16x16						;xA/xB=xC with xA+0 as remainder, uses divB as temp variable
-    movff   xC+0,batt_percent
-    return
+	; > Zero, set batt_percent properly
+	movff	sub_c+0,xA+0
+	movff	sub_c+1,xA+1
+	movff	battery_capacity+0,xB+0
+	movff	battery_capacity+1,xB+1
+	call	div16x16					; xA/xB=xC with xA+0 as remainder, uses divB as temp variable
+	movff	xC+0,batt_percent
+	return
 
 lt2942_set_to_zero_percent:
-	clrf	i2c_temp
-	movlw	0x02                ; Point to accumulated charge registers
+	clrf	i2c_temp1
+	movlw	0x02						; Point to accumulated charge registers
 	rcall	I2C_TX_GAUGE
 	movff	battery_offset+1,SSP1BUF
 	rcall	WaitMSSP
@@ -989,222 +997,223 @@
 	movff	battery_offset+0,SSP1BUF
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP; (and return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (and return)
 
 	global	lt2942_charge_done
-lt2942_charge_done:                 ; Reset accumulating registers to 0xFFFF
-	clrf	i2c_temp
-	movlw	0x02                ; Point to accumulated charge registers
+lt2942_charge_done:						; Reset accumulating registers to 0xFFFF
+	clrf	i2c_temp1
+	movlw	0x02						; Point to accumulated charge registers
 	rcall	I2C_TX_GAUGE
-	setf	SSP1BUF       ; Data Byte
+	setf	SSP1BUF						; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	setf	SSP1BUF       ; Data Byte
+	setf	SSP1BUF						; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP; (and return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (and return)
 
-I2C_TX_GAUGE:					; Sends a byte to the LT2942 Gauge IC
-	movwf	i2c_temp+1   		; Data byte
-	bsf	SSP1CON2,SEN		; Start condition
+I2C_TX_GAUGE:							; Sends a byte to the LT2942 Gauge IC
+	movwf	i2c_temp2					; Data byte
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	b'11001000'			; Address byte + Write bit
-	movwf	SSP1BUF				; control byte
+	movlw	b'11001000'					; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movf	i2c_temp+1,W
-	bra	I2C_TX		; (and return)
-	
+	movf	i2c_temp2,W
+	bra		I2C_TX						; (and return)
+
 I2C_RX_GAUGE:
-	bsf		SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	b'11001001'			; Address byte + Read bit
-	movwf	SSP1BUF				; control byte
+	movlw	b'11001001'					; Address byte + Read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2, RCEN			; Enable recieve mode
-	bra	WaitMSSP; (and return)
-	
-	
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	bra		WaitMSSP					; (and return)
+
+
 	global	I2C_probe_OSTC_rx
 I2C_probe_OSTC_rx:
-    	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
-	btfss	SSP1CON2,ACKSTAT	; ACK?
-	bsf	ostc_rx_present		; ACK send. OSTC_RX present!
-	bsf	SSP1CON2,PEN		; Stop condition
+	btfss	SSP1CON2,ACKSTAT			; ACK?
+	bsf		ostc_rx_present				; ACK send. OSTC_RX present!
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
-	btfss	ostc_rx_present		; Do we have the RX?
-	return				; No, Done.
+	btfss	ostc_rx_present				; Do we have the RX?
+	return								; No, Done.
 	WAITMS	.1
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
 	movlw	0x1B
-	movwf	SSP1BUF			; Data Byte (Get firmware)
+	movwf	SSP1BUF						; Data Byte (Get firmware)
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x51			; Address byte + Read bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x51						; Address byte + Read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
-	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,rx_firmware+0
-	bsf	SSP1CON2,ACKEN		; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	
+
 	; last byte in read from RX circuity always with a NACK!
-	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf	SSP1CON2, RCEN					; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,rx_firmware+1
-	bsf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN		; Master NOT acknowlegde
+	bsf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master NOT acknowledge
 	rcall	WaitMSSP
-	bcf	SSP1CON2,ACKDT		; Reset ACKDT flag
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra 	WaitMSSP ;(and return)
-	
+	bcf		SSP1CON2,ACKDT				; Reset ACKDT flag
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP ;(and return)
+
 
 	global	I2C_get_tankdata
 I2C_get_tankdata:
-    	bsf	SSP1CON2,SEN		; Start condition
+	bsf	SSP1CON2,SEN					; Start condition
 	rcall	WaitMSSP
-    	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movlw	0x1E			; Read buffer2 (48 Bytes)
+	movlw	0x1E						; Read buffer2 (48 Bytes)
 	movwf	SSP1BUF	; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
 
 	; read 48 bytes
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf	SSP1CON2,SEN					; Start condition
 	rcall	WaitMSSP
-	movlw	0x51			; Address byte + read bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x51						; Address byte + read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movlw	.47			; 47 with ACK + 1 w/o ACK
-	movwf	temp1
+	movlw	.47							; 47 with ACK + 1 w/o ACK
+	movwf	i2c_temp2
 	lfsr	FSR2,rx_buffer+0
 I2C_get_tankdata_loop_read:
-	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf	SSP1CON2, RCEN					; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,POSTINC2
-	bcf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN		; Master acknowlegde
+	bcf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	decfsz	temp1,F
-	bra	I2C_get_tankdata_loop_read
+	decfsz	i2c_temp2,F
+	bra		I2C_get_tankdata_loop_read
 
 	; 1 w/o ACK
-    	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,POSTINC2
-	bsf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN		; Master NOT acknowlegde
+	bsf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master NOT acknowledge
 	rcall	WaitMSSP
-	bcf	SSP1CON2,ACKDT		; Reset ACKDT flag
-	
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra 	WaitMSSP ;(and return)
-	
-    
+	bcf		SSP1CON2,ACKDT				; Reset ACKDT flag
+
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(and return)
+
+
 	global	I2C_update_OSTC_rx
-I2C_update_OSTC_rx:		; 992*64byte master loop
-	bcf	i2c_error_flag		; clear error flag
+I2C_update_OSTC_rx:						; 992*64byte master loop
+	bcf		i2c_error_flag				; clear error flag
 	; write 64 bytes
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	lfsr	FSR2,buffer		; send buffer for verify
+	lfsr	FSR2,buffer					; send buffer for verify
 	movlw	.64
-	movwf	temp1
-I2C_update_OSTC_loop:	    ; 64byte flash page loop
-	movff	up,POSTINC2		; store for verify
+	movwf	i2c_temp2
+I2C_update_OSTC_loop:					; 64byte flash page loop
+	movff	up,POSTINC2					; store for verify
 	movff	up,SSP1BUF
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
 	call	ext_flash_read_block		; Read one byte
-	movwf	up				; prepare for transmit
-	decfsz	temp1,F
-	bra	I2C_update_OSTC_loop
-	bsf	SSP1CON2,PEN		; Stop condition
+	movwf	up							; prepare for transmit
+	decfsz	i2c_temp2,F
+	bra		I2C_update_OSTC_loop
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
 
 	; read 64 bytes
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x51			; Address byte + read bit
-	movwf	SSP1BUF				; control byte
+	movlw	0x51						; Address byte + read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	lfsr	FSR2,buffer		; send buffer for verify
-	movlw	.63			; 63 with ACK + 1 w/o ACK
-	movwf	temp1
+	lfsr	FSR2,buffer					; send buffer for verify
+	movlw	.63							; 63 with ACK + 1 w/o ACK
+	movwf	i2c_temp2
 I2C_update_OSTC_loop_read:
-	bsf	SSP1CON2, RCEN			; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movf	SSP1BUF,W
-	cpfseq	POSTINC2	    ; compare readback with original
-	bsf	i2c_error_flag	    ; Not equal, set flag
-	bcf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	cpfseq	POSTINC2					; compare read-back with original
+	bsf		i2c_error_flag				; Not equal, set flag
+	bcf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	decfsz	temp1,F
-	bra	I2C_update_OSTC_loop_read
+	decfsz	i2c_temp2,F
+	bra		I2C_update_OSTC_loop_read
 
 	; 1 w/o ACK
-    	bsf	SSP1CON2, RCEN			; Enable recieve mode
+	bsf	SSP1CON2, RCEN					; Enable receive mode
 	rcall	WaitMSSP
 	movf	SSP1BUF,W
-	cpfseq	POSTINC2	    ; compare readback with original
-	bsf	i2c_error_flag	    ; Not equal, set flag
-	bsf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN			; Master NOT acknowlegde
+	cpfseq	POSTINC2					; compare read-back with original
+	bsf		i2c_error_flag				; Not equal, set flag
+	bsf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master NOT acknowledge
 	rcall	WaitMSSP
-	bcf	SSP1CON2,ACKDT		    ; Reset ACKDT flag
-	
-	bsf	SSP1CON2,PEN		; Stop condition
+	bcf		SSP1CON2,ACKDT				; Reset ACKDT flag
+
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
-	
-	bsf	SSP1CON2,SEN		; Start condition
+
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF				; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movlw	0x1F			; Write command!
-	movwf	SSP1BUF	; Data Byte
+	movlw	0x1F						; Write command!
+	movwf	SSP1BUF						; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
-	WAITMS	.5			; Required waiting time
-	
+	WAITMS	.5							; Required waiting time
+
 	btfss	i2c_error_flag
-        retlw	.0			; All ok
-	retlw	.255			; an error occured
-    END
\ No newline at end of file
+	retlw	.0							; All ok
+	retlw	.255						; an error occurred
+
+	END
--- a/src/isr.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/isr.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File isr.asm									REFACTORED VERSION V2.92
+;   File isr.asm									REFACTORED VERSION V2.98
 ;
 ;   INTERUPT subroutines
 ;
@@ -10,391 +10,392 @@
 ;  2011-05-24 : [jDG] Cleanups from initial Matthias code.
 
 #include "hwos.inc"
-#include "shared_definitions.h"         ; Mailbox from/to p2_deco.c
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
 #include "ms5541.inc"
 #include "adc_lightsensor.inc"
 #include "eeprom_rs232.inc"
 
 ;=============================================================================
 
-	extern start
+	extern	start
 
-isr_high    CODE    0x0008              ; High Priority Interrups
-		bra		HighInt
-		nop	
-		nop
-		nop
-		nop
-		nop
-		nop
-		bra		HighInt
+isr_high	CODE	0x0008				; High Priority Interrupts
+	bra		HighInt
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bra		HighInt
 
-isr_low     CODE    0x00018             ; Low Priority Interrups
+isr_low		CODE	0x00018				; Low Priority Interrupts
 ;	*** low priority interrupts not used
-		retfie FAST						; Restores BSR, STATUS and WREG
+	retfie	FAST						; Restores BSR, STATUS and WREG
 
 HighInt:
-        movff   PRODL,isr_prod+0
-        movff   PRODH,isr_prod+1
+	movff	PRODL,isr_prod+0
+	movff	PRODH,isr_prod+1
 
-; Buttons
-		btfsc	PIR1,TMR1IF             ; Timer1 INT (Button hold-down Timer)
-		rcall	timer1int
-		btfsc	INTCON,INT0IF			; Buttons
-		rcall	isr_switch_right
-		btfsc	INTCON3,INT1IF			; Buttons
-		rcall	isr_switch_left
+	; Buttons
+	btfsc	PIR1,TMR1IF					; Timer1 INT (Button hold-down Timer)
+	rcall	timer1int
+	btfsc	INTCON,INT0IF				; Buttons
+	rcall	isr_switch_right
+	btfsc	INTCON3,INT1IF				; Buttons
+	rcall	isr_switch_left
 
-; IR/S8-Linktimer1int
-        btfsc   PIR3,RC2IF              ; UART2
-        rcall   isr_uart2               ; IR/S8-Link
-		btfsc	PIR2,TMR3IF				; Timer 3
-		rcall	isr_timer3				; IR-Link Timeout
+	; IR/S8 link timer int
+	btfsc	PIR3,RC2IF					; UART2
+	rcall	isr_uart2					; IR/S8-Link
+	btfsc	PIR2,TMR3IF					; Timer 3
+	rcall	isr_timer3					; IR-Link Timeout
 
-; Pressure sensor and others
-		btfsc	PIR5,TMR7IF				; Timer 7
-		rcall	isr_tmr7        		; Every 62,5ms
+	; Pressure sensor and others
+	btfsc	PIR5,TMR7IF					; Timer 7
+	rcall	isr_tmr7					; Every 62,5ms
 
-; RTCC
-		btfsc	PIR3,RTCCIF				; Real-time-clock interrupt
-		rcall	isr_rtcc                ; May return in bank common!
+	; RTCC
+	btfsc	PIR3,RTCCIF					; Real-time-clock interrupt
+	rcall	isr_rtcc					; May return in bank common!
 
-        movff   isr_prod+1,PRODH
-        movff   isr_prod+0,PRODL
-		retfie FAST						; Restores BSR, STATUS and WREG
+	movff	isr_prod+1,PRODH
+	movff	isr_prod+0,PRODL
+	retfie	FAST						; Restores BSR, STATUS and WREG
 
 isr_set_speed_to_normal:
-	; Set Speed to normal
-		movlw	b'01110010'
-		movwf	OSCCON				; 16MHz INTOSC
-		movlw	b'00000000'			
-		movwf	OSCTUNE				; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
-		movlw	b'00001101'			; 1:2 Postscaler, 1:4 Prescaler, Timer 2 start -> 1960Hz (no-flicker)
-		movwf	T2CON
-		btfss	OSCCON,HFIOFS
-		bra		$-2					; Wait until clock is stable
-		return
+	; Set speed to normal
+	movlw	b'01110010'
+	movwf	OSCCON						; 16MHz INTOSC
+	movlw	b'00000000'
+	movwf	OSCTUNE						; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
+	movlw	b'00001101'					; 1:2 Postscaler, 1:4 Prescaler, Timer 2 start -> 1960Hz (no-flicker)
+	movwf	T2CON
+	btfss	OSCCON,HFIOFS
+	bra		$-2							; Wait until clock is stable
+	return
 
-isr_dimm_tft:				; Adjust until max_CCPR1L=CCPR1L !
-        banksel     common
-		btfsc		tft_is_dimming			; Ignore while dimming
-		return
-        banksel     isr_backup
-		movf		max_CCPR1L,W
-		cpfsgt		CCPR1L					; CCPR1L>max_CCPR1L?
-		bra			isr_dimm_tft2			; No, dimm up
+isr_dimm_tft:							; Adjust until max_CCPR1L=CCPR1L !
+	banksel	common
+	btfsc	tft_is_dimming				; Ignore while dimming
+	return
+	banksel	isr_backup
+	movf	max_CCPR1L,W
+	cpfsgt	CCPR1L						; CCPR1L>max_CCPR1L?
+	bra		isr_dimm_tft2				; No, dimm up
 	; dimm down
-		decf		CCPR1L,F				; -1
-		return
+	decf	CCPR1L,F					; -1
+	return
 isr_dimm_tft2:
-		movf		max_CCPR1L,W
-		sublw		ambient_light_min_eco
-		cpfsgt		CCPR1L					; CCPR1L>max_CCPR1L-ambient_light_min_eco?
-		bra			isr_dimm_tft3			; No, dimm up slow
-		; dimm up faster
-		movlw		.10
-		addwf		CCPR1L,F
+	movf	max_CCPR1L,W
+	sublw	ambient_light_min_eco
+	cpfsgt	CCPR1L						; CCPR1L>max_CCPR1L-ambient_light_min_eco?
+	bra		isr_dimm_tft3				; No, dimm up slow
+	; dimm up faster
+	movlw	.10
+	addwf	CCPR1L,F
 isr_dimm_tft3:
-		incf		CCPR1L,F				; +1
-		return
-        nop
-        nop         ; block flash here
+	incf	CCPR1L,F					; +1
+	return
+	nop
+	nop									; block flash here
 
-isr_restore CODE    0x00080             ; Restore first flash page from EEPROM
+isr_restore	CODE	0x00080				; Restore first flash page from EEPROM
 restore_flash_0x00080:
-        goto    restore_flash
+	goto	restore_flash
 
-isr_routines;	CODE
+isr_routines							;	CODE
 ;=============================================================================
 
-isr_uart2:               ; IR/S8-Link
-        banksel RCREG2
-        movf    RCREG2,W
-    	bcf		RCSTA2,CREN		; Clear receiver status
-    	bsf		RCSTA2,CREN
-        banksel isr_backup
-        incf    ir_s8_counter,F            ; Increase counter
-        movff   ir_s8_counter,isr1_temp    ; Copy
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.0
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.1
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.2
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.3
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.4
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.5
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.6
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.7
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.8
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.9
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.10
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.11
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.12
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.13
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.14
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.15
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.16
-        dcfsnz  isr1_temp,F
-        movwf   ir_s8_buffer+.17
+isr_uart2:								; IR/S8-Link
+	banksel	RCREG2
+	movf	RCREG2,W
+	bcf		RCSTA2,CREN					; Clear receiver status
+	bsf		RCSTA2,CREN
+	banksel	isr_backup
+	incf	ir_s8_counter,F				; Increase counter
+	movff	ir_s8_counter,isr1_temp		; Copy
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.0
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.1
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.2
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.3
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.4
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.5
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.6
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.7
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.8
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.9
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.10
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.11
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.12
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.13
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.14
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.15
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.16
+	dcfsnz	isr1_temp,F
+	movwf	ir_s8_buffer+.17
 
-        clrf    TMR3L                   ; Preload timer
-        movlw   .253
-        movwf   TMR3H
-        bsf     T3CON,TMR3ON            ; (Re)Start Timeout counter
-        return
+	clrf	TMR3L						; Preload timer
+	movlw	.253
+	movwf	TMR3H
+	bsf		T3CON,TMR3ON				; (Re)Start Timeout counter
+	return
 
-isr_timer3:             ; IR/S8-Link Timeout
-		bcf		T3CON,TMR3ON			; Stop Timer3
-    	banksel isr_backup              ; Select Bank0 for ISR data.
-        movlw   .15
-        cpfseq  ir_s8_counter              ; Got exact 15bytes?
-        bra     isr_timer3_1            ; No, test for 16bytes
-        bra     isr_timer3_ir           ; Got 15 bytes, compute local checksum
+isr_timer3:								; IR/S8-Link Timeout
+	bcf		T3CON,TMR3ON				; Stop Timer3
+	banksel	isr_backup					; Select Bank0 for ISR data.
+	movlw	.15
+	cpfseq	ir_s8_counter				; Got exact 15bytes?
+	bra		isr_timer3_1				; No, test for 16bytes
+	bra		isr_timer3_ir				; Got 15 bytes, compute local checksum
 isr_timer3_1:
-        movlw   .16
-        cpfseq  ir_s8_counter              ; Got exact 16bytes?
-        bra     isr_timer3_2            ; No, test for 17bytes
-        tstfsz  ir_s8_buffer+.15           ; Last byte=0x00
-        bra     isr_timer3_exit         ; No, exit
-        bra     isr_timer3_ir           ; Got 16 bytes, compute local checksum
+	movlw	.16
+	cpfseq	ir_s8_counter				; Got exact 16bytes?
+	bra		isr_timer3_2				; No, test for 17bytes
+	tstfsz	ir_s8_buffer+.15			; Last byte=0x00
+	bra		isr_timer3_exit				; No, exit
+	bra		isr_timer3_ir				; Got 16 bytes, compute local checksum
 isr_timer3_2:
-        movlw   .17
-        cpfseq  ir_s8_counter              ; Got exact 17bytes?
-        bra     isr_timer3_exit         ; No, exit
-        bra     isr_timer3_s8           ; S8 data
+	movlw	.17
+	cpfseq	ir_s8_counter				; Got exact 17bytes?
+	bra		isr_timer3_exit				; No, exit
+	bra		isr_timer3_s8				; S8 data
 
-isr_timer3_ir:  ; IR input
-        movff   ir_s8_buffer+.0,PRODL
-        clrf    PRODH
-        movf    ir_s8_buffer+.1,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.2,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.3,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.4,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.5,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.6,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.7,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.8,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.9,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.10,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.11,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.12,W
-        rcall   isr_timer3_checksum
+isr_timer3_ir:							; IR input
+	movff	ir_s8_buffer+.0,PRODL
+	clrf	PRODH
+	movf	ir_s8_buffer+.1,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.2,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.3,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.4,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.5,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.6,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.7,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.8,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.9,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.10,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.11,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.12,W
+	rcall	isr_timer3_checksum
 
-            ; Compare checksum
-        movf    ir_s8_buffer+.13,W
-        cpfseq  PRODL                   ; Checksum ok?
-        bra     isr_timer3_exit         ; No, exit
-        movf    ir_s8_buffer+.14,W
-        cpfseq  PRODH                   ; Checksum ok?
-        bra     isr_timer3_exit         ; No, exit
+	; Compare checksum
+	movf	ir_s8_buffer+.13,W
+	cpfseq	PRODL						; Checksum ok?
+	bra		isr_timer3_exit				; No, exit
+	movf	ir_s8_buffer+.14,W
+	cpfseq	PRODH						; Checksum ok?
+	bra		isr_timer3_exit				; No, exit
 
-           ; Checksum OK, copy results
-        movff   ir_s8_buffer+.1,hud_status_byte
-        movff   ir_s8_buffer+.2,o2_mv_sensor1+0
-        movff   ir_s8_buffer+.3,o2_mv_sensor1+1
-        movff   ir_s8_buffer+.4,o2_mv_sensor2+0
-        movff   ir_s8_buffer+.5,o2_mv_sensor2+1
-        movff   ir_s8_buffer+.6,o2_mv_sensor3+0
-        movff   ir_s8_buffer+.7,o2_mv_sensor3+1
-        movff   ir_s8_buffer+.8,o2_ppo2_sensor1
-        movff   ir_s8_buffer+.9,o2_ppo2_sensor2
-        movff   ir_s8_buffer+.10,o2_ppo2_sensor3
-        movff   ir_s8_buffer+.11,hud_battery_mv+0
-        movff   ir_s8_buffer+.12,hud_battery_mv+1
+	; Checksum OK, copy results
+	movff	ir_s8_buffer+.1,hud_status_byte
+	movff	ir_s8_buffer+.2,o2_mv_sensor1+0
+	movff	ir_s8_buffer+.3,o2_mv_sensor1+1
+	movff	ir_s8_buffer+.4,o2_mv_sensor2+0
+	movff	ir_s8_buffer+.5,o2_mv_sensor2+1
+	movff	ir_s8_buffer+.6,o2_mv_sensor3+0
+	movff	ir_s8_buffer+.7,o2_mv_sensor3+1
+	movff	ir_s8_buffer+.8,o2_ppo2_sensor1
+	movff	ir_s8_buffer+.9,o2_ppo2_sensor2
+	movff	ir_s8_buffer+.10,o2_ppo2_sensor3
+	movff	ir_s8_buffer+.11,hud_battery_mv+0
+	movff	ir_s8_buffer+.12,hud_battery_mv+1
 
-        movlw   ir_timeout_value        ; multiples of 62,5ms
-        movwf   ir_S8_timeout              ; Reload timeout
+	movlw	ir_timeout_value			; multiples of 62,5ms
+	movwf	ir_s8_timeout				; Reload timeout
 
-        banksel hud_status_byte
-        bsf     hud_connection_ok       ; Set manually for hwHUD w/o the HUD module...
-        banksel isr_backup              ; Select Bank0 for ISR data.
- 
+	banksel	hud_status_byte
+	bsf		hud_connection_ok			; Set manually for hwHUD w/o the HUD module...
+	banksel	isr_backup					; Select Bank0 for ISR data.
+
 isr_timer3_exit:
-        clrf    ir_s8_counter              ; Clear pointer
-	    bcf		PIR2,TMR3IF				; Clear flag
-        return
+	clrf	ir_s8_counter				; Clear pointer
+	bcf		PIR2,TMR3IF					; Clear flag
+	return
 
 isr_timer3_checksum:
-        addwf   PRODL,F
-        movlw   .0
-        addwfc  PRODH,F
-        return
+	addwf	PRODL,F
+	movlw	.0
+	addwfc	PRODH,F
+	return
 
-isr_timer3_s8:  ; S8 input
-        movff   ir_s8_buffer+.0,PRODL
-        clrf    PRODH
-        movf    ir_s8_buffer+.1,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.2,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.3,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.4,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.5,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.6,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.7,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.8,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.9,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.10,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.11,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.12,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.13,W
-        rcall   isr_timer3_checksum
-        movf    ir_s8_buffer+.14,W
-        rcall   isr_timer3_checksum
+isr_timer3_s8:							; S8 input
+	movff	ir_s8_buffer+.0,PRODL
+	clrf	PRODH
+	movf	ir_s8_buffer+.1,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.2,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.3,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.4,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.5,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.6,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.7,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.8,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.9,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.10,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.11,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.12,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.13,W
+	rcall	isr_timer3_checksum
+	movf	ir_s8_buffer+.14,W
+	rcall	isr_timer3_checksum
 
-            ; Compare checksum
-        movf    ir_s8_buffer+.15,W
-        cpfseq  PRODL                   ; Checksum ok?
-        bra     isr_timer3_exit         ; No, exit
-        movf    ir_s8_buffer+.16,W
-        cpfseq  PRODH                   ; Checksum ok?
-        bra     isr_timer3_exit         ; No, exit
+	; Compare checksum
+	movf	ir_s8_buffer+.15,W
+	cpfseq	PRODL						; Checksum ok?
+	bra		isr_timer3_exit				; No, exit
+	movf	ir_s8_buffer+.16,W
+	cpfseq	PRODH						; Checksum ok?
+	bra		isr_timer3_exit				; No, exit
 
-           ; Checksum OK, copy results
-        movff   ir_s8_buffer+.3,hud_status_byte
-        movff   ir_s8_buffer+.13,hud_battery_mv+0
-        movff   ir_s8_buffer+.14,hud_battery_mv+1
+	; Checksum OK, copy results
+	movff	ir_s8_buffer+.3,hud_status_byte
+	movff	ir_s8_buffer+.13,hud_battery_mv+0
+	movff	ir_s8_buffer+.14,hud_battery_mv+1
 
-        banksel common
-        btfsc   new_s8_data_available       ; =1: Old data already processed?
-        bra     isr_timer3_skip             ; No, skip copying new results
+	banksel	common
+	btfsc	new_s8_data_available		; =1: Old data already processed?
+	bra		isr_timer3_skip				; No, skip copying new results
 
-        movff	ir_s8_buffer+.6,s8_rawdata_sensor1+2
-        movff	ir_s8_buffer+.5,s8_rawdata_sensor1+1
-        movff	ir_s8_buffer+.4,s8_rawdata_sensor1+0
-        movff	ir_s8_buffer+.9,s8_rawdata_sensor2+2
-        movff	ir_s8_buffer+.8,s8_rawdata_sensor2+1
-        movff	ir_s8_buffer+.7,s8_rawdata_sensor2+0
-        movff	ir_s8_buffer+.12,s8_rawdata_sensor3+2
-        movff	ir_s8_buffer+.11,s8_rawdata_sensor3+1
-        movff	ir_s8_buffer+.10,s8_rawdata_sensor3+0
-        banksel common
-        bsf     new_s8_data_available       ; set flag
+	movff	ir_s8_buffer+.6,s8_rawdata_sensor1+2
+	movff	ir_s8_buffer+.5,s8_rawdata_sensor1+1
+	movff	ir_s8_buffer+.4,s8_rawdata_sensor1+0
+	movff	ir_s8_buffer+.9,s8_rawdata_sensor2+2
+	movff	ir_s8_buffer+.8,s8_rawdata_sensor2+1
+	movff	ir_s8_buffer+.7,s8_rawdata_sensor2+0
+	movff	ir_s8_buffer+.12,s8_rawdata_sensor3+2
+	movff	ir_s8_buffer+.11,s8_rawdata_sensor3+1
+	movff	ir_s8_buffer+.10,s8_rawdata_sensor3+0
+	banksel	common
+	bsf		new_s8_data_available		; set flag
 
 isr_timer3_skip:
-        banksel ir_S8_timeout
-        movlw   ir_timeout_value        ; multiples of 62,5ms
-        movwf   ir_S8_timeout           ; Reload timeout
-        bra     isr_timer3_exit         ; Exit
+	banksel	ir_s8_timeout
+	movlw	ir_timeout_value			; multiples of 62,5ms
+	movwf	ir_s8_timeout				; Reload timeout
+	bra		isr_timer3_exit				; Exit
 
 
 ;=============================================================================
 
-isr_tmr7:       					; each 62,5ms
-	bcf		PIR5,TMR7IF			; clear flag
-	banksel 0xF16					; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
+isr_tmr7:								; each 62,5ms
+	bcf		PIR5,TMR7IF					; clear flag
+	banksel	0xF16						; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
 	movlw	.248
-    	movwf	TMR7H					; -> Rollover after 2048 cycles -> 62,5ms
+	movwf	TMR7H						; -> Rollover after 2048 cycles -> 62,5ms
 
-        banksel common
+	banksel	common
 	call	get_analog_switches			; Get analog readings
 	btfss	INTCON3,INT1IE
-	bra	isr_tmr7_a
+	bra		isr_tmr7_a
 	btfsc	analog_sw2_pressed
 	rcall	isr_switch_left
 isr_tmr7_a:
-	banksel common
+	banksel	common
 	btfss	INTCON,INT0IE
-	bra	isr_tmr7_b
+	bra		isr_tmr7_b
 	btfsc	analog_sw1_pressed
 	rcall	isr_switch_right
 isr_tmr7_b:
-        banksel common
-	btfss	no_sensor_int		; No sensor interrupt (because it's addressed during sleep)
-	bra	isr_tmr7_c		; No, continue
-	banksel isr_backup              ; Back to Bank0 ISR data
-	return						
+	banksel	common
+	btfss	no_sensor_int				; No sensor interrupt (because it's addressed during sleep)
+	bra		isr_tmr7_c					; No, continue
+	banksel	isr_backup					; Back to Bank0 ISR data
+	return
 isr_tmr7_c:
 	banksel	isr_backup
 	movf	max_CCPR1L,W				; Dimm value
-	cpfseq	CCPR1L					; = current PWM value?
+	cpfseq	CCPR1L						; = current PWM value?
 	rcall	isr_dimm_tft				; No, adjust until max_CCPR1L=CCPR1L !
-		
-        banksel isr_backup
-        decfsz  ir_S8_timeout,F            ; IR Data still valid?
-        bra     isr_tmr7_2              ; Yes, continue
-        ; timeout, clear IR-Data
+
+	banksel	isr_backup
+	decfsz	ir_s8_timeout,F				; IR Data still valid?
+	bra		isr_tmr7_2					; Yes, continue
+	; timeout, clear IR-Data
 
-        movlw   ir_timeout_value        ; multiples of 62,5ms
-        movwf   ir_S8_timeout              ; Reload timeout
+	movlw	ir_timeout_value			; multiples of 62,5ms
+	movwf	ir_s8_timeout				; Reload timeout
 
-        banksel common
-        btfss   analog_o2_input
-        bra     isr_tmr7_1a             ; Always with normal ostc3 hardware
-        btfss   s8_digital
-        bra     isr_tmr7_2              ; only when digital
+	banksel	common
+	btfss	analog_o2_input
+	bra		isr_tmr7_1a					; Always with normal ostc3 hardware
+	btfss	s8_digital
+	bra		isr_tmr7_2					; only when digital
 isr_tmr7_1a:
-        clrf    o2_mv_sensor1+0		; S8/IR timeout clears all analog input readings to zero -> Fallback will be triggered when sensor mode was used
-        clrf    o2_mv_sensor1+1
-        clrf    o2_mv_sensor2+0
-        clrf    o2_mv_sensor2+1
-        clrf    o2_mv_sensor3+0
-        clrf    o2_mv_sensor3+1
-        banksel hud_battery_mv
-        clrf    hud_battery_mv+0
-        clrf    hud_battery_mv+1
-        banksel hud_status_byte
-        clrf    hud_status_byte
-        clrf    o2_ppo2_sensor1		; For IR/S8 HUD
-        clrf    o2_ppo2_sensor2
-        clrf    o2_ppo2_sensor3
+	clrf	o2_mv_sensor1+0				; S8/IR timeout clears all analog input readings to zero -> Fallback will be triggered when sensor mode was used
+	clrf	o2_mv_sensor1+1
+	clrf	o2_mv_sensor2+0
+	clrf	o2_mv_sensor2+1
+	clrf	o2_mv_sensor3+0
+	clrf	o2_mv_sensor3+1
+	banksel	hud_battery_mv
+	clrf	hud_battery_mv+0
+	clrf	hud_battery_mv+1
+	banksel	hud_status_byte
+	clrf	hud_status_byte
+	clrf	o2_ppo2_sensor1				; for IR/S8 UD
+	clrf	o2_ppo2_sensor2
+	clrf	o2_ppo2_sensor3
+
 	banksel	common
-	bsf     new_s8_data_available   ; set flag to update in surface mode
-	
+	bsf		new_s8_data_available		; set flag to update in surface mode
+
 isr_tmr7_2:
-        banksel common
-		btfss	no_sensor_int			; No sensor interrupt (because it's addressed during sleep)
-		bra		isr_sensor_state2		; No, continue
-		banksel isr_backup              ; Back to Bank0 ISR data
-		return						
+	banksel	common
+	btfss	no_sensor_int				; No sensor interrupt (because it's addressed during sleep)
+	bra		isr_sensor_state2			; No, continue
+	banksel	isr_backup					; Back to Bank0 ISR data
+	return
 
 isr_sensor_state2:
-		banksel	common
-        movff   sensor_state_counter,WREG
-        btfss   WREG,0                  ; every 1/4 second
-        bsf     quarter_second_update   ; Set flag
-        banksel isr_backup              ; Back to Bank0 ISR data
-		movlw	d'2'
-		cpfseq	speed_setting           ; Set to normal in case it's not already in normal speed mode
-		rcall	isr_set_speed_to_normal
-	
-		incf	sensor_state_counter,F	; counts to eight for state maschine
+	banksel	common
+	movff	sensor_state_counter,WREG
+	btfss	WREG,0						; every 1/4 second
+	bsf		quarter_second_update		; Set flag
+	banksel	isr_backup					; Back to Bank0 ISR data
+	movlw	d'2'
+	cpfseq	speed_setting				; Set to normal in case it's not already in normal speed mode
+	rcall	isr_set_speed_to_normal
+
+	incf	sensor_state_counter,F		; counts to eight for state machine
 
 ; State 1: Clear flags and average registers, get temperature (51us) and start pressure integration (73,5us)
 ; State 2: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us)
@@ -404,590 +405,548 @@
 ; State 6: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us)
 ; State 7: Get temperature (51us) and start pressure integration (73,5us)
 ; State 8: Get pressure (51us), start temperature integration (73,5us), calculate temperature compensated pressure (233us) and build average for half-second update of tempperature and pressure
-	
-		movff	sensor_state_counter,WREG		; WREG used as temp here...
-		dcfsnz	WREG,F
-		bra		sensor_int_state1_plus_restart	; Do State 1
-		dcfsnz	WREG,F
-		bra		sensor_int_state2				; Do State 2
-		dcfsnz	WREG,F
-		bra		sensor_int_state1				; Do State 3
-		dcfsnz	WREG,F
-		bra		sensor_int_state2				; Do State 4
-		dcfsnz	WREG,F
-		bra		sensor_int_state1				; Do State 5
-		dcfsnz	WREG,F
-		bra		sensor_int_state2				; Do State 6
-		dcfsnz	WREG,F
-		bra		sensor_int_state1				; Do State 7
-;		bra		sensor_int2_plus_average		; Do State 8
+
+	movff	sensor_state_counter,WREG		; WREG used as temp here...
+	dcfsnz	WREG,F
+	bra		sensor_int_state1_plus_restart	; Do State 1
+	dcfsnz	WREG,F
+	bra		sensor_int_state2				; Do State 2
+	dcfsnz	WREG,F
+	bra		sensor_int_state1				; Do State 3
+	dcfsnz	WREG,F
+	bra		sensor_int_state2				; Do State 4
+	dcfsnz	WREG,F
+	bra		sensor_int_state1				; Do State 5
+	dcfsnz	WREG,F
+	bra		sensor_int_state2				; Do State 6
+	dcfsnz	WREG,F
+	bra		sensor_int_state1				; Do State 7
+;	bra		sensor_int2_plus_average		; Do State 8
 ;sensor_int2_plus_average:
-		; First, do state2:
-		call		get_pressure_value		; State2: Get pressure (51us)
-		call		get_temperature_start	; and start temperature integration (73,5us)
-		call		calculate_compensation	; calculate temperature compensated pressure (27us)
+	; First, do state2:
+	call	get_pressure_value			; State2: Get pressure (51us)
+	call	get_temperature_start		; and start temperature integration (73,5us)
+	call	calculate_compensation		; calculate temperature compensated pressure (27us)
 ; Build average
-		bcf			STATUS,C            ; clear carry bit.
-		rrcf		amb_pressure_avg+1  ; amb_pressure sum / 2
-		rrcf		amb_pressure_avg+0
-		bcf			STATUS,C            ; clear carry bit, twice.
-		rrcf		amb_pressure_avg+1  ; amb_pressure sum / 4
-		rrcf		amb_pressure_avg+0
+	bcf		STATUS,C					; clear carry bit.
+	rrcf	amb_pressure_avg+1			; amb_pressure sum / 2
+	rrcf	amb_pressure_avg+0
+	bcf		STATUS,C					; clear carry bit, twice.
+	rrcf	amb_pressure_avg+1			; amb_pressure sum / 4
+	rrcf	amb_pressure_avg+0
 
-		movff		amb_pressure_avg+1,amb_pressure+1	; copy into actual register
-		movff		amb_pressure_avg+0,amb_pressure+0
+	movff	amb_pressure_avg+1,amb_pressure+1	; copy into actual register
+	movff	amb_pressure_avg+0,amb_pressure+0
 
-        bcf			STATUS,C
-        btfsc       temperature_avg+1,7 ; Copy sign bit to carry
-        bsf         STATUS,C
-		rrcf		temperature_avg+1   ; Signed temperature /2
-		rrcf		temperature_avg+0
-        bcf			STATUS,C
-        btfsc       temperature_avg+1,7 ; Copy sign bit to carry
-        bsf         STATUS,C
-		rrcf		temperature_avg+1   ; Signed temperature /4
-		rrcf		temperature_avg+0
+	bcf		STATUS,C
+	btfsc	temperature_avg+1,7			; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	temperature_avg+1			; Signed temperature /2
+	rrcf	temperature_avg+0
+	bcf		STATUS,C
+	btfsc	temperature_avg+1,7			; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	temperature_avg+1			; Signed temperature /4
+	rrcf	temperature_avg+0
 
-		movff		temperature_avg+1,temperature+1     ; copy into actual register
-		movff		temperature_avg+0,temperature+0
+	movff	temperature_avg+1,temperature+1		; copy into actual register
+	movff	temperature_avg+0,temperature+0
 
-		banksel 	common                  ; flag1 is in Bank1
-        bcf         temp_changed			; Clear flag for temperature update
-        bcf         pressure_refresh        ; Clear flag for pressure update
-        banksel 	isr_backup              ; Back to Bank0 ISR data
+	banksel	common						; flag1 is in Bank1
+	bcf		temp_changed				; Clear flag for temperature update
+	bcf		pressure_refresh			; Clear flag for pressure update
+	banksel	isr_backup					; Back to Bank0 ISR data
 
-        ; Temp changed?
-        movf	temperature+0,W
-        cpfseq	last_temperature+0
-        bra     isr_sensor_state2_2         ; Yes
-        movf	temperature+1,W
-        cpfseq	last_temperature+1
-        bra     isr_sensor_state2_2         ; Yes
+	; Temp changed?
+	movf	temperature+0,W
+	cpfseq	last_temperature+0
+	bra		isr_sensor_state2_2			; Yes
+	movf	temperature+1,W
+	cpfseq	last_temperature+1
+	bra		isr_sensor_state2_2			; Yes
 
-        bra     isr_sensor_state2_3         ; no change
+	bra		isr_sensor_state2_3			; no change
 
 isr_sensor_state2_2:
-        banksel 	common                  ; flag1 is in Bank1
-        bsf		temp_changed			    ; Yes
-        banksel 	isr_backup              ; Back to Bank0 ISR data
+	banksel	common						; flag1 is in Bank1
+	bsf		temp_changed				; Yes
+	banksel	isr_backup					; Back to Bank0 ISR data
 isr_sensor_state2_3:
-        movff   temperature+0,last_temperature+0    ; Copy for compare
-        movff   temperature+1,last_temperature+1
+	movff	temperature+0,last_temperature+0	; Copy for compare
+	movff	temperature+1,last_temperature+1
 
-    	movf	amb_pressure+0,W
-    	cpfseq	last_pressure+0
-        bra     isr_sensor_state2_4         ; Yes
-    	movf	amb_pressure+1,W
-    	cpfseq	last_pressure+1
-        bra     isr_sensor_state2_4         ; Yes
+	movf	amb_pressure+0,W
+	cpfseq	last_pressure+0
+	bra		isr_sensor_state2_4			; Yes
+	movf	amb_pressure+1,W
+	cpfseq	last_pressure+1
+	bra		isr_sensor_state2_4			; Yes
 
-        bra     isr_sensor_state2_5         ; No change
+	bra		isr_sensor_state2_5			; No change
 isr_sensor_state2_4:
-        banksel 	common                  ; flag1 is in Bank1
-    	bsf		pressure_refresh			; Yes
-        banksel 	isr_backup              ; Back to Bank0 ISR data
+	banksel	common						; flag1 is in Bank1
+	bsf		pressure_refresh			; Yes
+	banksel	isr_backup					; Back to Bank0 ISR data
 isr_sensor_state2_5:
-        movff   amb_pressure+0,last_pressure+0    ; Copy for compare
-        movff   amb_pressure+1,last_pressure+1
+	movff	amb_pressure+0,last_pressure+0	; Copy for compare
+	movff	amb_pressure+1,last_pressure+1
 
-		clrf		sensor_state_counter	; Then reset State counter
-        banksel 	common                  ; flag2 is in Bank1
-		btfss		simulatormode_active	; are we in simulator mode?
-		bra			comp_air_pressure		; no
-        ; Always set pressure_refresh flag in simulator mode
-    	bsf         pressure_refresh        ; Yes
-        banksel 	isr_backup              ; Back to Bank0 ISR data
-		movlw		LOW		d'1000'			; yes, so simulate 1000mbar surface pressure
-		movwf		last_surfpressure+0
-		movlw		HIGH	d'1000'
-		movwf		last_surfpressure+1
+	clrf	sensor_state_counter		; Then reset State counter
+	banksel	common						; flag2 is in Bank1
+	btfss	simulatormode_active		; are we in simulator mode?
+	bra		comp_air_pressure			; no
+	; Always set pressure_refresh flag in simulator mode
+	bsf		pressure_refresh			; Yes
+	banksel	isr_backup					; Back to Bank0 ISR data
+	movlw	LOW  d'1000'				; yes, so simulate 1000mbar surface pressure
+	movwf	last_surfpressure+0
+	movlw	HIGH d'1000'
+	movwf	last_surfpressure+1
 
 comp_air_pressure:
-        banksel 	isr_backup              ; Back to Bank0 ISR data
-		movf		last_surfpressure+0,W		; compensate airpressure
-		subwf   	amb_pressure+0,W             
-		movwf   	rel_pressure+0				; rel_pressure stores depth!
+	banksel	isr_backup					; Back to Bank0 ISR data
+	movf	last_surfpressure+0,W		; compensate air pressure
+	subwf	amb_pressure+0,W
+	movwf	rel_pressure+0				; rel_pressure stores depth!
 
-		movf		last_surfpressure+1,W
-		subwfb  	amb_pressure+1,W
-		movwf   	rel_pressure+1
-		btfss		STATUS,N					; result is below zero?
-		bra			sensor_int_state_exit
-		clrf		rel_pressure+0				; Yes, do not display negative depths
-		clrf		rel_pressure+1				; e.g. when surface air pressure dropped during the dive
-		bra			sensor_int_state_exit
+	movf	last_surfpressure+1,W
+	subwfb	amb_pressure+1,W
+	movwf	rel_pressure+1
+	btfss	STATUS,N					; result is below zero?
+	bra		sensor_int_state_exit
+	clrf	rel_pressure+0				; Yes, do not display negative depths
+	clrf	rel_pressure+1				; e.g. when surface air pressure dropped during the dive
+	bra		sensor_int_state_exit
 
 sensor_int_state1_plus_restart:
-		clrf		amb_pressure_avg+0  ; pressure average registers
-		clrf		amb_pressure_avg+1
-		clrf		temperature_avg+0
-		clrf		temperature_avg+1
+	clrf	amb_pressure_avg+0			; pressure average registers
+	clrf	amb_pressure_avg+1
+	clrf	temperature_avg+0
+	clrf	temperature_avg+1
 
 sensor_int_state1:
-		call		get_temperature_value	; State 1: Get temperature
-		call		get_pressure_start	 	; and start pressure integration.
-		bra			sensor_int_state_exit
+	call	get_temperature_value		; State 1: Get temperature
+	call	get_pressure_start			; and start pressure integration.
+	bra		sensor_int_state_exit
 
 sensor_int_state2:
-		call		get_pressure_value		; State2: Get pressure (51us)
-		call		get_temperature_start	; and start temperature integration (73,5us)
-		call		calculate_compensation	; calculate temperature compensated pressure (233us)
-;		bra			sensor_int_state_exit
+	call	get_pressure_value			; State2: Get pressure (51us)
+	call	get_temperature_start		; and start temperature integration (73,5us)
+	call	calculate_compensation		; calculate temperature compensated pressure (233us)
+	;bra	sensor_int_state_exit
+
 sensor_int_state_exit:
-		rcall		isr_restore_clock		; Restore clock
-		return
+	rcall	isr_restore_clock			; Restore clock
+	return
+
 ;=============================================================================
 
-
-
 isr_rtcc:								; each second
-		bcf		PIR3,RTCCIF				; clear flag
-		banksel 0xF16					; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
-		bsf		RTCCFG,RTCPTR1
-		bsf		RTCCFG,RTCPTR0			; year
-		movff	RTCVALL,year			; format is BCD!
-		movff	RTCVALH,day				; dummy read
-		movff	RTCVALL,day				; format is BCD!
-		movff	RTCVALH,month			; format is BCD!
-		movff	RTCVALL,hours			; format is BCD!
-		movff	RTCVALH,secs			; format is BCD!
-		movff	RTCVALL,secs			; format is BCD!
-		movff	RTCVALH,mins			; format is BCD!
-        banksel isr_backup              ; Back to Bank0 ISR data
-        
-		; Convert BCD to DEC and set registers
-		movff	mins, isr1_temp
-		rcall	isr_rtcc_convert		; Converts to dec with result in WREG
-		movff	WREG,mins
-		movff	secs, isr1_temp
-		rcall	isr_rtcc_convert		; Converts to dec with result in WREG
-		movff	WREG,secs
-		movff	hours, isr1_temp
-		rcall	isr_rtcc_convert		; Converts to dec with result in WREG
-		movff	WREG,hours
-		movff	month, isr1_temp
-		rcall	isr_rtcc_convert		; Converts to dec with result in WREG
-		movff	WREG,month
-		movff	day, isr1_temp
-		rcall	isr_rtcc_convert		; Converts to dec with result in WREG
-		movff	WREG,day
-		movff	year, isr1_temp
-		rcall	isr_rtcc_convert		; Converts to dec with result in WREG
-		movff	WREG,year
+	bcf		PIR3,RTCCIF					; clear flag
+	banksel	0xF16						; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
+	bsf		RTCCFG,RTCPTR1
+	bsf		RTCCFG,RTCPTR0				; year
+	movff	RTCVALL,year				; format is BCD!
+	movff	RTCVALH,day					; dummy read
+	movff	RTCVALL,day					; format is BCD!
+	movff	RTCVALH,month				; format is BCD!
+	movff	RTCVALL,hours				; format is BCD!
+	movff	RTCVALH,secs				; format is BCD!
+	movff	RTCVALL,secs				; format is BCD!
+	movff	RTCVALH,mins				; format is BCD!
+	banksel	isr_backup					; Back to Bank0 ISR data
+
+	; Convert BCD to DEC and set registers
+	movff	mins, isr1_temp
+	rcall	isr_rtcc_convert			; Converts to dec with result in WREG
+	movff	WREG,mins
+	movff	secs, isr1_temp
+	rcall	isr_rtcc_convert			; Converts to dec with result in WREG
+	movff	WREG,secs
+	movff	hours, isr1_temp
+	rcall	isr_rtcc_convert			; Converts to dec with result in WREG
+	movff	WREG,hours
+	movff	month, isr1_temp
+	rcall	isr_rtcc_convert			; Converts to dec with result in WREG
+	movff	WREG,month
+	movff	day, isr1_temp
+	rcall	isr_rtcc_convert			; Converts to dec with result in WREG
+	movff	WREG,day
+	movff	year, isr1_temp
+	rcall	isr_rtcc_convert			; Converts to dec with result in WREG
+	movff	WREG,year
 
 	; Place once/second tasks for ISR here (Be sure of the right bank!)
-		banksel common                  ; flag1 is in Bank1
-		btfss	sleepmode				; in Sleepmode?
-		call	get_ambient_level		; No, get ambient light level and set max_CCPR1L
+	banksel	common						; flag1 is in Bank1
+	btfss	sleepmode					; in Sleepmode?
+	call	get_ambient_level			; No, get ambient light level and set max_CCPR1L
 
-		rcall	isr_battery_gauge		; Add amount of battery consumption to battery_gauge:6
+	rcall	isr_battery_gauge			; Add amount of battery consumption to battery_gauge:6
 
-		; update uptime
-		banksel	uptime+0
-		incf	uptime+0,F
-		movlw	.0
-		addwfc	uptime+1,F
-		addwfc	uptime+2,F
-		addwfc	uptime+3,F
-		
-		banksel common                  ; flag1 is in Bank1
-		bsf		onesecupdate		; A new second has begun
-		btfsc	divemode			; in divemode?
-		rcall	isr_divemode_1sec		; Yes, do some divemode stuff in bank common
+	; update uptime
+	banksel	uptime+0
+	incf	uptime+0,F
+	movlw	.0
+	addwfc	uptime+1,F
+	addwfc	uptime+2,F
+	addwfc	uptime+3,F
+
+	banksel	common						; flag1 is in Bank1
+	bsf		onesecupdate				; A new second has begun
+	btfsc	divemode					; in divemode?
+	rcall	isr_divemode_1sec			; Yes, do some divemode stuff in bank common
 
-		btfss	divemode			; in divemode?
-		rcall	isr_update_lastdive_time	; No, update the lastdive timer
+	btfss	divemode					; in divemode?
+	rcall	isr_update_lastdive_time	; No, update the lastdive timer
 
-		tstfsz  secs                    ; Secs == 0 ?
-		return                          ; No, Done.
+	tstfsz	secs						; secs == 0 ?
+	return								; No, Done.
 
-		bsf		oneminupdate			; A new minute has begun
+	bsf		oneminupdate				; A new minute has begun
 
-		btfss	divemode				; In Divemode?
-		rcall	check_nofly_desat_time	; No, so reduce NoFly and Desat and increase interval
+	btfss	divemode					; In Divemode?
+	rcall	check_nofly_desat_time		; No, so increase interval
 
-        ; Check if a new hour has just begun
-		tstfsz	mins					; mins=0?
-		bra		isr_rtcc2				; No
-		bsf		onehourupdate			; Yes, set flag
-		
+	; Check if a new hour has just begun
+	tstfsz	mins						; mins == 0?
+	bra		isr_rtcc2					; No
+	bsf		onehourupdate				; Yes, set flag
+
 isr_rtcc2:
-		banksel isr_backup              ; Back to Bank0 ISR data
-		return							; Done.
+	banksel	isr_backup					; Back to Bank0 ISR data
+	return								; Done.
 
-isr_update_lastdive_time:
-    		; update uptime
-		banksel	lastdive_time+0
-		incf	lastdive_time+0,F
-		movlw	.0
-		addwfc	lastdive_time+1,F
-		addwfc	lastdive_time+2,F
-		addwfc	lastdive_time+3,F
-		banksel	common
-		return
-    
-isr_battery_gauge:	
-	    banksel isr_backup              ; Bank0 ISR data
-		movlw	current_sleepmode		; 100µA/3600 -> nAs	(Sleepmode current)
-		movwf	isr1_temp				; Store value (low byte)
-		clrf	isr2_temp				; High byte
-		
-		banksel common                  ; flag1 is in Bank1
-		btfss	sleepmode				; in Sleepmode?
-		rcall	isr_battery_gauge2		; No, compute current consumtion value into isr1_temp and isr2_temp
+isr_update_lastdive_time:				; called every second when not in divemode
+	; update uptime
+	banksel	lastdive_time+0
+	incf	lastdive_time+0,F
+	movlw	.0
+	addwfc	lastdive_time+1,F
+	addwfc	lastdive_time+2,F
+	addwfc	lastdive_time+3,F
+	banksel	common
+	return
+
+isr_battery_gauge:
+	banksel	isr_backup					; Bank0 ISR data
+	movlw	current_sleepmode			; 100µA/3600 -> nAs	(Sleepmode current)
+	movwf	isr1_temp					; Store value (low byte)
+	clrf	isr2_temp					; High byte
 
-	    banksel isr_backup              ; Bank0 ISR data
-		movf	isr1_temp,W				; 48Bit add of isr1_temp and isr2_temp into battery_gauge:6
-		addwf	battery_gauge+0,F
-		movf	isr2_temp,W
-		addwfc	battery_gauge+1,F
-		movlw	.0
-		addwfc	battery_gauge+2,F
-		addwfc	battery_gauge+3,F
-		addwfc	battery_gauge+4,F
-		addwfc	battery_gauge+5,F
-		return
-		
+	banksel	common						; flag1 is in Bank1
+	btfss	sleepmode					; in Sleepmode?
+	rcall	isr_battery_gauge2			; No, compute current consumption value into isr1_temp and isr2_temp
+
+	banksel	isr_backup					; Bank0 ISR data
+	movf	isr1_temp,W					; 48Bit add of isr1_temp and isr2_temp into battery_gauge:6
+	addwf	battery_gauge+0,F
+	movf	isr2_temp,W
+	addwfc	battery_gauge+1,F
+	movlw	.0
+	addwfc	battery_gauge+2,F
+	addwfc	battery_gauge+3,F
+	addwfc	battery_gauge+4,F
+	addwfc	battery_gauge+5,F
+	return
+
 isr_battery_gauge2:
-	; set consumtion rate in nAs for an one second interval
+	; set consumption rate in nAs for an one second interval
 	; Example:
-	; movlw	LOW		.55556			; 0,2A/3600*1e9s = nAs
-	; movwf	isr1_temp				; Low byte
-	; movlw	HIGH	.55556			; 0,2A/3600*1e9s = nAs
-	; movwf	isr2_temp				; High byte
+	; movlw	LOW  .55556					; 0,2A/3600*1e9s = nAs
+	; movwf	isr1_temp					; Low byte
+	; movlw	HIGH .55556					; 0,2A/3600*1e9s = nAs
+	; movwf	isr2_temp					; High byte
 
 	; Current consumption for LED backlight is 47*CCPR1L+272
-		movf	CCPR1L,W
-		mullw	current_backlight_multi
-		movlw	LOW		current_backlight_offset
-		addwf	PRODL,F
-		movlw	HIGH	current_backlight_offset
-		addwfc	PRODH,F
-		movff	PRODL,isr1_temp
-		movff	PRODH,isr2_temp			; isr1_temp and isr2_temp hold value for backlight
+	movf	CCPR1L,W
+	mullw	current_backlight_multi
+	movlw	LOW  current_backlight_offset
+	addwf	PRODL,F
+	movlw	HIGH current_backlight_offset
+	addwfc	PRODH,F
+	movff	PRODL,isr1_temp
+	movff	PRODH,isr2_temp				; isr1_temp and isr2_temp hold value for backlight
 
 	; Add current for CPU and GPU 
 	; speed_setting=1: ECO (3,1mA -> 861nAs), =2: NORMAL (5,50mA -> 1528nAs) or =3: FASTEST (8,04mA -> 2233nAs)
-        banksel isr_backup              ; Bank0 ISR data
-		movlw	.1
-		cpfseq	speed_setting
-		bra		isr_battery_gauge3
-		movlw	LOW		current_speed_eco
-		addwf	isr1_temp,F
-		movlw	HIGH	current_speed_eco
-		addwfc	isr2_temp,F
-		bra		isr_battery_gauge5
+	banksel	isr_backup					; Bank0 ISR data
+	movlw	.1
+	cpfseq	speed_setting
+	bra		isr_battery_gauge3
+	movlw	LOW  current_speed_eco
+	addwf	isr1_temp,F
+	movlw	HIGH current_speed_eco
+	addwfc	isr2_temp,F
+	bra		isr_battery_gauge5
 isr_battery_gauge3:
-		movlw	.2
-		cpfseq	speed_setting
-		bra		isr_battery_gauge4
-		movlw	LOW		current_speed_normal
-		addwf	isr1_temp,F
-		movlw	HIGH	current_speed_normal
-		addwfc	isr2_temp,F
-		bra		isr_battery_gauge5
+	movlw	.2
+	cpfseq	speed_setting
+	bra		isr_battery_gauge4
+	movlw	LOW  current_speed_normal
+	addwf	isr1_temp,F
+	movlw	HIGH current_speed_normal
+	addwfc	isr2_temp,F
+	bra		isr_battery_gauge5
 isr_battery_gauge4:
-		movlw	LOW		current_speed_fastest
-		addwf	isr1_temp,F
-		movlw	HIGH	current_speed_fastest
-		addwfc	isr2_temp,F
+	movlw	LOW  current_speed_fastest
+	addwf	isr1_temp,F
+	movlw	HIGH current_speed_fastest
+	addwfc	isr2_temp,F
 isr_battery_gauge5:
-    ; Add current if IR reciever is on
-        btfss   ir_power                    ; IR enabled?
-        bra     isr_battery_gauge6          ; no
-		movlw	LOW		current_ir_reciever
-		addwf	isr1_temp,F
-		movlw	HIGH	current_ir_reciever
-		addwfc	isr2_temp,F
+	; Add current if IR receiver is on
+	btfss	ir_power					; IR enabled?
+	bra		isr_battery_gauge6			; no
+	movlw	LOW  current_ir_receiver
+	addwf	isr1_temp,F
+	movlw	HIGH current_ir_receiver
+	addwfc	isr2_temp,F
 isr_battery_gauge6:
-    ; Add current for compass/accelerometer
-        btfss   compass_enabled             ; compass active?
-        bra     isr_battery_gauge7          ; no
-		movlw	LOW		current_compass
-		addwf	isr1_temp,F
-		movlw	HIGH	current_compass
-		addwfc	isr2_temp,F
+	; Add current for compass/accelerometer
+	btfss	compass_enabled				; compass active?
+	bra		isr_battery_gauge7			; no
+	movlw	LOW  current_compass
+	addwf	isr1_temp,F
+	movlw	HIGH current_compass
+	addwfc	isr2_temp,F
 isr_battery_gauge7:
-		return
+	return
 
 isr_divemode_1sec:
-		incf		samplesecs,F			; "samplingrate" diving seconds done 
-		decf		samplesecs_value,W		; holds "samplingrate" value  (minus 1 into WREG)
-		cpfsgt		samplesecs				; Done?
-		bra			isr_divemode_1sec2		; no
+	incf	samplesecs,F				; "samplingrate" diving seconds done 
+	decf	samplesecs_value,W			; holds "samplingrate" value (minus 1 into WREG)
+	cpfsgt	samplesecs					; Done?
+	bra		isr_divemode_1sec2			; no
 
-		clrf		samplesecs				; clear counter...
-		bsf			store_sample			; ...and set bit for profile storage
+	clrf	samplesecs					; clear counter...
+	bsf		store_sample				; ...and set bit for profile storage
 isr_divemode_1sec2:
-; Increase re-setable average depth divetime counter
-		infsnz      average_divesecs+0,F	; increase stopwatch registers
-		incf		average_divesecs+1,F	; increase stopwatch registers
-; Increase total divetime (Regardless of start_dive_threshold)
-		infsnz		total_divetime_seconds+0,F
-		incf        total_divetime_seconds+1,F	; Total dive time (Regardless of start_dive_threshold)
-	
-		btfss		divemode2				; displayed divetime is running?
-		return								; No (e.g. too shallow)
+	; Increase re-setable average depth divetime counter
+	infsnz	average_divesecs+0,F		; increase stopwatch registers
+	incf	average_divesecs+1,F		; increase stopwatch registers
+	; Increase total divetime (Regardless of start_dive_threshold)
+	infsnz	total_divetime_seconds+0,F
+	incf	total_divetime_seconds+1,F	; Total dive time (Regardless of start_dive_threshold)
+
+	btfss	divemode2					; displayed divetime is running?
+	return								; No (e.g. too shallow)
 
-; increase divetime registers (Displayed dive time)
-		incf		divesecs,F				
-		movlw		d'59'
-		cpfsgt		divesecs
-		bra			isr_divemode_1sec2a
+	; increase divetime registers (Displayed dive time)
+	incf	divesecs,F
+	movlw	d'59'
+	cpfsgt	divesecs
+	bra		isr_divemode_1sec2a
+
+	clrf	divesecs
+	bsf		realdive					; this bit is always set (again) if the dive is longer then one minute
+	infsnz	divemins+0,F
+	incf	divemins+1,F				; increase divemins
 
-		clrf		divesecs
-		bsf			realdive				; this bit is always set (again) if the dive is longer then one minute
-		infsnz		divemins+0,F
-        incf		divemins+1,F			; increase divemins
-		
-isr_divemode_1sec2a:	
-		btfss		FLAG_apnoe_mode			; Are we in Apnoe mode?
-		return								; No
-		
-		incf		apnoe_secs,F			; increase descent registers
-		movlw		d'59'
-		cpfsgt		apnoe_secs				; full minute?
-		return								; No
-		clrf		apnoe_secs
-		incf		apnoe_mins,F			; increase descent mins
-		return
+isr_divemode_1sec2a:
+	btfss	FLAG_apnoe_mode				; Are we in Apnoe mode?
+	return								; No
+
+	incf	apnoe_secs,F				; increase descent registers
+	movlw	d'59'
+	cpfsgt	apnoe_secs					; full minute?
+	return								; No
+	clrf	apnoe_secs
+	incf	apnoe_mins,F				; increase descent mins
+	return
 
 ;=============================================================================
-; BCD to Binary convertion.
+; BCD to Binary conversion.
 ; Input: isr1_temp = Value in BCD
 ; Output WREG = value in binary.
 isr_rtcc_convert:
-        swapf   isr1_temp, W
-        andlw   0x0F           		  	; W= tens
-        rlncf   WREG, W         		; W= 2*tens
-        subwf   isr1_temp, F          	; 16*tens + ones - 2*tens
-        subwf   isr1_temp, F          	; 14*tens + ones - 2*tens
-        subwf   isr1_temp, W          	; 12*tens + ones - 2*tens
-		return
+	swapf	isr1_temp, W
+	andlw	0x0F						; W = tens
+	rlncf	WREG, W						; W = 2*tens
+	subwf	isr1_temp, F				; 16*tens + ones - 2*tens
+	subwf	isr1_temp, F				; 14*tens + ones - 2*tens
+	subwf	isr1_temp, W				; 12*tens + ones - 2*tens
+	return
 
 ;=============================================================================
 
-isr_switch_right:						; 
-        bcf     INTCON,INT0IE           ; Disable INT0
-		banksel common                  ; flag1 is in Bank1
-        btfss   flip_screen             ; 180° flipped?
-		bsf		switch_right            ; Set flag
-        btfsc   flip_screen             ; 180° flipped?
-		bsf		switch_left				; Set flag
-        bra     isr_switch_common       ; Continue...
+isr_switch_right:
+	bcf		INTCON,INT0IE				; Disable INT0
+	banksel	common						; flag1 is in Bank1
+	btfss	flip_screen					; 180° flipped?
+	bsf		switch_right				; Set flag
+	btfsc	flip_screen					; 180° flipped?
+	bsf		switch_left					; Set flag
+	bra		isr_switch_common			; Continue...
 
-isr_switch_left:						; 
-        bcf     INTCON3,INT1IE          ; Disable INT1
-		banksel common                  ; flag1 is in Bank1
-        btfss   flip_screen             ; 180° flipped?
-		bsf		switch_left				; Set flag
-        btfsc   flip_screen             ; 180° flipped?
-		bsf		switch_right            ; Set flag
+isr_switch_left:
+	bcf		INTCON3,INT1IE				; Disable INT1
+	banksel	common						; flag1 is in Bank1
+	btfss	flip_screen					; 180° flipped?
+	bsf		switch_left					; Set flag
+	btfsc	flip_screen					; 180° flipped?
+	bsf		switch_right				; Set flag
 isr_switch_common:
-        ; load timer1 for first press
-        clrf    TMR1L
-        movlw   TMR1H_VALUE_FIRST       ; in steps of 7,8125ms
-        movwf   TMR1H
-        bsf     T1CON,TMR1ON            ; Start Timer 1
-		banksel isr_backup              ; Select Bank0 for ISR data.
-		bcf		INTCON3,INT1IF			; Clear flag
-		bcf		INTCON,INT0IF			; Clear flag
-		return
+	; load timer1 for first press
+	clrf	TMR1L
+	movlw	TMR1H_VALUE_FIRST			; in steps of 7,8125ms
+	movwf	TMR1H
+	bsf		T1CON,TMR1ON				; Start Timer 1
+	banksel	isr_backup					; Select Bank0 for ISR data.
+	bcf		INTCON3,INT1IF				; Clear flag
+	bcf		INTCON,INT0IF				; Clear flag
+	return
 
 timer1int:
-   	bcf	PIR1,TMR1IF             ; Clear flag
-        banksel common                  ; flag1 is in Bank1
-	bcf	INTCON,INT0IF		; Clear flag
-	bcf	INTCON3,INT1IF		; Clear flag
+	bcf		PIR1,TMR1IF					; Clear flag
+	banksel	common						; flag1 is in Bank1
+	bcf		INTCON,INT0IF				; Clear flag
+	bcf		INTCON3,INT1IF				; Clear flag
 	; digital
-        btfss   switch_left1            ; Left button hold-down?
-        bra     timer1int_left          ; Yes
-        btfss   switch_right2           ; Right button hold-down?
-        bra     timer1int_right         ; Yes
-	
+	btfss	switch_left1				; Left button hold-down?
+	bra		timer1int_left				; Yes
+	btfss	switch_right2				; Right button hold-down?
+	bra		timer1int_right				; Yes
+
 	; Analog
-	btfsc	analog_sw2_pressed      ; Left button hold-down?
-	bra     timer1int_left          ; Yes
-	btfsc	analog_sw1_pressed      ; Right button hold-down?
-	bra     timer1int_right         ; Yes
-	
-        ; No button hold-down, stop Timer 1
-        bcf     T1CON,TMR1ON            ; Stop Timer 1
-        bsf     INTCON,INT0IE           ; Enable INT0
-        bsf     INTCON3,INT1IE          ; Enable INT1
+	btfsc	analog_sw2_pressed			; Left button hold-down?
+	bra		timer1int_left				; Yes
+	btfsc	analog_sw1_pressed			; Right button hold-down?
+	bra		timer1int_right				; Yes
+
+	; No button hold-down, stop Timer 1
+	bcf		T1CON,TMR1ON				; Stop Timer 1
+	bsf		INTCON,INT0IE				; Enable INT0
+	bsf		INTCON3,INT1IE				; Enable INT1
 	return
 
 timer1int_left:
-        btfss   flip_screen             ; 180° flipped?
-		bsf		switch_left				; (Re-)Set flag
-        btfsc   flip_screen             ; 180° flipped?
-		bsf		switch_right            ; (Re-)Set flag
-        bra     timer1int_common        ; Continue
+	btfss	flip_screen					; 180° flipped?
+	bsf		switch_left					; (Re-)Set flag
+	btfsc	flip_screen					; 180° flipped?
+	bsf		switch_right				; (Re-)Set flag
+	bra		timer1int_common			; Continue
 timer1int_right:
-        btfss   flip_screen             ; 180° flipped?
-		bsf		switch_right            ; Set flag
-        btfsc   flip_screen             ; 180° flipped?
-		bsf		switch_left				; Set flag
+	btfss	flip_screen					; 180° flipped?
+	bsf		switch_right				; Set flag
+	btfsc	flip_screen					; 180° flipped?
+	bsf		switch_left					; Set flag
 timer1int_common:
-        ; load timer1 for next press
-        clrf    TMR1L
-        movlw   TMR1H_VALUE_CONT        ; Surface mode
-        btfsc   divemode
-        movlw   TMR1H_VALUE_CONT_DIVE   ; Dive mode
-        movwf   TMR1H
-        return                          ; Return from timer1int with timer1 kept running
+	; load timer1 for next press
+	clrf	TMR1L
+	movlw	TMR1H_VALUE_CONT			; Surface mode
+	btfsc	divemode
+	movlw	TMR1H_VALUE_CONT_DIVE		; Dive mode
+	movwf	TMR1H
+	return								; Return from timer1int with timer1 kept running
 
 ;=============================================================================
 
-check_nofly_desat_time:
-
-	; DELETE - no-fly time is now re-computed every second	## no fly
-		; ; REPLACE	## no fly
-    	; ; movf    nofly_time+0,W            ; Is nofly null ?
-    	; ; iorwf   nofly_time+1,W
-		; ; BY
-		; banksel	int_O_nofly_time
-		; movf    int_O_nofly_time+0,W		; Is nofly null ?
-		; iorwf   int_O_nofly_time+1,W
-		
-    	; bz     	check_nofly_desat_time2     ; yes...
-
-		; movlw	d'1'
-		; ; REPLACE	## no fly
-		; ; subwf	nofly_time+0,F
-		; ; BY
-		; subwf	int_O_nofly_time+0,F
-		
-		; movlw	d'0'
-
-		; ; REPLACE	## no fly
-		; ; subwfb	nofly_time+1,F          ; reduce by one
-		; ; BY
-		; subwfb	int_O_nofly_time+1,F		; reduce by one
+check_nofly_desat_time:					; called every minute when not in divemode
+	banksel	int_O_desaturation_time
+	movf	int_O_desaturation_time+0,W	; Is Desat null ?
+	iorwf	int_O_desaturation_time+1,W
+	bz		check_nofly_desat_time_1	; yes...
 
-check_nofly_desat_time2:
-		; REPLACE
-    	; movf    desaturation_time+0,W     ; Is Desat null ?
-    	; iorwf   desaturation_time+1,W
-		; BY
-		banksel	int_O_desaturation_time
-		movf    int_O_desaturation_time+0,W	; Is Desat null ?
-		iorwf   int_O_desaturation_time+1,W
-		
-    	bz     	check_nofly_desat_time3		; yes...
-
-	; DELETE - desat-time is now re-computed every second	## no fly
-		; movlw	d'1'
-		; ; REPLACE	## no fly
-		; ; subwf	desaturation_time+0,F
-		; ; BY
-		; subwf	int_O_desaturation_time+0,F
-		
-		; movlw	d'0'
-		
-		; ; REPLACE	## no fly
-		; ; subwfb	desaturation_time+1,F	   	; reduce by one...
-		; ; by
-		; subwfb	int_O_desaturation_time+1,F		; reduce by one...
-		banksel	common
+	; int_O_desaturation_time is only computed while in start, surface mode, menue_tree or ghostwriter.
+	; So the ISR may clock surface_interval past the actual surface interval time. But TFT_surface_lastdive
+	; will check int_O_desaturation_time and in case int_O_desaturation_time is zero it will not show
+	; surface_interval but lastdive_time instead. So this glitch remains invisible.
 
 	; Increase surface interval timer
-        infsnz  surface_interval+0,F
-        incf    surface_interval+1,F
-		return								; Done
+	banksel	common
+	infsnz	surface_interval+0,F
+	incf	surface_interval+1,F
+	return								; Done
 
-check_nofly_desat_time3:
-		; NEW	## no fly
-		banksel	common
-		
-		clrf	surface_interval+0
-		clrf	surface_interval+1			; Clear surface interval timer
-		return								; Done.
+check_nofly_desat_time_1:
+	banksel	common
+	clrf	surface_interval+0
+	clrf	surface_interval+1			; Clear surface interval timer
+	return								; Done.
 
 ;=============================================================================
 
 isr_restore_clock:
-		banksel	isr_backup
-		movlw	d'1'
-		cpfseq	speed_setting
-		bra		isr_restore_speed2
-	; Reset to eco	
-		movlw	b'00000000'			
-		movwf	OSCTUNE				; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
-		movlw	b'00110010'
-		movwf	OSCCON				; 1MHz INTOSC
-		movlw	T2CON_ECO
-		movwf	T2CON
-		bra		isr_restore_exit
+	banksel	isr_backup
+	movlw	d'1'
+	cpfseq	speed_setting
+	bra		isr_restore_speed2
+	; Reset to eco
+	movlw	b'00000000'
+	movwf	OSCTUNE						; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
+	movlw	b'00110010'
+	movwf	OSCCON						; 1MHz INTOSC
+	movlw	T2CON_ECO
+	movwf	T2CON
+	bra		isr_restore_exit
 isr_restore_speed2:
-		movlw	d'2'
-		cpfseq	speed_setting
-		bra		isr_restore_speed3
+	movlw	d'2'
+	cpfseq	speed_setting
+	bra		isr_restore_speed3
 	; Reset to normal
-		movlw	b'01110010'
-		movwf	OSCCON				; 16MHz INTOSC
-		movlw	b'00000000'
-		movwf	OSCTUNE				; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
-		movlw	T2CON_NORMAL
-		movwf	T2CON
-		bra		isr_restore_exit
+	movlw	b'01110010'
+	movwf	OSCCON						; 16MHz INTOSC
+	movlw	b'00000000'
+	movwf	OSCTUNE						; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
+	movlw	T2CON_NORMAL
+	movwf	T2CON
+	bra		isr_restore_exit
 
 isr_restore_speed3:
 	; Reset to fastest
-		movlw	b'01110010'			; 16MHz INTOSC
-		movwf	OSCCON				
-		movlw	b'01000000'			
-		movwf	OSCTUNE				; 4x PLL Enable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
-		movlw	T2CON_FASTEST
-		movwf	T2CON
-;		bra		isr_restore_exit
+	movlw	b'01110010'					; 16MHz INTOSC
+	movwf	OSCCON
+	movlw	b'01000000'
+	movwf	OSCTUNE						; 4x PLL Enable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz)
+	movlw	T2CON_FASTEST
+	movwf	T2CON
+	;bra	isr_restore_exit
+
 isr_restore_exit:
-		btfss	OSCCON,HFIOFS
-		bra		isr_restore_exit	; loop until PLL is stable
-		return
+	btfss	OSCCON,HFIOFS
+	bra		isr_restore_exit			; loop until PLL is stable
+	return
 
 
-restore_flash:      ; Restore first flash page from eeprom
-        banksel     common
-    	; Start address in internal flash
-    	movlw   0x00
-        movwf   TBLPTRL
-        movwf   TBLPTRH
-        movwf   TBLPTRU
+restore_flash:							; Restore first flash page from eeprom
+	banksel	common
+	; Start address in internal flash
+	movlw	0x00
+	movwf	TBLPTRL
+	movwf	TBLPTRH
+	movwf	TBLPTRU
 
-    	movlw	b'10010100'		; Setup erase
-    	rcall 	Write			; Write!
+	movlw	b'10010100'					; Setup erase
+	rcall	Write						; Write!
 
-        movlw	.128
-        movwf	lo              ; Byte counter
-        clrf    EEADR
-        movlw   .3
-        movwf   EEADRH          ; Setup backup address
+	movlw	.128
+	movwf	lo							; Byte counter
+	clrf	EEADR
+	movlw	.3
+	movwf	EEADRH						; Setup backup address
 
-        TBLRD*-					; Dummy read to be in 128 byte block
+	TBLRD*-								; Dummy read to be in 128 byte block
 restore_flash_loop:
-        call    read_eeprom
-        incf    EEADR,F
-        movff	EEDATA,TABLAT	; put 1 byte
-        tblwt+*					; Table Write with Pre-Increment
-        decfsz 	lo,F            ; 128byte done?
-        bra 	restore_flash_loop ; No
+	call	read_eeprom
+	incf	EEADR,F
+	movff	EEDATA,TABLAT				; put 1 byte
+	tblwt+*								; Table Write with Pre-Increment
+	decfsz	lo,F						; 128byte done?
+	bra		restore_flash_loop			; No
 
-    	movlw	b'10000100'		; Setup writes
-    	rcall 	Write			; Write!
+	movlw	b'10000100'					; Setup writes
+	rcall	Write						; Write!
 
-        reset           ; Done, reset CPU
+	reset								; Done, reset CPU
 
 Write:
-        movwf 	EECON1				; Type of memory to write in
-        movlw 	0x55
-        movwf 	EECON2
-        movlw 	0xAA
-        movwf 	EECON2
-        bsf 	EECON1,WR			; Write
-        nop
-        nop		
-        return
+	movwf	EECON1						; Type of memory to write in
+	movlw	0x55
+	movwf	EECON2
+	movlw	0xAA
+	movwf	EECON2
+	bsf		EECON1,WR					; Write
+	nop
+	nop
+	return
 
-
-		END
+	END
--- a/src/logbook.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/logbook.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File logbook.asm								REFACTORED VERSION V2.91
+;   File logbook.asm								REFACTORED VERSION V2.98
 ;
 ;   Logbook
 ;
@@ -8,244 +8,277 @@
 ;=============================================================================
 ; HISTORY
 ;  2011-11-12 : [mH] moving from OSTC code
-
+;
 ;=============================================================================
-; Temp data, local to this module, moved to ACCES0 area.
-;
+
+
+#include "hwos.inc"						; Mandatory header
+#include "tft.inc"
+#include "external_flash.inc"
+#include "math.inc"
+#include "strings.inc"
+#include "convert.inc"
+#include "tft_outputs.inc"
+#include "eeprom_rs232.inc"
+#include "menu_processor.inc"
+#include "wait.inc"
+#include "start.inc"
+#include "surfmode.inc"
+#include "divemode.inc"
+#include "ghostwriter.inc"
 
-#include    "hwos.inc"                  ; Mandatory header
-#include	"tft.inc"
-#include	"external_flash.inc"
-#include	"math.inc"
-#include	"strings.inc"
-#include	"convert.inc"
-#include	"tft_outputs.inc"
-#include	"eeprom_rs232.inc"
-#include 	"menu_processor.inc"
-#include	"wait.inc"
-#include	"start.inc"
-#include	"surfmode.inc"
-#include	"divemode.inc"
-#include	"ghostwriter.inc"
+	extern	do_main_menu2
+	extern	comm_mode
+	extern	customview_show_mix
+
+
+	;---- Private local variables -------------------------------------------------
 
-   	extern   do_main_menu2,comm_mode
+	CBLOCK	local1						; max size is 16 byte !!!
+		count_temperature				; current sample count for temperature divisor
+		count_deco						; current sample count for deco (ceiling) divisor
+		logbook_cur_depth:2				; current depth, for drawing profile.
+		logbook_cur_tp:2				; current temperature, for drawing profile.
+		logbook_last_tp					; Y of the last item in Tp° curve.
+		logbook_min_tp:2				; min temperature, for drawing profile.
+		logbook_max_tp:2				; maximum temperature, for drawing profile.
+		logbook_ceiling					; current ceiling, for drawing profile.
+		logbook_flags					; flags only used in logbook.asm
+		logbook_page_number				; page# in logbook
+		logbook_divenumber				; # of dive in list during search
+		logbook_max_dive_counter		; counts dive# to zero
+	ENDC								; used: 16 byte, remaining: 0 byte => FULL
 
-    CBLOCK tmp+0x36		        ; Keep space for menu processor.
-        count_temperature       ; Current sample count for temperature divisor
-        count_deco              ; Current sample count for deco (ceiling) divisor
-        logbook_cur_depth:2     ; Current depth, for drawing profile.
-        logbook_cur_tp:2        ; Current temperature, for drawing profile.
-        logbook_last_tp         ; Y of the last item in Tp° curve.
-        logbook_min_tp:2        ; Min temperature, for drawing profile.
-        logbook_max_tp:2        ; Maximum temperature, for drawing profile.
-        logbook_ceiling         ; Current ceiling, for drawing profile.
-	logbook_flags		; Flags only used in logbook.asm
-	logbook_page_number	; Page# in logbook
-	logbook_divenumber	; # of dive in list during search
-	logbook_divenumber_temp	; # of dive in list during search
-	logbook_menupos_temp	; Last position of cursor
-	profile_temp:2		; Temp for profile display
-	profile_temp2:2		; Temp for profile display
-	logbook_max_dive_counter	; Counts dive# to zero 
-	logbook_max_dive_counter_temp; Counts dive# to zero 
-	logbook_sample_counter:2; Amount of read samples
-	divemins_backup		; Backup of divemins+0
-	y_scale:2		; y-scale (The horizontal lines)
-	x_scale:2		; x-scale (The vertical lines)
-	logbook_pixel_x_pos	; x2 position of current pixel in X-direction
-        logbook_min_temp_pos    ; lowest row in the temp graph
-        logbook_max_temp_pos    ; lowest row in the temp graph
-		;+.33, reserved to tmp+0x57
-    ENDC
+	CBLOCK	local2						; max size is 16 byte !!!
+		profile_temp1:2					; temp for profile display
+		profile_temp2:2					; temp for profile display
+		logbook_sample_counter:2		; amount of read samples
+		y_scale:2						; y-scale (The horizontal lines)
+		x_scale:2						; x-scale (The vertical lines)
+		logbook_pixel_x_pos				; x2 position of current pixel in X-direction
+		logbook_min_temp_pos			; lowest row in the temp graph
+		logbook_max_temp_pos			; lowest row in the temp graph
+		logbook_menupos_temp			; last position of cursor
+		logbook_divenumber_temp			; used to back-up dive number
+		logbook_max_dive_counter_temp	; used to back-up max_dive_counter
+	ENDC								; used: 16 byte, remaining: 0 byte => FULL
 
-	#DEFINE	return_from_profileview	logbook_flags,0
-	#DEFINE	all_dives_shown			logbook_flags,1
-	#DEFINE	logbook_page_not_empty	logbook_flags,2
-	#DEFINE	end_of_profile			logbook_flags,3
-    #DEFINE keep_cursor_new_page    logbook_flags,4
-    #DEFINE log_marker_found        logbook_flags,5
+	CBLOCK	local3						; max size is 16 byte !!!
+		divenumber						; used for accessing dives
+		vertical_interval:2				; holds interval of samples for vertical 10min line
+		backup_color1					; used for restoring drawing color
+		backup_color2					; used for restoring drawing color
+		backup_divedata					; used to backup depth and salinity
+		fill_between_rows				; used for fill between rows
+		logbook_temp					; used as temp
+		logbook_temp_backup				; used as backup for temp
+		divisor_temperature				; divisor used while sampling of the dive data
+		divisor_deco					; divisor used while sampling of the dive data
+		divisor_gf						; divisor used while sampling of the dive data
+		divisor_ppo2_sensors			; divisor used while sampling of the dive data
+		divisor_decoplan				; divisor used while sampling of the dive data
+		divisor_cns						; divisor used while sampling of the dive data
+		divisor_tank					; divisor used while sampling of the dive data
+	ENDC								; used: 16 byte, remaining: 0 byte => FULL
+
 
-	
+	; Remark: The variable gaslist_gas is "misused" here as a local variable,
+	;         because the storage space for local variables is fully used up.
+
+
+;---- Defines ----------------------------------------------------------------
+
+; Flags
+#DEFINE return_from_profileview		logbook_flags,0
+#DEFINE all_dives_shown				logbook_flags,1
+#DEFINE logbook_page_not_empty		logbook_flags,2
+#DEFINE end_of_profile				logbook_flags,3
+#DEFINE keep_cursor_new_page		logbook_flags,4
+#DEFINE log_marker_found			logbook_flags,5
+#DEFINE log_show_gas_short			logbook_flags,6
+;									logbook_flags,7	; unused
+
 ; Logbook Coordinates
-	#DEFINE	logbook_list_left	.10			; Column of dive# in list
-	#DEFINE	logbook_row_offset	.28			; Distance between rows of list
-	#DEFINE	logbook_row_number	.6			; Amount of rows in the list
+#DEFINE logbook_list_left			.10				; Column of dive# in list
+#DEFINE logbook_row_offset			.28				; Distance between rows of list
+#DEFINE logbook_row_number			.6				; Amount of rows in the list
 
 ; Profile display
-	#DEFINE	profile_height_pixels	.157	; Amount of pixels height for profile display
-	#DEFINE	profile_width_pixels	.156	; Amount of pixels width for profile display
-	#DEFINE	profile_left			.1		; Left border
-	#DEFINE	profile_top				.65		; Top border
+#DEFINE profile_height_pixels		.157			; Amount of pixels height for profile display
+#DEFINE profile_width_pixels		.156			; Amount of pixels width for profile display
+#DEFINE profile_left				.1				; Left border
+#DEFINE profile_top					.65				; Top border
 
 ; "Bailout"
-    #DEFINE logbook_bailout_column      .124
-    #DEFINE logbook_bailout_row         .207
+#DEFINE logbook_bailout_column		.124
+#DEFINE logbook_bailout_row			.207
 
 ; Dive number
-	#DEFINE	logbook_divenumer_column	.1
-	#DEFINE	logbook_divenumer_row		.1
+#DEFINE logbook_divenumer_column	.1
+#DEFINE logbook_divenumer_row		.1
 ; Date and Time
-	#DEFINE	logbook_date_column			.100
-	#DEFINE logbook_date_row			.7
-	#DEFINE	logbook_time_column			.120
-	#DEFINE logbook_time_row			.38
+#DEFINE logbook_date_column			.100
+#DEFINE logbook_date_row			.7
+#DEFINE logbook_time_column			.120
+#DEFINE logbook_time_row			.38
 ; Max. Depth
-	#DEFINE	log_max_value_row		.38
-	#DEFINE	log_max_value_column	.1
-; Divetime 
-	#DEFINE	log_divetime_value_row		.38
-	#DEFINE	log_divetime_value_column	.60					; UPDATED, old value was .65
+#DEFINE log_max_value_row			.38
+#DEFINE log_max_value_column		.1
+; Divetime
+#DEFINE log_divetime_value_row		.38
+#DEFINE log_divetime_value_column	.60
 ; Gaslist below profile
-	#DEFINE	log_gas_row			.225
-	#DEFINE	log_gas_column1		.0
-	#DEFINE	log_gas_column2		log_gas_column1+(.1*.32)
-	#DEFINE	log_gas_column3		log_gas_column1+(.2*.32)
-	#DEFINE	log_gas_column4		log_gas_column1+(.3*.32)
-	#DEFINE	log_gas_column5		log_gas_column1+(.4*.32)
+#DEFINE log_gas_row					.225
+#DEFINE log_gas_column1				.0
+#DEFINE log_gas_column2				log_gas_column1+(.1*.32)
+#DEFINE log_gas_column3				log_gas_column1+(.2*.32)
+#DEFINE log_gas_column4				log_gas_column1+(.3*.32)
+#DEFINE log_gas_column5				log_gas_column1+(.4*.32)
 
 ; Logbook Page2
-    ; Gaslist
-    #DEFINE     log2_title_row1     .20
-    #DEFINE     log2_title_column   .90
-    #DEFINE     log2_gas_column     log2_title_column
-    #DEFINE     log2_gas_row1       .36
-    #DEFINE     log2_gas_row2       1*.16+log2_gas_row1
-    #DEFINE     log2_gas_row3       2*.16+log2_gas_row1
-    #DEFINE     log2_gas_row4       3*.16+log2_gas_row1
-    #DEFINE     log2_gas_row5       4*.16+log2_gas_row1
+; Gaslist
+#DEFINE log2_title_row1				.20
+#DEFINE log2_title_column			.90
+#DEFINE log2_gas_column				log2_title_column
+#DEFINE log2_gas_row1				.36
+#DEFINE log2_gas_row2				1*.16+log2_gas_row1
+#DEFINE log2_gas_row3				2*.16+log2_gas_row1
+#DEFINE log2_gas_row4				3*.16+log2_gas_row1
+#DEFINE log2_gas_row5				4*.16+log2_gas_row1
 
-    ; Setpoint List
-    #DEFINE     log2_title_sp_row   .130
-    #DEFINE     log2_sp_row1        .146
-    #DEFINE     log2_sp_row2        1*.16+log2_sp_row1
-    #DEFINE     log2_sp_row3        2*.16+log2_sp_row1
-    #DEFINE     log2_sp_row4        3*.16+log2_sp_row1
-    #DEFINE     log2_sp_row5        4*.16+log2_sp_row1
+; Setpoint List
+#DEFINE log2_title_sp_row			.130
+#DEFINE log2_sp_row1				.146
+#DEFINE log2_sp_row2				1*.16+log2_sp_row1
+#DEFINE log2_sp_row3				2*.16+log2_sp_row1
+#DEFINE log2_sp_row4				3*.16+log2_sp_row1
+#DEFINE log2_sp_row5				4*.16+log2_sp_row1
 
-    ; Details list
-    #DEFINE     log2_salinity_row       .55
-    #DEFINE     log2_salinity_column    .2
-    #DEFINE     log2_cns_row            .1*.16+log2_salinity_row
-    #DEFINE     log2_cns_column         log2_salinity_column
-    #DEFINE     log2_avr_row            .2*.16+log2_salinity_row
-    #DEFINE     log2_avr_column         log2_salinity_column
-    #DEFINE     log2_decomodel2_row     .3*.16+log2_salinity_row
-    #DEFINE     log2_decomodel2_column  log2_salinity_column
-    #DEFINE     log2_decomodel3_row     .4*.16+log2_salinity_row
-    #DEFINE     log2_decomodel3_column  log2_salinity_column
-    #DEFINE     log2_decomodel_row      .5*.16+log2_salinity_row
-    #DEFINE     log2_decomodel_column   log2_salinity_column
-    #DEFINE     log2_firmware_row       .6*.16+log2_salinity_row
-    #DEFINE     log2_firmware_column    log2_salinity_column
-    #DEFINE     log2_battery_row        .7*.16+log2_salinity_row
-    #DEFINE     log2_battery_column     log2_salinity_column
-    #DEFINE     log2_divemode_row       .8*.16+log2_salinity_row
-    #DEFINE     log2_divemode_column    log2_salinity_column
-    #DEFINE     log2_lastdeco_row       .9*.16+log2_salinity_row
-    #DEFINE     log2_lastdeco_column    log2_salinity_column
+; Details list
+#DEFINE log2_salinity_row			.55
+#DEFINE log2_salinity_column		.2
+#DEFINE log2_cns_row				.1*.16+log2_salinity_row
+#DEFINE log2_cns_column				log2_salinity_column
+#DEFINE log2_avr_row				.2*.16+log2_salinity_row
+#DEFINE log2_avr_column				log2_salinity_column
+#DEFINE log2_decomodel2_row			.3*.16+log2_salinity_row
+#DEFINE log2_decomodel2_column		log2_salinity_column
+#DEFINE log2_decomodel3_row			.4*.16+log2_salinity_row
+#DEFINE log2_decomodel3_column		log2_salinity_column
+#DEFINE log2_decomodel_row			.5*.16+log2_salinity_row
+#DEFINE log2_decomodel_column		log2_salinity_column
+#DEFINE log2_firmware_row			.6*.16+log2_salinity_row
+#DEFINE log2_firmware_column		log2_salinity_column
+#DEFINE log2_battery_row			.7*.16+log2_salinity_row
+#DEFINE log2_battery_column			log2_salinity_column
+#DEFINE log2_divemode_row			.8*.16+log2_salinity_row
+#DEFINE log2_divemode_column		log2_salinity_column
+#DEFINE log2_lastdeco_row			.9*.16+log2_salinity_row
+#DEFINE log2_lastdeco_column		log2_salinity_column
 ; Air pressure
-	#DEFINE     MBAR_row				.10*.16+log2_salinity_row
-	#DEFINE     MBAR_column				log2_salinity_column
+#DEFINE MBAR_row					.10*.16+log2_salinity_row
+#DEFINE MBAR_column					log2_salinity_column
 
 
 ; Header coordinates
-    #DEFINE log_profile_version  .8
-    #DEFINE log_date            .12
-    #DEFINE log_time            .15
-    #DEFINE log_max_depth       .17
-    #DEFINE log_divetime        .19
-    #DEFINE log_min_temp        .22
-    #DEFINE log_surface_press   .24
-    #DEFINE log_desattime       .26
-    #DEFINE log_gas1            .28
-    #DEFINE log_gas2            .32
-    #DEFINE log_gas3            .36
-    #DEFINE log_gas4            .40
-    #DEFINE log_gas5            .44
-    #DEFINE log_firmware        .48
-    #DEFINE log_battery         .50
-    #DEFINE log_samplingrate    .52
-    #DEFINE log_cns_start       .53
-    #DEFINE log_gf_start        .55
-    #DEFINE log_gf_end          .56
-    #DEFINE log_batt_info	.59
-    #DEFINE log_sp1             .60
-    #DEFINE log_sp2             .62
-    #DEFINE log_sp3             .64
-    #DEFINE log_sp4             .66
-    #DEFINE log_sp5             .68
-    #DEFINE log_salinity        .70
-    #DEFINE log_cns_end         .71
-    #DEFINE log_avr_depth       .73
-    #DEFINE log_total_seconds   .75
-    #DEFINE log_gf_lo           .77
-    #DEFINE log_sat_mult        .77
-    #DEFINE log_gf_hi           .78
-    #DEFINE log_desat_mult      .78
-    #DEFINE log_decomodel       .79
-    #DEFINE log_total_dives     .80
-    #DEFINE log_divemode        .82
-    #DEFINE log_last_stop       .243
+#DEFINE log_profile_version			.8
+#DEFINE log_date					.12
+#DEFINE log_time					.15
+#DEFINE log_max_depth				.17
+#DEFINE log_divetime				.19
+#DEFINE log_min_temp				.22
+#DEFINE log_surface_press			.24
+#DEFINE log_desattime				.26
+#DEFINE log_gas1					.28
+#DEFINE log_gas2					.32
+#DEFINE log_gas3					.36
+#DEFINE log_gas4					.40
+#DEFINE log_gas5					.44
+#DEFINE log_firmware				.48
+#DEFINE log_battery					.50
+#DEFINE log_samplingrate			.52
+#DEFINE log_cns_start				.53
+#DEFINE log_gf_start				.55
+#DEFINE log_gf_end					.56
+#DEFINE log_batt_info				.59
+#DEFINE log_sp1						.60
+#DEFINE log_sp2						.62
+#DEFINE log_sp3						.64
+#DEFINE log_sp4						.66
+#DEFINE log_sp5						.68
+#DEFINE log_salinity				.70
+#DEFINE log_cns_end					.71
+#DEFINE log_avr_depth				.73
+#DEFINE log_total_seconds			.75
+#DEFINE log_gf_lo					.77
+#DEFINE log_sat_mult				.77
+#DEFINE log_gf_hi					.78
+#DEFINE log_desat_mult				.78
+#DEFINE log_decomodel				.79
+#DEFINE log_total_dives				.80
+#DEFINE log_divemode				.82
+#DEFINE log_last_stop				.243
 
-LOG_POINT_TO    macro   address
-    movlw   address
-    movwf   ext_flash_address+0
-    endm
+
+LOG_POINT_TO	macro	address
+	movlw	address
+	movwf	ext_flash_address+0
+	endm
+
+logbook		code
 
 ;=============================================================================
 
-logbook code
+TFT_logbook_cursor:
+;	call	speed_fastest
+	WIN_BOX_BLACK .0, .240-.16, logbook_list_left-.8, logbook_list_left-.1	; top, bottom, left, right
 
-TFT_logbook_cursor:
-;	call		speed_fastest
-    WIN_BOX_BLACK   .0, .240-.16, logbook_list_left-.8, logbook_list_left-.1		;top, bottom, left, right
-
-	WIN_LEFT	logbook_list_left-.8
-	WIN_FONT 	FT_SMALL
-;	bcf     win_invert              ; Reset invert flag
+	WIN_LEFT logbook_list_left-.8
+	WIN_FONT FT_SMALL
+;	bcf		win_invert								; Reset invert flag
 	call	TFT_standard_color
 
-	movff	menupos,temp1
-	dcfsnz	temp1,F
+	movff	menupos1,lo
+	dcfsnz	lo,F
 	movlw	d'0'
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	logbook_row_offset
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	.2*logbook_row_offset
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	.3*logbook_row_offset
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	.4*logbook_row_offset
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	.5*logbook_row_offset
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	.6*logbook_row_offset
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	.7*logbook_row_offset
-	dcfsnz	temp1,F
+	dcfsnz	lo,F
 	movlw	.8*logbook_row_offset
 
 	movwf	win_top
 	STRCPY_PRINT "\xB7"
 	return
 
-	global	logbook
+	global	logbook									; entry point coming from menu_tree.asm
 logbook:
-	clrf		logbook_flags
-    clrf        CCP1CON                     ; stop PWM
-    bcf         PORTC,2                     ; Pull PWM out to GND
-	call    	TFT_boot
-;	call		TFT_standard_color
-	clrf		menupos3					; Here: used rows on current logbook-page	
-	clrf		logbook_page_number			; Here: # of current displayed page
-	clrf		logbook_divenumber			; # of dive in list during search
-	clrf		divemins+0					; Here: used as temp variables
-	clrf		divemins+1
-	clrf		timeout_counter2			; For timeout
-	movlw		logbook_row_number
-	movwf		menupos						; Here: stores current position on display (logbook_row_number-x)
-	read_int_eeprom .2						; Get low-byte of total dives
-	movff		EEDATA,logbook_max_dive_counter
+	clrf	logbook_flags
+	clrf	CCP1CON									; stop PWM
+	bcf		PORTC,2									; Pull PWM out to GND
+	call	TFT_boot
+;	call	TFT_standard_color
+	clrf	menupos3								; Here: used rows on current logbook-page
+	clrf	logbook_page_number						; Here: # of current displayed page
+	clrf	logbook_divenumber						; # of dive in list during search
+	clrf	logbook_temp
+	clrf	logbook_temp_backup
+	clrf	timeout_counter2						; For timeout
+	movlw	logbook_row_number
+	movwf	menupos1								; Here: stores current position on display (logbook_row_number-x)
+	read_int_eeprom .2								; Get low-byte of total dives
+	movff	EEDATA,logbook_max_dive_counter
 
 ;-----------------------------------------------------------------------------	
 ; display dive headers backwards from read_int_eeprom .2 = lo-1
@@ -256,13 +289,13 @@
 ; Stop when
 ; a) no dive is stored (no valid header found)
 ; b) current dive has no valid header (Number of stored dives < 256)
-; c) when 255 dives are reached divemins+0 = 255
+; c) when 255 dives are reached logbook_temp = 255
 
 logbook2:
-;	call		speed_fastest
-	incf		divemins+0,F		; increase dive counter
-    incf        divemins+0,W        ; = 0x..FF ?
-    bz          logbook_reset      ; Yes: FF --> loop.
+;	call	speed_fastest
+	incf	logbook_temp,F							; increase dive counter
+	incf	logbook_temp,W							; = 0x..FF ?
+	bz		logbook_reset							; Yes: FF --> loop.
 
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> logbook_max_dive_counter=0
@@ -270,940 +303,903 @@
 	; 3rd: 202000h-202FFFh -> logbook_max_dive_counter=2
 	; 256: 2FF000h-2FFFFFh -> logbook_max_dive_counter=255 (And hi>0...)
 
-	decf		logbook_max_dive_counter,F	; -1
+	decf	logbook_max_dive_counter,F				; -1
 
-	clrf		ext_flash_address+0
-	clrf		ext_flash_address+1
-	movlw		0x20
-	movwf		ext_flash_address+2
-	movlw		.16
-	mulwf		logbook_max_dive_counter; logbook_max_dive_counter*16 = offset to 0x2000 (up:hi)
-	movf		PRODL,W
-	addwf		ext_flash_address+1,F
-	movf		PRODH,W
-	addwfc		ext_flash_address+2,F
+	clrf	ext_flash_address+0
+	clrf	ext_flash_address+1
+	movlw	0x20
+	movwf	ext_flash_address+2
+	movlw	.16
+	mulwf	logbook_max_dive_counter				; logbook_max_dive_counter*16 = offset to 0x2000 (up:hi)
+	movf	PRODL,W
+	addwf	ext_flash_address+1,F
+	movf	PRODH,W
+	addwfc	ext_flash_address+2,F
 	; pointer at the first 0xFA of header
 
-	call		ext_flash_byte_read		; Reads one byte@ext_flash_address:3 into WREG and temp1
-	movwf		temp1
-	movlw		0xFA
-	cpfseq		temp1					; 0xFA found?
-	bra			logbook3b				; No, abort
+	call	ext_flash_byte_read						; Reads one byte@ext_flash_address:3 into WREG and ext_flash_rw
+	movwf	ext_flash_rw
+	movlw	0xFA
+	cpfseq	ext_flash_rw							; 0xFA found?
+	bra		logbook3b								; No, abort
 
-	incf		logbook_divenumber,F    ; new header found, increase logbook_divenumber
-	bra			logbook4           		; Done with searching, display the header!
+	incf	logbook_divenumber,F					; new header found, increase logbook_divenumber
+	bra		logbook4								; Done with searching, display the header!
 
 logbook3b:
-	btfss		logbook_page_not_empty	; Was there at least one dive?
-	bra         exit_logbook            ; Not a single header was found, leave logbook.
-	bra			logbook_display_loop2
+	btfss	logbook_page_not_empty					; Was there at least one dive?
+	bra		exit_logbook							; Not a single header was found, leave logbook.
+	bra		logbook_display_loop2
 
 logbook_reset:
-	tstfsz		logbook_divenumber		; Was there at least one dive?
-	bra			logbook_reset2
-	bra			logbook3b				; No, Nothing to do
+	tstfsz	logbook_divenumber						; Was there at least one dive?
+	bra		logbook_reset2
+	bra		logbook3b								; No, Nothing to do
 
 logbook_reset2:
-	bsf			all_dives_shown			; Yes
-	bra			logbook_display_loop2	; Continue
+	bsf		all_dives_shown							; Yes
+	bra		logbook_display_loop2					; Continue
 
 logbook4:
-	btfsc		all_dives_shown			; All dives displayed?
-	bra			logbook_display_loop2	; Yes, but display first page again.
+	btfsc	all_dives_shown							; All dives displayed?
+	bra		logbook_display_loop2					; Yes, but display first page again.
 
-	call 		display_listdive		; display short header for list on current list position
+	call	display_listdive						; display short header for list on current list position
 
-	movlw		logbook_row_number
-	cpfseq		menupos					; first dive on list (top place)?
-	bra			logbook_display_loop1	; no, so skip saving of address
+	movlw	logbook_row_number
+	cpfseq	menupos1								; first dive on list (top place)?
+	bra		logbook_display_loop1					; no, so skip saving of address
 
-; store all registered required to rebuilt the current logbookpage after the detail/profile view
-	movff		logbook_divenumber,logbook_divenumber_temp		; # of dive in list of the current page
-	movff		divemins+0,divemins_backup						; amount of dives drawn until now
-	movff		logbook_max_dive_counter,logbook_max_dive_counter_temp	; backup Counter
+	; store all registers required to rebuilt the current logbook page after the detail/profile view
+	movff	logbook_divenumber,logbook_divenumber_temp	; # of dive in list of the current page
+	movff	logbook_max_dive_counter,logbook_max_dive_counter_temp	; backup Counter
+	movff	logbook_temp,logbook_temp_backup		; amount of dives drawn until now
+
 
 logbook_display_loop1:
-	decfsz		menupos,F					; List full?
-	bra			logbook2					; no, search another dive for our current logbook page
+	decfsz	menupos1,F								; List full?
+	bra		logbook2								; no, search another dive for our current logbook page
 
 logbook_display_loop2:
-	btfss		logbook_page_not_empty		; Was there one dive at all?
-	bra			logbook						; Yes, so reload the first page
+	btfss	logbook_page_not_empty					; Was there one dive at all?
+	bra		logbook									; Yes, so reload the first page
 
 	; TFT_mask...
 
 	WIN_LEFT	logbook_list_left
 	WIN_TOP		logbook_row_offset*logbook_row_number
-	STRCPY_TEXT_PRINT tNextLog				; "Next Page"
+	STRCPY_TEXT_PRINT tNextLog						; "Next Page"
 	WIN_LEFT	logbook_list_left
 	WIN_TOP		logbook_row_offset*(logbook_row_number+.1)
-	STRCPY_TEXT_PRINT tExit                 ; "Exit"
+	STRCPY_TEXT_PRINT tExit							; "Exit"
 
-	movlw		d'1'						; Set cursor to position 1...
-	btfsc		return_from_profileview		; .. unless we are returning from a detail/profile view
-	movf		logbook_menupos_temp,W		; load last cursor position again
-	movwf		menupos						; and set menupos byte
-	bcf			return_from_profileview		; Do this only once while the page is loaded again!
+	movlw	d'1'									; Set cursor to position 1...
+	btfsc	return_from_profileview					; .. unless we are returning from a detail/profile view
+	movf	logbook_menupos_temp,W					; load last cursor position again
+	movwf	menupos1								; and set menupos1 byte
+	bcf		return_from_profileview					; Do this only once while the page is loaded again!
 
-	bcf			logbook_page_not_empty			; Obviously the current page is NOT empty
+	bcf		logbook_page_not_empty					; Obviously the current page is NOT empty
 
-    movlw		d'7'						; Set cursor to position 7...
-    btfsc       keep_cursor_new_page        ; ... if we came from the "new Page" line
-    movwf       menupos						; and set menupos byte
-    bcf         keep_cursor_new_page
+	movlw	d'7'									; Set cursor to position 7...
+	btfsc	keep_cursor_new_page					; ... if we came from the "new Page" line
+	movwf	menupos1								; and set menupos1 byte
+	bcf		keep_cursor_new_page
 
-	call		TFT_logbook_cursor          ; Show the cursor
+	call	TFT_logbook_cursor						; Show the cursor
 
-    call        logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
-    call        menu_processor_bottom_line  ; Show bottom line
+	call	logbook_preloop_tasks					; Clear some flags and set to Speed_eco
+	call	menu_processor_bottom_line				; Show bottom line
+
 logbook_loop:
-    btfsc		switch_left					; SET/MENU?
-	goto		next_logbook3				; adjust cursor or create new page
-    btfsc		switch_right				; ENTER?
-	bra			display_profile_or_exit		; view details/profile or exit logbook
+	btfsc	switch_left								; SET/MENU?
+	goto	next_logbook3							; adjust cursor or create new page
+	btfsc	switch_right							; ENTER?
+	bra		display_profile_or_exit					; view details/profile or exit logbook
 
-    rcall       log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-	btfsc		sleepmode					; Timeout?
-	bra         exit_logbook                ; Yes
-
-	bra         logbook_loop                ; Wait for something to do
+	rcall	log_screendump_and_onesecond			; Check if we need to make a screen-shot and check for new second
+	btfsc	sleepmode								; Timeout?
+	bra		exit_logbook							; Yes
+	bra		logbook_loop							; Wait for something to do
 
 display_profile_or_exit:
-	movlw		logbook_row_number+.2		; exit?
-	cpfseq		menupos
-	bra			display_profile_or_exit2	; No, check for "Next Page"
+	movlw	logbook_row_number+.2					; exit?
+	cpfseq	menupos1
+	bra		display_profile_or_exit2				; No, check for "Next Page"
 
 exit_logbook:
-;    call        TFT_DisplayOff
-;    call        TFT_boot
-	goto		do_main_menu2
+;	call	TFT_DisplayOff
+;	call	TFT_boot
+	goto	do_main_menu2							; jump-back to menu_tree.asm
 
 display_profile_or_exit2:
-	movlw		logbook_row_number+.1		; Next page?
-	cpfseq		menupos
-	bra			display_profile				; No, show details/profile
-	goto		next_logbook2				; Next page!
+	movlw	logbook_row_number+.1					; Next page?
+	cpfseq	menupos1
+	bra		display_profile							; No, show details/profile
+	goto	next_logbook2							; Next page!
 
 display_profile:
-    bcf         is_bailout
-    bcf         gas6_changed                ; Clear event flags
-;	call    	speed_fastest
-	movff		menupos,logbook_menupos_temp; store current cursor position
-	bsf			return_from_profileview		; tweak search routine to exit after found
+	bcf		is_bailout
+	bcf		gas6_changed							; Clear event flags
+;	call	speed_fastest
+	movff	menupos1,logbook_menupos_temp			; store current cursor position
+	bsf		return_from_profileview					; tweak search routine to exit after found
 
-	movf		logbook_page_number,W		; Number of page
-	mullw		logbook_row_number
-	movf		PRODL,W						
-	addwf		menupos,W					; page*logbook_row_number+menupos=
-	movwf		divesecs					; # of dive to show
+	movf	logbook_page_number,W					; Number of page
+	mullw	logbook_row_number
+	movf	PRODL,W
+	addwf	menupos1,W								; page * logbook_row_number + menupos1 =
+	movwf	divenumber								; # of dive to show
 
 display_profile2:
-;	call		speed_fastest
-    clrf        CCP1CON                     ; stop PWM
-    bcf         PORTC,2                     ; Pull PWM out to GND
-    call        TFT_boot
-    ;call		TFT_ClearScreen				; Clear screen
-; Set ext_flash pointer to "#divesecs-oldest" dive
-; compute read_int_eeprom .2 - divesecs
+;	call	speed_fastest
+	clrf	CCP1CON									; stop PWM
+	bcf		PORTC,2									; Pull PWM out to GND
+	call	TFT_boot
+;	call	TFT_ClearScreen							; Clear screen
+; Set ext_flash pointer to "#divenumber-oldest" dive
+; compute read_int_eeprom .2 - divenumber
 ; Read required header data for profile display
-; look in header for pointer to begin of diveprofile (Byte 2-4)
+; look in header for pointer to begin of dive profile (Byte 2-4)
 ; Set pointer (ext_flash_log_pointer:3) to this address, start drawing
-	
-	decf	divesecs,F		;-1
+
+	decf	divenumber,F							;-1
 	read_int_eeprom .2
 	movf	EEDATA,W
 	bcf		STATUS,C
-	subfwb	divesecs,W		; max. dives (low value) - divesecs
-	movwf	lo				; result
-	incf	divesecs,F		;+1
+	subfwb	divenumber,W							; max. dives (low value) - divenumber
+	movwf	lo										; result
+	incf	divenumber,F							;+1
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
 	; 2nd: 201000h-201FFFh -> lo=1
 	; 3rd: 202000h-202FFFh -> lo=2
 	; 256: 2FF000h-2FFFFFh -> lo=255 (And hi>0...)
-	clrf		ext_flash_address+0
-	clrf		ext_flash_address+1
-	movlw		0x20
-	movwf		ext_flash_address+2
-	movlw		.16
-	mulwf		lo					; lo*16 = offset to 0x2000 (up:hi)
-	movf		PRODL,W
-	addwf		ext_flash_address+1,F
-	movf		PRODH,W
-	addwfc		ext_flash_address+2,F
+	clrf	ext_flash_address+0
+	clrf	ext_flash_address+1
+	movlw	0x20
+	movwf	ext_flash_address+2
+	movlw	.16
+	mulwf	lo										; lo*16 = offset to 0x2000 (up:hi)
+	movf	PRODL,W
+	addwf	ext_flash_address+1,F
+	movf	PRODH,W
+	addwfc	ext_flash_address+2,F
 	; pointer at the first 0xFA of header
 
 	; Now, show profile
-    LOG_POINT_TO    log_samplingrate
-	call	ext_flash_byte_read			; Read sampling rate
-	movff	temp1,samplesecs_value		; needed later...
+	LOG_POINT_TO log_samplingrate
+	call	ext_flash_byte_read						; Read sampling rate
+	movff	ext_flash_rw,samplesecs_value			; needed later...
 
-    LOG_POINT_TO    .2
-	call		ext_flash_byte_read_plus		; Read start address of profile
-	movff		temp1,ext_flash_log_pointer+0
-	call		ext_flash_byte_read_plus		; Read start address of profile
-	movff		temp1,ext_flash_log_pointer+1
-	call		ext_flash_byte_read_plus		; Read start address of profile
-	movff		temp1,ext_flash_log_pointer+2
-	
+	LOG_POINT_TO .2
+	call	ext_flash_byte_read_plus				; Read start address of profile
+	movff	ext_flash_rw,ext_flash_log_pointer+0
+	call	ext_flash_byte_read_plus				; Read start address of profile
+	movff	ext_flash_rw,ext_flash_log_pointer+1
+	call	ext_flash_byte_read_plus				; Read start address of profile
+	movff	ext_flash_rw,ext_flash_log_pointer+2
 
-	clrf		logbook_sample_counter+0
-	clrf		logbook_sample_counter+1				; holds amount of read samples
+	clrf	logbook_sample_counter+0
+	clrf	logbook_sample_counter+1				; holds amount of read samples
 
-	call		TFT_standard_color
-    call        logbook_show_divenumber             ; Show the dive number in medium font
+	call	TFT_standard_color
+	call	logbook_show_divenumber					; Show the dive number in medium font
 
-	WIN_SMALL	logbook_date_column, logbook_date_row
-    LOG_POINT_TO    log_date
-	call		ext_flash_byte_read_plus
-	movff		temp1,convert_value_temp+2		; Year
-	call		ext_flash_byte_read_plus
-	movff		temp1,convert_value_temp+0		; Month
-	call		ext_flash_byte_read_plus
-	movff		temp1,convert_value_temp+1		; Day
-	call		TFT_convert_date				; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
-	STRCAT_PRINT	""
+	WIN_SMALL logbook_date_column, logbook_date_row
+	LOG_POINT_TO log_date
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,up							; year
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,hi							; month
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,lo							; day
+	call	TFT_convert_date						; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	STRCAT_PRINT ""
+
+	WIN_SMALL log_divetime_value_column,logbook_date_row	; align with surrounding data
+	LOG_POINT_TO log_divemode
+	call	ext_flash_byte_read_plus				; 0=OC, 1=CC, 2=Gauge, 3=Apnea into ext_flash_rw
+	movff	ext_flash_rw,lo
+	call	TFT_display_decotype_surface1			; "strcat_print"s divemode (OC, CC, APNEA or GAUGE)
 
-; NEW code block	## logbook look and feel
-	WIN_SMALL	log_divetime_value_column,logbook_date_row	; align with surrounding data
-	LOG_POINT_TO	log_divemode
-	call	ext_flash_byte_read_plus			; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1
-	movff       temp1,lo
-	call        TFT_display_decotype_surface1	; "strcat_print"s divemode (OC, CC, APNEA or GAUGE)
-	
-	WIN_SMALL	logbook_time_column, logbook_time_row
-	LOG_POINT_TO	log_time
-	call		ext_flash_byte_read_plus		; hour
-	movff		temp1,lo
-	call		ext_flash_byte_read_plus		; Minutes
-	movff		temp1,hi
-	output_99x									; hour
-	PUTC		':'
-	movff		hi,lo			
-	output_99x									; minute
-	STRCAT_PRINT	""							; Display 1st row of details
+	WIN_SMALL logbook_time_column, logbook_time_row
+	LOG_POINT_TO log_time
+	call	ext_flash_byte_read_plus				; hour
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; minutes
+	movff	ext_flash_rw,hi
+	output_99x										; hour
+	PUTC	':'
+	movff	hi,lo
+	output_99x										; minute
+	STRCAT_PRINT ""									; Display 1st row of details
 
-    LOG_POINT_TO    log_profile_version
-    call		ext_flash_byte_read_plus		; Profile version
-    movlw       0x24
-    cpfslt      temp1                       	; <0x24?
-    bra         log_skip_extra_icon         	; Yes, skip
-    
-    WIN_SMALL	logbook_time_column-.8, logbook_time_row
-    STRCPY_PRINT	0x94                    	; "End of dive" icon
+	LOG_POINT_TO	log_profile_version
+	call	ext_flash_byte_read_plus				; Profile version
+	movlw	0x24
+	cpfslt	ext_flash_rw							; <0x24?
+	bra		log_skip_extra_icon						; Yes, skip
+
+	WIN_SMALL logbook_time_column-.8, logbook_time_row
+	STRCPY_PRINT 0x94								; "End of dive" icon
 
 log_skip_extra_icon:
-    LOG_POINT_TO    log_max_depth
-	call		ext_flash_byte_read_plus		; read max depth
-	movff		temp1,lo				
-	call		ext_flash_byte_read_plus		; read max depth
-	movff		temp1,hi
-	movff		lo,xA+0							; calculate y-scale for profile display
-	movff		hi,xA+1
-	movlw		profile_height_pixels			; pixel height available for profile
-	movwf		xB+0
-	clrf		xB+1
-	call		div16x16						; does xA/xB=xC
-	movff		xC+0,y_scale+0					; holds LOW byte of y-scale   (mbar/pixel!)
-	movff		xC+1,y_scale+1					; holds HIGH byte of y-scale  (mbar/pixel!)
-	infsnz		y_scale+0,F         			; increase one, because there may be a remainder
-	incf		y_scale+1,F
-	
-	movlw		LOW	((profile_height_pixels+1)*.1000)
-	movwf		xC+0
-	movlw		HIGH	(((profile_height_pixels+1)*.1000) & h'FFFF')
-	movwf		xC+1
-	movlw		UPPER	((profile_height_pixels+1)*.1000)
-	movwf		xC+2
-	clrf		xC+3
+	LOG_POINT_TO log_max_depth
+	call	ext_flash_byte_read_plus				; read max depth
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read max depth
+	movff	ext_flash_rw,hi
+	movff	lo,xA+0									; calculate y-scale for profile display
+	movff	hi,xA+1
+	movlw	profile_height_pixels					; pixel height available for profile
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16								; does xA/xB=xC
+	movff	xC+0,y_scale+0							; holds LOW  byte of y-scale (mbar/pixel!)
+	movff	xC+1,y_scale+1							; holds HIGH byte of y-scale (mbar/pixel!)
+	infsnz	y_scale+0,F								; increase one, because there may be a remainder
+	incf	y_scale+1,F
 
-	movff		lo,xB+0					; Max. Depth in mbar
-	movff		hi,xB+1					; Max. Depth in mbar
-	call		div32x16				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movlw	LOW   ((profile_height_pixels+1)*.1000)
+	movwf	xC+0
+	movlw	HIGH  (((profile_height_pixels+1)*.1000) & h'FFFF')
+	movwf	xC+1
+	movlw	UPPER ((profile_height_pixels+1)*.1000)
+	movwf	xC+2
+	clrf	xC+3
 
-	movff		xC+0,x_scale+0	; 
-	movff		xC+1,x_scale+1	; = Pixels/10m (For scale, draw any xx rows a scale-line)
+	movff	lo,xB+0									; Max. Depth in mbar
+	movff	hi,xB+1									; Max. Depth in mbar
+	call	div32x16								; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 
-	movf		x_scale+0,W
-	iorwf		x_scale+1,W		; x_scale:2 = Null?
-	bnz			display_profile_offset4		; No, continue
-	incf		x_scale+1,F		; Yes, make x_scale+1>1 to make "display_profile2e" working
+	movff	xC+0,x_scale+0
+	movff	xC+1,x_scale+1							; = Pixels/10m (For scale, draw any xx rows a scale-line)
+
+	movf	x_scale+0,W
+	iorwf	x_scale+1,W								; x_scale:2 = Null?
+	bnz		display_profile_offset4					; No, continue
+	incf	x_scale+1,F								; Yes, make x_scale+1>1 to make "display_profile2e" working
 
 display_profile_offset4:
-	WIN_SMALL	log_max_value_column,log_max_value_row
+	WIN_SMALL log_max_value_column,log_max_value_row
 
-	TSTOSS		opt_units			; 0=Meters, 1=Feets
-	bra			display_profile_offset4_metric
-;display_profile_offset4_imperial:
-	call		convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
+	TSTOSS	opt_units								; 0=Meters, 1=Feets
+	bra		display_profile_offset4_metric
+	; display_profile_offset4_imperial:
+	call	convert_mbar_to_feet					; convert value in lo:hi from mbar to feet
 	PUTC	' '
-	bcf			leftbind
-    output_16_3                             ; limit to 999 and display only (0-999)
-	STRCAT_TEXT_PRINT    tFeets
-	bra			display_profile_offset4_common
+	bcf		leftbind
+	output_16_3										; limit to 999 and display only (0-999)
+	STRCAT_TEXT_PRINT tFeets
+	bra		display_profile_offset4_common
 
 display_profile_offset4_metric:
-	bsf			leftbind
-	output_16dp	d'3'					; max. depth
-	STRCAT_TEXT_PRINT   tMeters
+	bsf		leftbind
+	output_16dp d'3'								; max. depth
+	STRCAT_TEXT_PRINT tMeters
 
-display_profile_offset4_common:	
-	call		ext_flash_byte_read_plus				; divetime in minutes	
-	movff		temp1,lo
-	call		ext_flash_byte_read_plus	
-	movff		temp1,hi				; divetime in minutes
+display_profile_offset4_common:
+	call	ext_flash_byte_read_plus				; divetime in minutes	
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,hi							; divetime in minutes
 
-	movff		lo,xA+0					; calculate x-scale for profile display
-	movff		hi,xA+1					; calculate total diveseconds first
-	movlw		d'60'					; 60seconds are one minute...
-	movwf		xB+0
-	clrf		xB+1
-	call		mult16x16				; result is in xC:2 !
+	movff	lo,xA+0									; calculate x-scale for profile display
+	movff	hi,xA+1									; calculate total diveseconds first
+	movlw	d'60'									; 60seconds are one minute...
+	movwf	xB+0
+	clrf	xB+1
+	call	mult16x16								; result is in xC:2 !
 
-	WIN_SMALL	log_divetime_value_column,log_divetime_value_row
-	bsf			leftbind
-	output_16							; divetime minutes
-	movlw		LOW		d'600'
-	movwf		xA+0
-	movlw		HIGH	d'600'
-	movwf		xA+1					; A vertical line every 600 seconds
-	movff		samplesecs_value,xB+0		; Copy sampling rate
-	clrf		xB+1
-	call		div16x16				; xA/xB=xC with xA as remainder
-	movff		xC+0,average_depth_hold_total+0
-	movff		xC+1,average_depth_hold_total+1
-	;average_depth_hold_total:2 holds interval of samples for vertical 10min line
+	WIN_SMALL log_divetime_value_column,log_divetime_value_row
+	bsf		leftbind
+	output_16										; divetime minutes
+	movlw	LOW  d'600'
+	movwf	xA+0
+	movlw	HIGH d'600'
+	movwf	xA+1									; a vertical line every 600 seconds
+	movff	samplesecs_value,xB+0					; Copy sampling rate
+	clrf	xB+1
+	call	div16x16								; xA/xB=xC with xA as remainder
+	movff	xC+0,vertical_interval+0
+	movff	xC+1,vertical_interval+1
+	; vertical_interval:2 holds interval of samples for vertical 10min line
 
-; Restore divetime in minutes:
-; get real sample time
-    LOG_POINT_TO    log_total_seconds
-	call		ext_flash_byte_read_plus				; Total sample time in seconds
-	movff		temp1,xC+0
-	call		ext_flash_byte_read_plus				; Total sample time in seconds
-	movff		temp1,xC+1
+	; Restore divetime in minutes:
+	; get real sample time
+	LOG_POINT_TO log_total_seconds
+	call	ext_flash_byte_read_plus				; Total sample time in seconds
+	movff	ext_flash_rw,xC+0
+	call	ext_flash_byte_read_plus				; Total sample time in seconds
+	movff	ext_flash_rw,xC+1
 
-	PUTC		':'
-    LOG_POINT_TO    log_divetime+.2
-	call		ext_flash_byte_read_plus				; read divetime seconds
-	movff		temp1,lo
-	movff		xC+0,xA+0				; now calculate x-scale value
-	movff		xC+1,xA+1
-	movlw		profile_width_pixels					; pix width available
-	movwf		xB+0
-	clrf		xB+1
-	call		div16x16				; xA/xB=xC
-	movff		xC+0,xA+0	
-	movff		xC+1,xA+1
-	movf		samplesecs_value,W		; devide through sample interval!
-	movwf		xB+0
-	clrf		xB+1
-	call		div16x16				; xA/xB=xC
-	movff		xC+0,profile_temp+0		; store value (use any #xC sample, skip xC-1) into temp registers
-	movff		xC+1,profile_temp+1		; store value (use any #xC sample, skip xC-1) into temp registers
-	infsnz		profile_temp+0,F		; Increase by one, there might be a remainder
-	incf		profile_temp+1,F
+	PUTC	':'
+	LOG_POINT_TO log_divetime+.2
+	call	ext_flash_byte_read_plus				; read divetime seconds
+	movff	ext_flash_rw,lo
+	movff	xC+0,xA+0								; now calculate x-scale value
+	movff	xC+1,xA+1
+	movlw	profile_width_pixels					; pix width available
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16								; xA/xB=xC
+	movff	xC+0,xA+0
+	movff	xC+1,xA+1
+	movf	samplesecs_value,W						; divide through sample interval!
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16								; xA/xB=xC
+	movff	xC+0,profile_temp1+0					; store value (use any #xC sample, skip xC-1) into temp registers
+	movff	xC+1,profile_temp1+1					; store value (use any #xC sample, skip xC-1) into temp registers
+	infsnz	profile_temp1+0,F						; Increase by one, there might be a remainder
+	incf	profile_temp1+1,F
 
-	bsf			leftbind
-	output_99x							; divetime seconds
+	bsf		leftbind
+	output_99x										; divetime seconds
 	call	TFT_standard_color
-	STRCAT_PRINT    ""
+	STRCAT_PRINT ""
 
-	call		ext_flash_byte_read_plus                ; Read min. Temperature
-	movff		temp1,logbook_min_tp+0
-	call		ext_flash_byte_read_plus                ; Read min. Temperature
-	movff		temp1,logbook_min_tp+1
+	call	ext_flash_byte_read_plus				; Read min. Temperature
+	movff	ext_flash_rw,logbook_min_tp+0
+	call	ext_flash_byte_read_plus				; Read min. Temperature
+	movff	ext_flash_rw,logbook_min_tp+1
 
-    ; Set pointer to Gas 1 Type.
-    LOG_POINT_TO    log_gas1+.3
-    call		ext_flash_byte_read_plus				; read Gas Type
-    decfsz      temp1,W                                 ; =1 (="First")?
-    bra         logbook_find_first_gas2                 ; No.
-    movlw       .1
-    movwf       temp1
-    bra         logbook_find_first_gas_done
+	; Set pointer to Gas 1 Type.
+	LOG_POINT_TO	log_gas1+.3
+	call	ext_flash_byte_read_plus				; read Gas Type
+	decfsz	ext_flash_rw,W							; =1 (="First")?
+	bra		logbook_find_first_gas2					; No.
+	movlw	.1
+	movwf	ext_flash_rw
+	bra		logbook_find_first_gas_done
 logbook_find_first_gas2:
-    ; Set pointer to Gas 2 Type.
-    LOG_POINT_TO    log_gas2+.3
-    call		ext_flash_byte_read_plus				; read Gas Type
-    decfsz      temp1,W                                 ; =1 (="First")?
-    bra         logbook_find_first_gas3                 ; No.
-    movlw       .2
-    movwf       temp1
-    bra         logbook_find_first_gas_done
+	; Set pointer to Gas 2 Type.
+	LOG_POINT_TO log_gas2+.3
+	call	ext_flash_byte_read_plus				; read Gas Type
+	decfsz	ext_flash_rw,W							; =1 (="First")?
+	bra		logbook_find_first_gas3					; No.
+	movlw	.2
+	movwf	ext_flash_rw
+	bra		logbook_find_first_gas_done
 logbook_find_first_gas3:
-    ; Set pointer to Gas 3 Type.
-    LOG_POINT_TO    log_gas3+.3
-    call		ext_flash_byte_read_plus				; read Gas Type
-    decfsz      temp1,W                                 ; =1 (="First")?
-    bra         logbook_find_first_gas4                 ; No.
-    movlw       .3
-    movwf       temp1
-    bra         logbook_find_first_gas_done
+	; Set pointer to Gas 3 Type.
+	LOG_POINT_TO log_gas3+.3
+	call	ext_flash_byte_read_plus				; read Gas Type
+	decfsz	ext_flash_rw,W							; =1 (="First")?
+	bra		logbook_find_first_gas4					; No.
+	movlw	.3
+	movwf	ext_flash_rw
+	bra		logbook_find_first_gas_done
 logbook_find_first_gas4:
-    ; Set pointer to Gas 4 Type.
-    LOG_POINT_TO    log_gas4+.3
-    call		ext_flash_byte_read_plus				; read Gas Type
-    decfsz      temp1,W                                 ; =1 (="First")?
-    bra         logbook_find_first_gas5                 ; No.
-    movlw       .4
-    movwf       temp1
-    bra         logbook_find_first_gas_done
+	; Set pointer to Gas 4 Type.
+	LOG_POINT_TO log_gas4+.3
+	call	ext_flash_byte_read_plus				; read Gas Type
+	decfsz	ext_flash_rw,W							; =1 (="First")?
+	bra		logbook_find_first_gas5					; No.
+	movlw	.4
+	movwf	ext_flash_rw
+	bra		logbook_find_first_gas_done
 logbook_find_first_gas5:
-    movlw       .5                                      ; Must be Gas5
-    movwf       temp1
+	movlw	.5										; Must be Gas5
+	movwf	ext_flash_rw
 logbook_find_first_gas_done:
-	movff		temp1,average_depth_hold_total+3; keep copy to restore color
-    rcall       profile_display_color       	; Back to normal profile color.
-    ; Pointer is now trashed!
+	movff	ext_flash_rw,backup_color1				; keep copy to restore color
+	movff	ext_flash_rw,WREG						; copy gas number to WREG for color coding
+	call	TFT_color_code_gas						; Back to normal profile color.
+	; Pointer is now trashed!
 
-; Point to profile portion of this dive
-	movff		ext_flash_log_pointer+0,ext_flash_address+0
-	movff		ext_flash_log_pointer+1,ext_flash_address+1
-	movff		ext_flash_log_pointer+2,ext_flash_address+2
+	; Point to profile portion of this dive
+	movff	ext_flash_log_pointer+0,ext_flash_address+0
+	movff	ext_flash_log_pointer+1,ext_flash_address+1
+	movff	ext_flash_log_pointer+2,ext_flash_address+2
 
-	incf_ext_flash_address_0x20		d'2'	; Skip 0xFA 0xFA
-    call		ext_flash_byte_read_plus_0x20	; Read low byte of total dives into temp1 (at the time the dive was made)
+	incf_ext_flash_address_0x20 d'2'				; Skip 0xFA 0xFA
+	call	ext_flash_byte_read_plus_0x20			; Read low byte of total dives into ext_flash_rw (at the time the dive was made)
 
 	; Load total number of dives (low byte only)
 	read_int_eeprom .2
-	incf		EEDATA,W					; +1
-	bsf			STATUS,C					; Set borrow
-	subfwb		divesecs,W	; total dives - dive# to show - 1 = low byte of total dives (at the time the dive was made)
-	cpfseq		temp1						; # of dive in logbook (Must be equal with low byte in short header)
-	bra			display_profile_no_profile	; Not equal, no profile for this dive available!
+	incf	EEDATA,W								; +1
+	bsf		STATUS,C								; Set borrow
+	subfwb	divenumber,W							; total dives - dive# to show - 1 = low byte of total dives (at the time the dive was made)
+	cpfseq	ext_flash_rw							; # of dive in logbook (Must be equal with low byte in short header)
+	bra		display_profile_no_profile				; Not equal, no profile for this dive available!
 
 	; Skip rest of short header: 3 Bytes
 	; Skip length of profile data: 3 Bytes
-    ; Skip sampling rate in profile section: 1Byte
-    ; Skip number of divisors: 1Byte
-	incf_ext_flash_address_0x20		d'8'
+	; Skip sampling rate in profile section: 1Byte
+	; Skip number of divisors: 1Byte
+	incf_ext_flash_address_0x20 d'8'
 
 ; Divisor temp
-    incf_ext_flash_address_0x20		d'2'
-;    call		ext_flash_byte_read_plus_0x20	; Read information type
-;    call		ext_flash_byte_read_plus_0x20	; Read information Length
-    call		ext_flash_byte_read_plus_0x20	; Read information Divisor
-	movf		temp1,W
-	movwf       divisor_temperature	        ; Store divisor
-	movwf       count_temperature           ; Store to tp° counter too.
+	incf_ext_flash_address_0x20 d'2'
+;	call	ext_flash_byte_read_plus_0x20			; Read information type
+;	call	ext_flash_byte_read_plus_0x20			; Read information Length
+	call	ext_flash_byte_read_plus_0x20			; Read information Divisor
+	movf	ext_flash_rw,W
+	movwf	divisor_temperature						; Store divisor
+	movwf	count_temperature						; Store to tp° counter too.
 ; Divisor Deco
-    incf_ext_flash_address_0x20		d'2'
-;    call		ext_flash_byte_read_plus_0x20	; Read information type
-;    call		ext_flash_byte_read_plus_0x20	; Read information Length
-    call		ext_flash_byte_read_plus_0x20	; Read information Divisor
-	movf		temp1,W
-	movwf       divisor_deco      			; Store divisor
-	movwf		count_deco                  ; Store as temp, too
+	incf_ext_flash_address_0x20 d'2'
+;	call	ext_flash_byte_read_plus_0x20			; Read information type
+;	call	ext_flash_byte_read_plus_0x20			; Read information Length
+	call	ext_flash_byte_read_plus_0x20			; Read information Divisor
+	movf	ext_flash_rw,W
+	movwf	divisor_deco							; Store divisor
+	movwf	count_deco								; Store as temp, too
 ; Divisor GF
-    incf_ext_flash_address_0x20		d'2'
-;    call		ext_flash_byte_read_plus_0x20	; Read information type
-;    call		ext_flash_byte_read_plus_0x20	; Read information Length
-    call		ext_flash_byte_read_plus_0x20	; Read information Divisor
-	movff		temp1,divisor_gf			; Store divisor
+	incf_ext_flash_address_0x20 d'2'
+;	call	ext_flash_byte_read_plus_0x20			; Read information type
+;	call	ext_flash_byte_read_plus_0x20			; Read information Length
+	call	ext_flash_byte_read_plus_0x20			; Read information Divisor
+	movff	ext_flash_rw,divisor_gf					; Store divisor
 ; Divisor ppO2 Sensors
-    incf_ext_flash_address_0x20		d'2'
-;    call		ext_flash_byte_read_plus_0x20	; Read information type
-;    call		ext_flash_byte_read_plus_0x20	; Read information Length
-    call		ext_flash_byte_read_plus_0x20	; Read information Divisor
-	movff		temp1,divisor_ppo2_sensors	; Store divisor
+	incf_ext_flash_address_0x20 d'2'
+;	call	ext_flash_byte_read_plus_0x20			; Read information type
+;	call	ext_flash_byte_read_plus_0x20			; Read information Length
+	call	ext_flash_byte_read_plus_0x20			; Read information Divisor
+	movff	ext_flash_rw,divisor_ppo2_sensors		; Store divisor
 ; Divisor decoplan
-    incf_ext_flash_address_0x20		d'2'
-;    call		ext_flash_byte_read_plus_0x20	; Read information type
-;    call		ext_flash_byte_read_plus_0x20	; Read information Length
-    call		ext_flash_byte_read_plus_0x20	; Read information Divisor
-	movff		temp1,divisor_decoplan		; Store divisor
+	incf_ext_flash_address_0x20 d'2'
+;	call	ext_flash_byte_read_plus_0x20			; Read information type
+;	call	ext_flash_byte_read_plus_0x20			; Read information Length
+	call	ext_flash_byte_read_plus_0x20			; Read information Divisor
+	movff	ext_flash_rw,divisor_decoplan			; Store divisor
 ; Divisor CNS
-    incf_ext_flash_address_0x20		d'2'
-;    call		ext_flash_byte_read_plus_0x20	; Read information type
-;    call		ext_flash_byte_read_plus_0x20	; Read information Length
-    call		ext_flash_byte_read_plus_0x20	; Read information Divisor
-	movff		temp1,divisor_cns			; Store divisor
+	incf_ext_flash_address_0x20 d'2'
+;	call	ext_flash_byte_read_plus_0x20			; Read information type
+;	call	ext_flash_byte_read_plus_0x20			; Read information Length
+	call	ext_flash_byte_read_plus_0x20			; Read information Divisor
+	movff	ext_flash_rw,divisor_cns				; Store divisor
 ; Divisor Tank data
-    incf_ext_flash_address_0x20		d'2'
-;    call		ext_flash_byte_read_plus_0x20	; Read information type
-;    call		ext_flash_byte_read_plus_0x20	; Read information Length
-    call		ext_flash_byte_read_plus_0x20	; Read information Divisor
-	movff		temp1,divisor_tank			; Store divisor
+	incf_ext_flash_address_0x20 d'2'
+;	call	ext_flash_byte_read_plus_0x20			; Read information type
+;	call	ext_flash_byte_read_plus_0x20			; Read information Length
+	call	ext_flash_byte_read_plus_0x20			; Read information Divisor
+	movff	ext_flash_rw,divisor_tank				; Store divisor
 
 	; Start Profile display
-    movlw       color_deepblue
-	call		TFT_set_color				; Make this configurable?
-    ; Draw a frame around profile area
-    WIN_FRAME_COLOR16 profile_top-1,profile_top+profile_height_pixels+1,profile_left-1,profile_left+profile_width_pixels+1
+	movlw	color_deepblue
+	call	TFT_set_color							; Make this configurable?
+	; Draw a frame around profile area
+	WIN_FRAME_COLOR16 profile_top-1,profile_top+profile_height_pixels+1,profile_left-1,profile_left+profile_width_pixels+1
 
-	movlw		profile_top
-	movwf		win_top
-	movlw		profile_left
-	movwf		win_leftx2				; Left border (0-159)
-	movlw		d'1'
-	movwf		win_height
-	movlw		profile_width_pixels+.1
-	movwf		win_width+0				; Right border (0-159)
-	clrf		win_width+1
-	bra		display_profile2f			; No 0m line
+	movlw	profile_top
+	movwf	win_top
+	movlw	profile_left
+	movwf	win_leftx2								; Left border (0-159)
+	movlw	d'1'
+	movwf	win_height
+	movlw	profile_width_pixels+.1
+	movwf	win_width+0								; Right border (0-159)
+	clrf	win_width+1
+	bra		display_profile2f						; No 0m line
 display_profile2e:
-	call		TFT_box						; Inputs:  win_top, win_leftx2, win_height, win_width, win_color1, win_color2
+	call	TFT_box									; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2
 display_profile2f:
-	movf		win_top,W				; Get row
-	addwf		x_scale+0,W					; Add line interval distance to win_top
-	tstfsz		x_scale+1					; >255?
-	movlw		d'255'						; Yes, make win_top>239 -> Abort here
-	btfsc		STATUS,C					; A Cary from the addwf above?
-	movlw		d'255'						; Yes, make win_top>239 -> Abort here
-	movwf		win_top						; Result in win_top again
-	movlw		profile_top+profile_height_pixels+.1 ; Limit
-	cpfsgt		win_top						; >239?
-	bra			display_profile2e			; No, draw another line
+	movf	win_top,W								; Get row
+	addwf	x_scale+0,W								; Add line interval distance to win_top
+	tstfsz	x_scale+1								; >255?
+	movlw	d'255'									; Yes, make win_top>239 -> Abort here
+	btfsc	STATUS,C								; A Cary from the addwf above?
+	movlw	d'255'									; Yes, make win_top>239 -> Abort here
+	movwf	win_top									; Result in win_top again
+	movlw	profile_top+profile_height_pixels+.1	; Limit
+	cpfsgt	win_top									; >239?
+	bra		display_profile2e						; No, draw another line
 
-	clrf		timeout_counter2			; here: used as counter for depth readings
-	movlw		profile_width_pixels+profile_left-.1
-	movwf		ignore_digits				; here: used as counter for x-pixels
-	bcf			end_of_profile				; clear flag
+	clrf	gaslist_gas						; here: used as counter for depth readings
+	movlw	profile_width_pixels+profile_left-.1
+	movwf	ignore_digits							; here: used as counter for x-pixels
+	bcf		end_of_profile							; clear flag
 
-	movlw		profile_left+.1
-	movwf		logbook_pixel_x_pos			; here: used as colum x2 (Start at Colum 5)
+	movlw	profile_left+.1
+	movwf	logbook_pixel_x_pos						; here: used as colum x2 (Start at Colum 5)
 
-	movlw		profile_top+.1					; Zero-m row
-	movwf		apnoe_mins					; here: used for fill between rows
-    movwf       logbook_last_tp             ; Initialise for Tp° curve too.
+	movlw	profile_top+.1							; Zero-m row
+	movwf	fill_between_rows
+	movwf	logbook_last_tp							; Initialize for Tp° curve too.
+
+	movlw	LOW(-.100)								; Initialize max tp° to -10.0 °C.
+	movwf	logbook_max_tp+0
+	movlw	HIGH 0xFFFF & (-.100)
+	movwf	logbook_max_tp+1
 
-    movlw       LOW(-.100)                  ; Initialize max tp° to -10.0 °C.
-    movwf       logbook_max_tp+0
-    movlw       HIGH 0xFFFF & (-.100)
-    movwf       logbook_max_tp+1
-    
-    setf        logbook_cur_tp+0            ; Initialize Tp°, before the first recorded point.
-    setf        logbook_cur_tp+1
-    clrf        logbook_last_tp             ; Also reset previous Y for Tp°
-    clrf        logbook_ceiling             ; Ceiling = 0, correct value for no ceiling.
-    movlw       profile_top+.1
-    movwf       logbook_min_temp_pos        ; Initialize for displaying the lowest temperature
-    movlw       profile_top+profile_height_pixels
-    movwf       logbook_max_temp_pos        ; Initialize for displaying the highest temperature
+	setf	logbook_cur_tp+0						; Initialize Tp°, before the first recorded point.
+	setf	logbook_cur_tp+1
+	clrf	logbook_last_tp							; Also reset previous Y for Tp°
+	clrf	logbook_ceiling							; Ceiling = 0, correct value for no ceiling.
+	movlw	profile_top+.1
+	movwf	logbook_min_temp_pos					; Initialize for displaying the lowest temperature
+	movlw	profile_top+profile_height_pixels
+	movwf	logbook_max_temp_pos					; Initialize for displaying the highest temperature
 
-    movlw       profile_left
-    movwf       win_leftx2
-    movlw       profile_top
-    movwf       win_top
-    movlw       profile_height_pixels
-    movwf       win_height
-    movlw       LOW (profile_width_pixels*.2)
-    movwf       win_width+0
-    movlw       HIGH (profile_width_pixels*.2)
-    movwf       win_width+1
-    call        TFT_box_write           ; open box for d1
+	movlw	profile_left
+	movwf	win_leftx2
+	movlw	profile_top
+	movwf	win_top
+	movlw	profile_height_pixels
+	movwf	win_height
+	movlw	LOW (profile_width_pixels*.2)
+	movwf	win_width+0
+	movlw	HIGH (profile_width_pixels*.2)
+	movwf	win_width+1
+	call	TFT_box_write							; open box for d1
 
-;    INIT_PIXEL_WRITE logbook_pixel_x_pos       ; pixel x2			(Also sets standard Color!)
+;	INIT_PIXEL_WRITE logbook_pixel_x_pos			; pixel x2 (also sets standard color!)
 
 profile_display_loop:
 	; Init pixel write
-    movf 	   logbook_pixel_x_pos,W
-	mullw   	2
-    call	    pixel_write_col320
-    
-	movff		profile_temp+0,profile_temp2+0
-	movff		profile_temp+1,profile_temp2+1		; 16Bit x-scaler
-	incf		profile_temp2+1,F					
-	tstfsz		profile_temp2+0						; Must not be Zero
-	bra			profile_display_loop2				; Not Zero!
-	incf		profile_temp2+0,F					; Zero, Increase!
+	movf	logbook_pixel_x_pos,W
+	mullw	2
+	call	pixel_write_col320
+
+	movff	profile_temp1+0,profile_temp2+0
+	movff	profile_temp1+1,profile_temp2+1			; 16Bit x-scaler
+	incf	profile_temp2+1,F
+	tstfsz	profile_temp2+0							; Must not be Zero
+	bra		profile_display_loop2					; Not Zero!
+	incf	profile_temp2+0,F						; Zero, Increase!
 
 profile_display_loop2:
-	rcall		profile_view_get_depth		; reads depth, temp and profile data
+	rcall	profile_view_get_depth					; reads depth, temp and profile data
 
-	btfsc		end_of_profile					; end-of profile reached?
-	bra			profile_display_loop_done	; Yes, skip all remaining pixels
+	btfsc	end_of_profile							; end-of profile reached?
+	bra		profile_display_loop_done				; Yes, skip all remaining pixels
 
 
-    ;---- Draw Ceiling curve, if any ---------------------------------------------
-    movf        divisor_deco,W
-    bz          profile_display_skip_deco
+	;---- Draw Ceiling curve, if any ---------------------------------------------
+	movf	divisor_deco,W
+	bz		profile_display_skip_deco
 
-    movf        logbook_ceiling,W           ; Any deco ceiling ?
-    bz          profile_display_skip_deco
+	movf	logbook_ceiling,W						; Any deco ceiling ?
+	bz		profile_display_skip_deco
 
-	mullw       .100                        ; Yes: convert to mbar
-	movff       PRODL,sub_a+0
-	movff       PRODH,sub_a+1
-	movff       logbook_cur_depth+0,sub_b+0    ; Compare with UNSIGNED current depth (16bits)
-	movff       logbook_cur_depth+1,sub_b+1
-	call        subU16                      ; set (or not) neg_flag
+	mullw	.100									; Yes: convert to mbar
+	movff	PRODL,sub_a+0
+	movff	PRODH,sub_a+1
+	movff	logbook_cur_depth+0,sub_b+0				; Compare with UNSIGNED current depth (16bits)
+	movff	logbook_cur_depth+1,sub_b+1
+	call	subU16									; set (or not) neg_flag
 
-    movlw       color_dark_green            ; Dark green if Ok,
-    btfss       neg_flag
-    movlw       color_dark_red              ; Or dark red if ceiling overflown.
-    call        TFT_set_color
-    
-	movff       PRODL,xA+0
-	movff       PRODH,xA+1
-	movff		y_scale+0,xB+0			; devide pressure in mbar/quant for row offsett
-	movff		y_scale+1,xB+1
-	call		div16x16					; xA/xB=xC
+	movlw	color_dark_green						; Dark green if Ok,
+	btfss	neg_flag
+	movlw	color_dark_red							; Or dark red if ceiling overflown.
+	call	TFT_set_color
 
-	movlw		profile_top+.1                  ; Starts right after the top line.
-	movwf		win_top
-	movff		logbook_pixel_x_pos,win_leftx2 ; Left border (0-159)
-	movff		xC+0,win_height				
-	call		half_vertical_line			; Inputs:  win_top, win_leftx2, win_height, win_color1, win_color2
+	movff	PRODL,xA+0
+	movff	PRODH,xA+1
+	movff	y_scale+0,xB+0							; divide pressure in mbar/quant for row offset
+	movff	y_scale+1,xB+1
+	call	div16x16								; xA/xB=xC
+
+	movlw	profile_top+.1							; Starts right after the top line.
+	movwf	win_top
+	movff	logbook_pixel_x_pos,win_leftx2			; Left border (0-159)
+	movff	xC+0,win_height
+	call	half_vertical_line						; Inputs: win_top, win_leftx2, win_height, win_color1, win_color2
 
 profile_display_skip_deco:
-    ;---- Draw Tp° curve, if any ---------------------------------------------
-    movf        divisor_temperature,W
-    bz          profile_display_skip_temp
+	;---- Draw Tp° curve, if any ---------------------------------------------
+	movf	divisor_temperature,W
+	bz		profile_display_skip_temp
 
-	movf        logbook_cur_tp+0,W          ; Did we had already a valid Tp°C record ?
-	andwf       logbook_cur_tp+1,W
-	incf        WREG
-	bz          profile_display_skip_temp   ; No: just skip drawing.
+	movf	logbook_cur_tp+0,W						; Did we had already a valid Tp°C record ?
+	andwf	logbook_cur_tp+1,W
+	incf	WREG
+	bz		profile_display_skip_temp				; No: just skip drawing.
 
-    movlw       LOW(((profile_height_pixels-.10)*.256)/.370)         ; fixed tp° scale: (-2 .. +35°C * scale256 )/153pix
- 	movwf		xB+0
-    movlw       HIGH(((profile_height_pixels-.10)*.256)/.370)
- 	movwf		xB+1
+	movlw	LOW  (((profile_height_pixels-.10)*.256)/.370)	 ; fixed tp° scale: (-2 .. +35°C * scale256 )/153pix
+	movwf	xB+0
+	movlw	HIGH (((profile_height_pixels-.10)*.256)/.370)
+	movwf	xB+1
 
-	movf        logbook_cur_tp+0,W          ; Current Tp° - (-2.0°C) == Tp° + 20.
-	addlw       LOW(.20)                    ; Low byte.
-	movwf       xA+0
-    movf		logbook_cur_tp+1,W
-    btfsc       STATUS,C                    ; Propagate carry, if any
-    incf        WREG
-    movwf       xA+1
-    call		mult16x16					; xA*xB=xC
+	movf	logbook_cur_tp+0,W						; Current Tp° - (-2.0°C) == Tp° + 20.
+	addlw	LOW(.20)								; Low byte.
+	movwf	xA+0
+	movf	logbook_cur_tp+1,W
+	btfsc	STATUS,C								; Propagate carry, if any
+	incf	WREG
+	movwf	xA+1
+	call	mult16x16								; xA*xB=xC
 
-    ; scale: divide by 256, ie. take just high byte.
-    movf        xC+1,W
-    sublw       profile_top+profile_height_pixels-.10		; Upside-down: Y = .75 + (.153 - result)
-    movwf       xC+0
+	; scale: divide by 256, ie. take just high byte.
+	movf	xC+1,W
+	sublw	profile_top+profile_height_pixels-.10	; Upside-down: Y = .75 + (.153 - result)
+	movwf	xC+0
 
 	; Check limits
-	movlw		profile_top+.1
-	movwf		xC+1
-	cpfsgt		xC+0
-	movff		xC+1,xC+0
+	movlw	profile_top+.1
+	movwf	xC+1
+	cpfsgt	xC+0
+	movff	xC+1,xC+0
 
-    movlw       color_orange
-    call        TFT_set_color
+	movlw	color_orange
+	call	TFT_set_color
 
-    movf        logbook_last_tp,W           ; do we have a valid previous value ?
-    bz          profile_display_temp_1      ; No: skip the vertical line.
-    movwf       xC+1
-	call		profile_display_fill		; In this column between this row (xC+0) and the last row (xC+1)
+	movf	logbook_last_tp,W						; do we have a valid previous value ?
+	bz		profile_display_temp_1					; No: skip the vertical line.
+	movwf	xC+1
+	call	profile_display_fill					; In this column between this row (xC+0) and the last row (xC+1)
 profile_display_temp_1:
-    movf        xC+0,W                      ; current row
-    cpfsgt      logbook_min_temp_pos        ; check limit
-    movwf       logbook_min_temp_pos        ; lowest row in the temp graph
-    cpfslt      logbook_max_temp_pos        ; check limit
-    movwf       logbook_max_temp_pos        ; lowest row in the temp graph
+	movf	xC+0,W									; current row
+	cpfsgt	logbook_min_temp_pos					; check limit
+	movwf	logbook_min_temp_pos					; lowest row in the temp graph
+	cpfslt	logbook_max_temp_pos					; check limit
+	movwf	logbook_max_temp_pos					; highest row in the temp graph
 
-    movff       xC+0,logbook_last_tp
-    PIXEL_WRITE logbook_pixel_x_pos,xC+0       ; Set col(0..159) x row (0..239), put a current color pixel.
+	movff	xC+0,logbook_last_tp
+	PIXEL_WRITE logbook_pixel_x_pos,xC+0			; Set col(0..159) x row (0..239), put a current color pixel.
 
 profile_display_skip_temp:
-    ;---- Draw depth curve ---------------------------------------------------
-	movff		y_scale+0,xB+0			; devide pressure in mbar/quant for row offsett
-	movff		y_scale+1,xB+1
-	movff		logbook_cur_depth+0,xA+0
-	movff		logbook_cur_depth+1,xA+1
-	call		div16x16					; xA/xB=xC
-	movlw		profile_top+.1
-	addwf		xC+0,F						; add 75 pixel offset to result
-	
-	btfsc		STATUS,C                    ; Ignore potential profile errors
-	movff		apnoe_mins,xC+0
+	;---- Draw depth curve ---------------------------------------------------
+	movff	y_scale+0,xB+0							; divide pressure in mbar/quant for row offset
+	movff	y_scale+1,xB+1
+	movff	logbook_cur_depth+0,xA+0
+	movff	logbook_cur_depth+1,xA+1
+	call	div16x16								; xA/xB=xC
+	movlw	profile_top+.1
+	addwf	xC+0,F									; add 75 pixel offset to result
+
+	btfsc	STATUS,C								; Ignore potential profile errors
+	movff	fill_between_rows,xC+0
 
-    rcall       profile_display_color       ; Back to normal profile color.
+	movff	backup_color1,WREG						; copy gas number to WREG for color-coding
+	call	TFT_color_code_gas						; Back to normal profile color.
 
-    movff       apnoe_mins,xC+1
-	call		profile_display_fill		; In this column between this row (xC+0) and the last row (xC+1)
-	movff		xC+0,apnoe_mins				; Store last row for fill routine
+	movff	fill_between_rows,xC+1
+	call	profile_display_fill					; In this column between this row (xC+0) and the last row (xC+1)
+	movff	xC+0,fill_between_rows					; Store last row for fill routine
 
-    PIXEL_WRITE logbook_pixel_x_pos,xC+0    ; Set col(0..159) x row (0..239), put a std color pixel.
-    incf		logbook_pixel_x_pos,F		; Next column
+	PIXEL_WRITE logbook_pixel_x_pos,xC+0			; Set col(0..159) x row (0..239), put a std color pixel.
+	incf	logbook_pixel_x_pos,F					; Next column
 
-    ;---- Draw Marker square , if any ----------------------------------------
-    btfss       log_marker_found            ; Any marker to draw?
-    bra         profile_display_skip_marker ; No
+	;---- Draw Marker square , if any ----------------------------------------
+	btfss	log_marker_found						; Any marker to draw?
+	bra		profile_display_skip_marker				; No
 
-    ; tiny "m"
-    incf        apnoe_mins,W	; increase row (Y)
-    movwf       win_top
-    ; limit win_top to 220
-    movlw		.220
-    cpfslt		win_top
-    movwf		win_top
-    decf        logbook_pixel_x_pos,W	; decrease column (X)
-    movwf       win_leftx2
-    ; limit win_leftx2 to 151
-    movlw		.151
-    cpfslt		win_leftx2
-    movwf		win_leftx2
+	; tiny "m"
+	incf	fill_between_rows,W						; increase row (Y)
+	movwf	win_top
+	; limit win_top to 220
+	movlw	.220
+	cpfslt	win_top
+	movwf	win_top
+	decf	logbook_pixel_x_pos,W					; decrease column (X)
+	movwf	win_leftx2
+	; limit win_leftx2 to 151
+	movlw	.151
+	cpfslt	win_leftx2
+	movwf	win_leftx2
 
-    movlw       color_orange
-    call        TFT_set_color
-    WIN_FONT	FT_TINY
-    lfsr	FSR2,buffer
-    STRCPY_PRINT    "m"
-    bcf         log_marker_found            ; Clear flag
-    
-    movlw       profile_left
-    movwf       win_leftx2
-    movlw       profile_top
-    movwf       win_top
-    movlw       profile_height_pixels
-    movwf       win_height
-    movlw       LOW (profile_width_pixels*.2)
-    movwf       win_width+0
-    movlw       HIGH (profile_width_pixels*.2)
-    movwf       win_width+1
-    call        TFT_box_write           ; re-open box for d1
+	movlw	color_orange
+	call	TFT_set_color
+	WIN_FONT FT_TINY
+	lfsr	FSR2,buffer
+	STRCPY_PRINT "m"
+	bcf		log_marker_found						; Clear flag
+
+	movlw	profile_left
+	movwf	win_leftx2
+	movlw	profile_top
+	movwf	win_top
+	movlw	profile_height_pixels
+	movwf	win_height
+	movlw	LOW (profile_width_pixels*.2)
+	movwf	win_width+0
+	movlw	HIGH (profile_width_pixels*.2)
+	movwf	win_width+1
+	call	TFT_box_write							; re-open box for d1
 
 profile_display_skip_marker:
-    ;---- Draw CNS curve, if any ---------------------------------------------
-    movf        divisor_cns,W
-    bz          profile_display_skip_cns
-    ;
-    ; TODO HERE 
-    ;
+	;---- Draw CNS curve, if any ---------------------------------------------
+	movf	divisor_cns,W
+	bz		profile_display_skip_cns
+	;
+	; TODO HERE 
+	;
 profile_display_skip_cns:
 
-    ;---- Draw GF curve, if any ----------------------------------------------
-    movf        divisor_gf,W
-    bz          profile_display_skip_gf
-    ;
-    ; TODO HERE 
-    ;
+	;---- Draw GF curve, if any ----------------------------------------------
+	movf	divisor_gf,W
+	bz		profile_display_skip_gf
+	;
+	; TODO HERE 
+	;
 profile_display_skip_gf:
 
-    ;---- All curves done.
-    
-profile_display_skip_loop1:					; skips readings!
-	dcfsnz		profile_temp2+0,F
-	bra			profile_display_loop3		; check 16bit....
+	;---- All curves done.
+
+profile_display_skip_loop1:							; skips readings!
+	dcfsnz	profile_temp2+0,F
+	bra		profile_display_loop3					; check 16bit....
 
-	rcall		profile_view_get_depth		; reads depth, temp and profile data
+	rcall	profile_view_get_depth					; reads depth, temp and profile data
 
-	btfsc		end_of_profile					; end-of profile reached?
-	bra			profile_display_loop_done	; Yes, skip all remaining pixels
+	btfsc	end_of_profile							; end-of profile reached?
+	bra		profile_display_loop_done				; Yes, skip all remaining pixels
 
-	bra			profile_display_skip_loop1
+	bra		profile_display_skip_loop1
 
 profile_display_loop3:
-	decfsz		profile_temp2+1,F			; 16 bit x-scaler test
-	bra			profile_display_skip_loop1	; skips readings!
+	decfsz	profile_temp2+1,F						; 16 bit x-scaler test
+	bra		profile_display_skip_loop1				; skips readings!
 
-	decfsz		ignore_digits,F				; counts drawn x-pixels to zero
-	bra			profile_display_loop		; Not ready yet
-; Done.
+	decfsz	ignore_digits,F							; counts drawn x-pixels to zero
+	bra		profile_display_loop					; Not ready yet
+	; Done.
 
-display_profile_no_profile:					; No profile available for this dive!
+display_profile_no_profile:							; No profile available for this dive!
 
 profile_display_loop_done:
-    btfss   	is_bailout                          ; Bailout during the dive?
-    bra     	profile_display_loop_done_nobail    ; No
-    ; Yes, show "Bailout"
-   	movlw   	color_pink
-	call    	TFT_set_color
-    WIN_TINY	logbook_bailout_column,logbook_bailout_row
-    STRCPY_TEXT_PRINT   tDiveBailout        ; Bailout
+	btfss	is_bailout								; Bailout during the dive?
+	bra		profile_display_loop_done_nobail		; No
+	; Yes, show "Bailout"
+	movlw	color_pink
+	call	TFT_set_color
+	WIN_TINY logbook_bailout_column,logbook_bailout_row
+	STRCPY_TEXT_PRINT tDiveBailout					; Bailout
 profile_display_loop_done_nobail:
-    btfss   	gas6_changed                         ; Gas6
-    bra     	profile_display_loop_done_nogas6      ; No
-    ; Yes, show "Gas 6!"
-   	movlw   	color_pink
-	call    	TFT_set_color
-    WIN_TINY	logbook_bailout_column,logbook_bailout_row-.15
-    STRCPY_TEXT	tGas                       ; Gas
-    STRCAT_PRINT " 6!"
+	btfss	gas6_changed							; Gas6
+	bra		profile_display_loop_done_nogas6		; No
+	; Yes, show "Gas 6!"
+	movlw	color_pink
+	call	TFT_set_color
+	WIN_TINY logbook_bailout_column,logbook_bailout_row-.15
+	STRCPY_TEXT tGas								; Gas
+	STRCAT_PRINT " 6!"
 
 profile_display_loop_done_nogas6:
-	decf		divesecs,F		;-1
+	decf	divenumber,F							;-1
 	read_int_eeprom .2
-	movf		EEDATA,W
-	bcf			STATUS,C
-	subfwb		divesecs,W		; max. dives (low value) - divesecs
-	movwf		lo				; result
-	incf		divesecs,F		;+1
+	movf	EEDATA,W
+	bcf		STATUS,C
+	subfwb	divenumber,W							; max. dives (low value) - divenumber
+	movwf	lo										; result
+	incf	divenumber,F							;+1
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
 	; 2nd: 201000h-201FFFh -> lo=1
 	; 3rd: 202000h-202FFFh -> lo=2
 	; 256: 2FF000h-2FFFFFh -> lo=255 (And hi>0...)
-	clrf		ext_flash_address+0
-	clrf		ext_flash_address+1
-	movlw		0x20
-	movwf		ext_flash_address+2
-	movlw		.16
-	mulwf		lo					; lo*16 = offset to 0x2000 (up:hi)
-	movf		PRODL,W
-	addwf		ext_flash_address+1,F
-	movf		PRODH,W
-	addwfc		ext_flash_address+2,F
+	clrf	ext_flash_address+0
+	clrf	ext_flash_address+1
+	movlw	0x20
+	movwf	ext_flash_address+2
+	movlw	.16
+	mulwf	lo										; lo*16 = offset to 0x2000 (up:hi)
+	movf	PRODL,W
+	addwf	ext_flash_address+1,F
+	movf	PRODH,W
+	addwfc	ext_flash_address+2,F
 	; pointer at the first 0xFA of header
 
-    movff   logbook_min_temp_pos,win_top     ; Y position at lowest temperature
-    movff   logbook_pixel_x_pos,win_leftx2
-    movlw   .130
-    cpfslt  win_leftx2                              ; limit left border to 130
-    movwf   win_leftx2
-    WIN_FONT   FT_TINY
-	movlw   color_orange            ; Use same color as tp° curve
-	call    TFT_set_color
+	movff	logbook_min_temp_pos,win_top			; Y position at lowest temperature
+	movff	logbook_pixel_x_pos,win_leftx2
+	movlw	.130
+	cpfslt	win_leftx2								; limit left border to 130
+	movwf	win_leftx2
+	WIN_FONT FT_TINY
+	movlw	color_orange							; Use same color as tp° curve
+	call	TFT_set_color
 
-    movff   logbook_min_tp+0,lo
-	movff   logbook_min_tp+1,hi
-    lfsr	FSR2,buffer
+	movff	logbook_min_tp+0,lo
+	movff	logbook_min_tp+1,hi
+	lfsr	FSR2,buffer
 
-	TSTOSS	opt_units			; 0=°C, 1=°F
+	TSTOSS	opt_units								; 0=°C, 1=°F
 	bra		logbook_show_temp_metric
 ;logbook_show_temp_imperial:
-	call	TFT_convert_signed_16bit    	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-	call	convert_celsius_to_fahrenheit	; convert value in lo:hi from celsius to fahrenheit
-	lfsr	FSR2,buffer						; Overwrite "-"
-	bsf		ignore_digit5		; Full degrees only
+	call	TFT_convert_signed_16bit				; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	call	convert_celsius_to_fahrenheit			; convert value in lo:hi from Celsius to Fahrenheit
+	lfsr	FSR2,buffer								; Overwrite "-"
+	bsf		ignore_digit5							; Full degrees only
 	output_16
-	STRCAT_TEXT_PRINT  tLogTunitF
-    ; Now, the max. temperature
-    movlw   .15
-    subwf   logbook_max_temp_pos,W
-    movff   WREG,win_top        ; Y position at max temperature
-    movff   logbook_max_tp+0,lo
-	movff   logbook_max_tp+1,hi
-    lfsr    FSR2,buffer
-	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-	call	convert_celsius_to_fahrenheit	; convert value in lo:hi from celsius to fahrenheit
+	STRCAT_TEXT_PRINT tLogTunitF
+	; Now, the max. temperature
+	movlw	.15
+	subwf	logbook_max_temp_pos,W
+	movff	WREG,win_top							; Y position at max temperature
+	movff	logbook_max_tp+0,lo
+	movff	logbook_max_tp+1,hi
+	lfsr	FSR2,buffer
+	call	TFT_convert_signed_16bit				; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	call	convert_celsius_to_fahrenheit			; convert value in lo:hi from Celsius to Fahrenheit
 	output_16
 	bcf		ignore_digit5
-	STRCAT_TEXT_PRINT    tLogTunitF
+	STRCAT_TEXT_PRINT tLogTunitF
 
 	bra		logbook_show_temp_common
 
 logbook_show_temp_metric:
-	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	call	TFT_convert_signed_16bit				; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
 	movlw	d'3'
 	movwf	ignore_digits
 	bsf		leftbind
-	output_16dp	d'2'					; temperature
-	STRCAT_TEXT_PRINT    tLogTunitC
-    ; Now, the max. temperature
-    movlw   .15
-    subwf   logbook_max_temp_pos,W
-    movwf   win_top        ; Y position at max temperature
-    movff   logbook_max_tp+0,lo
-	movff   logbook_max_tp+1,hi
-    lfsr    FSR2,buffer
-	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	output_16dp d'2'								; temperature
+	STRCAT_TEXT_PRINT tLogTunitC
+	; Now, the max. temperature
+	movlw	.15
+	subwf	logbook_max_temp_pos,W
+	movwf	win_top		; Y position at max temperature
+	movff	logbook_max_tp+0,lo
+	movff	logbook_max_tp+1,hi
+	lfsr	FSR2,buffer
+	call	TFT_convert_signed_16bit				; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
 	movlw	d'3'
 	movwf	ignore_digits
 	bsf		leftbind
-	output_16dp	d'2'					; temperature
-	STRCAT_TEXT_PRINT    tLogTunitC
+	output_16dp d'2'								; temperature
+	STRCAT_TEXT_PRINT tLogTunitC
 
 logbook_show_temp_common:
 	bcf		leftbind
-	call    TFT_standard_color
+	call	TFT_standard_color
 
 	; Get pointer to Gaslist
-    LOG_POINT_TO    log_gas1
-
-	movlw		color_white					; Color for Gas 1
-	call		TFT_set_color				; Set Color...
-	bsf			leftbind
-	WIN_TINY	log_gas_column1, log_gas_row
-    rcall       log_show_gas_common
+	LOG_POINT_TO log_gas1
+	bsf		log_show_gas_short						; do the short version of log_show_gas
+	bsf		leftbind
 
-	movlw		color_green					; Color for Gas 2
-	call		TFT_set_color				; Set Color...
-	WIN_TINY	log_gas_column2, log_gas_row
-    rcall       log_show_gas_common
+	WIN_TINY log_gas_column1, log_gas_row
+	movlw	.1										; Color for Gas 1
+	call	log_show_gas
 
-	movlw		color_red					; Color for Gas 3
-	call		TFT_set_color				; Set Color...
-	WIN_TINY	log_gas_column3, log_gas_row
-    rcall       log_show_gas_common
-
-	movlw		color_yellow				; Color for Gas 4
-	call		TFT_set_color				; Set Color...
-	WIN_TINY	log_gas_column4, log_gas_row
-    rcall       log_show_gas_common
+	WIN_TINY log_gas_column2, log_gas_row
+	movlw	.2										; Color for Gas 2
+	call	log_show_gas
 
-	movlw		color_cyan                  ; Color for Gas 5
-	call		TFT_set_color				; Set Color...
-	WIN_TINY	log_gas_column5, log_gas_row
-    rcall       log_show_gas_common
+	WIN_TINY log_gas_column3, log_gas_row
+	movlw	.3										; Color for Gas 3
+	call	log_show_gas
 
-    rcall       logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
-display_profile_loop:
-	; REPLACE	## logbook look and feel
-	; btfsc		switch_left					; SET/MENU?
-	; BY
-	btfsc		switch_right
-	bra			logbook_page2   			; Show more information
-	; REPLACE	## logbook look and feel
-	; btfsc		switch_right				; ENTER?
-	; BY
-	btfsc		switch_left
-	bra			exit_profileview			; back to list
+	WIN_TINY log_gas_column4, log_gas_row
+	movlw	.4										; Color for Gas 4
+	call	log_show_gas
 
-    rcall       log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-	btfsc		sleepmode					; Timeout?
-	bra			exit_profileview			; back to list
-	bra			display_profile_loop		; wait for something to do
+	WIN_TINY log_gas_column5, log_gas_row
+	movlw	.5										; Color for Gas 5
+	call	log_show_gas
+
+	bcf		leftbind
 
-    global  log_screendump_and_onesecond
-log_screendump_and_onesecond:    			; Check if we need to make a screenshot and check for new second
-	btfsc		onesecupdate
-	call		timeout_surfmode			; Timeout
-	btfsc		onesecupdate
-	call		set_dive_modes				; Check, if divemode must be entered
-	bcf			onesecupdate				; one second update
-	btfsc		divemode
-	goto		restart						; Enter Divemode if required
+	rcall	logbook_preloop_tasks					; Clear some flags and set to Speed_eco
+display_profile_loop:
+	btfsc	switch_right
+	bra		logbook_page2							; Show more information
+	btfsc	switch_left
+	bra		exit_profileview						; back to list
 
-    btfsc       enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    bra         log_screendump_and_onesecond2
-    btfsc       vusb_in                     ; USB plugged in?
-    call        comm_mode                   ; Start COMM mode
-    return
-log_screendump_and_onesecond2:
-    btfss       vusb_in                     ; USB (still) plugged in?
-    bcf         enable_screen_dumps         ; No, clear flag
-    call        rs232_get_byte
-    btfsc       rs232_recieve_overflow
-    return
-    movlw       "l"
-    cpfseq      RCREG1
-    return
-    goto        TFT_dump_screen             ; Dump the screen contents and return
+	rcall	log_screendump_and_onesecond			; Check if we need to make a screen-shot and check for new second
+	btfsc	sleepmode								; Timeout?
+	bra		exit_profileview						; back to list
+	bra		display_profile_loop					; wait for something to do
 
-log_show_gas_common:
-    extern  customview_show_mix
-	lfsr		FSR2,buffer
-	call		ext_flash_byte_read_plus					; Gas2 current O2
-	movff		temp1,lo
-	call		ext_flash_byte_read_plus					; Gas2 current He
-	movff		temp1,hi
-    call		customview_show_mix				; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
-	STRCAT_PRINT	""
-	call		ext_flash_byte_read_plus					; Gas2 change depth
-    goto		ext_flash_byte_read_plus					; Gas2 Type and return
+	global	log_screendump_and_onesecond
+log_screendump_and_onesecond:						; Check if we need to make a screen-shot and check for new second
+	btfsc	onesecupdate
+	call	timeout_surfmode						; Timeout
+	btfsc	onesecupdate
+	call	set_dive_modes							; Check, if divemode must be entered
+	bcf		onesecupdate							; one second update
+	btfsc	divemode
+	goto	restart									; Enter divemode if required
 
-;=============================================================================
-profile_display_color:
-    movff       average_depth_hold_total+3,active_gas ; Restore gas color.
-	movlw		color_white					; Default color
-	dcfsnz		active_gas,F
-	movlw		color_white					; Color for Gas 1
-	dcfsnz		active_gas,F
-	movlw		color_green					; Color for Gas 2
-	dcfsnz		active_gas,F
-	movlw		color_red					; Color for Gas 3
-	dcfsnz		active_gas,F
-	movlw		color_yellow				; Color for Gas 4
-	dcfsnz		active_gas,F
-	movlw		color_cyan      			; Color for Gas 5
-	dcfsnz		active_gas,F
-	movlw		color_pink					; Color for Gas 6
-	goto		TFT_set_color				; Set Color...
+	btfsc	enable_screen_dumps						; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	bra		log_screendump_and_onesecond2
+	btfsc	vusb_in									; USB plugged in?
+	call	comm_mode								; Start COMM mode
+	return
+log_screendump_and_onesecond2:
+	btfss	vusb_in									; USB (still) plugged in?
+	bcf		enable_screen_dumps						; No, clear flag
+	call	rs232_get_byte
+	btfsc	rs232_receive_overflow
+	return
+	movlw	"l"
+	cpfseq	RCREG1
+	return
+	goto	TFT_dump_screen							; Dump the screen contents and return
 
 ;=============================================================================
 ; Draw a vertical line between xC+1 and xC+0, at current X position.
@@ -1212,874 +1208,852 @@
 ; Note: ascending or descending !
 ;
 profile_display_fill:
-    ; First, check if xC+0>apnoe_mins or xC+0<aponoe_mins
+	; First, check if xC+0 > fill_between_rows or xC+0 < aponoe_mins
 	movf	xC+0,W
-	cpfseq	xC+1				    ; xC+0 = apone_mins?
-	bra		profile_display_fill2	; No!
+	cpfseq	xC+1									; xC+0 = apone_mins?
+	bra		profile_display_fill2					; No!
 	return
 
 profile_display_fill2:	
-    ; Make sure to init X position.
-    movf    logbook_pixel_x_pos,W
-    mullw   2
-    decf    PRODL,F
-    movlw   0
-    subwfb  PRODH,F
-    call    pixel_write_col320
+	; Make sure to init X position.
+	movf	logbook_pixel_x_pos,W
+	mullw	2
+	decf	PRODL,F
+	movlw	0
+	subwfb	PRODH,F
+	call	pixel_write_col320
 
 	movf	xC+0,W
-	cpfsgt	xC+1				    ; apnoe_mins>xC+0?
-	bra		profile_display_fill_up	; Yes!
+	cpfsgt	xC+1									; fill_between_rows > xC+0?
+	bra		profile_display_fill_up					; Yes!
 
-profile_display_fill_down2:			; Loop	
+profile_display_fill_down2:							; Loop
 	decf	xC+1,F
 
-    HALF_PIXEL_WRITE    xC+1        ; Updates just row (0..239)
+	HALF_PIXEL_WRITE xC+1							; Updates just row (0..239)
 
 	movf	xC+0,W
-	cpfseq	xC+1					; Loop until xC+1=xC+0
+	cpfseq	xC+1									; Loop until xC+1 = xC+0
 	bra		profile_display_fill_down2
-	return							; apnoe_mins and xC+0 are untouched
+	return											; fill_between_rows and xC+0 are untouched
 
-profile_display_fill_up:			; Fill upwards from xC+0 to apone_mins!
+profile_display_fill_up:							; Fill upwards from xC+0 to apone_mins!
 	incf	xC+1,F
 
-    HALF_PIXEL_WRITE    xC+1        ; Updates just row (0..239)
+	HALF_PIXEL_WRITE xC+1							; Updates just row (0..239)
 
 	movf	xC+0,W
-	cpfseq	xC+1					; Loop until xC+1=apnoe_mins
+	cpfseq	xC+1									; Loop until xC+1 = fill_between_rows
 	bra		profile_display_fill_up
-	return							; apnoe_mins and xC+0 are untouched
+	return											; fill_between_rows and xC+0 are untouched
 
 ;=============================================================================
 
 
 profile_view_get_depth:
-	infsnz		logbook_sample_counter+0,F
-    incf        logbook_sample_counter+1,F		; Count read pixels
+	infsnz	logbook_sample_counter+0,F
+	incf	logbook_sample_counter+1,F				; Count read pixels
 
-	movf		logbook_sample_counter+0,W
-	cpfseq		average_depth_hold_total+0
-	bra			profile_view_get_depth_no_line	; no need to draw a 10min line, continue
-	movf		logbook_sample_counter+1,W
-	cpfseq		average_depth_hold_total+1
-	bra			profile_view_get_depth_no_line	; no need to draw a 10min line, continue
+	movf	logbook_sample_counter+0,W
+	cpfseq	vertical_interval+0
+	bra		profile_view_get_depth_no_line			; no need to draw a 10min line, continue
+	movf	logbook_sample_counter+1,W
+	cpfseq	vertical_interval+1
+	bra		profile_view_get_depth_no_line			; no need to draw a 10min line, continue
 	; draw a new 10min line here...
-	clrf		logbook_sample_counter+0
-	clrf		logbook_sample_counter+1		; clear counting registers for next line
+	clrf	logbook_sample_counter+0
+	clrf	logbook_sample_counter+1				; clear counting registers for next line
 
 	; Vertical lines...
-	movlw       color_deepblue
-	call		TFT_set_color					; Make this configurable?
-	movlw		profile_top+.1
-	movwf		win_top
-	incf		logbook_pixel_x_pos,W			; draw one line to right to make sure it's the background of the profile
-	movwf		win_leftx2						; Left border (0-159)
-	movlw		profile_height_pixels
-	movwf		win_height				
-	movlw		profile_height_pixels
-	movwf		win_width						; "Window" height
-	call		half_horizontal_line        	; Inputs:  win_top, win_leftx2, win_width, win_color1, win_color2
+	movlw	color_deepblue
+	call	TFT_set_color							; Make this configurable?
+	movlw	profile_top+.1
+	movwf	win_top
+	incf	logbook_pixel_x_pos,W					; draw one line to right to make sure it's the background of the profile
+	movwf	win_leftx2								; Left border (0-159)
+	movlw	profile_height_pixels
+	movwf	win_height
+	movlw	profile_height_pixels
+	movwf	win_width								; "Window" height
+	call	half_horizontal_line					; Inputs: win_top, win_leftx2, win_width, win_color1, win_color2
 
 profile_view_get_depth_no_line:
-	call		ext_flash_byte_read_plus_0x20	; read depth first
-	movff		temp1,logbook_cur_depth+0   	; low value
-	call		ext_flash_byte_read_plus_0x20	; read depth first
-	movff		temp1,logbook_cur_depth+1   	; high value
-	call		ext_flash_byte_read_plus_0x20	; read Profile Flag Byte
-	movff		temp1,timeout_counter2			; store Profile Flag Byte
+	call	ext_flash_byte_read_plus_0x20			; read depth first
+	movff	ext_flash_rw,logbook_cur_depth+0		; low value
+	call	ext_flash_byte_read_plus_0x20			; read depth first
+	movff	ext_flash_rw,logbook_cur_depth+1		; high value
+	call	ext_flash_byte_read_plus_0x20			; read Profile Flag Byte
+	movff	ext_flash_rw,gaslist_gas			; store Profile Flag Byte
 
-	bcf			event_occured					; clear flag
-	btfsc		timeout_counter2,7
-	bsf			event_occured					; We also have an Event byte!
-	bcf			timeout_counter2,7				; Clear Event Byte Flag (If any)
-	; timeout_counter2 now holds the number of additional bytes to ignore (0-127)
-	movlw		0xFD							; end of profile bytes?
-	cpfseq		logbook_cur_depth+0
-	bra			profile_view_get_depth_new1		; no 1st. 0xFD
-	cpfseq		logbook_cur_depth+1
-	bra			profile_view_get_depth_new1		; no 2nd. 0xFD
-	bsf			end_of_profile					; End found! Set Flag! Skip remaining pixels!
+	bcf		event_occured							; clear flag
+	btfsc	gaslist_gas,7
+	bsf		event_occured							; We also have an Event byte!
+	bcf		gaslist_gas,7						; Clear Event Byte Flag (If any)
+	; gaslist_gas now holds the number of additional bytes to ignore (0-127)
+	movlw	0xFD									; end of profile bytes?
+	cpfseq	logbook_cur_depth+0
+	bra		profile_view_get_depth_new1				; no 1st. 0xFD
+	cpfseq	logbook_cur_depth+1
+	bra		profile_view_get_depth_new1				; no 2nd. 0xFD
+	bsf		end_of_profile							; End found! Set Flag! Skip remaining pixels!
 	return
 
 profile_view_get_depth_new1:
-	btfsc		event_occured					; Was there an event attached to this sample?
-	rcall		profile_view_get_depth_events	; Yes, get information about this event(s)
-    
-    ;---- Read Tp°, if any AND divisor reached AND bytes available -----------
-    movf        divisor_temperature,W       	; Is Tp° divisor null ?
-    bz          profile_view_get_depth_no_tp	; Yes: no Tp° curve.
-    decf        count_temperature,F         	; Decrement tp° counter
-    bnz         profile_view_get_depth_no_tp	; No temperature this time
-    
-    call		ext_flash_byte_read_plus_0x20	; Tp° low
-	decf        timeout_counter2,F
-	movff		temp1,logbook_cur_tp+0
-    call		ext_flash_byte_read_plus_0x20	; Tp° high
-	decf        timeout_counter2,F
-	movff		temp1,logbook_cur_tp+1
-	movff       divisor_temperature,count_temperature   ; Restart counter.
-    
-    ; Compute Tp° max on the fly...
-    movff       logbook_cur_tp+0,sub_a+0    	; Compare cur_tp > max_tp ?
-    movff       logbook_cur_tp+1,sub_a+1
-    movff       logbook_max_tp+0,sub_b+0
-    movff       logbook_max_tp+1,sub_b+1
-    call        sub16                       	; SIGNED sub_a - sub_b
-    btfsc       neg_flag
-    bra         profile_view_get_depth_no_tp
+	btfsc	event_occured							; Was there an event attached to this sample?
+	rcall	profile_view_get_depth_events			; Yes, get information about this event(s)
+
+	;---- Read Tp°, if any AND divisor reached AND bytes available -----------
+	movf	divisor_temperature,W					; Is Tp° divisor null ?
+	bz		profile_view_get_depth_no_tp			; Yes: no Tp° curve.
+	decf	count_temperature,F						; Decrement tp° counter
+	bnz		profile_view_get_depth_no_tp			; No temperature this time
 
-    ; store max. temp only below start_dive_threshold (1,0m)
-    tstfsz      logbook_cur_depth+1             ; > 2,56m?
-    bra         profile_view_compute_max_temp   ; Yes, include in max. temp measurement
-    movlw       start_dive_threshold            ; 1,0m
-    cpfsgt      logbook_cur_depth+0             ; low value
-    bra         profile_view_get_depth_no_tp    ; above 1,0m, ignore temp
+	call	ext_flash_byte_read_plus_0x20			; Tp° low
+	decf	gaslist_gas,F
+	movff	ext_flash_rw,logbook_cur_tp+0
+	call	ext_flash_byte_read_plus_0x20			; Tp° high
+	decf	gaslist_gas,F
+	movff	ext_flash_rw,logbook_cur_tp+1
+	movff	divisor_temperature,count_temperature	; Restart counter.
+
+	; Compute Tp° max on the fly...
+	movff	logbook_cur_tp+0,sub_a+0				; Compare cur_tp > max_tp ?
+	movff	logbook_cur_tp+1,sub_a+1
+	movff	logbook_max_tp+0,sub_b+0
+	movff	logbook_max_tp+1,sub_b+1
+	call	sub16									; SIGNED sub_a - sub_b
+	btfsc	neg_flag
+	bra		profile_view_get_depth_no_tp
+
+	; store max. temp only below start_dive_threshold (1,0m)
+	tstfsz	logbook_cur_depth+1						; > 2,56m?
+	bra		profile_view_compute_max_temp			; Yes, include in max. temp measurement
+	movlw	start_dive_threshold					; 1,0m
+	cpfsgt	logbook_cur_depth+0						; low value
+	bra		profile_view_get_depth_no_tp			; above 1,0m, ignore temp
 
 profile_view_compute_max_temp:
-    movff       logbook_cur_tp+0,logbook_max_tp+0
-    movff       logbook_cur_tp+1,logbook_max_tp+1
-    
-    ;---- Read deco, if any AND divisor=0 AND bytes available ----------------
+	movff	logbook_cur_tp+0,logbook_max_tp+0
+	movff	logbook_cur_tp+1,logbook_max_tp+1
+
+	;---- Read deco, if any AND divisor=0 AND bytes available ----------------
 profile_view_get_depth_no_tp:
-    movf        divisor_deco,W
-    bz          profile_view_get_depth_no_deco
-    decf        count_deco,F
-    bnz         profile_view_get_depth_no_deco
-    
-    call		ext_flash_byte_read_plus_0x20
-	decf        timeout_counter2,F
-	movff		temp1,logbook_ceiling
-	movff       divisor_deco,count_deco     	; Restart counter.
-    call		ext_flash_byte_read_plus_0x20   ; Skip stop length
-	decf        timeout_counter2,F
+	movf	divisor_deco,W
+	bz		profile_view_get_depth_no_deco
+	decf	count_deco,F
+	bnz		profile_view_get_depth_no_deco
 
-    ;---- Read GF, if any AND divisor=0 AND bytes available ------------------
+	call	ext_flash_byte_read_plus_0x20
+	decf	gaslist_gas,F
+	movff	ext_flash_rw,logbook_ceiling
+	movff	divisor_deco,count_deco					; Restart counter.
+	call	ext_flash_byte_read_plus_0x20			; Skip stop length
+	decf	gaslist_gas,F
+
+	;---- Read GF, if any AND divisor=0 AND bytes available ------------------
 profile_view_get_depth_no_deco:
-    ; Then skip remaining bytes...
-	movf		timeout_counter2,W				; number of additional bytes to ignore (0-127)
-    tstfsz      timeout_counter2            	; Anything to skip?
-	call		incf_ext_flash_address0_0x20	; Yes, increases bytes in ext_flash_address:3 with 0x200000 bank switching
+	; Then skip remaining bytes...
+	movf	gaslist_gas,W						; number of additional bytes to ignore (0-127)
+	tstfsz	gaslist_gas						; Anything to skip?
+	call	incf_ext_flash_address0_0x20			; Yes, increases bytes in ext_flash_address:3 with 0x200000 bank switching
 	return
 
 profile_view_get_depth_events:
-    clrf        EventByte2                  	; Clear EventByte2
-	call		ext_flash_byte_read_plus_0x20 	; Read Event byte
-	movff		temp1,EventByte					; store EventByte
-	decf		timeout_counter2,F				; reduce counter
+	clrf	EventByte2								; Clear EventByte2
+	call	ext_flash_byte_read_plus_0x20			; Read Event byte
+	movff	ext_flash_rw,EventByte1					; store EventByte1
+	decf	gaslist_gas,F						; reduce counter
 
-    btfss       EventByte,7                 	; Another Event byte?
-    bra         profile_no_second_eventbyte 	; No
-    call		ext_flash_byte_read_plus_0x20	; Read Event byte2
-    movff		temp1,EventByte2				; store EventByte2
-	decf		timeout_counter2,F				; reduce counter
-    bcf         EventByte,7                 	; Clear flag
+	btfss	EventByte1,7							; Another Event byte?
+	bra		profile_no_second_eventbyte				; No
+	call	ext_flash_byte_read_plus_0x20			; Read Event byte2
+	movff	ext_flash_rw,EventByte2						; store EventByte2
+	decf	gaslist_gas,F						; reduce counter
+	bcf		EventByte1,7							; Clear flag
 
 profile_no_second_eventbyte:
-; Check event flags in the EventBytes
-	btfsc		EventByte,4					; Manual Gas Changed?
-	rcall       logbook_event1				; Yes!
-	btfsc		EventByte,5					; Stored Gas Changed?
-	rcall       logbook_event4				; Yes!
-	btfsc		EventByte,6                 ; Setpoint Change?
-	rcall       logbook_event3				; Yes!
-	btfsc		EventByte2,0				; Bailout?
-	rcall       logbook_event2				; Yes!
-    ; Any Alarm?
-    bcf         EventByte,4                 ; Clear bits already tested
-    bcf         EventByte,5
-    bcf         EventByte,6
-    movlw       .6                          ; manual marker?
-    cpfseq      EventByte
-    return	   ; No, return
-    bsf         log_marker_found            ; Manual marker! Draw small yellow rectancle here
-    return
+	; Check event flags in the EventBytes
+	btfsc	EventByte1,4							; Manual Gas Changed?
+	rcall	logbook_event1							; Yes!
+	btfsc	EventByte1,5							; Stored Gas Changed?
+	rcall	logbook_event4							; Yes!
+	btfsc	EventByte1,6							; Setpoint Change?
+	rcall	logbook_event3							; Yes!
+	btfsc	EventByte2,0							; Bailout?
+	rcall	logbook_event2							; Yes!
+	; Any Alarm?
+	bcf		EventByte1,4							; Clear bits already tested
+	bcf		EventByte1,5
+	bcf		EventByte1,6
+	movlw	.6										; manual marker?
+	cpfseq	EventByte1
+	return											; No, return
+	bsf		log_marker_found						; Manual marker! Draw small yellow rectangle here
+	return
 
-logbook_event4: ; Stored Gas changed!
-	call		ext_flash_byte_read_plus_0x20		; Read Gas#
-	decf		timeout_counter2,F			  		; reduce counter
-	movff		temp1,average_depth_hold_total+3
-    rcall       profile_display_color         		; Change profile color according to gas number
+logbook_event4:										; Stored Gas changed!
+	call	ext_flash_byte_read_plus_0x20			; Read Gas#
+	decf	gaslist_gas,F						; reduce counter
+	movff	ext_flash_rw,backup_color1
+	movff	ext_flash_rw,WREG							; copy gas number to WREG for color-coding
+	call	TFT_color_code_gas						; Change profile color according to gas number
 	return
 
-logbook_event1: ; Gas6 changed
-    bsf         gas6_changed
-    movlw       6                           ; Just color backup to 6
-    movwf       average_depth_hold_total+3
-    rcall       profile_display_color       ; Back to normal profile color.
-    incf_ext_flash_address_0x20  .2         ; Skip two bytes
-    decf		timeout_counter2,F			; reduce counter
-    decf		timeout_counter2,F			; reduce counter
+logbook_event1:										; Gas 6 used
+	bsf		gas6_changed
+	movlw	.6										; Use Gas6 color
+	movwf	backup_color1
+	call	TFT_color_code_gas						; set profile color
+	incf_ext_flash_address_0x20 .2					; Skip two bytes
+	decf	gaslist_gas,F						; reduce counter
+	decf	gaslist_gas,F						; reduce counter
 	return
 
-logbook_event2: ; Bailout
-    bsf         is_bailout                  ; Set flag
-    movff       average_depth_hold_total+3,total_divetime_seconds+0 ; Backup last gas color in case we return to CCR
-    movlw       6                           ; Use Gas6 color
-    movwf       average_depth_hold_total+3
-    rcall       profile_display_color       ; Back to normal profile color.
-    incf_ext_flash_address_0x20  .2         ; Skip two bytes
-    decf		timeout_counter2,F			; reduce counter
-    decf		timeout_counter2,F			; reduce counter
+logbook_event2:										; Bailout
+	bsf		is_bailout								; Set flag
+	movff	backup_color1,backup_color2	; Backup last gas color in case we return to CCR
+	movlw	.6										; Use Gas6 color
+	movwf	backup_color1
+	call	TFT_color_code_gas						; Use Gas6 color
+	incf_ext_flash_address_0x20 .2					; Skip two bytes
+	decf	gaslist_gas,F						; reduce counter
+	decf	gaslist_gas,F						; reduce counter
 	return
 
-logbook_event3: ; Setpoint change
-    incf_ext_flash_address_0x20  .1         ; Skip one byte
-    decf		timeout_counter2,F			; reduce counter
-    btfss       is_bailout                  ; Are we in bailout?
-    return      ; No, return
-    ; We were in bailout before, restore profile color
-    movff       total_divetime_seconds+0,average_depth_hold_total+3 ; Restore color
-    rcall       profile_display_color       ; Back to normal profile color.
-    return
+logbook_event3:										; Setpoint change
+	incf_ext_flash_address_0x20 .1					; Skip one byte
+	decf	gaslist_gas,F						; reduce counter
+	btfss	is_bailout								; Are we in bailout?
+	return											; No, return
+	; We were in bailout before, restore profile color
+	movff	backup_color2,backup_color1				; Restore color
+	movff	backup_color2,WREG						; copy gas number to WREG for color-coding
+	call	TFT_color_code_gas						; Back to normal profile color
+	return
 
 exit_profileview:
-;	call		speed_fastest
-	bcf			sleepmode
-	clrf		timeout_counter2			; restore all registers to build same page again
-	movff		divemins_backup,divemins+0
-	movff		logbook_divenumber_temp, logbook_divenumber
-	movff		logbook_max_dive_counter_temp,logbook_max_dive_counter
-	incf		logbook_max_dive_counter,F
-	decf		logbook_divenumber,F
-	bcf			all_dives_shown
-	clrf		menupos3					; here: used row on current page
-	movlw		logbook_row_number
-	movwf		menupos						; here: active row on current page
-;    call        TFT_DisplayOff
-    call        TFT_boot
-    clrf        CCP1CON                     ; stop PWM
-    bcf         PORTC,2                     ; Pull PWM out to GND
-    call        TFT_boot
-;	call		TFT_ClearScreen				; clear details/profile
-	goto		logbook2					; start search
+;	call	speed_fastest
+	bcf		sleepmode
+	clrf	gaslist_gas						; restore all registers to build same page again
+	movff	logbook_divenumber_temp,logbook_divenumber
+	movff	logbook_max_dive_counter_temp,logbook_max_dive_counter
+	movff	logbook_temp_backup,logbook_temp
+	incf	logbook_max_dive_counter,F
+	decf	logbook_divenumber,F
+	bcf		all_dives_shown
+	clrf	menupos3								; here: used row on current page
+	movlw	logbook_row_number
+	movwf	menupos1								; here: active row on current page
+;	call	TFT_DisplayOff
+	call	TFT_boot
+	clrf	CCP1CON									; stop PWM
+	bcf		PORTC,2									; Pull PWM out to GND
+	call	TFT_boot
+;	call	TFT_ClearScreen							; clear details/profile
+	goto	logbook2								; start search
 
 next_logbook2:
-	btfsc		all_dives_shown				; all shown
-	goto		logbook 					; all reset
-	clrf		menupos3	
-	movlw		logbook_row_number
-	movwf		menupos
-	incf		logbook_page_number,F		; start new screen
-    bsf         keep_cursor_new_page        ; Keep cursor on "next page"
-    clrf        CCP1CON                     ; stop PWM
-    bcf         PORTC,2                     ; Pull PWM out to GND
-    call        TFT_boot
-	;call		TFT_ClearScreen
-	goto		logbook2					; start search
+	btfsc	all_dives_shown							; all shown
+	goto	logbook									; all reset
+	clrf	menupos3
+	movlw	logbook_row_number
+	movwf	menupos1
+	incf	logbook_page_number,F					; start new screen
+	bsf		keep_cursor_new_page					; Keep cursor on "next page"
+	clrf	CCP1CON									; stop PWM
+	bcf		PORTC,2									; Pull PWM out to GND
+	call	TFT_boot
+;	call	TFT_ClearScreen
+	goto	logbook2								; start search
 
 next_logbook3:
-	incf		menupos,F					; +1
-	movlw		logbook_row_number+.2
-	cpfsgt		menupos						; =logbook_row_number+.3?
-	bra			next_logbook3a				; No
-	movlw		.1
-	movwf		menupos
-	bra			next_logbook3b
+	incf	menupos1,F								; +1
+	movlw	logbook_row_number+.2
+	cpfsgt	menupos1								; =logbook_row_number+.3?
+	bra		next_logbook3a							; No
+	movlw	.1
+	movwf	menupos1
+	bra		next_logbook3b
 
 next_logbook3a:
-	incf		menupos3,W					; last entry in current page +1
-	cpfseq		menupos						; same as cursor pos.?
-	bra			next_logbook3b				; No
-	movlw		logbook_row_number+.1		; Yes, ...
-	movwf		menupos						; ... jump directly to "next page" if page is not full
+	incf	menupos3,W								; last entry in current page +1
+	cpfseq	menupos1								; same as cursor pos.?
+	bra		next_logbook3b							; No
+	movlw	logbook_row_number+.1					; Yes, ...
+	movwf	menupos1								; ... jump directly to "next page" if page is not full
 
-	movlw		logbook_row_number
-	cpfseq		menupos3					; Last dive was row logbook_row_number?
-	bsf			all_dives_shown				; No, set flag to load first page again (full reset)
+	movlw	logbook_row_number
+	cpfseq	menupos3								; Last dive was row logbook_row_number?
+	bsf		all_dives_shown							; No, set flag to load first page again (full reset)
 
 next_logbook3b:
-	clrf		timeout_counter2
-	call		TFT_logbook_cursor
-
-	bcf			switch_left
-	goto		logbook_loop
+	clrf	timeout_counter2
+	call	TFT_logbook_cursor
+	bcf		switch_left
+	goto	logbook_loop
 
 display_listdive:
-	bsf			logbook_page_not_empty		; Page not empty
-	incf		menupos3,F					
+	bsf		logbook_page_not_empty					; Page not empty
+	incf	menupos3,F
+
+	bsf		leftbind
+	WIN_FONT FT_SMALL
+	WIN_LEFT logbook_list_left
 
-	bsf			leftbind
-	WIN_FONT	FT_SMALL
-	WIN_LEFT	logbook_list_left
-	
-	decf		menupos3,W		; -1 into wreg
-	mullw		logbook_row_offset
-	movff		PRODL,win_top
+	decf	menupos3,W								; -1 into wreg
+	mullw	logbook_row_offset
+	movff	PRODL,win_top
 
-	lfsr		FSR2,buffer
-	call		do_logoffset_common_read	; Read into lo:hi
-	tstfsz		lo							; lo=0?
-	bra			display_listdive1       	; No, adjust offset
-	tstfsz		hi							; hi=0?
-	bra			display_listdive1           ; No, adjust offset
-	bra			display_listdive1b          ; Display now
+	lfsr	FSR2,buffer
+	call	do_logoffset_common_read				; Read into lo:hi
+	tstfsz	lo										; lo=0?
+	bra		display_listdive1						; No, adjust offset
+	tstfsz	hi										; hi=0?
+	bra		display_listdive1						; No, adjust offset
+	bra		display_listdive1b						; Display now
 
 display_listdive1:
 	; Check limit (lo:hi must be <1000)
-	movlw		LOW		d'1000'            	; Compare to 1000
-	subwf   	lo,W
-	movlw		HIGH	d'1000'
-	subwfb  	hi,W
-	bc      	display_listdive1b ; carry = no-borrow = > 1000, skip!
+	movlw	LOW		d'1000'							; Compare to 1000
+	subwf	lo,W
+	movlw	HIGH	d'1000'
+	subwfb	hi,W
+	bc		display_listdive1b						; carry = no-borrow = > 1000, skip!
 
-	infsnz      lo,F
-	incf        hi,F						; hi:lo = hi:lo + 1
-	movff		lo,sub_a+0
-	movff		hi,sub_a+1
-	movff		logbook_divenumber,sub_b+0
-	clrf		sub_b+1
-	call		subU16						;  sub_c = sub_a - sub_b
-	movff		sub_c+0,lo
-	movff		sub_c+1,hi
-    bra         display_listdive1a
+	infsnz	lo,F
+	incf	hi,F									; hi:lo = hi:lo + 1
+	movff	lo,sub_a+0
+	movff	hi,sub_a+1
+	movff	logbook_divenumber,sub_b+0
+	clrf	sub_b+1
+	call	subU16									; sub_c = sub_a - sub_b
+	movff	sub_c+0,lo
+	movff	sub_c+1,hi
+	bra		display_listdive1a
 
 display_listdive1b:
-    clrf        hi
-	movff		logbook_divenumber,lo		; lo=0 and hi=0 -> show without applied offset
+	clrf	hi
+	movff	logbook_divenumber,lo					; lo=0 and hi=0 -> show without applied offset
 display_listdive1a:
-	output_16_3                     		; displays only last three figures from a 16Bit value (0-999), # of dive
-	PUTC		' '
-    LOG_POINT_TO    log_date+1              ; Point to month
-	call		ext_flash_byte_read_plus	
-	movff		temp1,lo					; read month
-
-display_listdive2:
-	movff		lo,convert_value_temp+0		; Month (in lo, see above)
-	call		ext_flash_byte_read_plus	; Day 
-	movff		temp1,convert_value_temp+1	
-	call		TFT_convert_date_short		; converts into "DD/MM" or "MM/DD" or "MM/DD" into buffer
+	output_16_3										; displays only last three figures from a 16Bit value (0-999), # of dive
+	PUTC	' '
+	;display_listdive2:
+	LOG_POINT_TO log_date+1							; Point to month
+	call	ext_flash_byte_read_plus				; read month
+	movff	ext_flash_rw,hi								; month
+	call	ext_flash_byte_read_plus				; read day
+	movff	ext_flash_rw,lo								; day
+	call	TFT_convert_date_short					; converts into "DD/MM" or "MM/DD" or "MM/DD" into buffer
 	PUTC	' '
 
-    LOG_POINT_TO    log_max_depth           ; Point to max. depth
-	call		ext_flash_byte_read_plus	; max. Depth
-	movff		temp1,lo
-	call		ext_flash_byte_read_plus
-	movff		temp1,hi
+	LOG_POINT_TO log_max_depth						; Point to max. depth
+	call	ext_flash_byte_read_plus				; max. Depth
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,hi
 
-	TSTOSS      opt_units					; 0=Meters, 1=Feets
-	bra			display_listdive2_metric
-;display_listdive2_imperial:
-	call		convert_mbar_to_feet    	; convert value in lo:hi from mbar to feet
+	TSTOSS	opt_units								; 0=Meters, 1=Feets
+	bra		display_listdive2_metric
+	;display_listdive2_imperial:
+	call	convert_mbar_to_feet					; convert value in lo:hi from mbar to feet
 	PUTC	' '
-	bcf			leftbind
-    output_16_3                         	; limit to 999 and display only (0-999)
+	bcf		leftbind
+	output_16_3										; limit to 999 and display only (0-999)
 	STRCAT_TEXT tFeets1
-	bra			display_listdive3
+	bra		display_listdive3
 
 display_listdive2_metric:
-    bsf     ignore_digit5               	; no cm...
-	movlw		d'1'						; +1
-	movff		WREG,ignore_digits			; no 1000m
-	bcf			leftbind
-	output_16dp .3  						; xxx.y
+	bsf		ignore_digit5							; no cm...
+	movlw	d'1'									; +1
+	movff	WREG,ignore_digits						; no 1000m
+	bcf		leftbind
+	output_16dp .3									; xxx.y
 	STRCAT_TEXT tMeters
 	PUTC	' '
 
 display_listdive3:
-	call		ext_flash_byte_read_plus
-	movff		temp1,lo					; read divetime minutes
-	call		ext_flash_byte_read_plus
-	movff		temp1,hi
-	output_16_3								; Divetime minutes (0-999min)
-	STRCAT_TEXT tMinutes                    
-    clrf    	WREG
-    movff   	WREG,buffer+.21             ; limit to 21 chars
-    STRCAT_PRINT ""                         ; Display header-row in list
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,lo							; read divetime minutes
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,hi
+	output_16_3										; Divetime minutes (0-999min)
+	STRCAT_TEXT tMinutes
+	clrf	WREG
+	movff	WREG,buffer+.21							; limit to 21 chars
+	STRCAT_PRINT ""									; Display header-row in list
 	return
 
 logbook_show_divenumber:
-	call		do_logoffset_common_read	; Read into lo:hi
-	tstfsz		lo							; lo=0?
-	bra			logbook_show_divenumber2	; No, adjust offset
-	tstfsz		hi							; hi=0?
-	bra			logbook_show_divenumber2	; No, adjust offset
-	movff		divesecs,lo					; lo=0 and hi=0 -> skip Offset routine
-	bra			logbook_show_divenumber3	; Display now
+	call	do_logoffset_common_read				; Read into lo:hi
+	tstfsz	lo										; lo=0?
+	bra		logbook_show_divenumber2				; No, adjust offset
+	tstfsz	hi										; hi=0?
+	bra		logbook_show_divenumber2				; No, adjust offset
+	movff	divenumber,lo							; lo=0 and hi=0 -> skip Offset routine
+	bra		logbook_show_divenumber3				; Display now
 
 logbook_show_divenumber2:
-    infsnz      lo,F
-	incf        hi,F                        ; hi:lo = hi:lo + 1
-	movff		lo,sub_a+0
-	movff		hi,sub_a+1
-	movff		divesecs,sub_b+0
-	clrf		sub_b+1
-	call		subU16						; sub_c = sub_a - sub_b
-	movff		sub_c+0,lo
-	movff		sub_c+1,hi
+	infsnz	lo,F
+	incf	hi,F									; hi:lo = hi:lo + 1
+	movff	lo,sub_a+0
+	movff	hi,sub_a+1
+	movff	divenumber,sub_b+0
+	clrf	sub_b+1
+	call	subU16									; sub_c = sub_a - sub_b
+	movff	sub_c+0,lo
+	movff	sub_c+1,hi
 
 logbook_show_divenumber3:
 	WIN_MEDIUM	logbook_divenumer_column, logbook_divenumer_row
-	bsf			leftbind
-	output_16								; # of dive in logbook
-	bcf			leftbind
+	bsf		leftbind
+	output_16										; # of dive in logbook
+	bcf		leftbind
 	STRCAT_PRINT ""
-    return
+	return
 
 
-logbook_page2: ; Show more info
-    rcall   	log_details_header			; Shows number, time/date and basic dive info
-	
+logbook_page2:										; Show more info
+	rcall	log_details_header						; Shows number, time/date and basic dive info
+
 	; Deco model
-    WIN_SMALL   .5,.65
-    LOG_POINT_TO log_decomodel
-    call		ext_flash_byte_read_plus	; read deco model
-    movff       temp1,lo
-    decfsz      temp1,F
-    bra         logbook_decomodel1
-    ; Deco model GF Version
-    STRCAT_PRINT "ZH-L16+GF"
-    LOG_POINT_TO log_gf_lo
-    WIN_SMALL   .5,.90
-    STRCPY_TEXT tGF
-    call		ext_flash_byte_read_plus 	; Read GF lo
-    movff       temp1,lo
-    output_8
-    STRCAT		"%/"
-    bra         logbook_decomodel_common
+	WIN_SMALL .5,.65
+	LOG_POINT_TO log_decomodel
+	call	ext_flash_byte_read_plus				; read deco model
+	movff	ext_flash_rw,lo
+	decfsz	ext_flash_rw,F
+	bra		logbook_decomodel1
+	; Deco model GF Version
+	STRCAT_PRINT "ZHL-16+GF"
+	LOG_POINT_TO log_gf_lo
+	WIN_SMALL .5,.90
+	STRCPY_TEXT tGF
+	call	ext_flash_byte_read_plus				; Read GF lo
+	movff	ext_flash_rw,lo
+	output_8
+	STRCAT	"%/"
+	bra		logbook_decomodel_common
 logbook_decomodel1:
-    ; Deco model NON-GF Version
-    STRCAT_PRINT "ZH-L16"
-    LOG_POINT_TO log_sat_mult
-    WIN_SMALL   .5,.90
-    call		ext_flash_byte_read_plus	; Read sat_mult
-    movff       temp1,lo
-    output_8
-    STRCAT		"%/"
+	; Deco model NON-GF Version
+	STRCAT_PRINT "ZH-L16"
+	LOG_POINT_TO log_sat_mult
+	WIN_SMALL .5,.90
+	call	ext_flash_byte_read_plus				; Read sat_mult
+	movff	ext_flash_rw,lo
+	output_8
+	STRCAT	"%/"
 logbook_decomodel_common:
-    call		ext_flash_byte_read_plus	; Read desat_mult or GF_hi
-    movff       temp1,lo
-    output_8
-    STRCAT_PRINT "%"
-    
-    ; CNS
-    LOG_POINT_TO log_cns_start
-    WIN_SMALL    .5,.115
-    STRCPY_TEXT tCNS2
-    call		ext_flash_byte_read_plus	; read cns low
-    movff       temp1,lo
-    call		ext_flash_byte_read_plus	; read cns high
-    movff       temp1,hi
-    output_16
-    LOG_POINT_TO log_cns_end
-    STRCAT      "->"
-    call		ext_flash_byte_read_plus	; read CNS low
-    movff       temp1,lo
-    call		ext_flash_byte_read_plus	; read CNS high
-    movff       temp1,hi
-    output_16
-    STRCAT_PRINT "%"
+	call	ext_flash_byte_read_plus				; Read desat_mult or GF_hi
+	movff	ext_flash_rw,lo
+	output_8
+	STRCAT_PRINT "%"
 
-    ; Salinity
-    WIN_SMALL	.5,.140
-    LOG_POINT_TO log_salinity
-    STRCPY_TEXT tDvSalinity
-    bsf         leftbind
-    call		ext_flash_byte_read_plus		; read salinity
-    movff       temp1,lo
-    movff       temp1,total_divetime_seconds+1	; backup for average depth display
-    output_8
-    STRCAT_PRINT "%"
+	; CNS
+	LOG_POINT_TO log_cns_start
+	WIN_SMALL .5,.115
+	STRCPY_TEXT tCNS2
+	call	ext_flash_byte_read_plus				; read cns low
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read cns high
+	movff	ext_flash_rw,hi
+	output_16
+	LOG_POINT_TO log_cns_end
+	STRCAT	"->"
+	call	ext_flash_byte_read_plus				; read CNS low
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read CNS high
+	movff	ext_flash_rw,hi
+	output_16
+	STRCAT_PRINT "%"
+
+	; Salinity
+	WIN_SMALL	.5,.140
+	LOG_POINT_TO log_salinity
+	STRCPY_TEXT tDvSalinity
+	bsf		leftbind
+	call	ext_flash_byte_read_plus				; read salinity
+	movff	ext_flash_rw,lo
+	movff	ext_flash_rw,backup_divedata			; backup for average depth display
+	output_8
+	STRCAT_PRINT "%"
 
-    ; Average depth
-    WIN_SMALL	.5,.165
-    STRCPY_TEXT tAVG
-    LOG_POINT_TO log_avr_depth
-    call		ext_flash_byte_read_plus		; read avr low
-    movff       temp1,lo
-    call		ext_flash_byte_read_plus		; read avr high
-    movff       temp1,hi
-    movf        total_divetime_seconds+1,W      ; salinity for this dive
-    call        adjust_depth_with_salinity_log	; computes salinity setting (FROM WREG!) into lo:hi [mbar]
-    output_16dp .3
-    STRCAT_PRINT "m"
-    
-    ; Last deco
-    LOG_POINT_TO log_last_stop
-    WIN_SMALL	.5,.190
-    STRCPY_TEXT tLastDecostop
-    call		ext_flash_byte_read_plus		; Read last stop
-    movff       temp1,lo
-    output_8
-    STRCAT_PRINT "m"
+	; Average depth
+	WIN_SMALL .5,.165
+	STRCPY_TEXT tAVG
+	LOG_POINT_TO log_avr_depth
+	call	ext_flash_byte_read_plus				; read avr low
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read avr high
+	movff	ext_flash_rw,hi
+	movf	backup_divedata,W						; salinity for this dive
+	call	adjust_depth_with_salinity_log			; computes salinity setting (FROM WREG!) into lo:hi [mbar]
+	output_16dp .3
+	STRCAT_PRINT "m"
 
-    movlw       color_lightblue
-    call		TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.2,.105		; Top, Bottom, Left, Right
+	; Last deco
+	LOG_POINT_TO log_last_stop
+	WIN_SMALL .5,.190
+	STRCPY_TEXT tLastDecostop
+	call	ext_flash_byte_read_plus				; Read last stop
+	movff	ext_flash_rw,lo
+	output_8
+	STRCAT_PRINT "m"
+
+	movlw	color_lightblue
+	call	TFT_set_color
+	WIN_FRAME_COLOR16 .63,.220,.2,.105				; Top, Bottom, Left, Right
 
-    ; Firmware
-    call		TFT_standard_color
-    WIN_SMALL	.110,.65
-    STRCAT  	"V:"
-    LOG_POINT_TO log_firmware
-    call		ext_flash_byte_read_plus		; read firmware xx
-    movff       temp1,lo
-    bsf			neg_flag    					; set flag for 2.15 or newer
-    movlw		.1
-    cpfsgt		lo	    						; >1?
-    bcf			neg_flag    					; No, clear flag
-    movlw		.9
-    cpfslt		lo	    						; <9?
-    bcf			neg_flag    					; No, clear flag (When unit was updgraded from hwOS Sport (10.xx))
-    bsf         leftbind
-    output_8
-    PUTC        "."
-    call		ext_flash_byte_read_plus		; read firmware yy
-    movff       temp1,lo
-    movlw		.14
-    cpfsgt		lo	    ; >14?
-    bcf			neg_flag    ; No, clear flag
-    output_99x
-    STRCAT_PRINT ""
+	; Firmware
+	call	TFT_standard_color
+	WIN_SMALL .110,.65
+	STRCAT	"V:"
+	LOG_POINT_TO log_firmware
+	call	ext_flash_byte_read_plus				; read firmware xx
+	movff	ext_flash_rw,lo
+	bsf		neg_flag								; set flag for 2.15 or newer
+	movlw	.1
+	cpfsgt	lo										; >1?
+	bcf		neg_flag								; No, clear flag
+	movlw	.9
+	cpfslt	lo										; <9 ?
+	bcf		neg_flag								; No, clear flag (When unit was upgraded from hwOS Sport (10.xx))
+	bsf		leftbind
+	output_8
+	PUTC	"."
+	call	ext_flash_byte_read_plus				; read firmware yy
+	movff	ext_flash_rw,lo
+	movlw	.14
+	cpfsgt	lo										; >14 ?
+	bcf		neg_flag								; No, clear flag
+	output_99x
+	STRCAT_PRINT ""
 
-    btfss   	neg_flag    					; set flag for 2.15 or newer
-    bra	    	logbook_no_batt_info
-    
-    ; Battery percent (for dives with 2.15 or newer)
-    WIN_SMALL	.110,.140
-    LOG_POINT_TO log_batt_info	    			; Battery percent
-    call		ext_flash_byte_read_plus		; read battery low
-    movff       temp1,lo
-    output_8
-    STRCAT_PRINT "%"
+	btfss	neg_flag								; set flag for 2.15 or newer
+	bra		logbook_no_batt_info
+
+	; Battery percent (for dives with 2.15 or newer)
+	WIN_SMALL .110,.140
+	LOG_POINT_TO log_batt_info						; Battery percent
+	call	ext_flash_byte_read_plus				; read battery low
+	movff	ext_flash_rw,lo
+	output_8
+	STRCAT_PRINT "%"
 
-logbook_no_batt_info:							; dives with firmware <2.15
+logbook_no_batt_info:								; dives with firmware <2.15
+
+	; Battery voltage
+	WIN_SMALL .110,.90
+	STRCAT_PRINT "Batt:"
+	WIN_SMALL .110,.115
+	LOG_POINT_TO log_battery						; Battery voltage...
+	call	ext_flash_byte_read_plus				; read battery low
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read battery high
+	movff	ext_flash_rw,hi
+	output_16dp .2
+	STRCAT_PRINT "V"
 
-    ; Battery voltage
-    WIN_SMALL	.110,.90
-    STRCAT_PRINT "Batt:"
-    WIN_SMALL	.110,.115
-    LOG_POINT_TO log_battery	    			; Battery voltage...
-    call		ext_flash_byte_read_plus		; read battery low
-    movff       temp1,lo
-    call		ext_flash_byte_read_plus		; read battery high
-    movff       temp1,hi
-    output_16dp  .2
-    STRCAT_PRINT "V"
-   
-    ; surface pressure in mbar
-    LOG_POINT_TO log_surface_press
-    call		ext_flash_byte_read_plus		; read surface pressure
-    movff       temp1,lo
-    call		ext_flash_byte_read_plus		; read surface pressure
-    movff       temp1,hi
-    WIN_SMALL	.110,.165
-    lfsr        FSR2,buffer
-    bsf			leftbind
-    output_16									; Air pressure before dive
-    STRCAT_TEXT tMBAR
-    clrf    	WREG
-    movff   	WREG,buffer+7	    			; limit to 7 chars
-    STRCAT_PRINT ""
+	; surface pressure in mbar
+	LOG_POINT_TO log_surface_press
+	call	ext_flash_byte_read_plus				; read surface pressure
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read surface pressure
+	movff	ext_flash_rw,hi
+	WIN_SMALL .110,.165
+	lfsr	FSR2,buffer
+	bsf		leftbind
+	output_16										; Air pressure before dive
+	STRCAT_TEXT tMBAR
+	clrf	WREG
+	movff	WREG,buffer+7							; limit to 7 chars
+	STRCAT_PRINT ""
 
-    movlw       color_greenish
-    call		TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.107,.159		; Top, Bottom, Left, Right
+	movlw	color_greenish
+	call	TFT_set_color
+	WIN_FRAME_COLOR16 .63,.220,.107,.159			; Top, Bottom, Left, Right
+
+	rcall	logbook_preloop_tasks					; Clear some flags and set to Speed_eco
+display_details_loop:
+	btfsc	switch_right
+	bra		logbook_page3							; Details, 2nd page
+	btfsc	switch_left
+	bra		exit_profileview						; back to list
+	rcall	log_screendump_and_onesecond			; Check if we need to make a screenshot and check for new second
+	btfsc	sleepmode								; Timeout?
+	bra		exit_profileview						; back to list
+	bra		display_details_loop					; wait for something to do
 
-    rcall       logbook_preloop_tasks       	; Clear some flags and set to Speed_eco
-display_details_loop:
-	; REPLACE	## logbook look and feel
-    ; btfsc		switch_left		; SET/MENU?
-	; BY
-	btfsc		switch_right
-    bra			logbook_page3					; Details, 2nd page
-    ; REPLACE	## logbook look and feel
-	; btfsc		switch_right					; ENTER?
-	btfsc		switch_left
-    bra			exit_profileview				; back to list
-    rcall		log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-    btfsc		sleepmode						; Timeout?
-    bra			exit_profileview				; back to list
-    bra			display_details_loop    		; wait for something to do
+	global	logbook_preloop_tasks
+logbook_preloop_tasks:
+	movlw	CCP1CON_VALUE							; See hwos.inc
+	movwf	CCP1CON									; Power-on backlight
+	call	TFT_standard_color
+	bcf		sleepmode								; clear some flags
+	bcf		switch_right
+	bcf		switch_left
+	clrf	timeout_counter2
+	goto	speed_normal							; and return
+
+
+logbook_page3:										; Show even more info +++
+	rcall	log_details_header						; Shows number, time/date and basic dive info
+	LOG_POINT_TO log_gas1
+	bcf		log_show_gas_short						; do the long version of log_show_gas
+	bcf		leftbind
 
-    global  logbook_preloop_tasks
-logbook_preloop_tasks:
-	movlw       CCP1CON_VALUE               	; See hwos.inc
-	movwf       CCP1CON                     	; Power-on backlight
-	call	    TFT_standard_color
-	bcf	    sleepmode							; clear some flags
-	bcf	    switch_right
-	bcf	    switch_left
-	clrf	    timeout_counter2
-	goto	    speed_normal                	; and return
+	WIN_SMALL .5,.90
+	movlw	.1										; Color for Gas 1
+	rcall	log_show_gas
+
+	WIN_SMALL .5,.115
+	movlw	.2										; Color for Gas 2
+	rcall	log_show_gas
 
-    
-logbook_page3: ; Show even more info
-    rcall   log_details_header	; Shows number, time/date and basic dive info
+	WIN_SMALL .5,.140
+	movlw	.3										; Color for Gas 3
+	rcall	log_show_gas
+
+	WIN_SMALL .5,.165
+	movlw	.4										; Color for Gas 4
+	rcall	log_show_gas
+
+	WIN_SMALL .5,.190
+	movlw	.5										; Color for Gas 5
+	rcall	log_show_gas
 
-; REPLACE		## logbook look and feel
-;    ; OC/CC Gas List
-;    LOG_POINT_TO    log_divemode
-;    call	ext_flash_byte_read_plus            ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1
-;    WIN_SMALL   .5,.65
-;    WIN_COLOR   color_greenish
-;    STRCPY_TEXT_PRINT   tGaslist				; "OC Gas List" / tGaslistCC
-; BY
-    bcf		leftbind
-    LOG_POINT_TO log_gas1
-    movlw		color_white					; Color for Gas 1
-    call		TFT_set_color				; Set Color...
-    WIN_SMALL   .5,.90
-    rcall       log_show_gas_common2
-    movlw		color_green					; Color for Gas 2
-    call		TFT_set_color				; Set Color...
-    WIN_SMALL   .5,.115
-    rcall       log_show_gas_common2
-    movlw		color_red					; Color for Gas 3
-    call		TFT_set_color				; Set Color...
-    WIN_SMALL   .5,.140
-    rcall       log_show_gas_common2
-    movlw		color_yellow				; Color for Gas 4
-    call		TFT_set_color				; Set Color...
-    WIN_SMALL   .5,.165
-    rcall       log_show_gas_common2
-    movlw		color_cyan  				; Color for Gas 5
-    call		TFT_set_color				; Set Color...
-    WIN_SMALL   .5,.190
-    rcall       log_show_gas_common2
-    ; OC/CC Gas List
-    WIN_SMALL   .5,.65
-    WIN_COLOR   color_greenish
-    LOG_POINT_TO log_divemode
-    call		ext_flash_byte_read_plus    ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1
-	decfsz		temp1,w						; =1 (CC)? 
-    bra     	logbook_page3a
-    STRCPY_TEXT_PRINT tGaslistCC
-	bra     	logbook_page3b
+	; OC/CC Gas List
+	WIN_SMALL .5,.65
+	WIN_COLOR color_greenish
+	LOG_POINT_TO log_divemode
+	call	ext_flash_byte_read_plus				; 0=OC, 1=CC, 2=Gauge, 3=Apnea into ext_flash_rw
+	decfsz	ext_flash_rw,w							; =1 (CC)? 
+	bra		logbook_page3a
+	STRCPY_TEXT_PRINT tGaslistCC
+	bra		logbook_page3b
 logbook_page3a:
-    STRCPY_TEXT_PRINT tGaslist
+	STRCPY_TEXT_PRINT tGaslist
 logbook_page3b:
+	movlw	color_lightblue
+	call	TFT_set_color
+	WIN_FRAME_COLOR16 .63,.220,.2,.90				; Top, Bottom, Left, Right
 
-    movlw       color_lightblue
-    call	TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.2,.90		; Top, Bottom, Left, Right
-    
-    rcall       logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
+	rcall	logbook_preloop_tasks					; Clear some flags and set to Speed_eco
 display_details2_loop:
-	; REPLACE	## logbook look and feel
-    ; btfsc		switch_left					; SET/MENU?
-	; BY
-	btfsc		switch_right
-    goto		logbook_page4				; Show more info
-	; REPLACE	## logbook look and feel
-    ; btfsc		switch_right				; ENTER?
-	; BY
-	btfsc		switch_left
-    bra			exit_profileview			; back to list
-    rcall		log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-    btfsc		sleepmode					; Timeout?
-    bra			exit_profileview			; back to list
-    bra			display_details2_loop   	; wait for something to do	
+	btfsc	switch_right
+	goto	logbook_page4							; Show more info
+	btfsc	switch_left
+	bra		exit_profileview						; back to list
+	rcall	log_screendump_and_onesecond			; Check if we need to make a screen shot and check for new second
+	btfsc	sleepmode								; Timeout?
+	bra		exit_profileview						; back to list
+	bra		display_details2_loop					; wait for something to do
 
-logbook_page4: ; Show even more info in CC mode
-    LOG_POINT_TO    log_divemode 
-    call	    ext_flash_byte_read 		; 0=OC, 1=CC, 2=Gauge, 3=Apnea into WREG and temp1 
-    decfsz	    temp1,w						; =1 (CC)? 
-    goto	    display_profile2			; no 
+logbook_page4:										; Show even more info in CC mode
+	LOG_POINT_TO log_divemode
+	call	ext_flash_byte_read						; 0=OC, 1=CC, 2=Gauge, 3=Apnea into WREG and ext_flash_rw 
+	decfsz	ext_flash_rw,w							; =1 (CC)? 
+	goto	display_profile2						; no 
 
-    rcall   log_details_header				; Shows number, time/date and basic dive info
-    ; Setpoint list
-    LOG_POINT_TO    log_sp1
-    WIN_SMALL   .5,.65
-    WIN_COLOR   color_greenish
-    STRCPY_TEXT_PRINT   tFixedSetpoints
-    call	    TFT_standard_color
-    WIN_SMALL   .5,.90
-    rcall       log_show_sp_common
-    WIN_SMALL   .5,.115
-    rcall       log_show_sp_common
-    WIN_SMALL   .5,.140
-    rcall       log_show_sp_common
-    WIN_SMALL   .5,.165
-    rcall       log_show_sp_common
-    WIN_SMALL   .5,.190
-    rcall       log_show_sp_common
+	rcall	log_details_header						; Shows number, time/date and basic dive info
+	; Setpoint list
+	LOG_POINT_TO log_sp1
+	WIN_SMALL .5,.65
+	WIN_COLOR color_greenish
+	STRCPY_TEXT_PRINT tFixedSetpoints
+	call	TFT_standard_color
+	WIN_SMALL .5,.90
+	rcall	  log_show_sp
+	WIN_SMALL .5,.115
+	rcall	  log_show_sp
+	WIN_SMALL .5,.140
+	rcall	  log_show_sp
+	WIN_SMALL .5,.165
+	rcall	  log_show_sp
+	WIN_SMALL .5,.190
+	rcall	  log_show_sp
 
-    movlw       color_greenish
-    call	TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.2,.112	; Top, Bottom, Left, Right
+	movlw	color_greenish
+	call	TFT_set_color
+	WIN_FRAME_COLOR16 .63,.220,.2,.112				; Top, Bottom, Left, Right
 
-    rcall       logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
+	rcall	logbook_preloop_tasks					; Clear some flags and set to Speed_eco
 display_details3_loop:
-	; REPLACE	## logbook look and feel
-    ; btfsc		switch_left					; SET/MENU?
-	; BY
-	btfsc		switch_right
-    goto		display_profile2			; Show the profile view again
-    ; REPLACE	## logbook look and feel
-	; btfsc		switch_right				; ENTER?
-	; BY
-	btfsc		switch_left
-    bra			exit_profileview			; back to list
-    rcall		log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-    btfsc		sleepmode					; Timeout?
-    bra			exit_profileview			; back to list
-    bra			display_details3_loop   	; wait for something to do	
-    
-    
-log_details_header:    
-    clrf        CCP1CON						; stop PWM
-    bcf         PORTC,2						; Pull PWM out to GND
-    call        TFT_boot
-    ;call	TFT_ClearScreen					; Clear screen
+	btfsc	switch_right
+	goto	display_profile2						; Show the profile view again
+	btfsc	switch_left
+	bra		exit_profileview						; back to list
+	rcall	log_screendump_and_onesecond			; Check if we need to make a screenshot and check for new second
+	btfsc	sleepmode								; Timeout?
+	bra		exit_profileview						; back to list
+	bra		display_details3_loop					; wait for something to do
 
-; Set ext_flash pointer to "#divesecs-oldest" dive
-; compute read_int_eeprom .2 - divesecs
+
+log_details_header:
+	clrf	CCP1CON									; stop PWM
+	bcf		PORTC,2									; Pull PWM out to GND
+	call	TFT_boot
+;	call	TFT_ClearScreen							; Clear screen
+
+; Set ext_flash pointer to "#divenumber-oldest" dive
+; compute read_int_eeprom .2 - divenumber
 ; Read required header data for profile display
 ; look in header for pointer to begin of diveprofile (Byte 2-4)
 ; Set pointer (ext_flash_log_pointer:3) to this address, start drawing
 
-	decf	divesecs,F							;-1
+	decf	divenumber,F							;-1
 	read_int_eeprom .2
 	movf	EEDATA,W
 	bcf		STATUS,C
-	subfwb	divesecs,W							; max. dives (low value) - divesecs
-	movwf	lo									; result
-	incf	divesecs,F							;+1
+	subfwb	divenumber,W							; max. dives (low value) - divenumber
+	movwf	lo										; result
+	incf	divenumber,F							;+1
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
 	; 2nd: 201000h-201FFFh -> lo=1
 	; 3rd: 202000h-202FFFh -> lo=2
 	; 256: 2FF000h-2FFFFFh -> lo=255 (And hi>0...)
-	clrf		ext_flash_address+0
-	clrf		ext_flash_address+1
-	movlw		0x20
-	movwf		ext_flash_address+2
-	movlw		.16
-	mulwf		lo								; lo*16 = offset to 0x2000 (up:hi)
-	movf		PRODL,W
-	addwf		ext_flash_address+1,F
-	movf		PRODH,W
-	addwfc		ext_flash_address+2,F
+	clrf	ext_flash_address+0
+	clrf	ext_flash_address+1
+	movlw	0x20
+	movwf	ext_flash_address+2
+	movlw	.16
+	mulwf	lo										; lo*16 = offset to 0x2000 (up:hi)
+	movf	PRODL,W
+	addwf	ext_flash_address+1,F
+	movf	PRODH,W
+	addwfc	ext_flash_address+2,F
 	; pointer at the first 0xFA of header
-	rcall        logbook_show_divenumber        ; Show the dive number in medium font
+	rcall	logbook_show_divenumber					; show the dive number in medium font
 	; Show date and time in first row
-    	WIN_SMALL	.59,.10
-	LOG_POINT_TO    log_date
-	call		ext_flash_byte_read_plus
-	movff		temp1,convert_value_temp+2		; Year
-	call		ext_flash_byte_read_plus
-	movff		temp1,convert_value_temp+0		; Month
-	call		ext_flash_byte_read_plus
-	movff		temp1,convert_value_temp+1		; Day
-	call		TFT_convert_date				; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
-	PUTC		"-"
-	call		ext_flash_byte_read_plus		; hour
-	movff		temp1,lo
-	call		ext_flash_byte_read_plus		; Minutes
-	movff		temp1,hi
-	output_99x									; hour
-	PUTC		':'
-	movff		hi,lo			
-	output_99x									; minute
-	STRCAT_PRINT	""							; Display 1st row of details
+	WIN_SMALL .59,.10
+	LOG_POINT_TO log_date
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,up							; year
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,hi							; month
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,lo							; day
+	call	TFT_convert_date						; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	PUTC	"-"
+	call	ext_flash_byte_read_plus				; hour
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; minutes
+	movff	ext_flash_rw,hi
+	output_99x										; hour
+	PUTC	':'
+	movff	hi,lo
+	output_99x										; minute
+	STRCAT_PRINT ""									; display 1st row of details
 
 	; Show max depth and dive time
-	WIN_SMALL	.5,.35
-	STRCAT		"Max:"
-	LOG_POINT_TO    log_max_depth
-	call		ext_flash_byte_read_plus		; read max depth
-	movff		temp1,lo				
-	call		ext_flash_byte_read_plus		; read max depth
-	movff		temp1,hi
+	WIN_SMALL .5,.35
+	STRCAT	"Max:"
+	LOG_POINT_TO log_max_depth
+	call	ext_flash_byte_read_plus				; read max depth
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read max depth
+	movff	ext_flash_rw,hi
 
-	TSTOSS		opt_units						; 0=Meters, 1=Feets
+	TSTOSS	opt_units								; 0=Meters, 1=Feets
 	bra		logbook_page2_depth_metric
 	; imperial
-	call		convert_mbar_to_feet       		; convert value in lo:hi from mbar to feet
+	call	convert_mbar_to_feet					; convert value in lo:hi from mbar to feet
 	PUTC	' '
 	bcf		leftbind
 	output_16_3
-	STRCAT_TEXT	tFeets
+	STRCAT_TEXT tFeets
 	bra		logbook_page2_depth_common
 
 logbook_page2_depth_metric:
 	bsf		leftbind
-	output_16dp	d'3'							; max. depth
-	STRCAT_TEXT     tMeters
+	output_16dp d'3'								; max. depth
+	STRCAT_TEXT tMeters
 
-logbook_page2_depth_common:	
-	STRCAT		" - "
-	call		ext_flash_byte_read_plus		; divetime in minutes	
-	movff		temp1,lo
-	call		ext_flash_byte_read_plus	
-	movff		temp1,hi						; divetime in minutes
+logbook_page2_depth_common:
+	STRCAT	" - "
+	call	ext_flash_byte_read_plus				; divetime in minutes
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus
+	movff	ext_flash_rw,hi							; divetime in minutes
 
 	bsf		leftbind
-	output_16									; divetime minutes
-	PUTC		"m"
-        LOG_POINT_TO    log_divetime+.2
-	call		ext_flash_byte_read_plus		; read divetime seconds
-	movff		temp1,lo
+	output_16										; divetime minutes
+	PUTC	"m"
+	LOG_POINT_TO log_divetime+.2
+	call	ext_flash_byte_read_plus				; read divetime seconds
+	movff	ext_flash_rw,lo
 	bsf		leftbind
-	output_99x									; divetime seconds
+	output_99x										; divetime seconds
 	call	TFT_standard_color
-	STRCAT_PRINT    "s"
-;    ; Dive mode
-;        LOG_POINT_TO    log_divemode
-;        call		ext_flash_byte_read_plus    ; Read divemode
-;        movff       temp1,lo
-;	call        TFT_display_decotype_surface1   ; "strcat_print"s divemode (OC, CC, APNEA or GAUGE)
+	STRCAT_PRINT "s"
+;	; Dive mode
+;	LOG_POINT_TO log_divemode
+;	call	ext_flash_byte_read_plus				; Read divemode
+;	movff	ext_flash_rw,lo
+;	call	TFT_display_decotype_surface1			; "strcat_print"s divemode (OC, CC, APNEA or GAUGE)
 	return
-    
-    
-log_show_sp_common:
-    lfsr		FSR2,buffer
-	call		ext_flash_byte_read_plus		; Read setpoint
-    movff       temp1,lo
-   	clrf        hi
-    bsf         leftbind
-    output_16dp d'3'
-    bcf         leftbind
-    STRCAT_TEXT tbar
-    PUTC        " "
-    call		ext_flash_byte_read_plus		; change depth
-    movff		temp1,lo
+
+
+log_show_sp:
+	lfsr	FSR2,buffer
+	call	ext_flash_byte_read_plus				; Read setpoint
+	movff	ext_flash_rw,lo
+	clrf	hi
+	bsf		leftbind
+	output_16dp d'3'
+	bcf		leftbind
+	STRCAT_TEXT tbar
+	PUTC	" "
+	call	ext_flash_byte_read_plus				; change depth
+	movff	ext_flash_rw,lo
 
-	TSTOSS	opt_units               			; 0=Meters, 1=Feets
-	bra		log_show_sp_common_metric
-    movf    lo,W
-    mullw   .100                    			; convert meters to mbar
-    movff   PRODL,lo
-    movff   PRODH,hi
-	call	convert_mbar_to_feet   				; convert value in lo:hi from mbar to feet
-    output_16
-    STRCAT_TEXT	 tFeets							; "ft"
-    bra     log_show_sp_common_common
-log_show_sp_common_metric:
-    output_8
-    STRCAT_TEXT	tMeters							; "m"
-log_show_sp_common_common:
-	STRCAT_PRINT	""
-    return
+	TSTOSS	opt_units								; 0=Meter, 1=Feet
+	bra		log_show_sp_metric
+	movf	lo,W
+	mullw	.100									; convert meters to mbar
+	movff	PRODL,lo
+	movff	PRODH,hi
+	call	convert_mbar_to_feet					; convert value in lo:hi from mbar to feet
+	output_16
+	STRCAT_TEXT tFeets								; "ft"
+	bra		log_show_sp_common
+log_show_sp_metric:
+	output_8
+	STRCAT_TEXT tMeters								; "m"
+log_show_sp_common:
+	STRCAT_PRINT ""
+	return
+
 
-log_show_gas_common2:   						; as log_show_gas_common but with change depth
-	lfsr		FSR2,buffer
-	call		ext_flash_byte_read_plus		; current O2
-	movff		temp1,lo
-	call		ext_flash_byte_read_plus		; current He
-	movff		temp1,hi
-    call		customview_show_mix             ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
-	call		ext_flash_byte_read_plus		; change depth
-    movff		temp1,lo
+log_show_gas:										; show gas data
+	call	TFT_color_code_gas						; color the output (gas number is in WREG)
+	lfsr	FSR2,buffer
+	call	ext_flash_byte_read_plus				; read gas O2 fraction
+	movff	ext_flash_rw,lo
+	call	ext_flash_byte_read_plus				; read gas He fraction
+	movff	ext_flash_rw,hi
+	call	customview_show_mix						; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	call	ext_flash_byte_read_plus				; read change depth
 
-	TSTOSS	opt_units               			; 0=Meters, 1=Feets
-	bra		log_show_gas_common2_metric
-    movf    lo,W
-    mullw   .100                    			; convert meters to mbar
-    movff   PRODL,lo
-    movff   PRODH,hi
-	call	convert_mbar_to_feet    			; convert value in lo:hi from mbar to feet
-    output_16
-    STRCAT_TEXT	 tFeets							; "ft"
-    bra     log_show_gas_common2_common
-log_show_gas_common2_metric:
-    output_8
-    STRCAT_TEXT	tMeters							; "m"
-log_show_gas_common2_common:
-	bcf		leftbind
-    call	ext_flash_byte_read_plus			; Gas Type
-	STRCAT_PRINT	""
-    return
+	btfsc	log_show_gas_short						; shall we do the short version?
+	bra		log_show_gas_common						; YES
+	; long version
+	movff	ext_flash_rw,lo							; process change depth
+	TSTOSS	opt_units								; 0=Meter, 1=Feet
+	bra		log_show_gas_metric
+	movf	lo,W
+	mullw	.100									; convert meters to mbar
+	movff	PRODL,lo
+	movff	PRODH,hi
+	call	convert_mbar_to_feet					; convert value in lo:hi from mbar to feet
+	output_16
+	STRCAT_TEXT tFeets								; "ft"
+	bra		log_show_gas_common
+log_show_gas_metric:
+	output_8
+	STRCAT_TEXT tMeters								; "m"
+log_show_gas_common:
+	call	ext_flash_byte_read_plus				; read gas type - just to increment the pointer
+	STRCAT_PRINT ""
+	return
 
 	END
\ No newline at end of file
--- a/src/menu_processor.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/menu_processor.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File menu_processor.asm							REFACTORED VERSION V2.91
+;   File menu_processor.asm							REFACTORED VERSION V2.98
 ;
 ;   Routines to handle all hwOS graphic/text menus.
 ;
@@ -8,7 +8,7 @@
 ;=============================================================================
 ; HISTORY
 ;   2012-11-02 : [jDG] Cleanup for hwOS: removed icons. Added scrolling.
-;                      But need a font with lower/upper alpha chars...
+;                But need a font with lower/upper alpha chars...
 
 #include "convert.inc"
 #include "hwos.inc"
@@ -24,205 +24,187 @@
 #include "adc_lightsensor.inc"
 
 
-;NOTE: should be identic in .inc and .asm !
-#define MENU_LINES_MAX  .7              ; Number of lines per screen?
-#define MENU_TITLE_FONT WIN_STD         ; Font should contains lower/UPPER alpha
-#define MENU_LINE_FONT  WIN_SMALL       ; Font should contains lower/UPPER alpha
-#define MENU_LEFT       .20             ; Position of first menu item
-#define MENU_HEIGHT     .27             ; Spacing between menu lines.
-#define MENU_VCENTER    .125            ; Position on screen.
-#define MENU_LINE_MAX_LENGTH    .20     ; Length in characters
+;NOTE: should be identical in .inc and .asm !
+#define MENU_LINES_MAX			.7			; Number of lines per screen?
+#define MENU_TITLE_FONT			WIN_STD		; Font should contains lower/UPPER alpha
+#define MENU_LINE_FONT			WIN_SMALL	; Font should contains lower/UPPER alpha
+#define MENU_LEFT				.20			; Position of first menu item
+#define MENU_HEIGHT				.27			; Spacing between menu lines.
+#define MENU_VCENTER			.125		; Position on screen.
+#define MENU_LINE_MAX_LENGTH	.20			; Length in characters
+#define option_item				proc_item
 
 ; Other needed references
-    extern  aa_wordprocessor,option_inc,option_draw,comm_mode
+	extern	aa_wordprocessor
+	extern	option_inc
+	extern	option_draw
+	extern	comm_mode
+	extern	TFT_clear_divemode_menu
+	extern	TFT_divemask_color
+	extern	rtc_set_rtc
+	extern	divemode_option0_return
+	extern	TFT_fillup_with_spaces
 
 
-;=============================================================================
-; Temporary data.
+basic	CODE
 
-        CBLOCK  tmp+0x20                ; Reserved space for options.asm
-            menu_flags                  ; Various flags for menu:
-                                        ;   bit 0 :dynamic menu
-            menu_item                   ; Index of the current item.
-            start_item                  ; Index of the first item (scrolling)
-            item_max                    ; Number of items in menu.
-            selected_item               ; Index of the current item.
-            value_type                  ; Type for vertical menu.
-            dynamic_item:3              ; Callback addr
-            menu_block:3                ; Address of the menu block (ie. item 0)
-            menu_title:3                ; text or proc for dynamic menu.
-            menu_center                 ; centering for line menu.
-            proc_item:3                 ; Address of the current proc.
-            text_item:2                 ; Address of the current text.
-        ; Reserved to tmp+0x35
-        ENDC
-
-#define option_item proc_item
-
-basic       CODE
 ;=============================================================================
 ; menu handler.
 ;
 ; Input:    TBLPTR = addr of menu block.
-        global  menu_processor
+	global	menu_processor
 menu_processor:
-        banksel common                  ; Bank1
-        btfss   divemode                ; Not in divemode
-        call    speed_fastest           ; Make it quick !
-		
-		;---- Read menu block ------------------------------------------------
-        VARARGS_BEGIN                   ; Read inline PROM data
-		clrf	STKPTR                  ; Never return, anyway...
-        VARARGS_GET8    item_max        ; Get number of items
-        VARARGS_GET8    menu_flags      ; Get flags
-        VARARGS_GET24   menu_title      ; Get pointer to menu title
-        VARARGS_GET8    menu_center     ; Vertical position
-        movff   TBLPTRL, menu_block+0   ; Save base address for menu_read_item
-        movff   TBLPTRH, menu_block+1
-        movff   TBLPTRU, menu_block+2
+	banksel	common							; Bank1
+	btfss	divemode						; Not in divemode
+	call	speed_fastest					; Make it quick !
+	;---- Read menu block ------------------------------------------------
+	VARARGS_BEGIN							; Read inline PROM data
+	clrf	STKPTR							; Never return, anyway...
+	VARARGS_GET8	item_max				; Get number of items
+	VARARGS_GET8	menu_flags				; Get flags
+	VARARGS_GET24	menu_title				; Get pointer to menu title
+	VARARGS_GET8	menu_center				; Vertical position
+	movff	TBLPTRL, menu_block+0			; Save base address for menu_read_item
+	movff	TBLPTRH, menu_block+1
+	movff	TBLPTRU, menu_block+2
+	btfss	divemode						; In divemode?
+	bra		menu_processor0					; No
+	; Required for menus with less entries then the calling menu but not so nice when setting up gas 6.... mH
+	movlw	.1
+	cpfsgt	menupos1						; only if menupos1 = 1...
+	call	TFT_clear_divemode_menu			; ... Clear the menu!
+	; Draw one frame around the divemode menu
+	call	TFT_divemask_color
+	WIN_FRAME_COLOR16 dm_menu_row, dm_menu_lower, dm_menu_left ,dm_menu_right	; top, bottom, left, right
+	call	TFT_standard_color
 
-        btfss   divemode                ; In divemode?
-        bra     menu_processor0         ; No
-
-	; Required for menus with less entries then the calling menu but not so nice when setting up gas 6.... mH
-	extern  TFT_clear_divemode_menu
-        movlw   .1
-        cpfsgt  menupos                 ; only if menupos=1...
-        call    TFT_clear_divemode_menu ; ... Clear the menu!
-
-        ; Draw one frame around the divemode menu
-        extern  TFT_divemask_color
-        call    TFT_divemask_color
-    	WIN_FRAME_COLOR16 dm_menu_row, dm_menu_lower, dm_menu_left ,dm_menu_right	; top, bottom, left, right
-        call    TFT_standard_color
-
-        bra     menu_processor1         ; Yes, skip some lines here
+	bra		menu_processor1					; Yes, skip some lines here
 
 menu_processor0:
-        ;---- draw menu title ------------------------------------------------
-		clrf	CCP1CON					; stop PWM
-		bcf		PORTC,2					; Pull PWM out to GND
-		call    TFT_ClearScreen
-        rcall   menu_processor_title
-        rcall   menu_processor_bottom_line
+	;---- draw menu title ------------------------------------------------
+	clrf	CCP1CON							; stop PWM
+	bcf		PORTC,2							; Pull PWM out to GND
+	call	TFT_ClearScreen
+	rcall	menu_processor_title
+	rcall	menu_processor_bottom_line
 
 menu_processor1:
-		movlw	FT_SMALL
-        movff	WREG, win_font    
-        
-        ;---- Select menu type -----------------------------------------------
-        bra     menu_vertical
+	movlw	FT_SMALL
+	movff	WREG, win_font
 
-    global menu_processor_bottom_line
-menu_processor_bottom_line:
-        ;---- Draw bottomline ------------------------------------------------
-        TEXT_TINY 	.5,       .240-.16, tNext
-        TEXT_TINY	.160-.6*.6, .240-.16, tEnter
+	;---- Select menu type -----------------------------------------------
+	bra		menu_vertical
 
-        WIN_COLOR   color_greenish
-        ; Serial and Firmware Version
-        WIN_TINY	.57,.240-.16
-        STRCPY  "#"
-        call    TFT_cat_serial
-        STRCAT  " v"
-        call    TFT_cat_firmware
-        STRCAT_PRINT ""
-        call    TFT_standard_color
-		bcf		win_invert
-        return
+	global	menu_processor_bottom_line
+menu_processor_bottom_line:
+	;---- Draw bottom line -----------------------------------------------
+	TEXT_TINY .5,         .240-.16, tNext
+	TEXT_TINY .160-.6*.6, .240-.16, tEnter
+	WIN_COLOR color_greenish
+	; Serial and Firmware Version
+	WIN_TINY .57,.240-.16
+	STRCPY	"#"
+	call	TFT_cat_serial
+	STRCAT	" v"
+	call	TFT_cat_firmware
+	STRCAT_PRINT ""
+	call	TFT_standard_color
+	bcf		win_invert
+	return
 
 ;=============================================================================
 ; (re-)draw menu title.
 ;
-menu_processor_title:        
-        WIN_BOX_BLACK  .2,.23,.0,.159	; Clear Menu title
-        MENU_TITLE_FONT	.0, .2        	; Menu title positionning
-
-        btfss   menu_flags,0            ; Static or dynmic title ?
-        bra     menu_processor_static_title
+menu_processor_title:
+	WIN_BOX_BLACK   .2,.23,.0,.159			; Clear Menu title
+	MENU_TITLE_FONT .0, .2					; Menu title positioning
+	btfss	menu_flags,0					; Static or dynamic title ?
+	bra		menu_processor_static_title
+	rcall	menu_processor_call_title		; add gas, detail and color.
+	bra		menu_processor_title_1
 
-        rcall   menu_processor_call_title ; add gas, detail and color.
-        bra     menu_processor_title_1
-
-menu_processor_static_title:                
-        movff   menu_title+0,FSR1L      ; Just copy string.
-        movff   menu_title+1,FSR1H
-        call    strcpy_text
+menu_processor_static_title:
+	movff	menu_title+0,FSR1L				; Just copy string.
+	movff	menu_title+1,FSR1H
+	call	strcpy_text
 
 menu_processor_title_1:
-        WIN_COLOR   color_greenish
-        movf    FSR2L,W                 ; Get title length
-        mullw   .9                      ; Convert to half pixels
-		bcf		STATUS,C				; Clear carry
-		rrcf	PRODL					; /2
-        movf    PRODL,W                 ; Back to WREG
-        sublw   .80                    	; 80 - width
-        movwf   win_leftx2              ; Aligned to center.
-
-        movlw   .0
-        movff   WREG,buffer+.17         ; limit to 17chars (Std font max.)
-
-        call    aa_wordprocessor
-        call    TFT_standard_color
-        return
+	WIN_COLOR color_greenish
+	movf	FSR2L,W							; Get title length
+	mullw	.9								; Convert to half pixels
+	bcf		STATUS,C						; Clear carry
+	rrcf	PRODL							; /2
+	movf	PRODL,W							; Back to WREG
+	sublw	.80								; 80 - width
+	movwf	win_leftx2						; Aligned to center.
+	movlw	.0
+	movff	WREG,buffer+.17					; limit to 17chars (Std font max.)
+	call	aa_wordprocessor
+	call	TFT_standard_color
+	return
 
 ;=============================================================================
 ; Call dynamic proc for menu title:
 
 menu_processor_call_title:
-        movff   menu_title+2,PCLATU     ; Just execute computed goto.
-        movff   menu_title+1,PCLATH
-        movf    menu_title+0,W
-        movwf   PCL
-        
+	movff	menu_title+2,PCLATU				; Just execute computed goto.
+	movff	menu_title+1,PCLATH
+	movf	menu_title+0,W
+	movwf	PCL
+
 ;=============================================================================
 ; Restart with first icon/line selected.
-        global  menu_processor_reset
+	global	menu_processor_reset
 menu_processor_reset:
-        banksel common
-        lfsr    FSR2,menustack
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    selected_item
-        return
+	banksel	menustack
+	lfsr	FSR2,menustack
+	clrf	POSTINC2
+	clrf	POSTINC2
+	clrf	POSTINC2
+	clrf	POSTINC2
+	clrf	POSTINC2
+	banksel	common
+	clrf	selected_item
+	return
 
-        global  menu_processor_pop
+	global	menu_processor_pop
 menu_processor_pop:
-        movff   menustack+0,selected_item
-        movff   menustack+1,menustack+0
-        movff   menustack+2,menustack+1
-        movff   menustack+3,menustack+2
-        movff   menustack+4,menustack+3
-        return
+	movff	menustack+0,selected_item
+	movff	menustack+1,menustack+0
+	movff	menustack+2,menustack+1
+	movff	menustack+3,menustack+2
+	movff	menustack+4,menustack+3
+	return
+
+	global	menu_processor_double_pop
+menu_processor_double_pop:
+	movff	menustack+1,selected_item
+	movff	menustack+2,menustack+0
+	movff	menustack+3,menustack+1
+	movff	menustack+4,menustack+2
+	return
 
 menu_processor_push:
-        movff   menustack+3,menustack+4
-        movff   menustack+2,menustack+3
-        movff   menustack+1,menustack+2
-        movff   menustack+0,menustack+1
-        movff   selected_item,menustack+0
-        clrf    selected_item
-        return
+	movff	menustack+3,menustack+4
+	movff	menustack+2,menustack+3
+	movff	menustack+1,menustack+2
+	movff	menustack+0,menustack+1
+	movff	selected_item,menustack+0
+	clrf	selected_item
+	return
 
 ;---- Execute menu selection -------------------------------------------------
 do_menu_item:
-        bcf     switch_right            ; Avoid loops.
-        call    speed_normal            ; Back to normal speed.
-        
-        movf    selected_item,W         ; Reread proc address from table.
-        rcall   menu_read_item          ; (destroy PROD)
-    
-        movff   selected_item,PRODL     ; Pass along selected line
-    
-        rcall   menu_processor_push     ; Remember where we get from. (clears selected_item)
-    
-        movff   proc_item+2,PCLATU      ; Then execute computed goto.
-        movff   proc_item+1,PCLATH
-        movf    proc_item+0,W
-        movwf   PCL
+	bcf		switch_right					; Avoid loops.
+	call	speed_normal					; Back to normal speed.
+	movf	selected_item,W					; Reread proc address from table.
+	rcall	menu_read_item					; (destroy PROD)
+	movff	selected_item,PRODL				; Pass along selected line
+	rcall	menu_processor_push				; Remember where we get from. (clears selected_item)
+	movff	proc_item+2,PCLATU				; Then execute computed goto.
+	movff	proc_item+1,PCLATH
+	movf	proc_item+0,W
+	movwf	PCL
 
 ;=============================================================================
 ; Get current item from table.
@@ -233,379 +215,335 @@
 ;
 ; Trashed: PROD, WREG
 menu_read_item:
-        mullw   .10                     ; 10 bytes per item.
-        movf    PRODL,W                 ; Then do a 24bits add
-        addwf   menu_block+0,W          ; with menu_block, and
-        movwf   TBLPTRL                 ; setup TBLPTR
-        movf    PRODH,W
-        addwfc  menu_block+1,W
-        movwf   TBLPTRH
-        movlw   0
-        addwfc  menu_block+2,W
-        movwf   TBLPTRU
+	mullw	.10								; 10 bytes per item.
+	movf	PRODL,W							; Then do a 24bits add
+	addwf	menu_block+0,W					; with menu_block, and
+	movwf	TBLPTRL							; setup TBLPTR
+	movf	PRODH,W
+	addwfc	menu_block+1,W
+	movwf	TBLPTRH
+	movlw	0
+	addwfc	menu_block+2,W
+	movwf	TBLPTRU
+	VARARGS_GET8	value_type				; Read 10 bytes of item data
+	VARARGS_GET24	dynamic_item
+	VARARGS_GET24	proc_item
+	VARARGS_GET8	WREG					; Skip dummy byte
+	VARARGS_GET16	text_item
 
-        VARARGS_GET8    value_type      ; Read 10 bytes of item data
-        VARARGS_GET24   dynamic_item
-        VARARGS_GET24   proc_item
-        VARARGS_GET8    WREG            ; Skip dummy byte
-        VARARGS_GET16   text_item
-
-        return
+	return
 
 ;=============================================================================
 ; Vertical menu : set of line/value to choose from.
 ; Entry point to update lines already shown.
 ;
-        global   menu_vertical
+	global	menu_vertical
 menu_vertical:
-        btfss   divemode                ; Not in divemode
-		clrf	timeout_counter2		; Reset timeout
+	btfss	divemode						; Not in divemode
+	clrf	timeout_counter2				; Reset timeout
 
 menu_vertical_2:
-        rcall   menu_draw_lines			; Always re-draw whole menu
-
-		movlw	CCP1CON_VALUE			; See hwos.inc
-        btfss   divemode                ; Not in divemode
-		movwf	CCP1CON                 ; Power-on backlight
+	rcall	menu_draw_lines					; Always re-draw whole menu
+	movlw	CCP1CON_VALUE					; See hwos.inc
+	btfss	divemode						; Not in divemode
+	movwf	CCP1CON							; Power-on backlight
 
 menu_vertical_1:
-        movf    selected_item,W         ; Get current item data
-        rcall   menu_read_item
-        movf    proc_item+0,W           ; Check if pro address is NULL ?
-        iorwf   proc_item+1,W
-        bz      next_line_menu          ; YES: not selectable !
-
-        btfss   divemode                ; Not in divemode
-        rcall   menu_draw_selected_line
-
-        btfsc   in_color_menu           ; =1: In the color scheme menu
-        call    TFT_show_color_schemes  ; Yes, update the color schemes
-
-		extern	rtc_set_rtc
-		btfss	settime_setdate			; In the Set Time or Set Date menu?
-		bra		menu_line_loop_pre2		; no, skip all following
-		
-		movff	month,lo		; new month
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.28
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		cpfsgt	day						; day ok?
-		bra		menu_line_loop_pre1		; OK!
-		movlw	.1						; not OK, set to 1st
-		movwf	day
+	movf	selected_item,W					; Get current item data
+	rcall	menu_read_item
+	movf	proc_item+0,W					; Check if pro address is NULL ?
+	iorwf	proc_item+1,W
+	bz		next_line_menu					; YES: not selectable !
+	btfss	divemode						; Not in divemode
+	rcall	menu_draw_selected_line
+	btfsc	in_color_menu					; =1: In the color scheme menu
+	call	TFT_show_color_schemes			; Yes, update the color schemes
+	btfss	settime_setdate					; In the Set Time or Set Date menu?
+	bra		menu_line_loop_pre2				; no, skip all following
+	movff	month,lo						; new month
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.28
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	cpfsgt	day								; day ok?
+	bra		menu_line_loop_pre1				; OK!
+	movlw	.1								; not OK, set to 1st
+	movwf	day
 
 menu_line_loop_pre1:
-		btfsc	switch_right			; Enter pressed?
-		call	rtc_set_rtc				; Yes, update mins,sec,hours,day,month and year to rtc module
-		call	TFT_show_time_date_menu	; Update clock
+	btfsc	switch_right					; Enter pressed?
+	call	rtc_set_rtc						; Yes, update mins,sec,hours,day,month and year to RTC module
+	call	TFT_show_time_date_menu			; Update clock
 
 menu_line_loop_pre2:
-        bcf     switch_right
-        bcf     switch_left
-        btfss   divemode                ; Not in Divemode
-        call    speed_normal
+	bcf		switch_right
+	bcf		switch_left
+	btfss	divemode						; Not in divemode
+	call	speed_normal
 
 menu_line_loop_pre3:
-    extern  divemode_option0_return
-        btfsc   divemode                ; In divemode?
-        goto    divemode_option0_return ; Yes, return to it
+	btfsc	divemode						; In divemode?
+	goto	divemode_option0_return			; Yes, return to it
 
 menu_line_loop:
-        btfsc   switch_right
-        bra     do_line_menu            ; Type dependent
-        btfsc   switch_left
-        bra     next_line_menu
-
-        btfss	quarter_second_update   ; 1/4 second?
-        bra     menu_line_loop1         ; Not yet...
-
-        btfsc   menu_show_sensors2      ; In the "Calibrate" menu?
-        call    TFT_menu_calibrate      ; Yes, update mV data
-        bcf     quarter_second_update   ; Clear flag
+	btfsc	switch_right
+	bra		do_line_menu					; Type dependent
+	btfsc	switch_left
+	bra		next_line_menu
+	btfss	quarter_second_update			; 1/4 second?
+	bra		menu_line_loop1					; Not yet...
+	btfsc	menu_show_sensors2				; In the "Calibrate" menu?
+	call	TFT_menu_calibrate				; Yes, update mV data
+	bcf		quarter_second_update			; Clear flag
 
 menu_line_loop1:
-		btfss	onesecupdate			; New second
-		bra		menu_line_loop2			; not yet...
-
-		call	timeout_surfmode		; timeout
-		call	set_dive_modes			; check, if divemode must be entered
-        call	get_battery_voltage		; gets battery voltage
-		
-		btfsc	settime_setdate			; In the Set Time or Set Date menu?
-		call	TFT_show_time_date_menu	; Yes, update clock
-
-		; DELETE - menu has been deleted	## memory
-        ; btfsc   menu_show_sensors       ; In the "Sensors" menu?
-        ; call    TFT_menu_hud            ; Yes, update HUD data
-
-		bcf		onesecupdate			; one second updates done
+	btfss	onesecupdate					; New second
+	bra		menu_line_loop2					; not yet...
+	call	timeout_surfmode				; timeout on timeout_counter2
+	call	set_dive_modes					; check, if divemode must be entered
+	call	get_battery_voltage				; gets battery voltage
+	btfsc	settime_setdate					; In the Set Time or Set Date menu?
+	call	TFT_show_time_date_menu			; Yes, update clock
+	bcf		onesecupdate					; one second updates done
 
 menu_line_loop2:
-		btfsc	sleepmode				; Timeout?
-		goto	restart					; Yes, back to surfacemode
-		btfsc	divemode
-		goto	restart					; Enter Divemode if required
-
-        btfsc   enable_screen_dumps     ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-        bra     menu_line_loop3
-        btfsc   vusb_in                 ; USB plugged in?
-        call    comm_mode               ; Start COMM mode
-        bra     menu_line_loop4
+	btfsc	sleepmode						; Timeout?
+	goto	restart							; Yes, back to surfacemode
+	btfsc	divemode
+	goto	restart							; Enter divemode if required
+	btfsc	enable_screen_dumps				; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	bra		menu_line_loop3
+	btfsc	vusb_in							; USB plugged in?
+	call	comm_mode						; Start COMM mode
+	bra		menu_line_loop4
 menu_line_loop3:
-        btfss   vusb_in                 ; USB (still) plugged in?
-        bcf     enable_screen_dumps     ; No, clear flag
-        call    rs232_get_byte
-        btfsc   rs232_recieve_overflow
-        bra     menu_line_loop4
-        movlw   "l"
-        cpfseq	RCREG1
-        bra     menu_line_loop4
-        call    TFT_dump_screen         ; Dump the screen contents
+	btfss	vusb_in							; USB (still) plugged in?
+	bcf		enable_screen_dumps				; No, clear flag
+	call	rs232_get_byte
+	btfsc	rs232_receive_overflow
+	bra		menu_line_loop4
+	movlw	"l"
+	cpfseq	RCREG1
+	bra		menu_line_loop4
+	call	TFT_dump_screen					; Dump the screen contents
 menu_line_loop4:
-
-        bra     menu_line_loop
+	bra		menu_line_loop
 
 ;---- Move to menu's next line
 next_line_menu:
-        btfss   divemode                ; not in divemode
-        call    speed_fastest
-        bcf     switch_left             ; Avoid looping.
+	btfss	divemode						; not in divemode
+	call	speed_fastest
+	bcf		switch_left						; Avoid looping.
+	incf	selected_item,F					; Select next item.
+	movf	selected_item,W					; Index == max ?
+	cpfseq	item_max
+	bra		menu_vertical_1					; NO: redraw cursor.
+	clrf	selected_item					; YES: restart for item 0.
+	bra	menu_vertical_1						; Then redraw cursor.
 
-        incf    selected_item,F         ; Select next item.
-        movf    selected_item,W         ; Index == max ?
-        cpfseq  item_max
-        bra     menu_vertical_1         ; NO: redraw cursor.
-
-        clrf    selected_item           ; YES: restart for item 0.
-        bra     menu_vertical_1         ; Then redraw cursor.
-
-        global  do_line_menu
+	global	do_line_menu
 do_line_menu:
-        btfss   divemode                ; not in divemode
-        call    speed_fastest
-;        bcf     switch_right            ; Avoid looping.
-
-        decf    menupos,W               ; menu_processor needs 0-5...
-        btfsc   divemode                ; only in divemode
-        movwf   selected_item
-
-        movf    selected_item,W         ; Read selected descriptor
-        rcall   menu_read_item
-
-        movf    value_type,W            ; Switch on data type
-        bz      menu_do_line_call       ; CALL
-        dcfsnz  WREG
-        bra     menu_do_line_call       ; STRING: do as call
-        dcfsnz  WREG
-        bra     menu_do_line_option     ; OPTION
-        dcfsnz  WREG
-        bra     menu_do_line_call       ; DYNAMIC: do as call
-        bra     menu_line_loop_pre3     ; else do nothing...
+	btfss	divemode						; not in divemode
+	call	speed_fastest
+;	bcf		switch_right					; Avoid looping.
+	decf	menupos1,W						; menu_processor needs 0-5...
+	btfsc	divemode						; only in divemode
+	movwf	selected_item
+	movf	selected_item,W					; Read selected descriptor
+	rcall	menu_read_item
+	movf	value_type,W					; Switch on data type
+	bz		menu_do_line_call				; CALL
+	dcfsnz	WREG
+	bra		menu_do_line_call				; STRING: do as call
+	dcfsnz	WREG
+	bra		menu_do_line_option				; OPTION
+	dcfsnz	WREG
+	bra		menu_do_line_call				; DYNAMIC: do as call
+	bra		menu_line_loop_pre3				; else do nothing...
 
 ;---- CALL
 menu_do_line_call:
-        rcall   do_menu_item            ; Same as icon menu: calculated goto.
-        rcall   menu_processor_pop      ; Back to same line,
-        bra     menu_vertical           ; Then continue into menu...
+	rcall	do_menu_item					; Same as icon menu: calculated goto.
+	rcall	menu_processor_pop				; Back to same line,
+	bra		menu_vertical					; Then continue into menu...
 
 ;---- Call option specific increment subroutine
 menu_do_line_option:
-        movff   option_item+0,FSR0L     ; Get option handle
-        movff   option_item+1,FSR0H
-        call    option_inc              ; increment
-        
-        movff   selected_item,PRODL     ; Pass selection to callback.
-        rcall   menu_text_call        
-        bra     menu_vertical_2         ; redraw all lines...
+	movff	option_item+0,FSR0L				; Get option handle
+	movff	option_item+1,FSR0H
+	call	option_inc						; increment
+	movff	selected_item,PRODL				; Pass selection to callback.
+	rcall	menu_text_call
+	bra		menu_vertical_2					; redraw all lines...
 
 ;-----------------------------------------------------------------------------
 
 menu_draw_lines_divemode:
-        movlw   dm_menu_item1_row
-        movff   WREG,win_top
-        movlw   dm_menu_item1_column
-        movff   WREG,win_leftx2
-        clrf    start_item
-        movff   item_max,menupos4       ; Copy item_max for divemode cursor routine
-        bra     menu_draw_lines_2
+	movlw	dm_menu_item1_row
+	movff	WREG,win_top
+	movlw	dm_menu_item1_column
+	movff	WREG,win_leftx2
+	clrf	start_item
+	movff	item_max,menupos4				; Copy item_max for divemode cursor routine
+	bra		menu_draw_lines_2
 
 menu_draw_lines:
-        btfsc   divemode                ; in divemode?
-        bra     menu_draw_lines_divemode; Yes
-
-        btfsc   menu_flags,0            ; Dynamic title ?
-        rcall   menu_processor_title    ; YES: redraw it then.
+	btfsc	divemode						; in divemode?
+	bra		menu_draw_lines_divemode		; Yes
+	btfsc	menu_flags,0					; Dynamic title ?
+	rcall	menu_processor_title			; YES: redraw it then.
+	MENU_LINE_FONT MENU_LEFT, 0				; Init start position/font
+	movff	menu_center,win_top				; computed in menu block.
 
-        MENU_LINE_FONT  MENU_LEFT, 0    ; Init start position/font
-        movff   menu_center,win_top     ; computed in menu block.
-
-        ; Does the menu have more than 6 lines ?
-        movf    item_max,W
-        addlw   -(MENU_LINES_MAX+1)     ; (max - 7)
-        bnn     menu_draw_long_menu     ; bra if (max >= 7)
-
-        clrf    start_item
-        bra     menu_draw_lines_2
+	; Does the menu have more than 6 lines ?
+	movf	item_max,W
+	addlw	-(MENU_LINES_MAX+1)				; (max - 7)
+	bnn		menu_draw_long_menu				; bra if (max >= 7)
+	clrf	start_item
+	bra		menu_draw_lines_2
 
 menu_draw_long_menu:
-        movf    selected_item,W         ; Start at selected-6
-        addlw   -(MENU_LINES_MAX-1)
-        btfsc   STATUS,N                ; This is <0 ?
-        clrf    WREG                    ; YES: start from top instead.
-        movwf   start_item
+	movf	selected_item,W					; Start at selected-6
+	addlw	-(MENU_LINES_MAX-1)
+	btfsc	STATUS,N						; This is <0 ?
+	clrf	WREG							; YES: start from top instead.
+	movwf	start_item
 
 menu_draw_lines_2:
-        movff   start_item, menu_item
+	movff	start_item, menu_item
 
 menu_draw_lines_1:
-        call    TFT_standard_color     	; Restore color after disabled lines.
-        
-        movf    menu_item,W
-        rcall   menu_read_item
-        
-        movf    value_type,W            ; Switch on data type
-        bz      menu_draw_line_call
-        dcfsnz  WREG
-        bra     menu_draw_line_string
-        dcfsnz  WREG
-        bra     menu_draw_line_option
-        dcfsnz  WREG
-        bra     menu_draw_line_dynamic
-        bra     menu_draw_line_none
+	call	TFT_standard_color				; Restore color after disabled lines.
+	movf	menu_item,W
+	rcall	menu_read_item
+	movf	value_type,W					; Switch on data type
+	bz		menu_draw_line_call
+	dcfsnz	WREG
+	bra		menu_draw_line_string
+	dcfsnz	WREG
+	bra		menu_draw_line_option
+	dcfsnz	WREG
+	bra		menu_draw_line_dynamic
+	bra		menu_draw_line_none
 
 menu_draw_line_string:
-        movff   text_item+0,TBLPTRL     ; Read not-translated string from PROM.
-        movff   text_item+1,TBLPTRH
-        call    strcpy_prom             ; Copy in buffer
-        bra     menu_draw_line_none
-        
-menu_draw_line_call:
-        movff   text_item+0,FSR1L       ; Read string from PROM.
-        movff   text_item+1,FSR1H
-        call    strcpy_text             ; Copy in buffer
+	movff	text_item+0,TBLPTRL				; Read not-translated string from PROM.
+	movff	text_item+1,TBLPTRH
+	call	strcpy_prom						; Copy in buffer
+	bra		menu_draw_line_none
 
-        bra     menu_draw_line_none
-        
+menu_draw_line_call:
+	movff	text_item+0,FSR1L				; Read string from PROM.
+	movff	text_item+1,FSR1H
+	call	strcpy_text						; Copy in buffer
+	bra		menu_draw_line_none
+
 menu_draw_line_option:
-        movff   text_item+0,FSR1L       ; Read string from PROM.
-        movff   text_item+1,FSR1H
-        call    strcpy_text             ; Copy in buffer
-
-        movff   option_item+0,FSR0L     ; Retrieve option handle.
-        movff   option_item+1,FSR0H
-        btfss   settime_setdate         ; Not in Time/Date menu...
-        call    option_draw
-        bra     menu_draw_line_none
+	movff	text_item+0,FSR1L				; Read string from PROM.
+	movff	text_item+1,FSR1H
+	call	strcpy_text						; Copy in buffer
+	movff	option_item+0,FSR0L				; Retrieve option handle.
+	movff	option_item+1,FSR0H
+	btfss	settime_setdate					; Not in Time/Date menu...
+	call	option_draw
+	bra		menu_draw_line_none
 
 menu_draw_line_dynamic:
-        lfsr    FSR2,buffer
-        movff   menu_item,PRODL         ; Pass item to callback.
-        rcall   menu_text_call          ; Push return address.
-        bra     menu_draw_line_none
+	lfsr	FSR2,buffer
+	movff	menu_item,PRODL					; Pass item to callback.
+	rcall	menu_text_call					; Push return address.
+	bra		menu_draw_line_none
 
 ; Computed goto to pointer inside dynamic_item:
 menu_text_call:
-        movf    dynamic_item+0,W        ; Check if callback is NULL
-        iorwf   dynamic_item+1,W
-        iorwf   dynamic_item+2,W
-        btfsc   STATUS,Z
-        return                          ; YES: don't call it.
-
-        movff   dynamic_item+2,PCLATU   ; Prepare...
-        movff   dynamic_item+1,PCLATH
-        movf    dynamic_item+0,W
-        movwf   PCL                     ; And jump !
+	movf	dynamic_item+0,W				; Check if callback is NULL
+	iorwf	dynamic_item+1,W
+	iorwf	dynamic_item+2,W
+	btfsc	STATUS,Z
+	return									; YES: don't call it.
+	movff	dynamic_item+2,PCLATU			; Prepare...
+	movff	dynamic_item+1,PCLATH
+	movf	dynamic_item+0,W
+	movwf	PCL								; And jump !
 
 menu_draw_line_none:
-        extern  TFT_fillup_with_spaces
-
-        btfsc   divemode                        ; In divemode?
-        bra     menu_draw_line_none_divemode    ; Yes
-        
-        movlw   MENU_LINE_MAX_LENGTH
-        call    TFT_fillup_with_spaces  ; Fillup FSR2 with spaces (Total string length in #WREG)
-        clrf    WREG
-        movff   WREG,buffer+MENU_LINE_MAX_LENGTH;No   ; Make sure won't be longer than MENU_LINE_MAX_LENGTH ch
-        call    aa_wordprocessor
-        movlw   MENU_HEIGHT             ; No, Move to next line
-        addwf   win_top,F
-        incf    menu_item,F             ; inc loop counter
-
-        movf    start_item,W            ; First line (scrolled)
-        subwf   menu_item,W             ; current - first
-        xorlw   MENU_LINES_MAX          ; Already done 6 lines ?
-        btfsc   STATUS,Z
-        return                          ; YES
+	btfsc	divemode						; In divemode?
+	bra	menu_draw_line_none_divemode		; Yes
+	movlw	MENU_LINE_MAX_LENGTH
+	call	TFT_fillup_with_spaces			; Fillup FSR2 with spaces (Total string length in #WREG)
+	clrf	WREG
+	movff	WREG,buffer+MENU_LINE_MAX_LENGTH ; No - make sure won't be longer than MENU_LINE_MAX_LENGTH ch
+	call	aa_wordprocessor
+	movlw	MENU_HEIGHT						; No, Move to next line
+	addwf	win_top,F
+	incf	menu_item,F						; inc loop counter
+	movf	start_item,W					; First line (scrolled)
+	subwf	menu_item,W						; current - first
+	xorlw	MENU_LINES_MAX					; Already done 6 lines ?
+	btfsc	STATUS,Z
+	return									; YES
 menu_draw_line_none2:
-        movf    menu_item,W             ; Done item_max lines ?
-        xorwf   item_max,W
-        btfss   STATUS,Z
-        bra     menu_draw_lines_1       ; No: loop...
-        return
+	movf	menu_item,W						; Done item_max lines ?
+	xorwf	item_max,W
+	btfss	STATUS,Z
+	bra	menu_draw_lines_1					; No: loop...
+	return
 
 menu_draw_line_none_divemode:
-        movlw   .10
-        call    TFT_fillup_with_spaces  ; Fillup FSR2 with spaces (Total string length in #WREG)
-        clrf    WREG
-        movff   WREG,buffer+.10
-
-        call    aa_wordprocessor        ; Draw the line!
-
-        banksel common
-        bcf     win_invert              ; Reset invert flag
-        banksel win_top
-
-        movlw   .24                     ; Divemode menu spacing
-        addwf   win_top,F
-        incf    menu_item,F             ; inc loop counter
-
-        movlw   .3
-        cpfseq  menu_item               ; At pos 4?
-        bra     menu_draw_line_none2    ; No
-
-        movlw   dm_menu_item4_row
-        movff   WREG,win_top            ; Reset row
-        movlw   dm_menu_item4_column
-        movff   WREG,win_leftx2         ; New column
-        bra     menu_draw_line_none2    ; Done.
+	movlw	.10
+	call	TFT_fillup_with_spaces			; Fill up FSR2 with spaces (Total string length in #WREG)
+	clrf	WREG
+	movff	WREG,buffer+.10
+	call	aa_wordprocessor				; Draw the line!
+	banksel	common
+	bcf		win_invert						; Reset invert flag
+	banksel	win_top
+	movlw	.24								; divemode menu spacing
+	addwf	win_top,F
+	incf	menu_item,F						; inc loop counter
+	movlw	.3
+	cpfseq	menu_item						; At pos 4?
+	bra		menu_draw_line_none2			; No
+	movlw	dm_menu_item4_row
+	movff	WREG,win_top					; Reset row
+	movlw	dm_menu_item4_column
+	movff	WREG,win_leftx2					; New column
+	bra		menu_draw_line_none2			; Done.
 
 ;-----------------------------------------------------------------------------
 ; Put a mark in front of the current line
 menu_draw_selected_line:
-		clrf	timeout_counter2		; Reset timeout
-        WIN_BOX_BLACK .34,.221,MENU_LEFT-8,MENU_LEFT-2  ; Clear left column
-        
-        call    TFT_standard_color
-        WIN_SMALL  MENU_LEFT-8, 0       ; Arrow symbol only in small font
-        movf    start_item,W            ; First line (scrolled)
-        subwf   selected_item,W         ; selected - first
-        mullw   MENU_HEIGHT             ; 30 pixel by line
-        movf    PRODL,W                 ; result
-        addwf   menu_center,W           ; added to first line
-        movwf   win_top                 ; and stored to pos.
-        STRCPY_PRINT    "\xb7"          ; print cursor
+	clrf	timeout_counter2				; Reset timeout
+	WIN_BOX_BLACK .34,.221,MENU_LEFT-8,MENU_LEFT-2 ; Clear left column
+	call	TFT_standard_color
+	WIN_SMALL MENU_LEFT-8, 0				; Arrow symbol only in small font
+	movf	start_item,W					; First line (scrolled)
+	subwf	selected_item,W					; selected - first
+	mullw	MENU_HEIGHT						; 30 pixel by line
+	movf	PRODL,W							; result
+	addwf	menu_center,W					; added to first line
+	movwf	win_top							; and stored to pos.
+	STRCPY_PRINT "\xb7"						; print cursor
+	return
 
-        return
-
-        END
+	END
\ No newline at end of file
--- a/src/menu_processor.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/menu_processor.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File menu_processor.asm
+;   File menu_processor.asm							REFACTORED VERSION V2.97
 ;
 ;   Routines to handle all OSTC graphic/text menus.
 ;
@@ -9,82 +9,88 @@
 ; HISTORY
 ;   2011-05-30 : [jDG] Creation.
 
-    ; Restart menu-system from first icon/line:
-    extern  menu_processor_reset
-    
-    ; Recal last (automatically) saved icon/line when returning from submenu.
-    extern  menu_processor_pop
+	; Restart menu-system from first icon/line
+	extern  menu_processor_reset
 
-    ; Rexecute the menu block
-    extern  menu_processor
+	; Recall last (automatically) saved icon/line when returning from submenu
+	extern	menu_processor_pop
+	extern	menu_processor_double_pop
 
-    extern  menu_processor_bottom_line
+	; execute the menu block
+	extern  menu_processor
+	extern  menu_processor_bottom_line
 
 ;=============================================================================
 ; Menus parameters
 
 ;NOTE: should be idenric in .inc and .asm !
-#define MENU_LINES_MAX  .7              ; Number of lines per screen?
-#define MENU_HEIGHT     .27             ; Spacing on screen.
-#define MENU_VCENTER    .125            ; Position on screen.
+#define MENU_LINES_MAX		.7		; Number of lines per screen?
+#define MENU_HEIGHT			.27		; Spacing on screen.
+#define MENU_VCENTER		.125	; Position on screen.
 
 ;=============================================================================
 
-COMMON_BEGIN_MENU  MACRO    dynamic, txt, nb_items
-        local center
-        If nb_items > MENU_LINES_MAX
-center      set MENU_VCENTER - (MENU_HEIGHT/2) * MENU_LINES_MAX
-        Else
-center      set MENU_VCENTER - (MENU_HEIGHT/2) * nb_items
-        Endif
-        If nb_items <= 0
-            Error "Zero items in menu ", x
-        Endif
+COMMON_BEGIN_MENU	MACRO	dynamic, txt, nb_items
+		local	center
+
+		If nb_items > MENU_LINES_MAX
+center		set MENU_VCENTER - (MENU_HEIGHT/2) * MENU_LINES_MAX
+		Else
+center		set MENU_VCENTER - (MENU_HEIGHT/2) * nb_items
+		Endif
 
-        extern  txt
-        call    menu_processor
-        ; Push 6 bytes of menu header data.
-        db      nb_items, dynamic
-        db      LOW(txt), HIGH(txt)
-        db      UPPER(txt), center
-    ENDM
+		If nb_items <= 0
+			Error "Zero items in menu ", x
+		Endif
+
+		extern	txt
+		call	menu_processor
+
+		; Push 6 bytes of menu header data.
+		db		nb_items,   dynamic
+		db		LOW(txt),   HIGH(txt)
+		db		UPPER(txt), center
+	ENDM
 
 ;=============================================================================
+
 ; Macro to generat (and check) menu vertical menu blocks with data.
-;
-MENU_BEGIN  MACRO   menu_title, nb_items
-        COMMON_BEGIN_MENU    0, menu_title, nb_items
-    ENDM
 
-MENU_BEGIN_DYNAMIC macro title_proc, nb_items
-        COMMON_BEGIN_MENU    1, title_proc, nb_items
-    ENDM
+MENU_BEGIN			MACRO	menu_title, nb_items
+		COMMON_BEGIN_MENU	0, menu_title, nb_items
+	ENDM
+
+MENU_BEGIN_DYNAMIC	MACRO	title_proc, nb_items
+		COMMON_BEGIN_MENU	1, title_proc, nb_items
+	ENDM
 
 ;=============================================================================
 
 ; Submenu
-MENU_CALL   MACRO   txt, proc
-        extern  txt
-        db      0, 0, 0, 0
-        db      LOW(proc),  HIGH(proc), UPPER(proc),     0
-        db      LOW(txt),   HIGH(txt)
+
+MENU_CALL			MACRO	txt, proc
+		extern	txt
+		db		0, 0,             0,             0
+		db		   LOW(proc),     HIGH(proc),    UPPER(proc), 0
+		db		   LOW(txt),      HIGH(txt)
     ENDM
 
 ; Generic option menu
-MENU_OPTION MACRO   txt, option, callback
-        extern  txt
-        extern  option
-        db      2, LOW(callback), HIGH(callback), UPPER(callback)
-        db      LOW(option),HIGH(option),UPPER(option), 0
-        db      LOW(txt),   HIGH(txt)
-    ENDM
+
+MENU_OPTION			MACRO	txt, option, callback
+		extern	txt
+		extern	option
+		db		2, LOW(callback), HIGH(callback), UPPER(callback)
+		db		   LOW(option),   HIGH(option),   UPPER(option), 0
+		db		   LOW(txt),      HIGH(txt)
+	ENDM
 
-MENU_DYNAMIC MACRO  callback, proc
-        extern  callback
-        db      3, LOW(callback), HIGH(callback), UPPER(callback)
-        db      LOW(proc),     HIGH(proc),      UPPER(proc),    0
-        db      0, 0
-    ENDM
+MENU_DYNAMIC		MACRO	callback, proc
+		extern	callback
+		db		3, LOW(callback), HIGH(callback), UPPER(callback)
+		db		   LOW(proc),     HIGH(proc),     UPPER(proc),    0
+		db		   0,             0
+	ENDM
 
-MENU_END    MACRO
-    ENDM
\ No newline at end of file
+MENU_END	MACRO
+	ENDM
\ No newline at end of file
--- a/src/menu_tree.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/menu_tree.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File menu_tree.asm								REFACTORED VERSION V2.95
+;   File menu_tree.asm								REFACTORED VERSION V2.98
 ;
 ;   OSTC menus
 ;
@@ -9,750 +9,797 @@
 ; HISTORY
 ;   2011-07-11 : [jDG] Creation.
 
-#include    "hwos.inc"					; Mandatory header
-#include    "gaslist.inc"
-#include    "menu_processor.inc"
-#include    "start.inc"
-#include    "comm.inc"
-#include    "logbook.inc"
-#include    "tft.inc"
-#include    "eeprom_rs232.inc"
-#include    "external_flash.inc"
-#include    "shared_definitions.h"		; Mailbox from/to p2_deco.c
-#include    "isr.inc"
-#include    "ghostwriter.inc"
-#include    "adc_lightsensor.inc"
-#include    "wait.inc"
-#include    "i2c.inc"
+#include "hwos.inc"						; Mandatory header
+#include "gaslist.inc"
+#include "menu_processor.inc"
+#include "start.inc"
+#include "comm.inc"
+#include "logbook.inc"
+#include "tft.inc"
+#include "eeprom_rs232.inc"
+#include "external_flash.inc"
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
+#include "isr.inc"
+#include "ghostwriter.inc"
+#include "adc_lightsensor.inc"
+#include "wait.inc"
+#include "i2c.inc"
+
 
-	CBLOCK  tmp+0x40					; Keep space for menu processor
-		gaslist_gas						; Check ram position in gaslist.asm, too!
-	ENDC
+	extern	do_demo_divemode
+	extern	restart
+	extern	option_save_all
+	extern	option_reset
+	extern	do_demo_planner
+	extern	calibrate_mix
+	extern	comm_mode0
+	extern	piezo_config
+	extern	compass_calibration_loop
+	extern	option_reset_all
+	extern	rtc_set_rtc
+	extern	surfloop
+	extern	oColorSetDive
 
-gui		CODE
+
+gui	CODE
+
 ;=============================================================================
 ; Main Menu
-        global  do_main_menu,do_main_menu2
+
+do_return_main_menu:
+	call	menu_processor_double_pop		; drop exit line and back to last line
+	bra		do_main_menu_common
+
+	global	do_main_menu
 do_main_menu:
-        movff   menupos3,customview_surfmode; save last customview
-do_main_menu2:
-    call        TFT_boot
-		bcf		sleepmode				; for timeout
-		call    menu_processor_reset    ; restart from first icon.
-
-do_continue_main_menu:
-	rcall	menu_tree_double_pop	; drop exit line and back to last line
+	movff	menupos3,customview_surfmode ; save last customview
 
-        extern  do_demo_divemode, restart
-    MENU_BEGIN  tMainMenu, .7
-        MENU_CALL   tLogbook,       logbook
-        MENU_CALL   tGasSetup,      do_gas_menu
-        MENU_CALL   tCCRSetup,      do_ccr_menu
-        MENU_CALL   tPlan,          do_planner_menu_reset
-        MENU_CALL   tDiveModeMenu,  do_divemode_menu
-        MENU_CALL   tSystSets,      do_settings_menu
-        MENU_CALL   tExit,          restart
-    MENU_END
+	global	do_main_menu2
+do_main_menu2:							; entry point used by logbook.asm
+	call	TFT_boot
+	bcf		sleepmode					; for timeout
+	call	menu_processor_reset		; restart from first icon
 
-do_info_menu:
-	MENU_BEGIN  tInfoMenu, .6
-	    MENU_DYNAMIC    info_menu_serial,       0
-	    MENU_DYNAMIC    info_menu_firmware,     0
-	    MENU_DYNAMIC    info_menu_battery_volts,0
-		MENU_DYNAMIC    info_menu_uptime,		0
-		MENU_DYNAMIC    info_menu_total_dives,  0
-        MENU_CALL       tExit,                  do_return_settings
-    MENU_END
+do_main_menu_common:
+	MENU_BEGIN	tMainMenu, .7
+		MENU_CALL		tLogbook,					logbook
+		MENU_CALL		tGasSetup,					do_gas_menu
+		MENU_CALL		tCCRSetup,					do_ccr_menu
+		MENU_CALL		tPlan,						do_planner_menu
+		MENU_CALL		tDiveModeMenu,				do_divemode_menu
+		MENU_CALL		tSystSets,					do_settings_menu
+		MENU_CALL		tExit,						restart
+	MENU_END
+
 
 ;=============================================================================
 ; CCR Setup
 
-return_ccr_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+do_return_ccr_menu:
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_ccr_menu:
-    bcf     menu_show_sensors2          ; Clear flag
-    btfsc   analog_o2_input
-    bra     do_ccr_menu_cR
+	bcf		menu_show_sensors2			; stop imprinting of live sensor values
 
-	; COMMENT OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
-	; btfss   optical_input
-    ; bra     do_ccr_menu_ostc2
+	btfsc	analog_o2_input
+	bra		do_ccr_menu_cR
+
+	; COMMENTED OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
+	; btfss	optical_input
+	; bra	do_ccr_menu_ostc2
 
-    MENU_BEGIN  tCCRSetup, .6          ; OSTC3 menu (and currently also the OSTC2 menu)
-        MENU_OPTION     tCCRMode,				oCCRMode,		0
-        MENU_CALL       tDiluentSetup,			do_diluent_setup
-        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
-		MENU_CALL		tPSCRMenu,				do_PSCR_menu
-		MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0		
-        MENU_CALL       tExit,					do_continue_main_menu
-    MENU_END
+	MENU_BEGIN	tCCRSetup, .6			; OSTC3 menu (and currently also the OSTC2 menu)
+		MENU_OPTION		tCCRMode,					oCCRMode,				0
+		MENU_CALL		tDiluentSetup,				do_diluent_setup
+		MENU_CALL		tFixedSetpoints,			do_fixed_setpoints
+		MENU_CALL		tPSCRMenu,					do_PSCR_menu
+		MENU_OPTION		tCCmaxFracO2,				oCCmaxFracO2,			0
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
 
-do_ccr_menu_cR:                         ; cR menu
-    MENU_BEGIN  tCCRSetup, .7
-        MENU_OPTION     tCCRMode,				oCCRMode,		0
-        MENU_CALL       tCalibrateMenu,			do_calibrate_menu
-        MENU_CALL       tDiluentSetup,			do_diluent_setup
-        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
-		MENU_CALL		tPSCRMenu,				do_PSCR_menu
-		MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0
-        MENU_CALL       tExit,					do_continue_main_menu
-    MENU_END
+do_ccr_menu_cR:							; cR menu
+	MENU_BEGIN	tCCRSetup, .7
+		MENU_OPTION		tCCRMode,					oCCRMode,				0
+		MENU_CALL		tCalibrateMenu,				do_calibrate_menu
+		MENU_CALL		tDiluentSetup,				do_diluent_setup
+		MENU_CALL		tFixedSetpoints,			do_fixed_setpoints
+		MENU_CALL		tPSCRMenu,					do_PSCR_menu
+		MENU_OPTION		tCCmaxFracO2,				oCCmaxFracO2,			0
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
 
-; COMMENT OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
+; COMMENTED OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
 ;do_ccr_menu_ostc2:
-;    MENU_BEGIN  tCCRSetup, .6           ; ostc2 menu
-;        MENU_OPTION     tCCRMode,				oCCRMode,		0
-;        MENU_CALL       tDiluentSetup,			do_diluent_setup
-;        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
-;        MENU_CALL       tPSCRMenu,				do_PSCR_menu
-;        MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0
-;        MENU_CALL       tExit,					do_continue_main_menu
-;    MENU_END
+;	MENU_BEGIN	tCCRSetup, .6			; ostc2 menu
+;		MENU_OPTION		tCCRMode,					oCCRMode,				0
+;		MENU_CALL		tDiluentSetup,				do_diluent_setup
+;		MENU_CALL		tFixedSetpoints,			do_fixed_setpoints
+;		MENU_CALL		tPSCRMenu,					do_PSCR_menu
+;		MENU_OPTION		tCCmaxFracO2,				oCCmaxFracO2,			0
+;		MENU_CALL		tExit,						do_return_main_menu
+;	MENU_END
 
-do_PSCR_menu:
-    MENU_BEGIN  tPSCRMenu, .3			; PSCR Menu
-		MENU_OPTION     tPSCR_O2_drop,			oPSCR_drop,			0
-		MENU_OPTION     tPSCR_lungratio,		oPSCR_lungratio,	0
-		MENU_CALL       tExit,					return_ccr_menu
-    MENU_END
 
 do_calibrate_menu:
-    call    enable_ir_s8                ; Enable IR/S8-Port
-    bsf     menu_show_sensors2          ; Set flag
+	call	enable_ir_s8				; Enable IR/S8-Port
+	bsf		menu_show_sensors2			; start imprinting of live sensor values
+
 do_calibrate_menu2:
-	MENU_BEGIN  tCalibrateMenu, .6
-	    MENU_CALL       tDiveHudMask1,				0
-        MENU_CALL       tDiveHudMask2,				0
-        MENU_CALL       tDiveHudMask3,				0
-        MENU_OPTION     tCalibrationGas,oCalGasO2,	0
-        MENU_CALL       tCalibrate,				do_calibrate_mix
-        MENU_CALL       tExit,					return_ccr_menu
-    MENU_END
+	MENU_BEGIN	tCalibrateMenu, .6
+		MENU_CALL		tDiveHudMask1,				0
+		MENU_CALL		tDiveHudMask2,				0
+		MENU_CALL		tDiveHudMask3,				0
+		MENU_OPTION		tCalibrationGas,oCalGasO2,	0
+		MENU_CALL		tCalibrate,					do_calibrate_mix
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
+
 
 do_calibrate_mix:
-    extern  calibrate_mix
-    call    calibrate_mix               ; Calibrate with opt_calibration_O2_ratio, also calibrate S8 HUD if connected
-    WAITMS  d'250'                      ; Wait for HUD v3
-    movlw   .9 
-    movwf   customview_surfmode			; show sensor mV custom view after restart
-    goto    restart                     ; Restart into surface mode
+	call	calibrate_mix				; Calibrate with opt_calibration_O2_ratio, also calibrate S8 HUD if connected
+	WAITMS	d'250'						; Wait for HUD v3
+	movlw	.9
+	movff	WREG,customview_surfmode	; show sensor mV custom view after restart
+	goto	restart						; Restart into surface mode
 
 
 do_diluent_setup:
-       bsf     ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-       bcf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-       call    gaslist_cleanup_list    ; Takes care that only one gas can be first and first has 0m change depth
-     MENU_BEGIN  tDiluentSetup, .6
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_CALL       tExit,                  return_ccr_menu
-    MENU_END
+	bsf		ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	bcf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	call	gaslist_cleanup_list		; Takes care that only one gas can be first and first has 0m change depth
+
+	MENU_BEGIN	tDiluentSetup, .6
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
+
 
 do_return_fixed_setpoints:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_fixed_setpoints:
-        bcf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-	MENU_BEGIN  tFixedSetpoints, .6
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_CALL       tExit,                   return_ccr_menu
-    MENU_END
+	bcf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+
+	MENU_BEGIN	tFixedSetpoints, .6
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
+
 
 do_edit_sp_menu:
-        call    gaslist_setSP              ; Save current item.
-    MENU_BEGIN  tFixedSetpoints, .5
-        MENU_DYNAMIC    gaslist_strcat_setpoint_0,0
-        MENU_CALL       tSPPlus,                gaslist_spplus
-        MENU_CALL       tDepthPlus,             gaslist_spdepthplus
-        MENU_CALL       tDepthMinus,            gaslist_spdepthminus
-        MENU_CALL       tExit,                  do_return_fixed_setpoints
-    MENU_END
+	call	gaslist_setSP				; Save current item.
+
+	MENU_BEGIN	tFixedSetpoints, .5
+		MENU_DYNAMIC	gaslist_strcat_setpoint_0,	0
+		MENU_CALL		tSPPlus,					gaslist_spplus
+		MENU_CALL		tDepthPlus,					gaslist_spdepthplus
+		MENU_CALL		tDepthMinus,				gaslist_spdepthminus
+		MENU_CALL		tExit,						do_return_fixed_setpoints
+	MENU_END
+
+
+do_PSCR_menu:
+	MENU_BEGIN	tPSCRMenu, .3			; PSCR Menu
+		MENU_OPTION		tPSCR_O2_drop,				oPSCR_drop,				0
+		MENU_OPTION		tPSCR_lungratio,			oPSCR_lungratio,		0
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
 
 ;=============================================================================
 ; OC Gas Setup
 
-return_gas_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+do_return_gas_menu:
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
-        btfsc   ccr_diluent_setup       ; Return to CCR-Menu?
-        bra     do_diluent_setup        ; Yes.
+	btfsc	ccr_diluent_setup			; Return to CCR-Menu?
+	bra		do_diluent_setup			; Yes.
+
 do_gas_menu:
-        bcf     ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-        bcf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-        call    gaslist_cleanup_list    ; Takes care that only one gas can be first and first has 0m change depth
-    MENU_BEGIN  tGaslist, .6
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_CALL       tExit,                  do_continue_main_menu
-    MENU_END
+	bcf		ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	bcf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	call	gaslist_cleanup_list		; Takes care that only one gas can be first and first has 0m change depth
 
-return_gas_depth:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-        bra     do_edit_gas_menu_1
+	MENU_BEGIN	tGaslist, .6
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
+
+do_return_edit_gas_menu:
+	call	menu_processor_pop			; drop exit line and ...
+do_abort_gas_depth_menu:
+	call	menu_processor_pop			; back to last line
+	bra		do_edit_gas_menu_common
 
 do_edit_gas_menu:
-    call    gaslist_setgas              ; Save current item.
-do_edit_gas_menu_1:                     ; Keep current gas.
-	MENU_BEGIN          tGasEdit, .6
-        MENU_DYNAMIC    gaslist_gastitle,       0
-        MENU_DYNAMIC    gaslist_MOD_END,        0
-        MENU_DYNAMIC    gaslist_show_type,      gaslist_toggle_type
-        MENU_CALL       tSetup_mix,             do_setup_mix
-        MENU_CALL       tGasDepth,              do_gas_depth_menu
-        MENU_CALL       tExit,                  return_gas_menu
-    MENU_END
+	call	gaslist_setgas				; set gaslist_gas
+
+do_edit_gas_menu_common:				; keep current gas
+	MENU_BEGIN	tGasEdit, .6
+		MENU_DYNAMIC	gaslist_gastitle,			0
+		MENU_DYNAMIC	gaslist_MOD_END,			0
+		MENU_DYNAMIC	gaslist_show_type,			gaslist_toggle_type
+		MENU_CALL		tSetup_mix,					do_setup_mix
+		MENU_CALL		tGasDepth,					do_gas_depth_menu
+		MENU_CALL		tExit,						do_return_gas_menu
+	MENU_END
+
 
 do_setup_mix:
-    MENU_BEGIN          tGasEdit, .7
-        MENU_DYNAMIC    gaslist_gastitle,       0
-        MENU_DYNAMIC    gaslist_MOD_END,        0
-        MENU_CALL       tO2Plus,                gaslist_pO2
-        MENU_CALL       tO2Minus,               gaslist_mO2
-        MENU_CALL       tHePlus,                gaslist_pHe
-        MENU_CALL       tHeMinus,               gaslist_mHe
-        MENU_CALL       tExit,                  return_gas_depth
-    MENU_END
-
-menu_tree_double_pop:    
-        call    menu_processor_pop      ; drop exit line.
-        goto	menu_processor_pop      ; back to last gas and return
+	MENU_BEGIN	tGasEdit, .7
+		MENU_DYNAMIC	gaslist_gastitle,			0
+		MENU_DYNAMIC	gaslist_MOD_END,			0
+		MENU_CALL		tO2Plus,					gaslist_pO2
+		MENU_CALL		tO2Minus,					gaslist_mO2
+		MENU_CALL		tHePlus,					gaslist_pHe
+		MENU_CALL		tHeMinus,					gaslist_mHe
+		MENU_CALL		tExit,						do_return_edit_gas_menu
+	MENU_END
 
 
-    global  do_gas_depth_menu
 do_gas_depth_menu:
-    movff   gaslist_gas,WREG
-    lfsr    FSR1,opt_gas_type       ; Read opt_gas_type[WREG]
-    movff   PLUSW1,lo               ; Used as temp
-    movlw   .3                      ; 3=Deco
-    btfsc   ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-    movlw   .2                      ; 2=Normal
-    cpfseq  lo
-    bra     return_gas_depth        ; Non-Deco gas or "Normal" Diluent, Return!
+	movff	gaslist_gas,WREG
+	lfsr	FSR1,opt_gas_type			; Read opt_gas_type[WREG]
+	movff	PLUSW1,lo					; Used as temp
+	movlw	.3							; 3=Deco
+	btfsc	ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	movlw	.2							; 2=Normal
+	cpfseq	lo
+	bra		do_abort_gas_depth_menu		; Non-Deco gas or "Normal" Diluent, abort!
 
-    MENU_BEGIN  tGasEdit, .7
-        MENU_DYNAMIC    gaslist_gastitle,       0
-        MENU_DYNAMIC    gaslist_MOD_END,        0
-        MENU_DYNAMIC    gaslist_ppo2,           0               ; ppO2 at change depth
-        MENU_CALL       tDepthPlus,             gaslist_pDepth
-        MENU_CALL       tDepthMinus,            gaslist_mDepth
-        MENU_DYNAMIC    gaslist_reset_mod_title,gaslist_reset_mod
-        MENU_CALL       tExit,                  return_gas_depth
-    MENU_END
+	MENU_BEGIN	tGasEdit, .7
+		MENU_DYNAMIC	gaslist_gastitle,			0
+		MENU_DYNAMIC	gaslist_MOD_END,			0
+		MENU_DYNAMIC	gaslist_ppo2,				0					; ppO2 at change depth
+		MENU_CALL		tDepthPlus,					gaslist_pDepth
+		MENU_CALL		tDepthMinus,				gaslist_mDepth
+		MENU_DYNAMIC	gaslist_reset_mod_title,	gaslist_reset_mod
+		MENU_CALL		tExit,						do_return_edit_gas_menu
+	MENU_END
 
-	
+
 ;=============================================================================
 ; Simulator menus
 
-        global  do_planner_menu
+do_return_planner_menu:
+	call	menu_processor_pop			; drop exit line and ...
 
-do_planner_menu_reset:
-	extern	option_save_all
-	call	option_save_all
-	call	restart_set_modes_and_flags	; To have correct simulator results for mode changes without prior surfacemode call
-        ;---- Reset dive time/depth to default values
-        extern  option_reset
-        lfsr    FSR0,odiveInterval
-        call    option_reset
-        lfsr    FSR0,obottomTime
-        call    option_reset
-        lfsr    FSR0,obottomDepth
-        call    option_reset
+	global	do_return_demo_planner
+do_return_demo_planner:
+	call	menu_processor_pop			; back to last line
+	bra		do_planner_common
 
 do_planner_menu:
-    extern  do_demo_planner
-    MENU_BEGIN  tPlan, .7
-        MENU_OPTION     tIntvl, odiveInterval,  0
-        MENU_OPTION     tBtDep, obottomDepth,   0
-		MENU_CALL       tInter,                 do_demo_divemode
-        MENU_OPTION     tBtTm,  obottomTime,    0
-        MENU_CALL       tDecoSetup,             do_planner_config
-        MENU_CALL       tDeco,                  do_demo_planner
-        MENU_CALL       tExit,                  do_continue_main_menu
-    MENU_END
+	; to have correct simulator results after mode changes without prior excursion to surfacemode
+	call	option_save_all
+	call	restart_set_modes_and_flags
+	; Reset dive time/depth to default values
+	lfsr	FSR0,odiveInterval
+	call	option_reset
+	lfsr	FSR0,obottomTime
+	call	option_reset
+	lfsr	FSR0,obottomDepth
+	call	option_reset
+
+do_planner_common:
+	MENU_BEGIN	tPlan, .7
+		MENU_OPTION		tIntvl,						odiveInterval,			0
+		MENU_OPTION		tBtDep,						obottomDepth,			0
+		MENU_CALL		tInter,						do_demo_divemode
+		MENU_OPTION		tBtTm,						obottomTime,			0
+		MENU_CALL		tDecoSetup,					do_planner_config
+		MENU_CALL		tDeco,						do_demo_planner
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
 
 
 do_planner_config:
-    MENU_BEGIN  tPlan, .3
-		MENU_OPTION		tSelectSetpoint,oSimSetpoint,	0
-		MENU_OPTION		tuseAGF, 		oSimAGF,		0
-        MENU_CALL       tExit,							do_planner_menu
-    MENU_END
+	MENU_BEGIN	tPlan, .3
+		MENU_OPTION		tSelectSetpoint,			oSimSetpoint,			0
+		MENU_OPTION		tuseAGF,					oSimAGF,				0
+		MENU_CALL		tExit,						do_return_planner_menu
+	MENU_END
 
 
 ;=============================================================================
 ; Divemode menu
 
 do_return_divemode_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_divemode_menu:
-    MENU_BEGIN  tDiveModeMenu, .7
-        MENU_OPTION  tDvMode,    oDiveMode,     0
-        MENU_OPTION  tDkMode,    oDecoMode,     0
-        MENU_CALL    tppO2settings,          	do_ppo2_menu
-        MENU_OPTION	 tsafetystopmenu,oSafetyStop,    0
-		MENU_CALL    t2ndDecoPlanMenu,			do_2nd_deco_plan_menu
-        MENU_CALL    tDecoparameters,          	do_decoparameters_menu
-        MENU_CALL    tExit,                  	do_continue_main_menu
-    MENU_END
+	MENU_BEGIN	tDiveModeMenu, .7
+		MENU_OPTION		tDvMode,					oDiveMode,				0
+		MENU_OPTION		tDkMode,					oDecoMode,				0
+		MENU_CALL		tppO2settings,				do_ppo2_menu
+		MENU_OPTION		tsafetystopmenu,			oSafetyStop,			0
+		MENU_CALL		t2ndDecoPlanMenu,			do_2nd_deco_plan_menu
+		MENU_CALL		tDecoparameters,			do_decoparameters_menu
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
 
 do_ppo2_menu:
-	MENU_BEGIN  tppO2settings, .6
-	
-		MENU_DYNAMIC divesets_ppo2_max,         do_toggle_ppo2_max
-		MENU_DYNAMIC divesets_ppo2_max_deco,    do_toggle_ppo2_max_deco
-		MENU_DYNAMIC divesets_ppo2_min,         do_toggle_ppo2_min
-		MENU_DYNAMIC divesets_ppo2_min_cc,      do_toggle_ppo2_min_cc
-        MENU_OPTION  tShowppO2, oShowppO2,      0
-        MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
+	MENU_BEGIN	tppO2settings, .6
+		MENU_DYNAMIC	divesets_ppo2_max,			do_toggle_ppo2_max
+		MENU_DYNAMIC	divesets_ppo2_max_deco,		do_toggle_ppo2_max_deco
+		MENU_DYNAMIC	divesets_ppo2_min,			do_toggle_ppo2_min
+		MENU_DYNAMIC	divesets_ppo2_min_cc,		do_toggle_ppo2_min_cc
+		MENU_OPTION		tShowppO2,					oShowppO2,				0
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
+
 
 do_return_decoparameters_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-do_decoparameters_menu: 
-    movff   char_I_deco_model,lo           ; 0 = ZH-L16, 1 = ZH-L16-GF
-    tstfsz  lo
-    bra	    do_decoparameters_menugf	   ; <> 0 -> GF menu!
-    ; NON-GF menu
-    MENU_BEGIN  tDecoparameters, .4
-        MENU_OPTION  tSaturationMult,osatmult,  0
-        MENU_OPTION  tDesaturationMult,odesatmult,0
-        MENU_OPTION  tLastDecostop,oLastDeco,   0
-        MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
-    
+	call	menu_processor_double_pop	; drop exit line and back to last line
+
+do_decoparameters_menu:
+	movff	char_I_deco_model,lo		; 0 = ZH-L16, 1 = ZH-L16-GF
+	tstfsz	lo
+	bra		do_decoparameters_menugf	; <> 0 -> GF menu!
+	; NON-GF menu
+	MENU_BEGIN	tDecoparameters, .4
+		MENU_OPTION		tSaturationMult,			osatmult,				0
+		MENU_OPTION		tDesaturationMult,			odesatmult,				0
+		MENU_OPTION		tLastDecostop,				oLastDeco,				0
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
+
 do_decoparameters_menugf:
-    ; GF menu
-    MENU_BEGIN  tDecoparameters, .7
-        MENU_OPTION  tGF_low,   oGF_low,        0
-        MENU_OPTION  tGF_high,  oGF_high,       0
-        MENU_CALL    taGFMenu,                  do_aGF_menu
-        MENU_OPTION  tSaturationMult,osatmultgf,  0
-        MENU_OPTION  tDesaturationMult,odesatmultgf,0
-        MENU_OPTION  tLastDecostop,oLastDeco,   0
-        MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
+	; GF menu
+	MENU_BEGIN	tDecoparameters, .7
+		MENU_OPTION		tGF_low,					oGF_low,				0
+		MENU_OPTION		tGF_high,					oGF_high,				0
+		MENU_CALL		taGFMenu,					do_aGF_menu
+		MENU_OPTION		tSaturationMult,			osatmultgf,				0
+		MENU_OPTION		tDesaturationMult,			odesatmultgf,			0
+		MENU_OPTION		tLastDecostop,				oLastDeco,				0
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
 
-    
-    
 
 do_return_2nd_deco_plan_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_2nd_deco_plan_menu
-    MENU_BEGIN  t2ndDecoPlanMenu, .7
-        MENU_OPTION  tFTTSMenu,		oExtraTime,		0
-		MENU_OPTION  tCalcAscGas,	oCalcAscGas,	0
-        MENU_OPTION  tSetBotUse,	obottom_usage,	0
-        MENU_OPTION  tSetDecoUse,	odeco_usage,	0
-		MENU_CALL	 tTankSizes,				do_tank_sizes_menu
-		MENU_CALL	 tTankFillPress,			do_tank_fill_press_menu
-		MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
+	MENU_BEGIN	t2ndDecoPlanMenu, .7
+		MENU_OPTION		tFTTSMenu,					oExtraTime,				0
+		MENU_OPTION		tCalcAscGas,				oCalcAscGas,			0
+		MENU_OPTION		tSetBotUse,					obottom_usage,			0
+		MENU_OPTION		tSetDecoUse,				odeco_usage,			0
+		MENU_CALL		tTankSizes,					do_tank_sizes_menu
+		MENU_CALL		tTankFillPress,				do_tank_fill_press_menu
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
 
-	
 
 do_tank_sizes_menu:
-    MENU_BEGIN  tTankSizes, .6
-        MENU_OPTION  tGas1,	oTankSize1,			0
-        MENU_OPTION  tGas2,	oTankSize2,			0
-        MENU_OPTION  tGas3,	oTankSize3,			0
-        MENU_OPTION  tGas4,	oTankSize4,			0
-        MENU_OPTION  tGas5,	oTankSize5,			0
-        MENU_CALL    tExit,                  	do_return_2nd_deco_plan_menu
-    MENU_END
+	MENU_BEGIN	tTankSizes, .6
+		MENU_OPTION		tGas1,						oTankSize1,				0
+		MENU_OPTION		tGas2,						oTankSize2,				0
+		MENU_OPTION		tGas3,						oTankSize3,				0
+		MENU_OPTION		tGas4,						oTankSize4,				0
+		MENU_OPTION		tGas5,						oTankSize5,				0
+		MENU_CALL		tExit,						do_return_2nd_deco_plan_menu
+	MENU_END
 
-	
 
 do_tank_fill_press_menu:
-    MENU_BEGIN  tTankFillPress, .6
-        MENU_OPTION  tGas1,	oTankFillPres1,		0
-        MENU_OPTION  tGas2,	oTankFillPres2,		0
-        MENU_OPTION  tGas3,	oTankFillPres3,		0
-        MENU_OPTION  tGas4,	oTankFillPres4,		0
-        MENU_OPTION  tGas5,	oTankFillPres5,		0
-        MENU_CALL    tExit,                  	do_return_2nd_deco_plan_menu
-    MENU_END
+	MENU_BEGIN	tTankFillPress, .6
+		MENU_OPTION		tGas1,						oTankFillPres1,			0
+		MENU_OPTION		tGas2,						oTankFillPres2,			0
+		MENU_OPTION		tGas3,						oTankFillPres3,			0
+		MENU_OPTION		tGas4,						oTankFillPres4,			0
+		MENU_OPTION		tGas5,						oTankFillPres5,			0
+		MENU_CALL		tExit,						do_return_2nd_deco_plan_menu
+	MENU_END
 
-	
+
 do_aGF_menu:
-    MENU_BEGIN  taGFMenu, .4
-        MENU_OPTION  taGF_enable,oEnable_aGF,    0
-        MENU_OPTION  taGF_low,   oaGF_low,       0
-        MENU_OPTION  taGF_high,  oaGF_high,      0
-        MENU_CALL    tExit,                  	do_return_decoparameters_menu
-    MENU_END
+	MENU_BEGIN	taGFMenu, .4
+		MENU_OPTION		taGF_enable,				oEnable_aGF,			0
+		MENU_OPTION		taGF_low,					oaGF_low,				0
+		MENU_OPTION		taGF_high,					oaGF_high,				0
+		MENU_CALL		tExit,						do_return_decoparameters_menu
+	MENU_END
 
 
 ;=============================================================================
 ; Setup Menu
 
+do_return_settings_deeper:				; entry point for return from set time/date sub-menu
+	bcf		settime_setdate				; clear flag
+	call	menu_processor_pop			; drop one more stack entry
+
 do_return_settings:
-	bcf		settime_setdate			; Clear flag
-	rcall	menu_tree_double_pop	; drop exit line and back to last line
-        
-	extern  compass_calibration_loop
+	call	menu_processor_double_pop	; drop exit line and back to last line
+
 do_settings_menu:
-    btfsc   ble_available           ; ble available
-    bra     do_settings_menu_ble    ; Yes.
-    MENU_BEGIN  tSystSets, .6
-        MENU_CALL   tInfoMenu,      do_info_menu
-        MENU_CALL   tSetTimeDate,   do_date_time_menu
-        MENU_CALL   tDispSets,      do_dispsets_menu
-	MENU_OPTION tLanguage,      oLanguage,			0
-        MENU_CALL   tMore,          do_settings_menu_more
-        MENU_CALL   tExit,          do_continue_main_menu
-    MENU_END
+	btfsc	ble_available				; ble available?
+	bra		do_settings_menu_ble		; YES
+
+	MENU_BEGIN	tSystSets, .6
+		MENU_CALL		tInfoMenu,					do_info_menu
+		MENU_CALL		tSetTimeDate,				do_date_time_menu
+		MENU_CALL		tDispSets,					do_dispsets_menu
+		MENU_OPTION		tLanguage,					oLanguage,				0
+		MENU_CALL		tMore,						do_settings_menu_more
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
 
 do_settings_menu_ble:
-	MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tInfoMenu,      do_info_menu
-        MENU_CALL   tBleTitle,      comm_mode0
-        MENU_CALL   tSetTimeDate,   do_date_time_menu
-        MENU_CALL   tDispSets,      do_dispsets_menu
-	MENU_OPTION tLanguage,      oLanguage,			0
-        MENU_CALL   tMore,          do_settings_menu_more
-        MENU_CALL   tExit,          do_continue_main_menu
-    MENU_END
+	MENU_BEGIN	tSystSets, .7
+		MENU_CALL		tInfoMenu,					do_info_menu
+		MENU_CALL		tBleTitle,					comm_mode0
+		MENU_CALL		tSetTimeDate,				do_date_time_menu
+		MENU_CALL		tDispSets,					do_dispsets_menu
+		MENU_OPTION		tLanguage,					oLanguage,				0
+		MENU_CALL		tMore,						do_settings_menu_more
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
+do_info_menu:
+	MENU_BEGIN	tInfoMenu, .6
+		MENU_DYNAMIC	info_menu_serial,			0
+		MENU_DYNAMIC	info_menu_firmware,			0
+		MENU_DYNAMIC	info_menu_battery_volts,	0
+		MENU_DYNAMIC	info_menu_uptime,			0
+		MENU_DYNAMIC	info_menu_total_dives,		0
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
+
+do_return_settings_more_deeper:			; entry point for returns from reset sub-menu
+	call	menu_processor_pop			; drop one more stack entry
 
 do_return_settings_more:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-    
+	call	menu_processor_double_pop	; drop exit line and back to last line
+
 do_settings_menu_more:
-    btfsc   battery_gauge_available		; piezo buttons available
-    bra     do_settings_menu_more_piezo
-    btfsc   ble_available				; ble available
-    bra     do_settings_menu_more_ostc3p
-    MENU_BEGIN  tSystSets, .7
-		MENU_CALL   tCompassMenu,   do_compass_menu
-		MENU_CALL	tLogOffset,		do_log_offset_menu
-		MENU_OPTION tUnits,    		oUnits,				0
-		MENU_OPTION tAltMode,	    oAltMode,	    0		
-		MENU_OPTION tDvSalinity,	oDiveSalinity,		0
-		MENU_CALL   tResetMenu,     do_reset_menu
-		MENU_CALL   tExit,          do_return_settings
-    MENU_END
+	btfsc	battery_gauge_available		; piezo buttons available
+	bra		do_settings_menu_more_piezo
+	btfsc	ble_available				; ble available
+	bra		do_settings_menu_more_ostc3p
+																				; All MENU_CALLs that are
+	MENU_BEGIN	tSystSets, .6													; in all of this 3 menus
+		MENU_CALL		tCompassMenu,				do_compass_menu				; need to stay together
+		MENU_CALL		tLogOffset,					do_log_offset_menu			; on this menu level in
+		MENU_OPTION		tAltMode,					oAltMode,				0	; oder to not mass up the
+		MENU_OPTION		tDvSalinity,				oDiveSalinity,			0	; menu stack on doing the
+		MENU_CALL		tResetMenu,					do_reset_menu				; do_return_settings !
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
 
-do_settings_menu_more_piezo_exit:
+
+do_return_settings_menu_more_pz:
 	call	TFT_ClearScreen
-    extern  piezo_config
-    call    piezo_config                ; Configure buttons
+	call	piezo_config				; Configure buttons
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_settings_menu_more_piezo:
-    MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tCompassMenu,	do_compass_menu
-		MENU_CALL	tLogOffset,		do_log_offset_menu
-        MENU_OPTION tUnits,			oUnits,				0
-       	MENU_OPTION tAltMode,	    oAltMode,	    0		
-        MENU_OPTION tDvSalinity,	oDiveSalinity,		0
-        MENU_CALL   tMore,			do_settings_piezo_menu
-        MENU_CALL   tExit,			do_return_settings
-    MENU_END
+	MENU_BEGIN	tSystSets, .7
+		MENU_CALL		tCompassMenu,				do_compass_menu
+		MENU_CALL		tLogOffset,					do_log_offset_menu
+		MENU_OPTION		tAltMode,					oAltMode,				0
+		MENU_OPTION		tDvSalinity,				oDiveSalinity,			0
+		MENU_CALL		tResetMenu,					do_reset_menu
+		MENU_CALL		tMore,						do_settings_piezo_menu
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
 
-    extern  comm_mode0
+do_settings_menu_more_ostc3p:			; Menu with BLE feature
+	MENU_BEGIN	tSystSets, .6
+		MENU_CALL		tCompassMenu,				do_compass_menu
+		MENU_CALL		tLogOffset,					do_log_offset_menu
+		MENU_OPTION		tAltMode,					oAltMode,				0
+		MENU_OPTION		tDvSalinity,				oDiveSalinity,			0
+		MENU_CALL		tResetMenu,					do_reset_menu
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
 
 do_settings_piezo_menu:
-    ; Menu with features only available in piezo button hardware
-    MENU_BEGIN  tSystSets, .4
-        MENU_CALL   tResetMenu,		do_reset_menu
-        MENU_OPTION tButtonleft,	ocR_button_left,	0  ; left button sensitivity
-        MENU_OPTION tButtonright,	ocR_button_right,	0  ; right button sensitivity
-        MENU_CALL   tExit,          do_settings_menu_more_piezo_exit
-    MENU_END
+	; Menu with features only available in piezo button hardware
+	MENU_BEGIN	tSystSets, .3
+		MENU_OPTION		tButtonleft,				ocR_button_left,		0		; left button sensitivity
+		MENU_OPTION		tButtonright,				ocR_button_right,		0		; right button sensitivity
+		MENU_CALL		tExit,						do_return_settings_menu_more_pz
+	MENU_END
 
-do_settings_menu_more_ostc3p:  ; Menu with BLE feature
-    MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tCompassMenu,	do_compass_menu
-		MENU_CALL	tLogOffset,		do_log_offset_menu
-        MENU_OPTION tUnits,			oUnits,				0
-       	MENU_OPTION tAltMode,	    oAltMode,	    0		
-        MENU_OPTION tDvSalinity,	oDiveSalinity,		0
-        MENU_CALL   tResetMenu,     do_reset_menu
-        MENU_CALL   tExit,          do_return_settings
-    MENU_END
 
 do_compass_menu:
-    MENU_BEGIN  tSystSets, .5
-        MENU_CALL   tCompassMenu,   compass_calibration_loop
-;       MENU_OPTION		tCompassGain,   oCompassGain,	0
-		MENU_DYNAMIC    menu_cal_x,						0
-		MENU_DYNAMIC    menu_cal_y,						0
-		MENU_DYNAMIC    menu_cal_z,						0
-        MENU_CALL		tExit,			do_return_settings_more
-    MENU_END
+	MENU_BEGIN	tSystSets, .5
+		MENU_CALL		tCompassMenu,				compass_calibration_loop		; exits to surfloop
+;		MENU_OPTION		tCompassGain,				oCompassGain,	0
+		MENU_DYNAMIC	menu_cal_x,					0
+		MENU_DYNAMIC	menu_cal_y,					0
+		MENU_DYNAMIC	menu_cal_z,					0
+		MENU_CALL		tExit,						do_return_settings_more
+	MENU_END
+
 
 ;=============================================================================
 ; Reset and confirmation menu.
 
 do_reset_menu:
-    MENU_BEGIN  tResetMenu, .6
-        MENU_CALL       tExit,			do_return_settings
-        MENU_CALL       tReboot,		do_reset_menu2		; Confirm
-		MENU_CALL       tResetDeco,		do_reset_menu3		; Confirm
-		MENU_CALL       tResetSettings,	do_reset_menu4		; Confirm
-        MENU_CALL       tResetLogbook,	do_reset_menu5		; Confirm
-        MENU_CALL       tResetBattery,	new_battery_menu	; New Battery sub menu
-    MENU_END
+	MENU_BEGIN	tResetMenu, .6
+		MENU_CALL		tExit,						do_return_settings_more
+		MENU_CALL		tReboot,					do_reset_menu2			; Confirm
+		MENU_CALL		tResetDeco,					do_reset_menu3			; Confirm
+		MENU_CALL		tResetSettings,				do_reset_menu4			; Confirm
+		MENU_CALL		tResetLogbook,				do_reset_menu5			; Confirm
+		MENU_CALL		tResetBattery,				do_new_battery_menu		; Confirm
+	MENU_END
 
 do_reset_menu2:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tReboot,		do_reboot               ; Reboot
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tReboot,					do_reboot				; Reboot
+	MENU_END
 
 do_reset_menu3:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tResetDeco,		do_reset_deco			; Reset Deco
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tResetDeco,					do_reset_deco			; Reset Deco
+	MENU_END
 
 do_reset_menu4:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tResetSettings,	do_reset_settings		; Reset all settings
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tResetSettings,				do_reset_settings		; Reset all settings
+	MENU_END
 
 do_reset_menu5:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tResetLogbook,	do_reset_logbook		; Reset logbook
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tResetLogbook,				do_reset_logbook		; Reset logbook
+	MENU_END
+
 
 do_reset_logbook:
-	clrf    EEADRH                      ; Make sure to select eeprom bank 0
+	clrf	EEADRH						; Make sure to select EEPROM bank 0
+	clrf	EEDATA
+	read_int_eeprom  .2
+	write_int_eeprom .16
+	read_int_eeprom  .3
+	write_int_eeprom .17				; Copy number of dives
 	clrf	EEDATA
-    read_int_eeprom     .2
-    write_int_eeprom    .16
-    read_int_eeprom     .3
-    write_int_eeprom    .17             ; Copy number of dives
-    clrf	EEDATA
-    write_int_eeprom    .2
-    write_int_eeprom    .3              ; Clear total dives
-	write_int_eeprom	.4
-	write_int_eeprom	.5
-	write_int_eeprom	.6              ; Reset logbook pointers
+	write_int_eeprom .2
+	write_int_eeprom .3					; Clear total dives
+	write_int_eeprom .4
+	write_int_eeprom .5
+	write_int_eeprom .6					; Reset logbook pointers
 	call	ext_flash_erase_logbook		; And complete logbook (!)
-    goto	do_continue_main_menu		; back to menu
+
+	goto	do_return_settings_more_deeper
 
 
 do_reset_deco:
 	SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_respiration	; copy surface pressure to deco routine
 	SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_surface		; copy surface pressure to deco routine
-	
-    call    deco_clear_tissue       		; set all tissues to Pamb * N2_ratio (C-Code)
-    banksel common							; back to bank 1, needed after every return from C code
-	
-	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode
-	call	deco_calc_desaturation_time		; calculate desaturation and no-fly time
-	banksel	common	
-	
-	goto	do_return_settings				; back to menu
+
+	call	deco_clear_tissue			; set all tissues to Pamb * N2_ratio (C-Code)
+	call	deco_calc_dive_interval_1min; calculate deco in surface mode
+	call	deco_calc_desaturation_time	; calculate desaturation and no-fly time
+	banksel	common
+
+	goto	do_return_settings_more_deeper
+
 
 do_reset_settings:
-    call		TFT_ClearScreen				; Clear screen    
-    banksel common
-	extern	option_reset_all
-    call	option_reset_all				; Reset all options to factory default.
-	goto	restart							; Restart into surfacemode
-
-do_continue_menu_3stack:					; Return three levels deep
-    call    menu_processor_pop
-	goto	do_return_settings
+	call	TFT_ClearScreen				; Clear screen
+	banksel	common						; (probably not needed)
+	call	option_reset_all			; Reset all options to factory default.
+	goto	restart						; Restart into surfacemode
 
 do_reboot:
-	call	ext_flash_enable_protection		; Enables write protection
+	call	ext_flash_enable_protection	; Enables write protection
 	reset
 
 
 do_date_time_menu:
-    MENU_BEGIN  tSetTimeDate, .4
-        MENU_CALL	tSetTime,               do_time_menu
-        MENU_CALL   tSetDate,	            do_date_menu
-		MENU_OPTION tDateFormat,oDateFormat,    0
-        MENU_CALL   tExit,                  do_return_settings
-    MENU_END
+	MENU_BEGIN	tSetTimeDate, .4
+		MENU_CALL		tSetTime,					do_time_menu
+		MENU_CALL		tSetDate,					do_date_menu
+		MENU_OPTION		tDateFormat,oDateFormat,	0
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
 
 do_date_menu:
 	bsf		settime_setdate
-    MENU_BEGIN  tSetDate, .4
-        MENU_OPTION tSetDay,	oSetDay,		0
-		MENU_OPTION	tSetMonth,	oSetMonth,  	0
-        MENU_OPTION tSetYear,	oSetYear,		0
-        MENU_CALL   tExit,					do_continue_menu_3stack
-    MENU_END
+
+	MENU_BEGIN	tSetDate, .4
+		MENU_OPTION		tSetDay,					oSetDay,				0
+		MENU_OPTION		tSetMonth,					oSetMonth,				0
+		MENU_OPTION		tSetYear,					oSetYear,				0
+		MENU_CALL		tExit,						do_return_settings_deeper
+	MENU_END
 
 
 do_reset_seconds:
 	clrf	secs
-	extern	rtc_set_rtc
-	call	rtc_set_rtc			; writes mins,sec,hours,day,month and year to rtc module
+	call	rtc_set_rtc					; writes mins, sec, hours, day, month and year to RTC module
+	call	menu_processor_pop			; clear the MENU_CALL for do_reset_seconds from the stack
+	;bra	do_time_menu				; direct jump-back into the menu
+
 do_time_menu:
 	bsf		settime_setdate
-    MENU_BEGIN  tSetTime, .4
-        MENU_OPTION tSetHours,	oSetHours,		0
-		MENU_OPTION	tSetMinutes,oSetMinutes,	0
-		MENU_CALL   tSetSeconds,                do_reset_seconds
-        MENU_CALL   tExit,                      do_continue_menu_3stack
-    MENU_END
+
+	MENU_BEGIN	tSetTime, .4
+		MENU_OPTION		tSetHours,					oSetHours,				0
+		MENU_OPTION		tSetMinutes,				oSetMinutes,			0
+		MENU_CALL		tSetSeconds,				do_reset_seconds
+		MENU_CALL		tExit,						do_return_settings_deeper
+	MENU_END
 
 
-do_toggle_ppo2_max:				; add 0.1bar, with hard-coded max.
-    movff   char_I_ppO2_max,lo	; banksafe
-    movlw	.10
+do_toggle_ppo2_max:						; add 0.1bar, with hard-coded max.
+	movff	char_I_ppO2_max,lo			; banksafe
+	movlw	.10
 	addwf	lo,F
-	movlw	ppo2_highest_setting
+	movlw	ppo2_warning_high_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_max2
-	movlw	.120
+	bra		do_toggle_ppo2_max2
+	movlw	ppo2_warning_high_lowest
 	movwf	lo
 do_toggle_ppo2_max2:
-    movff   lo,char_I_ppO2_max
-    return
+	movff	lo,char_I_ppO2_max
+	return
 
-do_toggle_ppo2_max_deco:		 ; add 0.1bar, with hard-coded max.
-    movff   char_I_ppO2_max_deco,lo ; banksafe
-    movlw	.10
+do_toggle_ppo2_max_deco:				; add 0.1bar, with hard-coded max.
+	movff	char_I_ppO2_max_deco,lo		; banksafe
+	movlw	.10
 	addwf	lo,F
-	movlw	ppo2_highest_setting_deco
+	movlw	ppo2_warning_deco_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_max_deco2
-	movlw	.120
+	bra		do_toggle_ppo2_max_deco2
+	movlw	ppo2_warning_deco_lowest
 	movwf	lo
 do_toggle_ppo2_max_deco2:
-    movff   lo,char_I_ppO2_max_deco
-    return
-    
-do_toggle_ppo2_min:             ; sub 0.1bar, with hard-coded min.
-    movff   char_I_ppO2_min,lo     ; banksafe
-    incf    lo,F
-	movlw	.21
+	movff	lo,char_I_ppO2_max_deco
+	return
+
+do_toggle_ppo2_min:						; sub 0.1bar, with hard-coded min.
+	movff	char_I_ppO2_min,lo			; banksafe
+	incf	lo,F
+	movlw	ppo2_warning_low_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_min2
-	movlw	ppo2_lowest_setting
+	bra		do_toggle_ppo2_min2
+	movlw	ppo2_warning_low_lowest
 	movwf	lo
 do_toggle_ppo2_min2:
-    movff   lo,char_I_ppO2_min
-    return
+	movff	lo,char_I_ppO2_min
+	return
 
-do_toggle_ppo2_min_cc:			; sub 0.1bar, with hard-coded min.
-    movff   char_I_ppO2_min_loop,lo	; banksafe
-    incf    lo,F
-	movlw	ppo2_warning_low_cc_max
+do_toggle_ppo2_min_cc:					; sub 0.1bar, with hard-coded min.
+	movff	char_I_ppO2_min_loop,lo		; banksafe
+	incf	lo,F
+	movlw	ppo2_warning_loop_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_min_cc2
-	movlw	ppo2_warning_low_cc_min
+	bra		do_toggle_ppo2_min_cc2
+	movlw	ppo2_warning_loop_lowest
 	movwf	lo
 do_toggle_ppo2_min_cc2:
-    movff   lo,char_I_ppO2_min_loop
-    return
-	
+	movff	lo,char_I_ppO2_min_loop
+	return
+
 
 	; Logbook offset sub-menu
 do_log_offset_menu:
-	MENU_BEGIN  tLogOffset, .6
-        MENU_DYNAMIC    TFT_LogOffset_Logtitle,      0
-		MENU_CALL       tLogOffsetp1,				do_logoffset_plus1
-		MENU_CALL       tLogOffsetp10,				do_logoffset_plus10
-		MENU_CALL       tLogOffsetm1,				do_logoffset_minus1
-		MENU_CALL       tLogOffsetm10,				do_logoffset_minus10
-        MENU_CALL       tExit,                  	do_return_settings_more
-    MENU_END
+	MENU_BEGIN	tLogOffset, .6
+		MENU_DYNAMIC	TFT_LogOffset_Logtitle,		0
+		MENU_CALL		tLogOffsetp1,				do_logoffset_plus1
+		MENU_CALL		tLogOffsetp10,				do_logoffset_plus10
+		MENU_CALL		tLogOffsetm1,				do_logoffset_minus1
+		MENU_CALL		tLogOffsetm10,				do_logoffset_minus10
+		MENU_CALL		tExit,						do_return_settings_more
+	MENU_END
 
 
 do_logoffset_minus1:
-	call	do_logoffset_common_read			; Read into lo:hi
-	movlw	d'1'
+	call	do_logoffset_common_read	; Read into lo:hi
+	movlw	.1
 	subwf	lo
-	movlw	d'0'
+	movlw	.0
 	subwfb	hi
-	btfss	hi,7								; <0?
-	goto	do_logoffset_common_write			; Store and return
+	btfss	hi,7						; <0?
+	goto	do_logoffset_common_write	; Store and return
 	clrf	lo
 	clrf	hi
-	goto	do_logoffset_common_write			; Store and return
+	goto	do_logoffset_common_write	; Store and return
 
 do_logoffset_minus10:
-	call	do_logoffset_common_read			; Read into lo:hi
-	movlw	d'10'
+	call	do_logoffset_common_read	; Read into lo:hi
+	movlw	.10
 	subwf	lo
-	movlw	d'0'
+	movlw	.0
 	subwfb	hi
-	btfss	hi,7								; <0?
-	goto	do_logoffset_common_write			; Store and return
+	btfss	hi,7						; <0?
+	goto	do_logoffset_common_write	; Store and return
 	clrf	lo
 	clrf	hi
-	goto	do_logoffset_common_write			; Store and return
+	goto	do_logoffset_common_write	; Store and return
 
 do_logoffset_plus1:
-	call	do_logoffset_common_read			; Read into lo:hi
-    infsnz  lo,F
-    incf    hi,F
-	goto	do_logoffset_common_write			; Store and return
+	call	do_logoffset_common_read	; Read into lo:hi
+	infsnz	lo,F
+	incf	hi,F
+	goto	do_logoffset_common_write	; Store and return
 
 do_logoffset_plus10:
-	call	do_logoffset_common_read			; Read into lo:hi
-	movlw	d'10'
+	call	do_logoffset_common_read	; Read into lo:hi
+	movlw	.10
 	addwf	lo
-	movlw	d'0'
+	movlw	.0
 	addwfc	hi
-	goto	do_logoffset_common_write			; Store and return
+	goto	do_logoffset_common_write	; Store and return
 
-do_dispsets_menu_3stack:
-    bcf		in_color_menu
-    call	menu_tree_double_pop	; drop exit line and back to last line
+do_return_dispsets_menu:
+	bcf		in_color_menu
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_dispsets_menu:
-	MENU_BEGIN  tDispSets, .5
-        MENU_OPTION tBright,       oBrightness,   0
-        MENU_CALL   tColorScheme,                 do_color_scheme
-        MENU_OPTION tFlip,         oFlipScreen,   0
-        MENU_CALL   tMore,                        do_dispsets_menu_more
-        MENU_CALL   tExit,                        do_return_settings
-    MENU_END
+	MENU_BEGIN	tDispSets, .5
+		MENU_OPTION		tBright,					oBrightness,			0
+		MENU_CALL		tColorScheme,				do_color_scheme
+		MENU_OPTION		tFlip,						oFlipScreen,			0
+		MENU_CALL		tMore,						do_dispsets_menu_more
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
 
 do_dispsets_menu_more:
-    MENU_BEGIN  tDispSets, .6
-        MENU_OPTION tMODwarning,   oMODwarning,   	0
-		MENU_OPTION tIBCDwarning,  oEnable_IBCD,	0
-        MENU_OPTION tVSItext2,     oVSItextv2,    	0
-        MENU_OPTION tVSIgraph,     oVSIgraph,     	0
-		MENU_OPTION tTimeoutDive,  oDiveTimeout,  	0
-        MENU_CALL   tExit,                        do_dispsets_menu_3stack
-    MENU_END
+	MENU_BEGIN	tDispSets, .7
+		MENU_OPTION		tMODwarning,				oMODwarning,			0
+		MENU_OPTION		tIBCDwarning,				oEnable_IBCD,			0
+		MENU_OPTION		tVSItext2,					oVSItextv2,				0
+		MENU_OPTION		tVSIgraph,					oVSIgraph,				0
+		MENU_OPTION		tTimeoutDive,				oDiveTimeout,			0
+		MENU_OPTION		tUnits,						oUnits,					0
+		MENU_CALL		tExit,						do_return_dispsets_menu
+	MENU_END
 
-    extern  oColorSetDive
+
 do_color_scheme:
-    bsf		in_color_menu
-	MENU_BEGIN  tColorScheme, .2
-        MENU_OPTION     tColorSetDive,oColorSetDive,  0
-        MENU_CALL       tExit,                  	do_dispsets_menu_3stack
-    MENU_END
+	bsf		in_color_menu
+
+	MENU_BEGIN	tColorScheme, .2
+		MENU_OPTION		tColorSetDive,				oColorSetDive,			0
+		MENU_CALL		tExit,						do_return_dispsets_menu
+	MENU_END
 
 
 ;=============================================================================
 
-	global	new_battery_menu
-	extern	surfloop
-new_battery_menu:
-    bsf     enable_screen_dumps     ; To prevent exiting into COMM mode immediately
-	call	TFT_boot                ; Initialize TFT (includes clear screen)
-	call    TFT_Display_FadeIn      ; Show splash
-    movlw   .100
-    movwf   batt_percent            ; make sure to reset batt_percent
-    
-    ; Default (In cases of timeout or USB): Use old battery
+do_new_battery_menu:
+	MENU_BEGIN	tNewBattTitle, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tYes,						do_new_battery_select
+	MENU_END
+
+	global	do_new_battery_select
+do_new_battery_select:
+	bsf		enable_screen_dumps			; To prevent exiting into COMM mode immediately
+	call	TFT_boot					; Initialize TFT (includes clear screen)
+	call	TFT_Display_FadeIn			; Show splash
+	movlw	.100
+	movwf	batt_percent				; make sure to reset batt_percent
+
+	; Default (In cases of timeout or USB): Use old battery
 	clrf	EEADRH
 	read_int_eeprom 0x07
 	movff	EEDATA,battery_gauge+0
@@ -767,85 +814,84 @@
 	read_int_eeprom 0x0C
 	movff	EEDATA,battery_gauge+5
 
-	call    menu_processor_reset    ; restart from first icon.
- 
-	MENU_BEGIN tNewBattTitle, .1
-		MENU_CALL   tEnter, new_battery_menu2
-        MENU_END
-	
-new_battery_menu2:
-    ; hardware_flag:
-    ; 3: 0x0A or 0x13 (2016)
-    ; cR: 0x05
-    ; 2 with BLE: 0x11
-    ; Sport: 0x12
-    ; 3 with BLE: 0x1A 
+	call	menu_processor_reset		; restart from first icon.
+
+	; hardware_flag:
+	; 3: 0x0A or 0x13 (2016)
+	; cR: 0x05
+	; 2 with BLE: 0x11
+	; Sport: 0x12
+	; 3 with BLE: 0x1A 
 
-    movlw   0x0A
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA
-    movlw   0x13
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA_16650
-    movlw   0x12
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA
-    movlw   0x1A
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA
-    movlw   0x11
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_18650
-    movlw   0x05
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_18650
-    bra	    use_old_batteries		; any unsupported value
-    
+	movlw	0x0A
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA
+	movlw	0x13
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA_16650
+	movlw	0x12
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA
+	movlw	0x1A
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA
+	movlw	0x11
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_18650
+	movlw	0x05
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_18650
+	bra		use_old_batteries			; any unsupported value
+
+
 menu_new_battery_AA_16650:
-    MENU_BEGIN tNewBattTitle, .5
-		MENU_CALL   tNewBattOld,		use_old_batteries
-		MENU_CALL   tNewBattNew36,		use_new_36V_batteries
-		MENU_CALL   tNewBattNew15,		use_new_15V_batteries
-		MENU_CALL   tNewBattAccu,		use_36V_rechargeable
-		MENU_CALL   tNew16650,			use_16650_battery
-    MENU_END
-    
+	MENU_BEGIN	tNewBattTitle, .5
+		MENU_CALL		tNewBattOld,				use_old_batteries
+		MENU_CALL		tNewBattNew36,				use_new_36V_batteries
+		MENU_CALL		tNewBattNew15,				use_new_15V_batteries
+		MENU_CALL		tNewBattAccu,				use_36V_rechargeable
+		MENU_CALL		tNew16650,					use_16650_battery
+	MENU_END
+
+
 menu_new_battery_AA:
-    MENU_BEGIN tNewBattTitle, .4
-		MENU_CALL   tNewBattOld,		use_old_batteries
-		MENU_CALL   tNewBattNew36,		use_new_36V_batteries
-		MENU_CALL   tNewBattNew15,		use_new_15V_batteries
-		MENU_CALL   tNewBattAccu,		use_36V_rechargeable
-    MENU_END
+	MENU_BEGIN	tNewBattTitle, .4
+		MENU_CALL		tNewBattOld,				use_old_batteries
+		MENU_CALL		tNewBattNew36,				use_new_36V_batteries
+		MENU_CALL		tNewBattNew15,				use_new_15V_batteries
+		MENU_CALL		tNewBattAccu,				use_36V_rechargeable
+	MENU_END
+
 
 menu_new_battery_18650:
-    MENU_BEGIN tNewBattTitle, .2
-		MENU_CALL   tNewBattOld,		use_old_batteries
-		MENU_CALL   tNew18650,			use_18650_battery
-    MENU_END
+	MENU_BEGIN	tNewBattTitle, .2
+		MENU_CALL		tNewBattOld,				use_old_batteries
+		MENU_CALL		tNew18650,					use_18650_battery
+	MENU_END
 
-    
+
 	global	use_old_prior_209
 use_old_prior_209:
 	clrf	EEADRH
-	read_int_eeprom 0x0F	    	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
-	incfsz	EEDATA,F	    		; Was 0xFF?
-	return			    			; No, done.
+	read_int_eeprom 0x0F				; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+	incfsz	EEDATA,F					; Was 0xFF?
+	return								; No, done.
 
-	call    lt2942_get_status   	; Check for gauge IC
-	movlw   .3						; Assume a 18650
-	btfss   battery_gauge_available ; cR/2 hardware?
-	movlw   .1						; Assume a Saft
-        movwf	EEDATA
-	write_int_eeprom 0x0F			; Store the new battery type into EEPROM
+	call	lt2942_get_status			; Check for gauge IC
+	movlw	.3							; Assume a 18650
+	btfss	battery_gauge_available		; cR/2 hardware?
+	movlw	.1							; Assume a Saft
+	movwf	EEDATA
+	write_int_eeprom 0x0F				; Store the new battery type into EEPROM
 	return
-	
+
+
 	global	use_old_batteries
 use_old_batteries:
 	clrf	EEADRH
@@ -862,130 +908,136 @@
 	read_int_eeprom 0x0C
 	movff	EEDATA,battery_gauge+5
 	read_int_eeprom 0x0F
-	movff	EEDATA,battery_type	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+	movff	EEDATA,battery_type			; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
 
-	rcall	setup_new_saft	    ; Any other value
-	incf	EEDATA,F	    	; 1 ... 5
+	rcall	setup_new_saft				; Any other value
+	incf	EEDATA,F					; 1 ... 5
 	dcfsnz	EEDATA,F
-	rcall	setup_new_15v	    ;=0
+	rcall	setup_new_15v				;=0
 	dcfsnz	EEDATA,F
-	rcall	setup_new_saft	    ;=1
+	rcall	setup_new_saft				;=1
 	dcfsnz	EEDATA,F
-	rcall	setup_new_panasonic ;=2
-	dcfsnz	EEDATA,F		   
-	rcall	setup_new_18650	    ;=3
-	dcfsnz	EEDATA,F		   
-	rcall	setup_new_16650	    ;=4
-	
-	bcf	use_old_batt_flag		; clear flag
-	goto	surfloop			; Jump to Surfaceloop!
+	rcall	setup_new_panasonic			;=2
+	dcfsnz	EEDATA,F
+	rcall	setup_new_18650				;=3
+	dcfsnz	EEDATA,F
+	rcall	setup_new_16650				;=4
+
+	bcf		use_old_batt_flag			; clear flag
+	goto	surfloop					; Jump to Surfaceloop!
+
 
 setup_new_15v:
-    bsf	    charge_disable
-    bcf	    TRISE,2
-    movlw   .100
-    movwf   batt_percent		; To have 1,5V batteries right after firmware update
-    movlw   .0
-    movff   WREG,battery_type
-    return
-    
+	bsf		charge_disable
+	bcf		TRISE,2
+	movlw	.100
+	movwf	batt_percent				; To have 1,5V batteries right after firmware update
+	movlw	.0
+	movff	WREG,battery_type
+	return
+
+
 setup_new_saft:
-    banksel battery_capacity
-    movlw   LOW	    internal_saft_capacity
-    movwf   internal_battery_capacity+0
-    movlw   HIGH    internal_saft_capacity
-    movwf   internal_battery_capacity+1
-    movlw   LOW	    saft_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    saft_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    saft_offset
-    movwf   battery_offset+0
-    movlw   HIGH    saft_offset
-    movwf   battery_offset+1
-    banksel common
-    bsf	    charge_disable
-    bcf	    TRISE,2
-    movlw   .1
-    movff   WREG,battery_type
-    return
+	banksel	battery_capacity
+	movlw	LOW		internal_saft_capacity
+	movwf	internal_battery_capacity+0
+	movlw	HIGH	internal_saft_capacity
+	movwf	internal_battery_capacity+1
+	movlw	LOW		saft_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	saft_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		saft_offset
+	movwf	battery_offset+0
+	movlw	HIGH	saft_offset
+	movwf	battery_offset+1
+	banksel	common
+	bsf		charge_disable
+	bcf		TRISE,2
+	movlw	.1
+	movff	WREG,battery_type
+	return
+
 
-setup_new_panasonic:    
-    banksel battery_capacity
-    movlw   LOW	    internal_panasonic_capacity
-    movwf   internal_battery_capacity+0
-    movlw   HIGH    internal_panasonic_capacity
-    movwf   internal_battery_capacity+1
-    movlw   LOW	    panasonic_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    panasonic_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    panasonic_offset
-    movwf   battery_offset+0
-    movlw   HIGH    panasonic_offset
-    movwf   battery_offset+1
-    banksel common
-    bcf	    charge_disable
-    bsf	    TRISE,2
-    movlw   .2
-    movff   WREG,battery_type
-    return    
+setup_new_panasonic:
+	banksel battery_capacity
+	movlw	LOW		internal_panasonic_capacity
+	movwf	internal_battery_capacity+0
+	movlw	HIGH	internal_panasonic_capacity
+	movwf	internal_battery_capacity+1
+	movlw	LOW		panasonic_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	panasonic_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		panasonic_offset
+	movwf	battery_offset+0
+	movlw	HIGH	panasonic_offset
+	movwf	battery_offset+1
+	banksel	common
+	bcf		charge_disable
+	bsf		TRISE,2
+	movlw	.2
+	movff	WREG,battery_type
+	return
 
-setup_new_18650:    
-    banksel battery_capacity
-    clrf    internal_battery_capacity+0
-    clrf    internal_battery_capacity+1
-    movlw   LOW	    ncr18650_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    ncr18650_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    ncr18650_offset
-    movwf   battery_offset+0
-    movlw   HIGH    ncr18650_offset
-    movwf   battery_offset+1
-    banksel common
-    bcf	    charge_disable
-    bsf	    TRISE,2
-    movlw   .3
-    movff   WREG,battery_type
-    return
+
+setup_new_18650:
+	banksel	battery_capacity
+	clrf	internal_battery_capacity+0
+	clrf	internal_battery_capacity+1
+	movlw	LOW		ncr18650_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	ncr18650_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		ncr18650_offset
+	movwf	battery_offset+0
+	movlw	HIGH	ncr18650_offset
+	movwf	battery_offset+1
+	banksel	common
+	bcf		charge_disable
+	bsf		TRISE,2
+	movlw	.3
+	movff	WREG,battery_type
+	return
+
 
 setup_new_16650:
-    banksel battery_capacity
-    clrf    internal_battery_capacity+0
-    clrf    internal_battery_capacity+1
-    movlw   LOW	    ur16650_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    ur16650_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    ur16650_offset
-    movwf   battery_offset+0
-    movlw   HIGH    ur16650_offset
-    movwf   battery_offset+1
-    banksel common
-    bcf	    charge_disable
-    bsf	    TRISE,2
-    movlw   .4
-    movff   WREG,battery_type
-    return
+	banksel	battery_capacity
+	clrf	internal_battery_capacity+0
+	clrf	internal_battery_capacity+1
+	movlw	LOW		ur16650_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	ur16650_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		ur16650_offset
+	movwf	battery_offset+0
+	movlw	HIGH	ur16650_offset
+	movwf	battery_offset+1
+	banksel	common
+	bcf		charge_disable
+	bsf		TRISE,2
+	movlw	.4
+	movff	WREG,battery_type
+	return
+
 
 use_16650_battery:
-    rcall   setup_new_16650
-    bra	    use_new_36V_2
+	rcall	setup_new_16650
+	bra		use_new_36V_2
 use_18650_battery:
-    rcall   setup_new_18650
-    bra	    use_new_36V_2
+	rcall	setup_new_18650
+	bra		use_new_36V_2
 use_new_36V_batteries:
-    rcall   setup_new_saft
-    bra	    use_new_36V_2
+	rcall	setup_new_saft
+	bra		use_new_36V_2
 use_new_15V_batteries:
-    rcall   setup_new_15v
+	rcall	setup_new_15v
 use_new_36V_2:
-    call    reset_battery_pointer	; Resets battery pointer 0x07-0x0C and battery_gauge:5
-    goto    surfloop				; Jump to Surface loop!
+	call	reset_battery_pointer		; Resets battery pointer 0x07-0x0C and battery_gauge:5
+	goto	surfloop					; Jump to Surface loop!
 use_36V_rechargeable:
-    rcall   setup_new_panasonic
-    call    reset_battery_internal_only
-    goto    surfloop				; Jump to Surface loop!
+	rcall	setup_new_panasonic
+	call	reset_battery_internal_only
+	goto	surfloop					; Jump to Surface loop!
 
-    END
\ No newline at end of file
+	END
\ No newline at end of file
--- a/src/option_table.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/option_table.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File option_table.asm							REFACTORED VERSION V2.95
+;   File option_table.asm							REFACTORED VERSION V2.98
 ;
 ;   The option table
 ;
@@ -10,274 +10,270 @@
 ;   2014-08-03 : mH creation
 ;
 
-#include    "hwos.inc"                  ; Mandatory header
-#include    "eeprom_rs232.inc"
+#include "hwos.inc"					; Mandatory header
+#include "eeprom_rs232.inc"
 
 ;=============================================================================
 ; Options Tables
 
-option_table    CODE 0x00700
+option_table	CODE 0x00700
 
-OPTION_UINT8    MACRO   lbl, min, max, default, unit, eeprom, register
-        global  lbl
-lbl:    db      0, default  ; Type0 = INT8
-        db      1, min
-        db      max, eeprom
-        dw      unit
-        dw      register
-        ENDM
+OPTION_UINT8	MACRO lbl, min, max, default, unit, eeprom, register
+		global	lbl
+lbl:	db		0, default			; Type0 = INT8
+		db		1, min
+		db		max, eeprom
+		dw		unit
+		dw		register
+		ENDM
 
-OPTION_UINT8p2  MACRO   lbl, min, max, default, unit, eeprom, register
-        global  lbl
-lbl:    db      0, default  ; Type0 = INT8
-        db      2, min
-        db      max, eeprom
-        dw      unit
-        dw      register
-        ENDM
+OPTION_UINT8p2	MACRO lbl, min, max, default, unit, eeprom, register
+		global	lbl
+lbl:	db		0, default			; Type0 = INT8
+		db		2, min
+		db		max, eeprom
+		dw		unit
+		dw	register
+		ENDM
 
-OPTION_UINT8p3  MACRO   lbl, min, max, default, unit, eeprom, register
-        global  lbl
-lbl:    db      0, default  ; Type0 = INT8
-        db      3, min
-        db      max, eeprom
-        dw      unit
-        dw      register
-        ENDM
+OPTION_UINT8p3	MACRO lbl, min, max, default, unit, eeprom, register
+		global	lbl
+lbl:	db		0, default			; Type0 = INT8
+		db		3, min
+		db		max, eeprom
+		dw		unit
+		dw		register
+		ENDM
 
-; NEW	## deco engine
-OPTION_UINT8p5  MACRO   lbl, min, max, default, unit, eeprom, register
-        global  lbl
-lbl:    db      0, default  ; Type0 = INT8
-        db      .5, min
-        db      max, eeprom
-        dw      unit
-        dw      register
-        ENDM		
-		
-OPTION_UINT8p10  MACRO   lbl, min, max, default, unit, eeprom, register
-        global  lbl
-lbl:    db      0, default  ; Type0 = INT8
-        db      .10, min
-        db      max, eeprom
-        dw      unit
-        dw      register
-        ENDM
+OPTION_UINT8p5	MACRO lbl, min, max, default, unit, eeprom, register
+		global	lbl
+lbl:	db		0, default			; Type0 = INT8
+		db		.5, min
+		db		max, eeprom
+		dw		unit
+		dw		register
+		ENDM
 
-OPTION_ENUM8    MACRO   lbl, max, default, tValue, eeprom, register
-        global  lbl
-        extern  tValue
-lbl:    db      1, default  ; Type1 = ENUM
-        db      LOW(tValue), HIGH(tValue)
-        db      max, eeprom
-        dw      0                       ; No unit
-        dw      register
-        ENDM
+OPTION_UINT8p10	MACRO lbl, min, max, default, unit, eeprom, register
+		global	lbl
+lbl:	db		0, default			; Type0 = INT8
+		db		.10, min
+		db		max, eeprom
+		dw		unit
+		dw		register
+		ENDM
 
-OPTION_BOOL     MACRO   lbl, default, eeprom, register
-        OPTION_ENUM8    lbl, 2, default, tNo, eeprom, register
-        ENDM
+OPTION_ENUM8	MACRO lbl, max, default, tValue, eeprom, register
+		global	lbl
+		extern	tValue
+lbl:	db		1, default			; Type1 = ENUM
+		db		LOW(tValue), HIGH(tValue)
+		db		max, eeprom
+		dw		0					; No unit
+		dw		register
+		ENDM
+
+OPTION_BOOL		MACRO lbl, default, eeprom, register
+		OPTION_ENUM8 lbl, 2, default, tNo, eeprom, register
+		ENDM
 
 
-OPTION_STRING   MACRO   lbl, length, defText, eeprom, register
-        global  lbl
-lbl:    db      2, LOW(defText)         ; Type2 = STRING
-        db      HIGH(defText), 0
-        db      length, eeprom
-        dw      0                       ; No unit
-        dw      register
-        ENDM
+OPTION_STRING	MACRO lbl, length, defText, eeprom, register
+		global	lbl
+lbl:	db		2, LOW(defText)		; Type2 = STRING
+		db		HIGH(defText), 0
+		db		length, eeprom
+		dw		0					; No unit
+		dw		register
+		ENDM
 
 
 ;=============================================================================
-        extern  tPercent, tMeters, tMinutes, tGasDisabled, tbar
-        extern  char_I_deco_gas_change, char_I_setpoint_change, char_I_setpoint_cbar
-        extern  char_I_dive_interval, char_I_bottom_time, char_I_bottom_depth
-        extern  char_I_deco_model
-        extern  char_I_extra_time
-        extern  tDefName, tblank
-        extern  char_I_bottom_usage, char_I_deco_usage, tLitersMinute
-		
-		; NEW	## deco engine
-		extern	char_I_PSCR_drop, char_I_PSCR_lungratio
-		
-		; NEW	## bailout gas needs
-		extern	char_I_tank_size, char_I_tank_pres_fill, tLiter, tbar10
-		
-		; NEW	## CCR max ppO2 limiter
-		extern	char_I_cc_max_frac_o2
-		
-		; NEW	## no fly altitude
-		extern	char_I_altitude_wait
-		
-		; NEW	## V2.94
-		extern	char_I_ppO2_max, char_I_ppO2_min, char_I_ppO2_max_deco, char_I_ppO2_min_loop
-		
-		; NEW	## V2.94 / V2.95
-		extern	char_I_ascent_speed, tMeterMinute
-		
-		; NEW	## V2.95
-		extern	char_I_gas_change_time, tmin
-		
-    ; Option table
-    ; OPTION_UINT8  Label,   min,    max,    default, text-string,   EEPROM location (-1 for RAM only),   RAM location
-    global  option_table_begin
+	extern	tPercent, tMeters, tMinutes, tGasDisabled, tbar
+	extern	char_I_deco_gas_change, char_I_setpoint_change, char_I_setpoint_cbar, char_I_dil_change
+	extern	char_I_dive_interval, char_I_bottom_time, char_I_bottom_depth
+	extern	char_I_deco_model
+	extern	char_I_extra_time
+	extern	tDefName, tblank
+	extern	char_I_bottom_usage, char_I_deco_usage, tLitersMinute
+	extern	char_I_PSCR_drop, char_I_PSCR_lungratio
+	extern	char_I_tank_size, char_I_tank_pres_fill, tLiter, tbar10
+	extern	char_I_cc_max_frac_o2
+	extern	char_I_altitude_wait
+	extern	char_I_ppO2_max, char_I_ppO2_min, char_I_ppO2_max_deco, char_I_ppO2_min_loop
+	extern	char_I_ascent_speed, tMeterMinute
+	extern	char_I_gas_change_time, tmin
+
+; Option table
+;	OPTION_UINT8	Label,				min,			max,		  default, text-string, EEPROM location, RAM location
+
+#DEFINE notext		.0		; no text-string associated
+#DEFINE volatile	-1		; do not store to EEPROM
+
+	global	option_table_begin
 option_table_begin:
 ;=============================================================================
 ; Manage Decoplaner & Dive parameters
-        OPTION_UINT8p10 odiveInterval,  .0, .240,   .0,     tMinutes, -1,     char_I_dive_interval
-        OPTION_UINT8p2  obottomTime,    .1, .60,    .5,     tMinutes, -1,     char_I_bottom_time
-        OPTION_UINT8p3  obottomDepth,   .12,.120,    .21,    tMeters,  -1,     char_I_bottom_depth
-        OPTION_ENUM8    oDiveMode,      5,  0,  tDvOC,               .8,    opt_dive_mode               ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR 
-        OPTION_ENUM8    oDecoMode,      2,  1,  tZHL16,              .9,    char_I_deco_model           ; 0 = ZH-L16, 1 = ZH-L16-GF
-        OPTION_UINT8p10 oPPO2Max,       .120, ppo2_warning_high, .160,   0,      .10,    char_I_ppO2_max
-        OPTION_UINT8    oLastDeco,      .3,  .6, .3,  tMeters,      .11,    opt_last_stop
-        OPTION_UINT8    oGF_low,       .10,  .100, .30,  tPercent,  .12,    opt_GF_low
-        OPTION_UINT8    oGF_high,      .45,  .110, .85, tPercent,   .13,    opt_GF_high
-        OPTION_UINT8p5 osatmultgf,      .100,  .140, .100,tPercent,  .14,    opt_sat_multiplier_gf	    ; For GF Mode
-        OPTION_UINT8p5 odesatmultgf,    .60,  .100,  .100,tPercent,   .15,    opt_desat_multiplier_gf   ; For GF Mode
-        OPTION_UINT8p10 oPPO2Min,       .16, ppo2_warning_low, .19,   0,         .16,    char_I_ppO2_min
-        OPTION_UINT8    oaGF_low,      .10,  .100, .30,  tPercent,  .17,    opt_aGF_low
-        OPTION_UINT8    oaGF_high,     .45,  .110, .85, tPercent,   .18,    opt_aGF_high
-        OPTION_BOOL     oEnable_aGF,    0,                          .19,    opt_enable_aGF              ; =1: aGF can be selected underwater
-        OPTION_UINT8    oCompassGain,   0,  7,  6,       tMinutes,  .20,    opt_compass_gain            ; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
-        OPTION_ENUM8    oSamplingRate,  2,  0,  tSetSeconds,        .21,    opt_sampling_rate           ; =1: 10s, =0: 2s
+	OPTION_UINT8p10	odiveInterval,		.0,				.240,			.0,		tMinutes,	volatile,	char_I_dive_interval
+	OPTION_UINT8p2	obottomTime,		.1,				.60,			.5,		tMinutes,	volatile,	char_I_bottom_time
+	OPTION_UINT8p3	obottomDepth,		.12,			.120,			.21,	tMeters,	volatile,	char_I_bottom_depth
+	OPTION_ENUM8	oDiveMode,			.5,								.0,		tDvOC,			.8,		opt_dive_mode					; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR 
+	OPTION_ENUM8	oDecoMode,			.2,								.1,		tZHL16,			.9,		char_I_deco_model				; 0 = ZH-L16, 1 = ZH-L16-GF
+	;																							.10										; in use, see below
+	OPTION_UINT8	oLastDeco,			.3,				.6,				.3,		tMeters,		.11,	opt_last_stop
+	OPTION_UINT8	oGF_low,			.10,			.100,			.30,	tPercent,		.12,	opt_GF_low
+	OPTION_UINT8	oGF_high,			.45,			.110,			.85,	tPercent,		.13,	opt_GF_high
+	OPTION_UINT8p5	osatmultgf,			.100,			.140,			.100,	tPercent,		.14,	opt_sat_multiplier_gf			; for GF mode
+	OPTION_UINT8p5	odesatmultgf,		.60,			.100,			.100,	tPercent,		.15,	opt_desat_multiplier_gf			; for GF mode
+	;																							.16										; in use, see below
+	OPTION_UINT8	oaGF_low,			.10,			.100,			.30,	tPercent,		.17,	opt_aGF_low
+	OPTION_UINT8	oaGF_high,			.45,			.110,			.85,	tPercent,		.18,	opt_aGF_high
+	OPTION_BOOL		oEnable_aGF,		.0,														.19,	opt_enable_aGF					; =1: aGF can be selected underwater
+	OPTION_UINT8	oCompassGain,		.0,				.7,				.6,		tMinutes,		.20,	opt_compass_gain				; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
+	OPTION_ENUM8	oSamplingRate,		.2,								.0,		tSetSeconds,	.21,	opt_sampling_rate				; =1: 10s, =0: 2s
 
 ;=============================================================================
 ; Managing Settings
-        OPTION_UINT8    oExtraTime,     0,  .9,   0,tMinutes,   .22,    char_I_extra_time               ; Future TTS
-        OPTION_ENUM8    oBrightness,    3,  0,  tEco,           .23,    opt_brightness                  ; =0: Eco, =1:Medium, =2:Full
-        OPTION_UINT8    oDiveSalinity,  0,  4, 0,  tPercent,    .24,    opt_salinity                    ; 0-4%
-        OPTION_ENUM8    oCCRMode,    3,  0,  tCCRModeFixedSP,   .25,    opt_ccr_mode                    ; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	OPTION_UINT8	oExtraTime,			.0,				.9,				.0,		tMinutes,		.22,	char_I_extra_time				; Future TTS
+	OPTION_ENUM8	oBrightness,		.3,								.0,		tEco,			.23,	opt_brightness					; =0: Eco, =1:Medium, =2:Full
+	OPTION_UINT8	oDiveSalinity,		.0,				.4,				.0,		tPercent,		.24,	opt_salinity					; 0-4%
+	OPTION_ENUM8	oCCRMode,			.3,								.0,		tCCRModeFixedSP,.25,	opt_ccr_mode					; =0: Fixed SP, =1: Sensor, =2: Auto SP
 
-		IFNDEF	french_italian
-		OPTION_ENUM8    oLanguage,      2,  0,  tEnglish,   .26,    opt_language                        ; 0=EN, 1=DE
-		ELSE
-		OPTION_ENUM8    oLanguage,      2,  0,  tFrench,    .26,    opt_language                        ; 0=FR, 1=IT
-		ENDIF
-		OPTION_ENUM8    oDateFormat,    3,  1,  tDateformat,.27,    opt_dateformat                      ; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
-        OPTION_ENUM8    oUnits,         2,  0,  tMetric,    .28,    opt_units                           ; 0=Meters, 1=Feets
+	IFNDEF	french_italian
+	OPTION_ENUM8	oLanguage,			.2,								.0,		tEnglish,		.26,	opt_language					; 0=EN, 1=DE
+	ELSE
+	OPTION_ENUM8	oLanguage,			.2,								.0,		tFrench,		.26,	opt_language					; 0=FR, 1=IT
+	ENDIF
+	OPTION_ENUM8	oDateFormat,		.3,								.1,		tDateformat,	.27,	opt_dateformat					; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
+	OPTION_ENUM8	oUnits,				.2,								.0,		tMetric,		.28,	opt_units						; 0=Meter, 1=Feet
 
 ;=============================================================================
 ; Compass calibration data
-        OPTION_UINT8    oCalx0,         0,.255,.0,      0,  .29,    compass_CX_f+0
-        OPTION_UINT8    oCalx1,         0,.255,.0,      0,  .30,    compass_CX_f+1
-        OPTION_UINT8    oCaly0,         0,.255,.0,      0,  .31,    compass_CY_f+0
-        OPTION_UINT8    oCaly1,         0,.255,.0,      0,  .32,    compass_CY_f+1
-        OPTION_UINT8    oCalz0,         0,.255,.0,      0,  .33,    compass_CZ_f+0
-        OPTION_UINT8    oCalz1,         0,.255,.0,      0,  .34,    compass_CZ_f+1
+	OPTION_UINT8	oCalx0,				.0,				.255,			.0,		notext,			.29,	compass_CX_f+0
+	OPTION_UINT8	oCalx1,				.0,				.255,			.0,		notext,			.30,	compass_CX_f+1
+	OPTION_UINT8	oCaly0,				.0,				.255,			.0,		notext,			.31,	compass_CY_f+0
+	OPTION_UINT8	oCaly1,				.0,				.255,			.0,		notext,			.32,	compass_CY_f+1
+	OPTION_UINT8	oCalz0,				.0,				.255,			.0,		notext,			.33,	compass_CZ_f+0
+	OPTION_UINT8	oCalz1,				.0,				.255,			.0,		notext,			.34,	compass_CZ_f+1
 
 ;=============================================================================
 ; Gas list
-        OPTION_ENUM8    oGas1,          3,  1,  tGasDisabled,         .35,     opt_gas_type+0; 0=Disabled, 1=First, 2=Travel, 3=Deco
-        OPTION_ENUM8    oGas2,          3,  0,  tGasDisabled,         .36,     opt_gas_type+1
-        OPTION_ENUM8    oGas3,          3,  0,  tGasDisabled,         .37,     opt_gas_type+2
-        OPTION_ENUM8    oGas4,          3,  0,  tGasDisabled,         .38,     opt_gas_type+3
-        OPTION_ENUM8    oGas5,          3,  0,  tGasDisabled,         .39,     opt_gas_type+4
-        OPTION_UINT8    oGas1O2,        .7 ,.100,   .21,    tPercent, .40,     opt_gas_O2_ratio+0
-        OPTION_UINT8    oGas1He,        .1, .100,   .0,     tPercent, .41,     opt_gas_He_ratio+0
-        OPTION_UINT8    oGas2O2,        .7 ,.100,   .21,    tPercent, .42,     opt_gas_O2_ratio+1
-        OPTION_UINT8    oGas2He,        .1, .100,   .0,     tPercent, .43,     opt_gas_He_ratio+1
-        OPTION_UINT8    oGas3O2,        .7 ,.100,   .21,    tPercent, .44,     opt_gas_O2_ratio+2
-        OPTION_UINT8    oGas3He,        .1, .100,   .0,     tPercent, .45,     opt_gas_He_ratio+2
-        OPTION_UINT8    oGas4O2,        .7 ,.100,   .21,    tPercent, .46,     opt_gas_O2_ratio+3
-        OPTION_UINT8    oGas4He,        .1, .100,   .0,     tPercent, .47,     opt_gas_He_ratio+3
-        OPTION_UINT8    oGas5O2,        .7 ,.100,   .21,    tPercent, .48,     opt_gas_O2_ratio+4
-        OPTION_UINT8    oGas5He,        .1, .100,   .0,     tPercent, .49,     opt_gas_He_ratio+4
-        OPTION_UINT8    oGas1Depth,     .0, .99,   .0,     tMeters,  .50,     opt_OC_bail_gas_change+0
-        OPTION_UINT8    oGas2Depth,     .0, .99,   .0,     tMeters,  .51,     opt_OC_bail_gas_change+1
-        OPTION_UINT8    oGas3Depth,     .0, .99,   .0,     tMeters,  .52,     opt_OC_bail_gas_change+2
-        OPTION_UINT8    oGas4Depth,     .0, .99,   .0,     tMeters,  .53,     opt_OC_bail_gas_change+3
-        OPTION_UINT8    oGas5Depth,     .0, .99,   .0,     tMeters,  .54,     opt_OC_bail_gas_change+4
-        OPTION_UINT8    oDil1O2,        .7 ,.100,   .21,    tPercent, .55,     opt_dil_O2_ratio+0
-        OPTION_UINT8    oDil1He,        .1, .100,   .0,     tPercent, .56,     opt_dil_He_ratio+0
-        OPTION_UINT8    oDil2O2,        .7 ,.100,   .21,    tPercent, .57,     opt_dil_O2_ratio+1
-        OPTION_UINT8    oDil2He,        .1, .100,   .0,     tPercent, .58,     opt_dil_He_ratio+1
-        OPTION_UINT8    oDil3O2,        .7 ,.100,   .21,    tPercent, .59,     opt_dil_O2_ratio+2
-        OPTION_UINT8    oDil3He,        .1, .100,   .0,     tPercent, .60,     opt_dil_He_ratio+2
-        OPTION_UINT8    oDil4O2,        .7 ,.100,   .21,    tPercent, .61,     opt_dil_O2_ratio+3
-        OPTION_UINT8    oDil4He,        .1, .100,   .0,     tPercent, .62,     opt_dil_He_ratio+3
-        OPTION_UINT8    oDil5O2,        .7 ,.100,   .21,    tPercent, .63,     opt_dil_O2_ratio+4
-        OPTION_UINT8    oDil5He,        .1, .100,   .0,     tPercent, .64,     opt_dil_He_ratio+4
-        OPTION_UINT8    oSetPoint1,     .20, .160,  .70,    tbar,     .65,     char_I_setpoint_cbar+0
-        OPTION_UINT8    oSetPoint2,     .20, .160,  .90,    tbar,     .66,     char_I_setpoint_cbar+1
-        OPTION_UINT8    oSetPoint3,     .20, .160,  .100,   tbar,     .67,     char_I_setpoint_cbar+2
-        OPTION_UINT8    oSetPoint4,     .20, .160,  .120,   tbar,     .68,     char_I_setpoint_cbar+3
-        OPTION_UINT8    oSetPoint5,     .20, .160,  .140,   tbar,     .69,     char_I_setpoint_cbar+4
-        OPTION_UINT8    oSP1Depth,      .0, .100,   .0,     tMeters,  .70,     char_I_setpoint_change+0
-        OPTION_UINT8    oSP2Depth,      .0, .100,   .0,     tMeters,  .71,     char_I_setpoint_change+1
-        OPTION_UINT8    oSP3Depth,      .0, .100,   .0,     tMeters,  .72,     char_I_setpoint_change+2
-        OPTION_UINT8    oSP4Depth,      .0, .100,   .0,     tMeters,  .73,     char_I_setpoint_change+3
-        OPTION_UINT8    oSP5Depth,      .0, .100,   .0,     tMeters,  .74,     char_I_setpoint_change+4
-        OPTION_ENUM8    oDil1,          2,  1,  tDilDisabled,         .75,     opt_dil_type+0   ; 0=Disabled, 1=First, 2=Normal
-        OPTION_ENUM8    oDil2,          2,  0,  tDilDisabled,         .76,     opt_dil_type+1
-        OPTION_ENUM8    oDil3,          2,  0,  tDilDisabled,         .77,     opt_dil_type+2
-        OPTION_ENUM8    oDil4,          2,  0,  tDilDisabled,         .78,     opt_dil_type+3
-        OPTION_ENUM8    oDil5,          2,  0,  tDilDisabled,         .79,     opt_dil_type+4
-        OPTION_UINT8    oDil1Depth,     .0, .99,   .0,     tMeters,  .80,     char_I_dil_change+0
-        OPTION_UINT8    oDil2Depth,     .0, .99,   .0,     tMeters,  .81,     char_I_dil_change+1
-        OPTION_UINT8    oDil3Depth,     .0, .99,   .0,     tMeters,  .82,     char_I_dil_change+2
-        OPTION_UINT8    oDil4Depth,     .0, .99,   .0,     tMeters,  .83,     char_I_dil_change+3
-        OPTION_UINT8    oDil5Depth,     .0, .99,   .0,     tMeters,  .84,     char_I_dil_change+4
+	OPTION_ENUM8	oGas1,				.3,								.1,		tGasDisabled,	.35,	opt_gas_type+0					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	OPTION_ENUM8	oGas2,				.3,								.0,		tGasDisabled,	.36,	opt_gas_type+1
+	OPTION_ENUM8	oGas3,				.3,								.0,		tGasDisabled,	.37,	opt_gas_type+2
+	OPTION_ENUM8	oGas4,				.3,								.0,		tGasDisabled,	.38,	opt_gas_type+3
+	OPTION_ENUM8	oGas5,				.3,								.0,		tGasDisabled,	.39,	opt_gas_type+4
+	OPTION_UINT8	oGas1O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.40,	opt_gas_O2_ratio+0
+	OPTION_UINT8	oGas1He,			.0,				gaslist_max_He,	.0,		tPercent,		.41,	opt_gas_He_ratio+0
+	OPTION_UINT8	oGas2O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.42,	opt_gas_O2_ratio+1
+	OPTION_UINT8	oGas2He,			.0,				gaslist_max_He,	.0,		tPercent,		.43,	opt_gas_He_ratio+1
+	OPTION_UINT8	oGas3O2,			gaslist_min_o2,		.100,		.21,	tPercent,		.44,	opt_gas_O2_ratio+2
+	OPTION_UINT8	oGas3He,			.0,				gaslist_max_He,	.0,		tPercent,		.45,	opt_gas_He_ratio+2
+	OPTION_UINT8	oGas4O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.46,	opt_gas_O2_ratio+3
+	OPTION_UINT8	oGas4He,			.0,				gaslist_max_He,	.0,		tPercent,		.47,	opt_gas_He_ratio+3
+	OPTION_UINT8	oGas5O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.48,	opt_gas_O2_ratio+4
+	OPTION_UINT8	oGas5He,			.0,				gaslist_max_He,	.0,		tPercent,		.49,	opt_gas_He_ratio+4
+	OPTION_UINT8	oGas1Depth,			.0,	gaslist_max_change_depth,	.0,		tMeters,		.50,	opt_OC_bail_gas_change+0
+	OPTION_UINT8	oGas2Depth,			.0,	gaslist_max_change_depth,	.0,		tMeters,		.51,	opt_OC_bail_gas_change+1
+	OPTION_UINT8	oGas3Depth,			.0,	gaslist_max_change_depth,	.0,		tMeters,		.52,	opt_OC_bail_gas_change+2
+	OPTION_UINT8	oGas4Depth,			.0,	gaslist_max_change_depth,	.0,		tMeters,		.53,	opt_OC_bail_gas_change+3
+	OPTION_UINT8	oGas5Depth,			.0,	gaslist_max_change_depth,	.0,		tMeters,		.54,	opt_OC_bail_gas_change+4
+	OPTION_UINT8	oDil1O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.55,	opt_dil_O2_ratio+0
+	OPTION_UINT8	oDil1He,			.0,				gaslist_max_He,	.0,		tPercent,		.56,	opt_dil_He_ratio+0
+	OPTION_UINT8	oDil2O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.57,	opt_dil_O2_ratio+1
+	OPTION_UINT8	oDil2He,			.0,				gaslist_max_He,	.0,		tPercent,		.58,	opt_dil_He_ratio+1
+	OPTION_UINT8	oDil3O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.59,	opt_dil_O2_ratio+2
+	OPTION_UINT8	oDil3He,			.0,				gaslist_max_He,	.0,		tPercent,		.60,	opt_dil_He_ratio+2
+	OPTION_UINT8	oDil4O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.61,	opt_dil_O2_ratio+3
+	OPTION_UINT8	oDil4He,			.0,				gaslist_max_He,	.0,		tPercent,		.62,	opt_dil_He_ratio+3
+	OPTION_UINT8	oDil5O2,			gaslist_min_o2,	.100,			.21,	tPercent,		.63,	opt_dil_O2_ratio+4
+	OPTION_UINT8	oDil5He,			.0,				gaslist_max_He,	.0,		tPercent,		.64,	opt_dil_He_ratio+4
+	OPTION_UINT8	oSetPoint1,			gaslist_sp_min,	gaslist_sp_max,	.70,	tbar,			.65,	char_I_setpoint_cbar+0
+	OPTION_UINT8	oSetPoint2,			gaslist_sp_min,	gaslist_sp_max,	.90,	tbar,			.66,	char_I_setpoint_cbar+1
+	OPTION_UINT8	oSetPoint3,			gaslist_sp_min,	gaslist_sp_max,	.100,	tbar,			.67,	char_I_setpoint_cbar+2
+	OPTION_UINT8	oSetPoint4,			gaslist_sp_min,	gaslist_sp_max,	.120,	tbar,			.68,	char_I_setpoint_cbar+3
+	OPTION_UINT8	oSetPoint5,			gaslist_sp_min,	gaslist_sp_max,	.140,	tbar,			.69,	char_I_setpoint_cbar+4
+	OPTION_UINT8	oSP1Depth,			.0,				.100,			.0,		tMeters,		.70,	char_I_setpoint_change+0
+	OPTION_UINT8	oSP2Depth,			.0,				.100,			.0,		tMeters,		.71,	char_I_setpoint_change+1
+	OPTION_UINT8	oSP3Depth,			.0,				.100,			.0,		tMeters,		.72,	char_I_setpoint_change+2
+	OPTION_UINT8	oSP4Depth,			.0,				.100,			.0,		tMeters,		.73,	char_I_setpoint_change+3
+	OPTION_UINT8	oSP5Depth,			.0,				.100,			.0,		tMeters,		.74,	char_I_setpoint_change+4
+	OPTION_ENUM8	oDil1,				.2,								.1,		tDilDisabled,	.75,	opt_dil_type+0					; 0=Disabled, 1=First, 2=Normal
+	OPTION_ENUM8	oDil2,				.2,								.0,		tDilDisabled,	.76,	opt_dil_type+1
+	OPTION_ENUM8	oDil3,				.2,								.0,		tDilDisabled,	.77,	opt_dil_type+2
+	OPTION_ENUM8	oDil4,				.2,								.0,		tDilDisabled,	.78,	opt_dil_type+3
+	OPTION_ENUM8	oDil5,				.2,								.0,		tDilDisabled,	.79,	opt_dil_type+4
+	OPTION_UINT8	oDil1Depth,			.0,				.99,			.0,		tMeters,		.80,	char_I_dil_change+0
+	OPTION_UINT8	oDil2Depth,			.0,				.99,			.0,		tMeters,		.81,	char_I_dil_change+1
+	OPTION_UINT8	oDil3Depth,			.0,				.99,			.0,		tMeters,		.82,	char_I_dil_change+2
+	OPTION_UINT8	oDil4Depth,			.0,				.99,			.0,		tMeters,		.83,	char_I_dil_change+3
+	OPTION_UINT8	oDil5Depth,			.0,				.99,			.0,		tMeters,		.84,	char_I_dil_change+4
 
 ;=============================================================================
 ; opt_name from 85 to 145
-        OPTION_STRING   oName,          opt_name_length,    tDefName, .85,     opt_name
+	OPTION_STRING	oName,				opt_name_length,						tDefName,		.85,	opt_name
 
 ;=============================================================================
 ; Misc
-    OPTION_ENUM8    oColorSetDive,  4,  0, tColorSetName0,        .146,    opt_dive_color_scheme            ; Color scheme divemode
-    OPTION_UINT8    oPressureAdjust, .0,.255,   .0,     -1,       .147,    opt_pressure_adjust              ; SIGNED int (-20/+20mbar max.)
-    OPTION_BOOL     oSafetyStop,    0,                            .148,    opt_enable_safetystop            ; =1: A safety stop is shown
-    OPTION_UINT8    oCalGasO2,      .21,.100,   .21,    tPercent, .149,    opt_calibration_O2_ratio         ; Calibration gas %O2 (Do not move in EEPROM, must stay at .149!)
-    OPTION_BOOL     oFlipScreen,    0,                            .151,    opt_flip_screen                  ; =1: Flip the screen
-    OPTION_UINT8p10 ocR_button_left, .20, .80,   .40,  tPercent, .152,    opt_cR_button_left               ; left button sensitivity
-    OPTION_UINT8p10 ocR_button_right,.20, .80,   .40,  tPercent, .153,    opt_cR_button_right              ; right button sensitivity
-    OPTION_UINT8    obottom_usage,  .5,.50,   .20,tLitersMinute,  .154,    char_I_bottom_usage              ; l/min
-    OPTION_UINT8    odeco_usage,    .5,.50,   .20,tLitersMinute,  .155,    char_I_deco_usage                ; l/min
-    OPTION_BOOL     oMODwarning,    0,                            .156,    opt_modwarning                   ; =1: red depth blinking warning
-    OPTION_BOOL     oVSItextv2,     0,                            .157,    opt_vsitextv2                    ; =1: use the dynamic (depends on depth) ascend rate limits
-    OPTION_BOOL     oVSIgraph,      0,                            .158,    opt_vsigraph                     ; =1: draw the graphical VSI bar
-    OPTION_BOOL     oShowppO2,      0,                            .159,    opt_showppo2                     ; =1:always show the ppO2 value in the warning position
-    OPTION_UINT8    oTemperatureAdjust, .0,.255,   .0,     -1,    .160,    opt_temperature_adjust           ; SIGNED int (-2.0/+2.0 °C max.)
-    OPTION_UINT8    oSafetyStopLength, .60,.240,   .180,   -1,    .161,    opt_safety_stop_length           ; [s]
-    OPTION_UINT8    oSafetyStopStart,  .21,.61,     .51,   -1,    .162,    opt_safety_stop_start            ; [cbar], default 510mbar, min 210mbar, max 610mbar
-    OPTION_UINT8    oSafetyStopEnd,    .19,.39,     .29,   -1,    .163,    opt_safety_stop_end              ; [cbar], default 290mbar, min 190mbar, max 390mbar
-    OPTION_UINT8    oSafetyStopReset,  .81,.151,    .101,  -1,    .164,    opt_safety_stop_reset            ; [cbar], default 1010mbar, min 810mbar, max 1510mbar
-	OPTION_UINT8    oDiveTimeout,	    .1,.20,  divemode_timeout_default,   tMinutes,  .168,    opt_diveTimeout			; Timeout for divemode in minutes
-	OPTION_UINT8	oPSCR_drop,	.0,.15,	.4,	     tPercent,.169,    char_I_PSCR_drop			; PSCR Drop [%]
-	OPTION_UINT8	oPSCR_lungratio,.5,.20,	.10, tPercent,.170,    char_I_PSCR_lungratio	; PSCR Lung Ratio [1/x]
-	OPTION_UINT8p10 oPPO2MaxDeco,.120, ppo2_warning_high_deco,.160,0,.171, char_I_ppO2_max_deco		; ppO2 max for deco gases
-	OPTION_UINT8p10 oPPO2MinCC,    ppo2_warning_low_cc_min,	 ppo2_warning_low_cc_max,  ppo2_warning_low_cc, 0,	.172, char_I_ppO2_min_loop ; ppO2 min for Loop
-	OPTION_UINT8    oTankSize1,     .1,  .40,  .11, tLiter,  .173, char_I_tank_size+0		; size of OC gas tank 1
-	OPTION_UINT8    oTankSize2,     .1,  .40,  .11, tLiter,  .174, char_I_tank_size+1		; size of OC gas tank 2
-	OPTION_UINT8    oTankSize3,     .1,  .40,  .11, tLiter,  .175, char_I_tank_size+2		; size of OC gas tank 3
-	OPTION_UINT8    oTankSize4,     .1,  .40,  .11, tLiter,  .176, char_I_tank_size+3		; size of OC gas tank 4
-	OPTION_UINT8    oTankSize5,     .1,  .40,  .11, tLiter,  .177, char_I_tank_size+4		; size of OC gas tank 5
-	OPTION_UINT8	oTankFillPres1, .5, .29,   .20, tbar10,  .178, char_I_tank_pres_fill+0	; fill press of OC gas tank 1
-	OPTION_UINT8	oTankFillPres2, .5, .29,   .20, tbar10,  .179, char_I_tank_pres_fill+1	; fill press of OC gas tank 2
-	OPTION_UINT8	oTankFillPres3, .5, .29,   .20, tbar10,  .180, char_I_tank_pres_fill+2	; fill press of OC gas tank 3
-	OPTION_UINT8	oTankFillPres4, .5, .29,   .20, tbar10,  .181, char_I_tank_pres_fill+3	; fill press of OC gas tank 4
-	OPTION_UINT8	oTankFillPres5, .5, .29,   .20, tbar10,  .182, char_I_tank_pres_fill+4	; fill press of OC gas tank 5
-	OPTION_UINT8	oCCmaxFracO2,  .80, .100,  .90, tPercent,.183, char_I_cc_max_frac_o2	; max. O2 % in Loop
-	OPTION_UINT8    oSimSetpoint,   .1,   .5,   .1, tblank,  .184, opt_sim_setpoint_number	; setpoint to use for deco calculation
-	OPTION_BOOL     oCalcAscGas,                 0,          .185, opt_calc_asc_gasvolume	; calculate OC gas volume needs for ascent
-	OPTION_BOOL     oSimAGF,                     0,            -1, opt_sim_use_aGF			; use GF (no) or aGF (yes) for deco calculation
-	OPTION_ENUM8    oAltMode,      	4,  	 0, tAltModeFly, .186, char_I_altitude_wait     ; 0=no-fly, 1=1000m, 2=2000m, 3=3000m
-	OPTION_BOOL     oEnable_IBCD,   0,                       .187, opt_enable_IBCD          ; =1: IBCD warning activated
-	OPTION_UINT8	oAscentSpeed,  .5, .10, .10,tMeterMinute,.188, char_I_ascent_speed		; ascent speed - Attention: proper operation with other values than the default of 10m/min has not been validated yet! Do not deviate from the default until further notice!
-	OPTION_UINT8	oGasChangeTime,.0, .3,  .1, tmin	,.189, char_I_gas_change_time	; (extra) time at a stop to change the gas
-        OPTION_UINT8p5	osatmult,      .100,  .140, .110,tPercent,.190, opt_sat_multiplier_non_gf    ; For NON-GF Mode
-        OPTION_UINT8p5	odesatmult,    .60,  .100,  .90,tPercent,.191,  opt_desat_multiplier_non_gf  ; For NON-GF Mode
-	
+	OPTION_ENUM8	oColorSetDive,		.4,								.0,		tColorSetName0,	.146,	opt_dive_color_scheme			; Color scheme divemode
+	OPTION_UINT8	oPressureAdjust,	.0,				.255,			.0,		notext,			.147,	opt_pressure_adjust				; SIGNED int (-20/+20mbar max.)
+	OPTION_BOOL		oSafetyStop,		.0,														.148,	opt_enable_safetystop			; =1: A safety stop is shown
+	OPTION_UINT8	oCalGasO2,			.21,			.100,			.21,	tPercent,		.149,	opt_calibration_O2_ratio		; Calibration gas %O2 (Do not move in EEPROM, must stay at .149!)
+	OPTION_BOOL		oFlipScreen,		.0,														.151,	opt_flip_screen					; =1: Flip the screen
+	OPTION_UINT8p10	ocR_button_left,	.20,			.80,			.40,	tPercent,		.152,	opt_cR_button_left				; left button sensitivity
+	OPTION_UINT8p10	ocR_button_right,	.20,			.80,			.40,	tPercent,		.153,	opt_cR_button_right				; right button sensitivity
+	OPTION_UINT8	obottom_usage,		.5,				.50,			.20,	tLitersMinute,	.154,	char_I_bottom_usage				; l/min
+	OPTION_UINT8	odeco_usage,		.5,				.50,			.20,	tLitersMinute,	.155,	char_I_deco_usage				; l/min
+	OPTION_BOOL		oMODwarning,		.0,														.156,	opt_modwarning					; =1: red depth blinking warning
+	OPTION_BOOL		oVSItextv2,			.0,														.157,	opt_vsitextv2					; =1: use the dynamic (depends on depth) ascend rate limits
+	OPTION_BOOL		oVSIgraph,			.0,														.158,	opt_vsigraph					; =1: draw the graphical VSI bar
+	OPTION_BOOL		oShowppO2,			.0,														.159,	opt_showppo2					; =1:always show the ppO2 value in the warning position
+	OPTION_UINT8	oTemperatureAdjust,	.0,				.255,			.0,		notext,			.160,	opt_temperature_adjust			; SIGNED int (-2.0/+2.0 °C max.)
+	OPTION_UINT8	oSafetyStopLength,	.60,			.240,			.180,	notext,			.161,	opt_safety_stop_length			; [s]
+	OPTION_UINT8	oSafetyStopStart,	.21,			.61,			.51,	notext,			.162,	opt_safety_stop_start			; [cbar], default 510mbar, min 210mbar, max 610mbar
+	OPTION_UINT8	oSafetyStopEnd,		.19,			.39,			.29,	notext,			.163,	opt_safety_stop_end				; [cbar], default 290mbar, min 190mbar, max 390mbar
+	OPTION_UINT8	oSafetyStopReset,	.81,			.151,			.101,	notext,			.164,	opt_safety_stop_reset			; [cbar], default 1010mbar, min 810mbar, max 1510mbar
+	OPTION_UINT8	oDiveTimeout,		.1,				.20,			.5,		tMinutes,		.168,	opt_diveTimeout					; Timeout for divemode in minutes
+	OPTION_UINT8	oPSCR_drop,			.0,				.15,			.4,		tPercent,		.169,	char_I_PSCR_drop				; PSCR Drop [%]
+	OPTION_UINT8	oPSCR_lungratio,	.5,				.20,			.10,	tPercent,		.170,	char_I_PSCR_lungratio			; PSCR Lung Ratio [1/x]
+;																								.171									; in use, see below
+;																								.172									; in use, see below
+	OPTION_UINT8	oTankSize1,			.1,				.40,			.11,	tLiter,			.173,	char_I_tank_size+0				; size of OC gas tank 1
+	OPTION_UINT8	oTankSize2,			.1,				.40,			.11,	tLiter,			.174,	char_I_tank_size+1				; size of OC gas tank 2
+	OPTION_UINT8	oTankSize3,			.1,				.40,			.11,	tLiter,			.175,	char_I_tank_size+2				; size of OC gas tank 3
+	OPTION_UINT8	oTankSize4,			.1,				.40,			.11,	tLiter,			.176,	char_I_tank_size+3				; size of OC gas tank 4
+	OPTION_UINT8	oTankSize5,			.1,				.40,			.11,	tLiter,			.177,	char_I_tank_size+4				; size of OC gas tank 5
+	OPTION_UINT8	oTankFillPres1,		.5,				.29,			.20,	tbar10,			.178,	char_I_tank_pres_fill+0			; fill press of OC gas tank 1
+	OPTION_UINT8	oTankFillPres2,		.5,				.29,			.20,	tbar10,			.179,	char_I_tank_pres_fill+1			; fill press of OC gas tank 2
+	OPTION_UINT8	oTankFillPres3,		.5,				.29,			.20,	tbar10,			.180,	char_I_tank_pres_fill+2			; fill press of OC gas tank 3
+	OPTION_UINT8	oTankFillPres4,		.5,				.29,			.20,	tbar10,			.181,	char_I_tank_pres_fill+3			; fill press of OC gas tank 4
+	OPTION_UINT8	oTankFillPres5,		.5,				.29,			.20,	tbar10,			.182,	char_I_tank_pres_fill+4			; fill press of OC gas tank 5
+	OPTION_UINT8	oCCmaxFracO2,		.80,			.100,			.90,	tPercent,		.183,	char_I_cc_max_frac_o2			; max. O2 % in Loop
+	OPTION_UINT8	oSimSetpoint,		.1,				.5,				.1,		tblank,			.184,	opt_sim_setpoint_number			; setpoint to use for deco calculation
+	OPTION_BOOL		oCalcAscGas,		.0,														.185,	opt_calc_asc_gasvolume			; calculate OC gas volume needs for ascent
+	OPTION_BOOL		oSimAGF,			.0,													volatile,	opt_sim_use_aGF					; use GF (no) or aGF (yes) for deco calculation
+	OPTION_ENUM8	oAltMode,			.4,								.0,		tAltModeFly,	.186,	char_I_altitude_wait			; 0=no-fly, 1=1000m, 2=2000m, 3=3000m
+	OPTION_BOOL		oEnable_IBCD,		.0,														.187,	opt_enable_IBCD					; =1: IBCD warning activated
+	OPTION_UINT8	oAscentSpeed,		.5,				.10,			.10,	tMeterMinute,	.188,	char_I_ascent_speed				; ascent speed - Attention: proper operation with other values than the default of 10m/min has not been validated yet! Do not deviate from the default until further notice!
+	OPTION_UINT8	oGasChangeTime,		.0,				.3,				.1,		tmin,			.189,	char_I_gas_change_time			; (extra) time at a stop to change the gas
+	OPTION_UINT8p5	osatmult,			.100,			.140,			.110,	tPercent,		.190,	opt_sat_multiplier_non_gf		; for NON-GF Mode
+	OPTION_UINT8p5	odesatmult,			.60,			.100,			.90,	tPercent,		.191,	opt_desat_multiplier_non_gf		; for NON-GF Mode
+
+; ppO2 warnings, sorted by ppO2 levels
+	OPTION_UINT8p10	oPPO2Min,		ppo2_warning_low_lowest,	ppo2_warning_low_highest,	ppo2_warning_low_default,	notext,	.16,	char_I_ppO2_min		; ppO2 min on OC
+	OPTION_UINT8p10	oPPO2MinCC,		ppo2_warning_loop_lowest,	ppo2_warning_loop_highest,	ppo2_warning_loop_default,	notext,	.172,	char_I_ppO2_min_loop	; ppO2 min on Loop
+	OPTION_UINT8p10	oPPO2Max,		ppo2_warning_high_lowest,	ppo2_warning_high_highest,	ppo2_warning_high_default,	notext,	.10,	char_I_ppO2_max		; ppO2 max when not in deco
+	OPTION_UINT8p10	oPPO2MaxDeco,	ppo2_warning_deco_lowest,	ppo2_warning_deco_highest,	ppo2_warning_deco_default,	notext,	.171,	char_I_ppO2_max_deco	; ppO2 max when in deco
+
 ;=============================================================================
 ; Set Time/Set Date (RAM only)
-		OPTION_UINT8    oSetHours,		.0,	.23, .0,	0, -1,		hours
-		OPTION_UINT8    oSetMinutes,	.0,	.59, .0,	0, -1,		mins
-		OPTION_UINT8    oSetDay,		.1,	.31, .0,	0, -1,		day
-		OPTION_UINT8    oSetMonth,		.1,	.12, .0,	0, -1,		month
-		OPTION_UINT8    oSetYear,		.18,.24, .0,	0, -1,		year
+	OPTION_UINT8	oSetHours,			.0,				.23,			.0,		.0,			volatile,	hours
+	OPTION_UINT8	oSetMinutes,		.0,				.59,			.0,		.0,			volatile,	mins
+	OPTION_UINT8	oSetDay,			.1,				.31,			.0,		.0,			volatile,	day
+	OPTION_UINT8	oSetMonth,			.1,				.12,			.0,		.0,			volatile,	month
+	OPTION_UINT8	oSetYear,			.18,			.24,			.0,		.0,			volatile,	year
 
-        global  option_table_end
+	global	option_table_end
 option_table_end:
-    END
\ No newline at end of file
+
+	END
\ No newline at end of file
--- a/src/options.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/options.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File options.asm								REFACTORED VERSION V2.91
+;   File options.asm								REFACTORED VERSION V2.97
 ;
 ;   Manage all options data.
 ;
@@ -13,87 +13,75 @@
 ;
 ;   Provides a centralized file with 
 
-#include    "hwos.inc"                  ; Mandatory header
-#include    "strings.inc"
-#include    "convert.inc"
-#include	"ghostwriter.inc"
-#include 	"eeprom_rs232.inc"
-#include	"external_flash.inc"
-#include    "wait.inc"
+#include "hwos.inc"							; Mandatory header
+#include "strings.inc"
+#include "convert.inc"
+#include "ghostwriter.inc"
+#include "eeprom_rs232.inc"
+#include "external_flash.inc"
+#include "wait.inc"
 
-        extern  write_eeprom
-        extern  read_eeprom
-        extern  eeprom_serial_save,eeprom_opt_backup
-        extern  option_table_begin,option_table_end
+	extern	write_eeprom
+	extern	read_eeprom
+	extern	eeprom_serial_save,eeprom_opt_backup
+	extern	option_table_begin,option_table_end
 
-        global  option_reset_all        ; Reset all options to factory default.
-        global  option_check_all        ; Check all option and reset option if out of min/max boundary
-        global  option_reset            ; Reset FSR0 option to factory default.
-        global  option_save_all         ; Save options to EEPROM.
-        global  option_restore_all      ; Restore options from EEPROM.
-        global  option_inc              ; Increment FSR0 option.
-        global  option_draw             ; STRCAT FRS0 option.
+	global	option_reset_all				; Reset all options to factory default.
+	global	option_check_all				; Check all option and reset option if out of min/max boundary
+	global	option_reset					; Reset FSR0 option to factory default.
+	global	option_save_all					; Save options to EEPROM.
+	global	option_restore_all				; Restore options from EEPROM.
+	global	option_inc						; Increment FSR0 option.
+	global	option_draw						; STRCAT FRS0 option.
 
 
+gui		CODE								; Appends to other GUI segment
+
 ;=============================================================================
-        CBLOCK  tmp+0x12                ; Reserve space for wordprocessor & convert
-            opt_type
-            opt_default
-            opt_inc                     ; Also default+1 (string), and enum low
-            opt_min                     ; also enum high
-            opt_max
-            opt_unit:2                  ; Multi-lingual unit text.
-            opt_eeprom
-            opt_backup_tbl:3
-            ; Reserved to tmp+0x1C...
-        ENDC
-
-gui     CODE                            ; Appends to other GUI segment
-;=============================================================================
-; Reset all options to factory defauts.
+; Reset all options to factory defaults.
 ;
 ; INPUT:  none
 ; OUTPUT: none
 ; TRASH:  TBLPTR, TABLAT, WREG, FSR0, FSR1, FSR2
 
 option_reset_all:
-	    clrf	EEADRH
-		read_int_eeprom	.2
-		tstfsz	EEDATA                      ; Total dives=0?
-		bra		option_reset_all2			; No, skip resetting logbook
-		read_int_eeprom	.3
-		tstfsz	EEDATA                      ; Total dives=0?
-		bra		option_reset_all2			; No, skip resetting logbook
+	clrf	EEADRH
+	read_int_eeprom .2
+	tstfsz	EEDATA							; Total dives=0?
+	bra		option_reset_all2				; No, skip resetting logbook
+	read_int_eeprom .3
+	tstfsz	EEDATA							; Total dives=0?
+	bra		option_reset_all2				; No, skip resetting logbook
 
-		clrf	EEDATA
-		write_int_eeprom	.4
-		write_int_eeprom	.5
-		write_int_eeprom	.6
-		write_int_eeprom	.2				; Also, delete total dive counter
-		write_int_eeprom	.3				
-		call	ext_flash_erase_logbook		; And complete logbook (!)
+	clrf	EEDATA
+	write_int_eeprom .4
+	write_int_eeprom .5
+	write_int_eeprom .6
+	write_int_eeprom .2						; Also, delete total dive counter
+	write_int_eeprom .3
+	call	ext_flash_erase_logbook			; And complete logbook (!)
 
 option_reset_all2:
-		clrf	lo
-		clrf	hi
-		call	do_logoffset_common_write	; reset Logbook offset
+	clrf	lo
+	clrf	hi
+	call	do_logoffset_common_write		; reset Logbook offset
 
-        ; Point to option table begin
-        movlw   LOW(option_table_begin)
-        movwf   FSR0L
-        movlw   HIGH(option_table_begin)
-        movwf   FSR0H
+	; Point to option table begin
+	movlw	LOW(option_table_begin)
+	movwf	FSR0L
+	movlw	HIGH(option_table_begin)
+	movwf	FSR0H
 option_reset_all_1:
 	movlw	LOW(option_table_end)
 	cpfseq	FSR0L
-	bra	option_reset_all_2	; Not yet done...
+	bra		option_reset_all_2				; Not yet done...
 	movlw	HIGH(option_table_end)
 	cpfseq	FSR0H
-	bra	option_reset_all_2	; Not yet done...
-        return				; All done.
+	bra		option_reset_all_2				; Not yet done...
+	return									; All done.
 option_reset_all_2:
-        rcall   option_reset            ; Reset one option.
-        bra     option_reset_all_1      ; and loop.
+	rcall	option_reset					; Reset one option.
+	bra		option_reset_all_1				; and loop.
 
 ;=============================================================================
 ; Check all option and reset option if out of min/max boundary
@@ -102,23 +90,23 @@
 ; OUTPUT: none
 ; TRASH:  TBLPTR, TABLAT, WREG, FSR0, FSR1, FSR2
 option_check_all:
-        ; Point to option table begin
-        movlw   LOW(option_table_begin)
-        movwf   FSR0L
-        movlw   HIGH(option_table_begin)
-        movwf   FSR0H
+	; Point to option table begin
+	movlw	LOW(option_table_begin)
+	movwf	FSR0L
+	movlw	HIGH(option_table_begin)
+	movwf	FSR0H
 
 option_check_all_1:
-    	movlw	LOW(option_table_end)
+	movlw	LOW(option_table_end)
 	cpfseq	FSR0L
-	bra	option_check_all_2	; Not yet done...
+	bra		option_check_all_2				; Not yet done...
 	movlw	HIGH(option_table_end)
 	cpfseq	FSR0H
-	bra	option_check_all_2	; Not yet done...
-        return				; All done.
+	bra		option_check_all_2				; Not yet done...
+	return									; All done.
 option_check_all_2:
-        rcall   option_check            ; check one option.
-        bra     option_check_all_1      ; and loop
+	rcall	option_check					; check one option.
+	bra		option_check_all_1				; and loop
 
 ;=============================================================================
 ; Read option handle
@@ -126,38 +114,38 @@
 ; OUTPUT: FSR1 = address of variable.
 ; TRASH:  TBLPTR, TABLAT, WREG, FSR0, FSR1
 option_read:
-        movff   FSR0L,TBLPTRL
-        movlw   HIGH(option_table_begin); Get 8 high bits.
-        andlw   0xF0                    ; Keep only the 4 highest ones.
-        iorwf   FSR0H,W                 ; Cat with the known 4 lower ones.
-        movwf   TBLPTRH                 ; And we have the high byte.
-        movlw   UPPER(option_table_begin)
-        movwf   TBLPTRU
+	movff	FSR0L,TBLPTRL
+	movlw	HIGH(option_table_begin)		; Get 8 high bits.
+	andlw	0xF0							; Keep only the 4 highest ones.
+	iorwf	FSR0H,W							; Cat with the known 4 lower ones.
+	movwf	TBLPTRH							; And we have the high byte.
+	movlw	UPPER(option_table_begin)
+	movwf	TBLPTRU
 
-        ; Read type, default and register from table
-        tblrd*+
-        movff   TABLAT,opt_type
-        tblrd*+
-        movff   TABLAT,opt_default
-        tblrd*+
-        movff   TABLAT,opt_inc
-        tblrd*+
-        movff   TABLAT,opt_min
-        tblrd*+
-        movff   TABLAT,opt_max
-        tblrd*+
-        movff   TABLAT,opt_eeprom
-        tblrd*+
-        movff   TABLAT,opt_unit+0
-        tblrd*+
-        movff   TABLAT,opt_unit+1
-        tblrd*+
-        movff   TABLAT,FSR1L
-        tblrd*+
-        movff   TABLAT,FSR1H
-        movff   TBLPTRL,FSR0L           ; Advance handle too, for reset_all
-        movff   TBLPTRH,FSR0H
-        return
+	; Read type, default and register from table
+	tblrd*+
+	movff	TABLAT,opt_type
+	tblrd*+
+	movff	TABLAT,opt_default
+	tblrd*+
+	movff	TABLAT,opt_inc
+	tblrd*+
+	movff	TABLAT,opt_min
+	tblrd*+
+	movff	TABLAT,opt_max
+	tblrd*+
+	movff	TABLAT,opt_eeprom
+	tblrd*+
+	movff	TABLAT,opt_unit+0
+	tblrd*+
+	movff	TABLAT,opt_unit+1
+	tblrd*+
+	movff	TABLAT,FSR1L
+	tblrd*+
+	movff	TABLAT,FSR1H
+	movff	TBLPTRL,FSR0L					; Advance handle too, for reset_all
+	movff	TBLPTRH,FSR0H
+	return
 
 ;=============================================================================
 ; Check one option and reset if it's out of it's min/max boundaries
@@ -166,39 +154,39 @@
 ; TRASH:  TBLPTR, TABLAT, WREG, FSR1, FSR2, lo
 ;
 option_check:
-        ; Read type, default and register from table
-        rcall   option_read
+	; Read type, default and register from table
+	rcall	option_read
 
-        ; Switch on type
-        movf    opt_type,W              ; Type == STRING ?
-        xorlw   2
-        bz      option_check_string     ; String: Do not reset strings
+	; Switch on type
+	movf	opt_type,W						; Type == STRING ?
+	xorlw	2
+	bz		option_check_string				; String: Do not reset strings
 
-        movf    opt_type,W              ; Type == ENUM8 ?
-        xorlw   1
-        bz      option_check_enum8      ; ENUM8: Check if lower then max. value only
+	movf	opt_type,W						; Type == ENUM8 ?
+	xorlw	1
+	bz		option_check_enum8				; ENUM8: Check if lower then max. value only
 
-        tstfsz  opt_min                 ; opt_min=0?
-        bra     option_check_both       ; no
-        bra     option_check_enum8      ; Check max only
+	tstfsz	opt_min							; opt_min=0?
+	bra		option_check_both				; no
+	bra		option_check_enum8				; Check max only
 
 option_check_both:
-        decf    opt_min,W
-        cpfsgt  INDF1                   ; bigger then opt_min-1?
-        bra     option_check_reset      ; No, reset option
-option_check_enum8:                     ; ENUM8: Check max only
-        infsnz  opt_max,W               ; Max = 255?
-        return                          ; Yes, igonore max. test
-        cpfslt  INDF1                   ; smaller then opt_max+1?
-        bra     option_check_reset      ; No, reset option
-        return                          ; in range, return
+	decf	opt_min,W
+	cpfsgt	INDF1							; bigger then opt_min-1?
+	bra		option_check_reset				; No, reset option
+option_check_enum8:							; ENUM8: Check max only
+	infsnz	opt_max,W						; Max = 255?
+	return									; Yes, ignore max. test
+	cpfslt	INDF1							; smaller then opt_max+1?
+	bra		option_check_reset				; No, reset option
+	return									; in range, return
 
 option_check_reset:
-        movff   opt_default,INDF1       ; reset option to default
-        return                          ; Done.
+	movff	opt_default,INDF1				; reset option to default
+	return									; Done.
 
 option_check_string:
-        return
+	return
 
 ;=============================================================================
 ; Reset an option to its default value.
@@ -207,179 +195,179 @@
 ; TRASH:  TBLPTR, TABLAT, WREG, FSR1, FSR2
 ;
 option_reset:
-        ; Read type, default and register from table
-        rcall   option_read
+	; Read type, default and register from table
+	rcall	option_read
 
-        ; Switch on type
-        movf    opt_type,W              ; Type == STRING ?
-        xorlw   2
-        bz      opt_reset_string        ; YES: special copy
-        
-        movff   opt_default,INDF1       ; NO: just a 8bit indirect copy
-        return
+	; Switch on type
+	movf	opt_type,W						; Type == STRING ?
+	xorlw	2
+	bz		opt_reset_string				; YES: special copy
+
+	movff	opt_default,INDF1				; NO: just a 8bit indirect copy
+	return
 
 opt_reset_string:
-        movff   FSR1L,FSR2L             ; set string destination address.
-        movff   FSR1H,FSR2H
+	movff	FSR1L,FSR2L						; set string destination address.
+	movff	FSR1H,FSR2H
 
-        movff   opt_default+0,FSR1L     ; Get handle to multi-lingual text in FSR1
-        movff   opt_default+1,FSR1H
+	movff	opt_default+0,FSR1L				; Get handle to multi-lingual text in FSR1
+	movff	opt_default+1,FSR1H
 
-        movff   TBLPTRL,opt_backup_tbl+0; TBLPTR trashed by text routine...
-        movff   TBLPTRH,opt_backup_tbl+1
-        movff   TBLPTRU,opt_backup_tbl+2
+	movff	TBLPTRL,opt_backup_tbl+0		; TBLPTR trashed by text routine...
+	movff	TBLPTRH,opt_backup_tbl+1
+	movff	TBLPTRU,opt_backup_tbl+2
 
-        call    strcat_text             ; Copy translated text to FSR2
+	call	strcat_text						; Copy translated text to FSR2
 
-        movff   opt_backup_tbl+0,TBLPTRL
-        movff   opt_backup_tbl+1,TBLPTRH
-        movff   opt_backup_tbl+2,TBLPTRU
+	movff	opt_backup_tbl+0,TBLPTRL
+	movff	opt_backup_tbl+1,TBLPTRH
+	movff	opt_backup_tbl+2,TBLPTRU
 
-        return
+	return
 
 ;=============================================================================
 ; Save all options to EEPROM
 option_save_all:
-        ;---- Save option serial into EEPROM to detect reset and new version
-        movlw   LOW(eeprom_serial_save)
-        movwf   EEADR
-        movlw   HIGH(eeprom_serial_save)
-        movwf   EEADRH
-        movlw   LOW(eeprom_opt_serial)
-        movwf   EEDATA
-        call    write_eeprom
-        incf    EEADR,F
-        movlw   HIGH(eeprom_opt_serial)
-        movwf   EEDATA
-        call    write_eeprom
-        
-        ;---- Save all options
-        movlw   LOW(option_table_begin)
-        movwf   FSR0L
-        movlw   HIGH(option_table_begin)
-        movwf   FSR0H
+	;---- Save option serial into EEPROM to detect reset and new version
+	movlw	LOW(eeprom_serial_save)
+	movwf	EEADR
+	movlw	HIGH(eeprom_serial_save)
+	movwf	EEADRH
+	movlw	LOW(eeprom_opt_serial)
+	movwf	EEDATA
+	call	write_eeprom
+	incf	EEADR,F
+	movlw	HIGH(eeprom_opt_serial)
+	movwf	EEDATA
+	call	write_eeprom
+
+	;---- Save all options
+	movlw	LOW(option_table_begin)
+	movwf	FSR0L
+	movlw	HIGH(option_table_begin)
+	movwf	FSR0H
 
 option_save_all_1:
-    	movlw	LOW(option_table_end)
+	movlw	LOW(option_table_end)
 	cpfseq	FSR0L
-	bra	option_save_all_2	; Not yet done...
+	bra		option_save_all_2				; Not yet done...
 	movlw	HIGH(option_table_end)
 	cpfseq	FSR0H
-	bra	option_save_all_2	; Not yet done...
-        return				; All done.
+	bra		option_save_all_2				; Not yet done...
+	return									; All done.
 option_save_all_2:
-        rcall   option_save             ; Save one option.
-        bra     option_save_all_1       ; and loop.
+	rcall	option_save						; Save one option.
+	bra		option_save_all_1				; and loop.
 
-        global  option_save
+	global	option_save
 option_save:
-        rcall   option_read
-        incf    opt_eeprom,W            ; Should we save it ?
-        btfsc   STATUS,Z                ; eeprom address is FFh ?
-        return                          ; YES: nothing to do.
+	rcall	option_read
+	incf	opt_eeprom,W					; Should we save it ?
+	btfsc	STATUS,Z						; EEPROM address is FFh ?
+	return									; YES: nothing to do.
 
-        movf    opt_eeprom,W            ; Compute backup address in EEPROM
-        addlw   LOW(eeprom_opt_backup)  ; Add offset
-        movwf   EEADR
-        movlw   HIGH(eeprom_opt_backup)
-        btfsc   STATUS,C                ; >256
-        addlw   .1                      ; Yes: +1
-        movwf   EEADRH
+	movf	opt_eeprom,W					; Compute backup address in EEPROM
+	addlw	LOW(eeprom_opt_backup)			; Add offset
+	movwf	EEADR
+	movlw	HIGH(eeprom_opt_backup)
+	btfsc	STATUS,C						; >256
+	addlw	.1								; Yes: +1
+	movwf	EEADRH
 
-        movf    opt_type,W              ; Option type is string ?
-        xorlw   2                       
-        bz      option_save_string
+	movf	opt_type,W						; Option type is string ?
+	xorlw	2
+	bz		option_save_string
 
-        ; One byte to save to eeprom
-        movff   INDF1,EEDATA
-        btfss   EEADRH,1                ; EEADR:EEADRH < 512?
-        call    write_eeprom            ; Yes, write
-        return
-        
+	; One byte to save to EEPROM
+	movff	INDF1,EEDATA
+	btfss	EEADRH,1						; EEADR:EEADRH < 512?
+	call	write_eeprom					; Yes, write
+	return
+
 option_save_string:
-        movff   POSTINC1,EEDATA         ; Write one byte
-        btfss   EEADRH,1                ; EEADR:EEADRH < 512?
-        call    write_eeprom            ; Yes, write
-        infsnz  EEADR,F
-        incf    EEADRH,F
-        
-        decfsz  opt_max                 ; Decrement string length
-        bra     option_save_string      ; And loop while not finished
+	movff	POSTINC1,EEDATA					; Write one byte
+	btfss	EEADRH,1						; EEADR:EEADRH < 512?
+	call	write_eeprom					; Yes, write
+	infsnz	EEADR,F
+	incf	EEADRH,F
 
-        return
+	decfsz	opt_max							; Decrement string length
+	bra		option_save_string				; And loop while not finished
+
+	return
 ;=============================================================================
 
 option_restore_all:
-        ;---- Read option serial from EEPROM
-        movlw   LOW(eeprom_serial_save)
-        movwf   EEADR
-        movlw   HIGH(eeprom_serial_save)
-        movf    EEADRH
-        call    read_eeprom
-        movlw   LOW(eeprom_opt_serial)
-        xorwf   EEDATA,W
-        bnz     option_restore_bad      ; Auto reset if changed.
-        incf    EEADR,F
-        call    read_eeprom
-        movlw   HIGH(eeprom_opt_serial)
-        xorwf   EEDATA,W
-        bz      option_restore_ok       ; Auto reset if changed.
+	;---- Read option serial from EEPROM
+	movlw	LOW(eeprom_serial_save)
+	movwf	EEADR
+	movlw	HIGH(eeprom_serial_save)
+	movf	EEADRH
+	call	read_eeprom
+	movlw	LOW(eeprom_opt_serial)
+	xorwf	EEDATA,W
+	bnz		option_restore_bad				; Auto reset if changed.
+	incf	EEADR,F
+	call	read_eeprom
+	movlw	HIGH(eeprom_opt_serial)
+	xorwf	EEDATA,W
+	bz		option_restore_ok				; Auto reset if changed.
 
 option_restore_bad:
-        call    option_reset_all        ; Reset RAM contains
-        goto    option_save_all         ; Then save to EEPROM
+	call	option_reset_all				; Reset RAM contains
+	goto	option_save_all					; Then save to EEPROM
 
-        ;---- Proper restore
+	;---- Proper restore
 option_restore_ok:
-        movlw   LOW(option_table_begin)
-        movwf   FSR0L
-        movlw   HIGH(option_table_begin)
-        movwf   FSR0H
+	movlw	LOW(option_table_begin)
+	movwf	FSR0L
+	movlw	HIGH(option_table_begin)
+	movwf	FSR0H
 
 option_restore_all_1:
-    	movlw	LOW(option_table_end)
+	movlw	LOW(option_table_end)
 	cpfseq	FSR0L
-	bra	option_restore_all_2	; Not yet done...
+	bra		option_restore_all_2			; Not yet done...
 	movlw	HIGH(option_table_end)
 	cpfseq	FSR0H
-	bra	option_restore_all_2	; Not yet done...
-        return				; All done.
+	bra		option_restore_all_2			; Not yet done...
+	return									; All done.
 option_restore_all_2:
-        rcall   option_restore          ; Restore one option.
-        bra     option_restore_all_1    ; and loop.
+	rcall	option_restore					; Restore one option.
+	bra		option_restore_all_1			; and loop.
 
 option_restore:
-        rcall   option_read
-        incf    opt_eeprom,W            ; Should we save it ?
-        btfsc   STATUS,Z                ; eeprom address is FFh ?
-        return                          ; YES: nothing to do.
+	rcall	option_read
+	incf	opt_eeprom,W					; Should we save it ?
+	btfsc	STATUS,Z						; EEPROM address is FFh ?
+	return									; YES: nothing to do.
 
-        movf    opt_eeprom,W            ; Compute backup address in EEPROM
-        addlw   LOW(eeprom_opt_backup)  ; Add offset
-        movwf   EEADR
-        movlw   HIGH(eeprom_opt_backup)
-        btfsc   STATUS,C                ; >256
-        addlw   .1                      ; Yes: +1
-        movwf   EEADRH
+	movf	opt_eeprom,W					; Compute backup address in EEPROM
+	addlw	LOW(eeprom_opt_backup)			; Add offset
+	movwf	EEADR
+	movlw	HIGH(eeprom_opt_backup)
+	btfsc	STATUS,C						; >256
+	addlw	.1								; Yes: +1
+	movwf	EEADRH
 
-        movf    opt_type,W              ; Option type is string ?
-        xorlw   2                       
-        bz      option_restore_string
+	movf	opt_type,W						; Option type is string ?
+	xorlw	2
+	bz		option_restore_string
 
-        ; Read one byte from eeprom
-        call    read_eeprom
-        movff   EEDATA, INDF1           ; And restore option register.
-        return
+	; Read one byte from EEPROM
+	call	read_eeprom
+	movff	EEDATA, INDF1					; And restore option register.
+	return
 
 option_restore_string:
-        call    read_eeprom             ; Read one byte, and
-        movff   EEDATA,POSTINC1         ; restore it
-        infsnz  EEADR,F
-        incf    EEADRH,F
-        
-        decfsz  opt_max                 ; Decrement string length
-        bra     option_restore_string   ; And loop while not finished
-        return
+	call	read_eeprom						; Read one byte, and
+	movff	EEDATA,POSTINC1					; restore it
+	infsnz	EEADR,F
+	incf	EEADRH,F
+
+	decfsz	opt_max							; Decrement string length
+	bra		option_restore_string			; And loop while not finished
+	return
 
 ;=============================================================================
 ; Increment an option, based on type, and boundary.
@@ -387,120 +375,117 @@
 ; OUTPUT: none
 ; TRASH:  TBLPTR, TABLAT, WREG, FSR0, FSR1
 option_inc:
-    ; Read type, default and register from table
-    rcall   option_read
-        
-    ; Switch on type
-    movf    opt_type,W
-    bz      option_inc_uint8
-    dcfsnz  WREG
-    bra     option_inc_enum8
-    dcfsnz  WREG
-    bra     option_inc_string
+	; Read type, default and register from table
+	rcall	option_read
+
+	; Switch on type
+	movf	opt_type,W
+	bz		option_inc_uint8
+	dcfsnz	WREG
+	bra		option_inc_enum8
+	dcfsnz	WREG
+	bra		option_inc_string
 
-	
-option_inc_uint8:                       ; Defaults type too...
-	movf    INDF1,W
-	addwf   opt_inc,W
-	cpfslt  opt_max
-	bra     option_inc_1
-	movf    opt_min,W
+option_inc_uint8:							; Defaults type too...
+	movf	INDF1,W
+	addwf	opt_inc,W
+	cpfslt	opt_max
+	bra		option_inc_1
+	movf	opt_min,W
 option_inc_1:
-    movwf   INDF1
-		
-	; NEW FROM HERE...	## voting logic (allow sensors for pSCR)
+	movwf	INDF1
+
 	; Now some rather crude hack into this routine to unify CCR & pSCR mode setting:
-	movlw	.25				; eeprom address of option oCCRMode
-	cpfseq	opt_eeprom		; skip next line if we deal with this option right now
-    bra		option_inc_2
-	btfsc	FLAG_pscr_mode	; skip next line if we are not in PSCR mode
-	bcf		opt_ccr_mode,1	; in pSCR mode, opt_ccr_mode may only be 0 or 1
+	movlw	.25								; EEPROM address of option oCCRMode
+	cpfseq	opt_eeprom						; skip next line if we deal with this option right now
+	bra		option_inc_2
+	btfsc	FLAG_pscr_mode					; skip next line if we are not in PSCR mode
+	bcf		opt_ccr_mode,1					; in pSCR mode, opt_ccr_mode may only be 0 or 1
 
 option_inc_2:
-; ...UNTILL HERE	
 	; Now some rather crude hack into this routine to make CCR Calibration more convenient:
-	movlw	.149			; eeprom address of option CalGasO2 
-	cpfseq	opt_eeprom		; skip next line if we deal with this option right now
-    return
-	
-	btfsc	FLAG_pscr_mode		; skip next line if we are not in PSCR mode 
-	return 
-	movlw	.26 
-	cpfseq	INDF1			; skip next line if current option value is =26
-	return	
-	movlw	.95			; current option value =26, advance it to 95 
-	movwf	INDF1 
+	movlw	.149							; EEPROM address of option CalGasO2 
+	cpfseq	opt_eeprom						; skip next line if we deal with this option right now
 	return
 
-option_inc_enum8:                       ; Always +1
-        incf    INDF1,W
-        cpfsgt  opt_max
-        clrf    WREG
-        movwf   INDF1
-        return
+	btfsc	FLAG_pscr_mode					; skip next line if we are not in PSCR mode 
+	return
+	movlw	.26
+	cpfseq	INDF1							; skip next line if current option value is = 26
+	return
+	movlw	.95								; current option value =26, advance it to 95 
+	movwf	INDF1
+	return
+
 
-option_inc_string:                      ; No edition yet...
-        return
+option_inc_enum8:							; Always +1
+	incf	INDF1,W
+	cpfsgt	opt_max
+	clrf	WREG
+	movwf	INDF1
+	return
+
+
+option_inc_string:							; No editing yet...
+	return
 
 ;=============================================================================
 ; Strcat option into FSR2 buffer.
 option_draw:
-        ; Read type, default and register from table
-        rcall   option_read
-        
-        ; Switch on type
-        movf    opt_type,W
-        bz      option_draw_uint8
-        dcfsnz  WREG
-        bra     option_draw_enum8
-        dcfsnz  WREG
-        bra     option_draw_string
-        return                      ; Unknown: return...
+	; Read type, default and register from table
+	rcall	option_read
+
+	; Switch on type
+	movf	opt_type,W
+	bz		option_draw_uint8
+	dcfsnz	WREG
+	bra		option_draw_enum8
+	dcfsnz	WREG
+	bra		option_draw_string
+	return									; Unknown: return...
 
 option_draw_uint8:
-        movff   INDF1,lo            ; Draw value.
-        bsf     leftbind
-        output_8
-        bcf     leftbind
-        clrf    INDF2               ; Make sure to close string...
+	movff	INDF1,lo						; Draw value.
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	clrf	INDF2							; Make sure to close string...
 
-        movf    opt_unit+0,W        ; Is there a unit to append ?
-        iorwf   opt_unit+1,W
-        rcall   option_draw_unit
+	movf	opt_unit+0,W					; Is there a unit to append ?
+	iorwf	opt_unit+1,W
+	rcall	option_draw_unit
 
-        movf    opt_default,W       ; Default value
-        cpfseq  lo                  ; Current value
-        bra     option_draw_uint8_2 ; Not default, add *
-        return                      ; Default, Done.
+	movf	opt_default,W					; Default value
+	cpfseq	lo								; Current value
+	bra		option_draw_uint8_2				; Not default, add *
+	return									; Default, Done.
 option_draw_uint8_2:
-        PUTC    "*"
-        return                      ; Done.
+	PUTC	"*"
+	return									; Done.
 
 option_draw_unit:
-        movff   opt_unit+0,FSR1L
-        movff   opt_unit+1,FSR1H
-        goto    strcat_text
-        
+	movff	opt_unit+0,FSR1L
+	movff	opt_unit+1,FSR1H
+	goto	strcat_text
 
 
 ;---- Draw an enumerated value (set of translated strings)
 option_draw_enum8:
-        movf    INDF1,W             ; Get current value.
-        cpfsgt  opt_max             ; Bound value
-        clrf    WREG
-        addwf   WREG                ; *= 2            
-        addwf   opt_inc,W           ; Base text + 2 * value
-        movwf   FSR1L
-        movlw   0
-        addwfc  opt_min,W           ; Propagate carry
-        movwf   FSR1H               ; Into FSR1
-
-        goto    strcat_text
+	movf	INDF1,W							; Get current value.
+	cpfsgt	opt_max							; Bound value
+	clrf	WREG
+	addwf	WREG							; *= 2
+	addwf	opt_inc,W						; Base text + 2 * value
+	movwf	FSR1L
+	movlw	.0
+	addwfc	opt_min,W						; Propagate carry
+	movwf	FSR1H							; Into FSR1
+	goto	strcat_text
 
 option_draw_string:
-        movff   POSTINC1,POSTINC2
-        decfsz  opt_max
-        bra     option_draw_string
-        return
+	movff	POSTINC1,POSTINC2
+	decfsz	opt_max
+	bra		option_draw_string
+	return
 
-        END
+	END
\ No newline at end of file
--- a/src/p2_deco.c	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/p2_deco.c	Mon Feb 26 16:40:28 2018 +0100
@@ -1,10 +1,10 @@
-// **************************************************************
-// p2_deco.c							REFACTORED VERSION	V2.95a2
+// ***************************************************************************
+// p2_deco.c                                         REFACTORED VERSION V2.97b
 //
 //  Created on: 12.05.2009
 //  Author: heinrichs weikamp, contributions by Ralph Lembcke and others
 //
-// **************************************************************
+// ***************************************************************************
 
 //////////////////////////////////////////////////////////////////////////////
 // OSTC - diving computer code
@@ -35,7 +35,7 @@
 // 07/xx/08 v102a: debug of bottom time routine
 // 09/xx/08 v102d: Gradient Factor Model implementation
 // 10/10/08 v104: renamed to build v103 for v118 stable
-// 10/14/08	v104: integration of char_I_depth_last_deco for Gradient Model
+// 10/14/08 v104: integration of char_I_depth_last_deco for Gradient Model
 // 03/31/09 v107: integration of FONT Incon24
 // 05/23/10 v109: 5 gas changes & 1 min timer
 // 07/13/10 v110: cns vault added
@@ -90,9 +90,9 @@
 // ** V A R I A B L E S   D E F I N I T I O N S **
 // ***********************************************
 
-#include "p2_definitions.h"
-#define  TEST_MAIN
-#include "shared_definitions.h"
+#include	"p2_definitions.h"
+#define		TEST_MAIN
+#include	"shared_definitions.h"
 
 
 // ambient pressure at different mountain heights
@@ -102,22 +102,23 @@
 
 // ambient pressure in aircraft cabin during flying - worst case according to Buhlmann
 #define P_ambient_fly					0.600	// [bar], 0.600 bar is the value used by Buhlmann for his flying-after-diving calculations
-												//		  0.735 bar is a typical cabin pressure for nowadays commercial jet aircrafts
+												//        0.735 bar is a typical cabin pressure for nowadays commercial jet aircrafts
 												//        -----
 												//        0.135 bar safety margin
 
 // constants and factors
-#define ppWater        					0.0627	// water vapor partial pressure in the lungs
-#define METER_TO_BAR   					0.09985	// conversion factor
-#define BAR_TO_METER   					10.0150	// conversion factor (1.0/METER_TO_BAR)						
-#define SURFACE_DESAT_FACTOR    		0.7042	// surface desaturation safety factor
+#define ppWater							0.0627	// water vapor partial pressure in the lungs
+#define METER_TO_BAR					0.09985	// conversion factor
+#define BAR_TO_METER					10.0150	// conversion factor (1.0/METER_TO_BAR)
+#define SURFACE_DESAT_FACTOR			0.7042	// surface desaturation safety factor
 #define HYST							1.0E-06	// threshold for tissue graphics on-gassing / off-gassing visualization
 
 // thresholds
-#define GF_warning_threshold			100		// threshold for GF   warning (attention threshold is current GF_high)
-#define CNS_warning_threshold			100		// threshold for CNS  warning
-#define CNS_prewarning_threshold		 70		// threshold for CNS  attention
-#define ppO2_prewarn_threshold			120		// threshold for ppO2 attention (master warnings come through options_table.asm)
+#define GF_WARNING_THRESHOLD			100		// threshold for GF   warning (attention threshold is current GF_high)
+#define CNS_WARNING_THRESHOLD			100		// threshold for CNS  warning
+#define CNS_ATTENTION_THRESHOLD			 70		// threshold for CNS  attention
+#define ppO2_ATTENTION_THRESHOLD		120		// threshold for ppO2 attention (thresholds for warnings come by options_table.asm)
+#define ppO2_GAP_TO_SETPOINT			 10		// gap between setpoint and max. ppO2 of the pure diluent [cbar]
 #define GAS_NEEDS_ATTENTION_THRESHOLD	0.70	// threshold for gas needs attention
 
 // deco engine states and modes - char_O_deco_status
@@ -125,7 +126,7 @@
 #define DECO_STATUS_START				0x00
 #define DECO_STATUS_FINISHED			0x00
 #define DECO_STATUS_STOPS				0x01 
-#define DECO_STATUS_ASCENT				0x02
+#define DECO_STATUS_RESULTS				0x02
 #define DECO_STATUS_INIT				0x03
 
 #define DECO_MODE_MASK					0x0C
@@ -134,23 +135,26 @@
 #define DECO_MODE_PSCR					0x08
 
 #define DECO_PLAN_ALTERNATE				0x10
-#define DECO_CNS_CALCULATE 				0x20
-#define DECO_VOLUME_CALCULATE	 		0x40
-#define DECO_ASCENT_DELAYED 			0x80
+#define DECO_CNS_CALCULATE				0x20
+#define DECO_VOLUME_CALCULATE			0x40
+#define DECO_ASCENT_DELAYED				0x80
 
 // deco engine states and modes - char_O_main_status
 //#define DECO_MODE_MASK				0x0C
 //#define DECO_MODE_LOOP				0x04
 //#define DECO_MODE_CCR					0x04	// to be used with == operator in combination with DECO_MODE_MASK only!
 //#define DECO_MODE_PSCR				0x08
-#define DECO_GASCHANGE_OVRD 			0x10
+#define DECO_GASCHANGE_OVRD				0x10
 #define DECO_BOTTOM_CALCULATE			0x40
 
+// deco engine states and modes - tissue_increment
+#define TIME_MASK						0x7F	// (127 decimal, bits 0-6)
+#define TISSUE_FLAG						0x80	// (128 decimal, bit   7 )
 
 // deco engine warnings
 #define	DECO_WARNING_IBCD				0x01
 #define	DECO_WARNING_IBCD_lock			0x02
-#define	DECO_WARNING_MBUBBLES 			0x04
+#define	DECO_WARNING_MBUBBLES			0x04
 #define	DECO_WARNING_MBUBBLES_lock		0x08
 #define	DECO_WARNING_OUTSIDE			0x10
 #define	DECO_WARNING_OUTSIDE_lock		0x20
@@ -162,7 +166,7 @@
 #define INT_FLAG_ZERO					0x0800
 #define INT_FLAG_LOW					0x1000
 #define	INT_FLAG_HIGH					0x2000
-#define INT_FLAG_PREWARNING				0x4000
+#define INT_FLAG_ATTENTION				0x4000
 #define	INT_FLAG_WARNING				0x8000
 
 
@@ -175,28 +179,26 @@
 static void calc_hauptroutine_data_input(void);
 static void calc_hauptroutine_update_tissues(void);
 static void calc_hauptroutine_calc_deco(void);
-static void calc_tissue(void);
-static void calc_limit(void);
-static void calc_nullzeit(void);
+static void calc_alveolar_pressures(void);
+static void calc_tissues(void);
+static void calc_NDL_time(void);
 static void calc_ascenttime(void);
-static void calc_dive_interval(void);
-static void calc_gradient_factor(void);
-static void calc_wo_deco_step_1_min(void);
+static void calc_CNS_increment(void);
 static void calc_desaturation_time(void);
-
-static void sim_extra_time(void);
-static void sim_ascent_to_first_stop(void);
-static void sim_limit(PARAMETER float GF_current);
-
-static void update_startvalues(void);
-static void gas_switch_set(void);
-static void compute_CNS_for_display(void);
-
+static void calc_ascent_to_first_stop(void);
+static void calc_limit(PARAMETER float GF_current);
+static void calc_interval(PARAMETER unsigned char time_increment);
+
+static void gas_find_current(void);
+static void gas_set_ratios(void);
+static void convert_CNS_for_display(void);
+static void convert_sim_CNS_for_display(void);
+static void publish_deco_table(void);
 static void clear_deco_table(void);
 static void clear_tissue(void);
 
+static unsigned char calc_nextdecodepth(void);
 static unsigned char gas_find_better(void);
-static unsigned char calc_nextdecodepth(void);
 static unsigned char update_deco_table(PARAMETER unsigned char time_increment);
 
 
@@ -217,28 +219,28 @@
 static float			low_depth_alt;					// Depth of deepest stop in alternative plan
 
 static float			float_ascent_speed;				// ascent speed from options_table (1.0 .. 10.0 m/min)
-static float			float_saturation_multiplier;    // safety factor for on-gassing rates
-static float			float_desaturation_multiplier;  // safety factor for off-gassing rates
-static float			float_deco_distance;            // additional depth below stop depth for tissue, CNS and gas volume calculation
-
-
-// real context: what we are doing now.
-
-static float			calc_lead_tissue_limit;     	// minimum tolerated ambient pressure by Buhlmann model
-static float			CNS_fraction;                   // current CNS (1.00 = 100%)
-
-static unsigned short	deco_tissue_vector;				// 32 bit vector to memories all tissues that are in decompression
-static unsigned short	IBCD_tissue_vector;				// 32 bit vector to memories all tissues that experience IBCD
-
-// simulation context: used to predict ascent.
-
-static float			sim_lead_tissue_limit;			// minimum tolerated ambient pressure by Buhlmann model
-static float			CNS_sim_norm_fraction;			// CNS at end of dive in normal plan
-static float			CNS_sim_alt_fraction;			// CNS at end of dive in alternative plan
-
-static unsigned char	temp_depth_limit;				// depth of next stop in meters, used in deco calculations
-static unsigned char	sim_lead_tissue_no;				// Leading compartment number
+static float			float_deco_distance;			// additional depth below stop depth for tissue, CNS and gas volume calculation
+static float			float_saturation_multiplier;	// safety factor for on-gassing rates
+static float			float_desaturation_multiplier;	// safety factor for off-gassing rates
+
+// real context: what we are doing now
+
+static float			ceiling;						// minimum tolerated relative pressure (i.e. without surface pressue)
+static float			CNS_fraction;					// current CNS (1.00 = 100%)
+
+static unsigned short	deco_tissue_vector;				// 16 bit vector to memories all tissues that are in decompression
+static unsigned short	IBCD_tissue_vector;				// 16 bit vector to memories all tissues that experience IBCD
+
+// simulation context: used to predict ascent
+
+static float			sim_ceiling;					// minimum tolerated relative pressure (i.e. without surface pressue)
+static float			sim_CNS_fraction;				// CNS increase during predicted ascent, 0.01 = 1%
+
+static unsigned int		int_sim_CNS_fraction;			// CNS increase during predicted ascent, in %
+
+static unsigned char	sim_depth_limit;				// depth of next stop in meters, used in deco calculations
 static unsigned char	split_N2_He[NUM_COMP];			// used for calculating the desaturation time
+static unsigned char	NDL_lead_tissue;				// used to cache tissue to start with calculating NDL
 
 
 // stops table
@@ -252,18 +254,27 @@
 
 static float			desat_factor;					// used to cache a pre-computed factor
 static float			var_ht;							// buffer for a half-time factor
-static float 			pres_target;					// target pressure for a compartment
+static float			pres_target;					// target pressure for a compartment
 static float			pres_actual;					// current pressure of the compartment
-static unsigned short	short_time;						// time it takes for the compartment to reach the target pressure
+static unsigned int		int_time;						// time it takes for the compartment to reach the target pressure
+
 
 // transfer variables between gas_volumes() and gas_volumes_helper()
+
 static float			float_depth;					// depth of the stop or half-way point
 static float			float_time;						// duration of the stop or ascent phase
 static float			volume;							// computed volume of gas
 static unsigned char	usage;							// gas usage in l/min
 
 
-// 44 byte free space left in this bank
+// auxiliary variables for data buffering
+
+static float			N2_equilibrium;					// used for N2 tissue graphics scaling
+static float			temp_tissue;					// auxiliary variable to buffer tissue pressures
+static float			float_pSCR_factor;				// pre-computed factor for pSCR ppO2 drop calculation
+
+
+// 35 byte free space left in this bank (4 bytes per float, 2 bytes per int/short, 1 byte per char)
 
 
 //---- Bank 6 parameters -----------------------------------------------------
@@ -275,74 +286,73 @@
 
 static unsigned char	ci;								// used as index to the Buhlmann tables
 static unsigned char	twosectimer = 0;				// used for timing the tissue updating
-static unsigned char	tissue_increment;				// Selector for real/simulated tissues and time increment
+static unsigned char	tissue_increment;				// selector for real/simulated tissues and time increment
 
 
 // environmental and gas data
 
-static float            pres_respiration;				// current depth in absolute pressure
-static float            pres_surface;					// absolute pressure at the surface
-static float            temp_deco;						// simulated current depth in abs.pressure, used for deco calculations
+static float			pres_surface;					// absolute pressure at the surface
 
 static unsigned char	bottom_depth;					// bottom depth in meters, used by CNS and gas needs calculation
 
-static float            O2_ratio;                       // real breathed gas oxygen ratio
-static float            N2_ratio;                       // real breathed gas nitrogen ratio
-static float            He_ratio;                       // real breathed gas helium ratio
-
-static float			calc_O2_ratio;					// simulated breathed gas oxygen ratio
-static float			calc_N2_ratio;                  // simulated breathed gas nitrogen ratio
-static float			calc_He_ratio;                  // simulated breathed gas helium ratio
+static float			pres_respiration;				// current depth in absolute pressure
+static float			O2_ratio;						// real breathed gas oxygen ratio
+static float			N2_ratio;						// real breathed gas nitrogen ratio
+static float			He_ratio;						// real breathed gas helium ratio
+static float			pSCR_drop;						// real ppO2 drop in pSCR loop
+
+static float			sim_pres_respiration;			// simulated current depth in abs.pressure, used for deco calculations
+static float			sim_O2_ratio;					// simulated breathed gas oxygen ratio
+static float			sim_N2_ratio;					// simulated breathed gas nitrogen ratio
+static float			sim_He_ratio;					// simulated breathed gas helium ratio
+static float			sim_pSCR_drop;					// simulated ppO2 drop in pSCR loop
 
 static float			O2_ppO2;						// ppO2 - calculated for pure oxygen at current depth
+static float			OC_ppO2;						// ppO2 - calculated for breathed in OC mode
 static float			pSCR_ppO2;						// ppO2 - calculated for breathed from pSCR loop
-static float			pure_ppO2;						// ppO2 - calculated for breathed in OC mode
-
-static unsigned char	char_actual_ppO2;				// ppO2 - assumed to be breathed, as integer 100 = 1.00 bar
-
-static float			breathed_ppO2;					// partial pressure of breathed oxygen
-static float            ppN2;							// partial pressure of breathed nitrogen
-static float            ppHe;							// partial pressure of breathed helium
+
+static float			ppO2;							// partial pressure of breathed oxygen
+static float			ppN2;							// partial pressure of breathed nitrogen
+static float			ppHe;							// partial pressure of breathed helium
+
+
+// Result values from calculation functions
+
+static float			CNS_fraction_inc;				// increment of CNS load, 0.01 = 1%
+
+static unsigned char	char_ppO2;						// partial pressure of breathed oxygen, as integer 100 = 1.00 bar
+static unsigned char	NDL_time;						// time in minutes until reaching NDL
+static unsigned int		ascent_time;					// time in minutes needed for the ascent
 
 
 // Buhlmann model parameters
 
-static float            var_N2_a;                       // Buhlmann a, for current N2 tissue
-static float            var_N2_b;                       // Buhlmann b, for current N2 tissue
-static float            var_He_a;                       // Buhlmann a, for current He tissue
-static float            var_He_b;                       // Buhlmann b, for current He tissue
-static float            var_N2_e;                       // exposition, for current N2 tissue
-static float            var_He_e;                       // exposition, for current He tissue
-static float            var_N2_ht;                      // half-time for current N2 tissue
-static float            var_He_ht;                      // half-time for current N2 tissue
-
-
-// gas switch history
+static float			var_N2_a;						// Buhlmann a, for current N2 tissue
+static float			var_N2_b;						// Buhlmann b, for current N2 tissue
+static float			var_He_a;						// Buhlmann a, for current He tissue
+static float			var_He_b;						// Buhlmann b, for current He tissue
+static float			var_N2_e;						// exposition, for current N2 tissue
+static float			var_He_e;						// exposition, for current He tissue
+static float			var_N2_ht;						// half-time for current N2 tissue
+static float			var_He_ht;						// half-time for current N2 tissue
+
+
+// Gas switch history
 
 static unsigned char	sim_gas_first_used;				// Number of first used gas, for bottom segment
-static unsigned char    sim_gas_last_used;              // number of last  used gas
-static unsigned char    sim_gas_last_depth;             // change depth of last used gas
-
-
-// vault to back-up & restore tissue data
+static unsigned char	sim_gas_last_used;				// number of last  used gas
+static unsigned char	sim_gas_last_depth;				// change depth of last used gas
+
+
+// Vault to back-up & restore tissue data
 
 static float			pres_tissue_N2_vault[NUM_COMP];	// stores the nitrogen tissue pressures
 static float			pres_tissue_He_vault[NUM_COMP];	// stores the helium tissue pressures
-static float			low_depth_norm_vault;			// stores a parameter of the GF model for normal plan
-static float			low_depth_alt_vault;			// stores a parameter of the GF model for alternative plan
 static float			cns_vault_float;				// stores current CNS (float representation)
-
-static unsigned int		cns_vault_int;					// stores current CNS (integer representation)
 static unsigned char	deco_warnings_vault;			// stores warnings status
 
 
-// auxiliary variables for local data buffering
-
-static float 			N2_equilibrium;					// used for N2 tissue graphics scaling
-static float            temp_tissue;					// auxiliary variable to buffer tissue pressures
-
-
-// 6 byte free space left in this bank
+// 8 byte free space left in this bank (4 bytes per float, 2 bytes per int/short, 1 byte per char)
 
 
 //---- Bank 7 parameters -----------------------------------------------------
@@ -354,32 +364,36 @@
 
 float					pres_tissue_N2[NUM_COMP];		// 16 floats = 64 bytes
 float					pres_tissue_He[NUM_COMP];		// 16 floats = 64 bytes
+
 float					sim_pres_tissue_N2[NUM_COMP];	// 16 floats = 64 bytes
 float					sim_pres_tissue_He[NUM_COMP];	// 16 floats = 64 bytes
 
+// bank is full!
+
 
 //---- Bank 8 parameters -----------------------------------------------------
 #ifndef UNIX
 #   pragma udata overlay bank8=0x800
 
-static char	  md_pi_subst[256];				// Overlay C-code data stack here, too.
+static char				md_pi_subst[256];				// Overlay C-code data stack here, too.
 
 #   define C_STACK md_pi_subst
 #endif
 
+
 // Back to bank6 for further tmp data
+// Do not delete this assignment, it is needed by the compiler/linker.
 #ifndef UNIX
 #   pragma udata bank6
 #endif
 
+
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////
-///////////////////////////// THE LOOKUP TABLES //////////////////////////////
+////////////////              THE LOOKUP TABLES               ////////////////
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////
-//
-// End of PROM code is 17F00, So push tables on PROM top...
-//
+
 #ifndef UNIX
 #   pragma romdata Buhlmann_tables = 0x1DD00  // Needs to be in UPPER bank.
 #endif
@@ -432,19 +446,19 @@
 	5.75958E-03,    1.51848E-02,  
 	2.88395E-03,    7.62144E-03,
 	1.84669E-03,    4.88315E-03,
-    1.24813E-03,    3.29997E-03,
-    8.55371E-04,    2.26041E-03,
-    6.03079E-04,    1.59437E-03,
-    4.25414E-04,    1.12479E-03,
-    3.00019E-04,    7.93395E-04,
-    2.11949E-04,    5.60641E-04,
-    1.58240E-04,    4.18555E-04,
-    1.23548E-04,    3.26795E-04,
-    9.66686E-05,    2.55722E-04,
-    7.57509E-05,    2.00387E-04,
-    5.92416E-05,    1.56716E-04,
-    4.63943E-05,    1.22734E-04,
-    3.63850E-05,    9.62538E-05
+	1.24813E-03,    3.29997E-03,
+	8.55371E-04,    2.26041E-03,
+	6.03079E-04,    1.59437E-03,
+	4.25414E-04,    1.12479E-03,
+	3.00019E-04,    7.93395E-04,
+	2.11949E-04,    5.60641E-04,
+	1.58240E-04,    4.18555E-04,
+	1.23548E-04,    3.26795E-04,
+	9.66686E-05,    2.55722E-04,
+	7.57509E-05,    2.00387E-04,
+	5.92416E-05,    1.56716E-04,
+	4.63943E-05,    1.22734E-04,
+	3.63850E-05,    9.62538E-05
 //-------------------------------------
 };
 
@@ -452,22 +466,22 @@
 // Integration constant for 1 minute,
 // Ie. 1- 2^(-1/HT)
 //----- N2 --------- e 1min He --------
-	1.59104E-01,    3.68109E-01,  	
-    8.29960E-02,   	2.05084E-01,     
-    5.39424E-02,    1.36579E-01,
-    3.67742E-02,    9.44046E-02,
-    2.53454E-02,    6.56359E-02,
-    1.79351E-02,    4.67416E-02,
-    1.26840E-02,    3.31991E-02,
-    8.96152E-03,    2.35301E-02,
-    6.33897E-03,    1.66832E-02,
-    4.73633E-03,    1.24808E-02,
-    3.69981E-03,    9.75753E-03,
-    2.89600E-03,    7.64329E-03,
-    2.27003E-03,    5.99417E-03,
-    1.77572E-03,    4.69082E-03,
-    1.39089E-03,    3.67548E-03,
-    1.09097E-03,    2.88359E-03
+	1.59104E-01,    3.68109E-01,
+	8.29960E-02,    2.05084E-01,
+	5.39424E-02,    1.36579E-01,
+	3.67742E-02,    9.44046E-02,
+	2.53454E-02,    6.56359E-02,
+	1.79351E-02,    4.67416E-02,
+	1.26840E-02,    3.31991E-02,
+	8.96152E-03,    2.35301E-02,
+	6.33897E-03,    1.66832E-02,
+	4.73633E-03,    1.24808E-02,
+	3.69981E-03,    9.75753E-03,
+	2.89600E-03,    7.64329E-03,
+	2.27003E-03,    5.99417E-03,
+	1.77572E-03,    4.69082E-03,
+	1.39089E-03,    3.67548E-03,
+	1.09097E-03,    2.88359E-03
 //-------------------------------------
 };
 
@@ -475,28 +489,28 @@
 // The 10 min Value in float notation:
 //  result of 1 - 2^(-10/ht)
 //---- N2 -------------- He -----------
-	8.23223E-01,    9.89851E-01,  
-	5.79552E-01,  	8.99258E-01,
-    4.25651E-01,    7.69737E-01,
-    3.12487E-01,    6.29027E-01,
-    2.26416E-01,    4.92821E-01,
-    1.65547E-01,    3.80407E-01,
-    1.19840E-01,    2.86538E-01,
-    8.60863E-02,    2.11886E-01,
-    6.16117E-02,    1.54849E-01,
-    4.63665E-02,    1.18026E-01,
-    3.63881E-02,    9.34005E-02,
-    2.85855E-02,    7.38569E-02,
-    2.24698E-02,    5.83504E-02,
-    1.76160E-02,    4.59303E-02,
-    1.38222E-02,    3.61528E-02,
-    1.08563E-02,    2.84646E-02
+	8.23223E-01,    9.89851E-01,
+	5.79552E-01,    8.99258E-01,
+	4.25651E-01,    7.69737E-01,
+	3.12487E-01,    6.29027E-01,
+	2.26416E-01,    4.92821E-01,
+	1.65547E-01,    3.80407E-01,
+	1.19840E-01,    2.86538E-01,
+	8.60863E-02,    2.11886E-01,
+	6.16117E-02,    1.54849E-01,
+	4.63665E-02,    1.18026E-01,
+	3.63881E-02,    9.34005E-02,
+	2.85855E-02,    7.38569E-02,
+	2.24698E-02,    5.83504E-02,
+	1.76160E-02,    4.59303E-02,
+	1.38222E-02,    3.61528E-02,
+	1.08563E-02,    2.84646E-02
 //-------------------------------------
 };
 
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////
-////////////////////////////// THE SUBROUTINES ///////////////////////////////
+////////////////               THE SUBROUTINES                ////////////////
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////
 //
@@ -508,7 +522,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////
-///////////////////////  U T I L I T I E S   /////////////////////////////////
+////////////////             U T I L I T I E S                ////////////////
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////
 
@@ -676,12 +690,154 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+////////////////      THE JUMP-IN CODE for the asm code       ////////////////
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_calc_hauptroutine
+//
+// called from: divemode.asm
+//
+// Called every second during diving,
+// updates tissues on every second invocation.
+//
+// Every few seconds (or slower when TTS > 16):
+// - Updates deco table (char_O_deco_time/depth) with new values,
+// - updates ascent time, and
+// - sets status to zero (so we can check there is new results).
+//
+void deco_calc_hauptroutine(void)
+{
+	RESET_C_STACK
+	calc_hauptroutine();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_clear_tissue
+//
+// called from: start.asm
+//              menu_tree.asm
+//              simulator.asm
+//
+// Sets all tissues to equilibrium with Air at ambient pressure,
+// resets all CNS values, any warnings and resets all model output.
+//
+void deco_clear_tissue(void)
+{
+	RESET_C_STACK
+	clear_tissue();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_calc_dive_interval
+//
+// called from: simulator.asm
+//
+// Updates tissues and CNS value for char_I_dive_interval minutes on Air
+// at ambient pressure and calculates resulting GF factor and ceiling for
+// a GF-high of 100% (ceiling and GF factor not used by simulator.asm)
+//
+void deco_calc_dive_interval(void)
+{
+	RESET_C_STACK
+	calc_interval(char_I_dive_interval);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_calc_dive_interval_1min
+//
+// called from: start.asm
+//              sleepmode.asm
+//              surfmode.asm
+//              menu_tree.asm
+//              ghostwriter.asm
+//
+// Updates tissues and CNS value for 1 minute on Air at ambient pressure and
+// calculates resulting GF factor and ceiling for a GF-high of 100% (ceiling
+// is not used by *.asm files).
+//
+void deco_calc_dive_interval_1min(void)
+{
+	RESET_C_STACK
+	calc_interval(1);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_calc_dive_interval_1min
+//
+// called from: sleepmode.asm
+//
+// Updates tissues and CNS value for 10 minutes on Air at ambient pressure and
+// calculates resulting GF factor and ceiling for a GF-high of 100% (ceiling
+// is not used by sleepmode.asm).
+//
+void deco_calc_dive_interval_10min(void)
+{
+	RESET_C_STACK
+	calc_interval(10);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_calc_desaturation_time
+//
+// called from: start.asm
+//              surfmode.asm
+//              menu_tree.asm
+//              ghostwriter.asm
+//
+// Computes desaturation and no-fly times.
+//
+void deco_calc_desaturation_time(void)
+{
+	RESET_C_STACK
+	calc_desaturation_time();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_push_tissues_to_vault
+//
+// called from: simulator.asm
+//
+// Makes a backup of the state of the real tissues and the deco engine.
+//
+void deco_push_tissues_to_vault(void)
+{
+	RESET_C_STACK
+	push_tissues_to_vault();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_pull_tissues_from_vault
+//
+// called from: simulator.asm
+//              ghostwriter.asm
+//
+// Restores the state of the real tissues and the deco engine from the backup.
+//
+void deco_pull_tissues_from_vault(void)
+{
+	RESET_C_STACK
+	pull_tissues_from_vault();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+////////////////                THE FUNCTIONS                 ////////////////
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////
 // calc_nextdecodepth
 //
 // new in v.102
 //
 // INPUT, changing during dive:
-//      temp_deco : current depth in absolute pressure
+//      sim_pres_respiration : current depth in absolute pressure
 //
 // INPUT, fixed during dive:
 //      pres_surface
@@ -695,69 +851,66 @@
 //      low_depth_norm/_alt      : used for GF model
 //
 // OUTPUT
-//      temp_depth_limit : depth of next stop in meters        (if RETURN == true )
-//                         depth we can ascent to without stop (if RETURN == false)
+//      sim_depth_limit : depth of next stop in meters        (if RETURN == true )
+//                        depth we can ascent to without stop (if RETURN == false)
 //
 // RETURN TRUE if a stop is needed.
 //
 static unsigned char calc_nextdecodepth(void)
 {
-    overlay unsigned char need_stop;
-	
+	overlay unsigned char need_stop;
+
 	// compute current depth in meters
-    overlay float depth = (temp_deco - pres_surface) * BAR_TO_METER;
-
-    // compute depth in meters after 1 minute of ascent at float_ascent_speed (5..10 m/min)
-    overlay float min_depth = (depth > float_ascent_speed) ? (depth - float_ascent_speed) : 0.0;
-
-	
-	 // allow for 200mbar of weather dependent surface pressure change
-    assert( depth >= -0.2 );       
+	overlay float depth = (sim_pres_respiration - pres_surface) * BAR_TO_METER;
+
+	// compute depth in meters after 1 minute of ascent at float_ascent_speed (5..10 m/min)
+	overlay float min_depth = (depth > float_ascent_speed) ? (depth - float_ascent_speed) : 0.0;
+
+
+	// allow for 200mbar of weather dependent surface pressure change
+	assert( depth >= -0.2 );
 
 
 	//---- check if a stop is needed for deco reasons ----------------------------
-	
-    // switch on deco model
-    if( char_I_deco_model != 0 )
-    {
+
+	// switch on deco model
+	if( char_I_deco_model != 0 )
+	{
 		//---- ZH-L16 + GRADIENT FACTOR Model ------------------------------------
-		
+
 		overlay float locked_GF_step;
 		overlay float low_depth;
-		overlay float pres_gradient;
-
-        overlay unsigned char first_stop = 0;
-		
-				
-		// calculate minimum depth we can ascent to in absolute pressure
-        sim_limit( GF_low );
-		
-		// ...and convert the depth into relative pressure
-        pres_gradient = sim_lead_tissue_limit - pres_surface;	
+		overlay float limit_depth;
+
+		overlay unsigned char first_stop = 0;
+
+
+		// calculate minimum depth we can ascent to in bar relative pressure
+		calc_limit(GF_low);
 
 		// check if we can surface directly
-        if( pres_gradient <= 0.0 )
+		if( sim_ceiling <= 0.0 )
 		{
 			min_depth = 0.0;		// set minimum depth to 0 meters = surface
 			goto no_deco_stop;		// done.
 		}
 
 		// convert minimum depth we can ascent to from relative pressure to depth in meters
-        pres_gradient *= BAR_TO_METER;							
+		limit_depth = sim_ceiling * BAR_TO_METER;
 
 		// recall low_depth dependent on current plan
 		low_depth = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? low_depth_alt : low_depth_norm;
 		
-        // Store the deepest point needing a deco stop as the LOW reference for GF.
-        // NOTE: following stops will be validated using this LOW-HIGH GF scale,
-        //       so if we want to keep coherency, we should not validate this stop
-        //       yet, but apply the search to it, as for all the following stops afterward.
-        if( pres_gradient > low_depth )
-        {
+		// Store the deepest point needing a deco stop as the LOW reference for GF.
+		// NOTE: following stops will be validated using this LOW-HIGH GF scale,
+		//       so if we want to keep coherency, we should not validate this stop
+		//       yet, but apply the search to it, as for all the following stops afterward.
+		if( limit_depth > low_depth )
+		{
 			// update GF parameters
-            low_depth      = pres_gradient;
-            locked_GF_step = GF_delta / low_depth;
-			
+			low_depth      = limit_depth;
+			locked_GF_step = GF_delta / low_depth;
+
 			// store updated GF parameters dependent on current plan
 			if( char_O_deco_status & DECO_PLAN_ALTERNATE )
 			{
@@ -769,7 +922,7 @@
 				low_depth_norm      = low_depth;
 				locked_GF_step_norm = locked_GF_step;
 			}
-        }
+		}
 		else
 		{
 			// recall locked_GF_step dependent on current plan
@@ -777,159 +930,149 @@
 		}
 
 		// invalidate this stop if we can ascent for 1 minute without going above minimum required deco depth
-        if( pres_gradient < min_depth ) goto no_deco_stop;         
-
-		
+		if( limit_depth < min_depth ) goto no_deco_stop;
+
+
 		// if program execution passes here, we need a deco stop
-		
-        // Round to multiple of 3 meters
-        first_stop = 3 * (unsigned char)(0.9995 + pres_gradient * 0.333333);
+
+		// Round to multiple of 3 meters
+		first_stop = 3 * (unsigned char)(0.9995 + limit_depth * 0.333333);
 
 		// check a constraint
-        assert( first_stop < 128 );
-
-        // apply correction for the shallowest stop, use char_I_depth_last_deco (3..6 m) instead
-        if( first_stop == 3 ) first_stop = char_I_depth_last_deco;
-
-        // We have a stop candidate.
-        // But maybe ascending to the next stop will diminish the constraint,
-        // because the GF might decrease more than the pressure gradient...
-        while(first_stop > 0)
-        {
+		assert( first_stop < 128 );
+
+		// apply correction for the shallowest stop, use char_I_depth_last_deco (3..6 m) instead
+		if( first_stop == 3 ) first_stop = char_I_depth_last_deco;
+
+		// We have a stop candidate.
+		// But maybe ascending to the next stop will diminish the constraint,
+		// because the GF might decrease more than the pressure gradient...
+		while(first_stop > 0)
+		{
 			// Next depth
-            overlay unsigned char next_stop;            
-
-            // invalidate this stop if we can ascent one more minute without going above minimum required deco depth
-            if( first_stop <= (unsigned char)min_depth ) goto no_deco_stop;
+			overlay unsigned char next_stop;
+
+			// invalidate this stop if we can ascent one more minute without going above minimum required deco depth
+			if( first_stop <= (unsigned char)min_depth ) goto no_deco_stop;
 
 			// compute depth of next stop
-            if      ( first_stop <= char_I_depth_last_deco ) next_stop = 0;
-            else if ( first_stop == 6                      ) next_stop = char_I_depth_last_deco;
-            else                                             next_stop = first_stop - 3;
-
-            // compute total pressure at the new stop candidate
-            pres_gradient = next_stop * METER_TO_BAR + pres_surface;
-
-            // compute limit for the new stop candidate
-            if( (low_depth == 0.0) || (next_stop > low_depth) ) sim_limit( GF_low );
-            else                                                sim_limit( GF_high - next_stop * locked_GF_step );
-
-            // check if ascent to the next stop candidate is possible
-            if( sim_lead_tissue_limit >= pres_gradient ) goto deco_stop_found;	// no - ascent to next_stop forbidden
-
-            // else, validate that stop and loop...
-            first_stop = next_stop;
-        }
+			if      ( first_stop <= char_I_depth_last_deco ) next_stop = 0;
+			else if ( first_stop == 6                      ) next_stop = char_I_depth_last_deco;
+			else                                             next_stop = first_stop - 3;
+
+			// compute limit with the GF of the new stop candidate
+			if( (low_depth == 0.0) || (next_stop > low_depth) ) calc_limit(GF_low);
+			else                                                calc_limit(GF_high - next_stop * locked_GF_step);
+
+			// check if ascent to the next stop candidate is possible
+			if( sim_ceiling * BAR_TO_METER >= next_stop ) goto deco_stop_found;	// no - ascent to next_stop forbidden
+
+			// else, validate that stop and loop...
+			first_stop = next_stop;
+		}
 
 no_deco_stop:
-		need_stop        = 0;              				// set flag for stop needed to 'no'
-		temp_depth_limit = (unsigned char)min_depth;	// report depth we can ascent to without stop
+		need_stop       = 0;							// set flag for stop needed to 'no'
+		sim_depth_limit = (unsigned char)min_depth;		// report depth we can ascent to without stop
 		goto done;
 
 deco_stop_found:
-		need_stop        = 1;              				// set flag for stop needed to 'yes'
-		temp_depth_limit = (unsigned char)first_stop;	// stop depth, in meters
+		need_stop       = 1;							// set flag for stop needed to 'yes'
+		sim_depth_limit = (unsigned char)first_stop;	// stop depth, in meters
 
 done:
-        ;
-    }
-    else
-    {
+		;
+	}
+	else
+	{
 		//---- ZH-L16 model -------------------------------------------------
-		
-        overlay float pres_gradient;
-
-		
-        // calculate minimum depth we can ascent to in absolute pressure
-        sim_limit(1.0);
-
-		// ...and convert the depth into relative pressure 
-        pres_gradient = sim_lead_tissue_limit - pres_surface;
+
+		overlay float limit_depth;
+
+
+		// calculate minimum depth we can ascent to in bar relative pressure
+		calc_limit(1.0);
 
 		// check if we can surface directly
-        if (pres_gradient >= 0)
-        {
+		if (sim_ceiling >= 0)
+		{
 			// no - set flag for stop needed to 'yes'
-            need_stop = 1;
+			need_stop = 1;
 
 			// convert stop depth in relative pressure to stop index
-            pres_gradient *= BAR_TO_METER / 3;
+			limit_depth = sim_ceiling * BAR_TO_METER / 3;
 
 			// convert stop index to depth in meters, rounded to multiple of 3 meters
-            temp_depth_limit = 3 * (short) (pres_gradient + 0.99);
-
-            // correct last stop to 4m/5m/6m
-            if( temp_depth_limit == 3 ) temp_depth_limit = char_I_depth_last_deco;
-        }
-        else
+			sim_depth_limit = 3 * (short)(limit_depth + 0.99);
+
+			// correct last stop to 4m/5m/6m
+			if( sim_depth_limit == 3 ) sim_depth_limit = char_I_depth_last_deco;
+		}
+		else
 		{
 			// yes - set flag for stop needed to 'no'
-			need_stop        = 0;
+			need_stop       = 0;
 			
 			// set depth we can ascent to as 0 = surface
-            temp_depth_limit = 0;
+			sim_depth_limit = 0;
 		}
-    }
-
-	
+	}
+
 	// After the first deco stop, gas changes are only done at deco stops now!
-	
+
 	// check if a stop is found and there is a better gas to switch to
 	if( need_stop && gas_find_better() )
 	{
 		// set the new calculation ratios for N2, He and O2
-		gas_switch_set();
+		gas_set_ratios();
 
 		// prime the deco stop with the gas change time
 		update_deco_table(char_I_gas_change_time); 
 	}
 
-    return need_stop;
+	return need_stop;
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// copy_deco_table
+// publish_deco_table
 //
 // Buffer the stops, once computed, so we can continue to display them
 // while computing the next set.
 //
-static void copy_deco_table(void)
+static void publish_deco_table(void)
 {
-    // Copy depth of the first (deepest) stop, because when reversing
-    // order, it will be hard to find...
-    char_O_first_deco_depth = internal_deco_depth[0];
-    char_O_first_deco_time  = internal_deco_time [0];
-
-    {
-        overlay unsigned char x, y;
-
-        for(x=0; x<NUM_STOPS; x++)
-        {
-            char_O_deco_depth[x] = internal_deco_depth[x];
-            char_O_deco_time [x] = internal_deco_time [x];
-            char_O_deco_gas  [x] = internal_deco_gas  [x];
-        }
-
-        //Now fill the char_O_deco_time_for_log array
-        //---- First: search the first non-null depth
-        for(x=(NUM_STOPS-1); x != 0; --x)
-            if( internal_deco_depth[x] != 0 ) break;
-
-        //---- Second: copy to output table (in reverse order)
-        for(y=0; y<NUM_STOPS; y++, --x)
-        {
-            char_O_deco_time_for_log[y] = internal_deco_time [x];
-
-            // Stop only once the last transfer is done.
-            if( x == 0 ) break;
-        }
-
-        //---- Third: fill table end with null
-        for(y++; y<NUM_STOPS; y++)
-        {
-            char_O_deco_time_for_log[y] = 0;
-        }
-    }
+	overlay unsigned char x, y;
+
+
+	// Copy depth of the first (deepest) stop, because when reversing
+	// order, it will be hard to find...
+	char_O_first_deco_depth = internal_deco_depth[0];
+	char_O_first_deco_time  = internal_deco_time [0];
+
+	for(x=0; x<NUM_STOPS; x++)
+	{
+		char_O_deco_depth[x] = internal_deco_depth[x];
+		char_O_deco_time [x] = internal_deco_time [x];
+		char_O_deco_gas  [x] = internal_deco_gas  [x];
+	}
+
+	//Now fill the char_O_deco_time_for_log array
+	//---- First: search the first non-null depth
+	for(x=(NUM_STOPS-1); x != 0; --x)
+		if( internal_deco_depth[x] != 0 ) break;
+
+	//---- Second: copy to output table (in reverse order)
+	for(y=0; y<NUM_STOPS; y++, --x)
+	{
+		char_O_deco_time_for_log[y] = internal_deco_time [x];
+
+		// Stop only once the last transfer is done.
+		if( x == 0 ) break;
+	}
+
+	//---- Third: fill table with null until end
+	for(y++; y<NUM_STOPS; y++)
+		char_O_deco_time_for_log[y] = 0;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -941,91 +1084,13 @@
 //
 static void temp_tissue_safety(void)
 {
-    assert( 0.0 <  float_desaturation_multiplier && float_desaturation_multiplier <= 1.0 );
-    assert( 1.0 <= float_saturation_multiplier   && float_saturation_multiplier   <= 2.0 );
+	assert( 0.0 <  float_desaturation_multiplier && float_desaturation_multiplier <= 1.0 );
+	assert( 1.0 <= float_saturation_multiplier   && float_saturation_multiplier   <= 2.0 );
 
 	if( temp_tissue < 0.0 ) temp_tissue *= float_desaturation_multiplier;
 	else                    temp_tissue *= float_saturation_multiplier;
 }
 
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-// ** THE JUMP-IN CODE **
-// ** for the asm code **
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-
-//////////////////////////////////////////////////////////////////////////////
-// Called every second during diving.
-// updates tissues every second invocation.
-//
-// Every few seconds (or slower when TTS > 16):
-//    - updates deco table (char_O_deco_time/depth) with new values.
-//    - updates ascent time,
-//    - sets status to zero (so we can check there is new results).
-//
-void deco_calc_hauptroutine(void)
-{
-    RESET_C_STACK
-    calc_hauptroutine();
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// Reset decompression model:
-// + Set all tissues to equilibrium with Air at ambient pressure.
-// + Reset last stop to 0m
-// + Reset all model output.
-void deco_clear_tissue(void)
-{
-    RESET_C_STACK
-    clear_tissue();
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-void deco_calc_wo_deco_step_1_min(void)
-{
-    RESET_C_STACK
-    calc_wo_deco_step_1_min();
- }
-
-//////////////////////////////////////////////////////////////////////////////
-
-void deco_calc_desaturation_time(void)
-{
-    RESET_C_STACK
-    calc_desaturation_time();
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-void deco_calc_dive_interval(void)
-{
-    RESET_C_STACK
-    calc_dive_interval();
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// deco_calc_CNS_decrease_15min
-//
-// new in v.101
-//
-// calculates the half time of 90 minutes in 6 steps of 15 min
-// (Used in sleep mode, for low battery mode).
-//
-// Output: int_O_CNS_fraction
-// Uses and Updates: CNS_fraction
-//
-void deco_calc_CNS_decrease_15min(void)
-{
-    RESET_C_STACK
- 
-	// clock down CNS
-    CNS_fraction =  0.890899 * CNS_fraction;
-	
-	// compute integer copy of CNS value
-	compute_CNS_for_display();
-}
 
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1038,21 +1103,21 @@
 //
 static void gas_find_current(void)
 {
-    assert( 1 <= char_I_current_gas && char_I_current_gas <= 6 );
-
-    if( char_I_current_gas <= NUM_GAS )					// Gas 1-5
-    {
-        sim_gas_last_used = sim_gas_first_used = char_I_current_gas;
-
-        // If current gas is a deco gas get it's change depth.
+	assert( 1 <= char_I_current_gas && char_I_current_gas <= 6 );
+
+	if( char_I_current_gas <= NUM_GAS )					// Gas 1-5
+	{
+		sim_gas_last_used = sim_gas_first_used = char_I_current_gas;
+
+		// If current gas is a deco gas get it's change depth.
 		// Set change depth to 0 if the current gas is the first gas or 
 		// a travel/normal gas, i.e. if it can be breathed at "any" depth.
-        if( char_I_deco_gas_change[sim_gas_last_used-1] ) sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used-1];
+		if( char_I_deco_gas_change[sim_gas_last_used-1] ) sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used-1];
 		else                                              sim_gas_last_depth = 0;
-    }
-    else
+	}
+	else
 	{
-        sim_gas_last_used = sim_gas_first_used = 0;		// Gas 6 (the manually set one) has number 0 here
+		sim_gas_last_used = sim_gas_first_used = 0;		// Gas 6 (the manually set one) has number 0 here
 		sim_gas_last_depth                     = 0;		// handle it as a travel/normal gas
 	}
 }
@@ -1061,9 +1126,9 @@
 //////////////////////////////////////////////////////////////////////////////
 // Find the deco gas with the shallowest change depth beyond current depth
 //
-// INPUT   temp_depth_limit	        : current depth in meters
+// INPUT   sim_depth_limit          : current depth in meters
 //         char_I_deco_gas_change[] : change depths of the deco gases
-//		   sim_gas_last_depth       : change depth of the currently used gas, 0 if on the gas set as FIRST
+//         sim_gas_last_depth       : change depth of the currently used gas, 0 if on the gas set as FIRST
 //
 // OUTPUT  sim_gas_last_depth       : switch depth            - only if return value is true
 //         sim_gas_last_used        : index of the gas (1..5) - only if return value is true
@@ -1075,8 +1140,8 @@
 	overlay unsigned char switch_depth = 255;
 	overlay unsigned char switch_gas   = 0;
 	overlay unsigned char j;
-	
-	
+
+
 	// no automatic gas changes in CCR mode and - as of now - in pSCR mode
 	if( char_O_deco_status & DECO_MODE_LOOP ) return 0;
 
@@ -1091,7 +1156,7 @@
 		// If yes, skip this gas as it is not to be used yet.
 		// Remark: this check will also skip all disabled gases and the gas set
 		//         as 'first' because these have their change depth set to 0.
-		if( temp_depth_limit > char_I_deco_gas_change[j] ) continue;
+		if( sim_depth_limit > char_I_deco_gas_change[j] ) continue;
 
 		// Is the change depth of the gas deeper than the change depth of the
 		// gas we are currently one?
@@ -1118,7 +1183,7 @@
 		sim_gas_last_depth = switch_depth;				// report its change depth
 
 		assert( sim_gas_last_depth < switch_depth );
-		
+
 		return 1;										// signal a better gas was found
 	}
 	else
@@ -1130,144 +1195,210 @@
 //////////////////////////////////////////////////////////////////////////////
 // Set calc_N2/He/O2_ratios by sim_gas_last_used
 //
-// Input:  sim_gas_last_used  : index of gas to use
-//         N2_ratio, He_ratio : if gas 0 = the manually set gas is in use
+// Input:  sim_gas_last_used          : index of gas to use
+//         N2_ratio, He_ratio         : if gas =    0 (the manually set gas)
+//         char_I_deco_O2/He_ratio[]  : if gas = 1..5 (the configured gases)
 //
-// Output: calc_N2_ratio, calc_He_ratio, calc_O2ratio
+// Output: sim_N2_ratio, sim_He_ratio : ratios of the inert gases
+//         sim_pSCR_drop              : ppO2 drop in pSCR loop
 //
-static void gas_switch_set(void)
+static void gas_set_ratios(void)
 {
+	overlay float sim_IG_ratio;
+
 	assert( 0 <= sim_gas_last_used <= NUM_GAS );
 
-	if( sim_gas_last_used == 0 )    // Gas6 = manually set gas.
+
+	// get gas ratios
+	if( sim_gas_last_used == 0 )
 	{
-		calc_O2_ratio = O2_ratio;
-		calc_He_ratio = He_ratio;
+		sim_O2_ratio = O2_ratio;
+		sim_He_ratio = He_ratio;
 	}
 	else
 	{
-	calc_O2_ratio = char_I_deco_O2_ratio[sim_gas_last_used-1] * 0.01;
-	calc_He_ratio = char_I_deco_He_ratio[sim_gas_last_used-1] * 0.01;
+		sim_O2_ratio = 0.01 * char_I_deco_O2_ratio[sim_gas_last_used-1];
+		sim_He_ratio = 0.01 * char_I_deco_He_ratio[sim_gas_last_used-1];
 	}
 
-	calc_N2_ratio = 1.0 - calc_O2_ratio - calc_He_ratio;
-
-	assert( 0.0 <= calc_N2_ratio && calc_N2_ratio <= 0.95 );
-	assert( 0.0 <= calc_He_ratio && calc_He_ratio <= 1.00 );
-	assert( (calc_N2_ratio + calc_He_ratio) <= 1.00 );
+	// inert gas ratio (local helper variable)
+	sim_IG_ratio     = 1.00 - sim_O2_ratio;
+
+	// N2 ratio
+	sim_N2_ratio     = sim_IG_ratio - sim_He_ratio;
+
+	// ppO2 drop in pSCR loop
+	sim_pSCR_drop    = sim_IG_ratio * float_pSCR_factor;
+
+
+	assert( 0.0 <=  sim_N2_ratio && sim_N2_ratio  <= 0.95 );
+	assert( 0.0 <=  sim_He_ratio && sim_He_ratio  <= 0.95 );
+	assert(        (sim_N2_ratio +  sim_He_ratio) <= 0.95 );
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// Compute ppN2 and ppHe
+// Compute respired ppN2 and ppHe
 //
-// Input: calc_N2_ratio, calc_He_ratio : simulated gas mix.
-//        temp_deco                    : simulated respiration pressure
-//        float_deco_distance          : safety factor
-//        ppWater                      : water-vapor pressure inside respiratory tract
+// Input:  tissue_increment       : selector for targeting simulated or real tissues
+//         char_O_main_status     : breathing mode for real      tissues
+//         char_O_deco_status     : breathing mode for simulated tissues
+//         (sim_)O2_ratio         : (simulated) O2 ratio breathed
+//         (sim_)N2_ratio         : (simulated) N2 ratio breathed
+//         (sim_)He_ratio         : (simulated) He ratio breathed
+//         (sim_)pres_respiration : (simulated) respiration pressure
+//         char_I_const_ppO2      : ppO2 reported from sensors or setpoint
+//         char_I_PSCR_drop       : pSCR parameter
+//         char_I_PSCR_lungratio  : pSCR parameter
+//         pres_surface           : surface pressure
+//         float_deco_distance    : safety factor
+//         ppWater                : water-vapor pressure inside respiratory tract
 //
-// Output: ppN2, ppHe.
+// Output: ppN2                   : respired N2 partial pressure
+//         ppHe                   : respired He partial pressure
 //
-static void sim_alveolar_presures(void)
+void calc_alveolar_pressures(void)
 {
-    overlay float deco_diluent = temp_deco;
-	
-	// read ppO2 reported from sensors or by setpoint		// TODO: can be deleted
-	// char_actual_ppO2 = char_I_const_ppO2;
-
-
-    // Take deco offset into account, but not at surface.
-    // Note: this should be done on ambient pressure, hence before
-    //       computing the diluent partial pressure...
-    if( deco_diluent > pres_surface ) deco_diluent += float_deco_distance;
-
-	if( char_O_deco_status & DECO_MODE_LOOP )
-    {
-		//---- Loop mode : adjust ppN2 and ppHe for change in ppO2 due to setpoint (CCR) or drop (pSCR)-------
-
-		// get current setpoint (CCR) or sensor value (CCR, for pSCR see text below) as default
-		overlay float const_ppO2 = char_I_const_ppO2 * 0.01;
-		
-		if( char_O_deco_status & DECO_MODE_PSCR )
+	overlay float pres_diluent;
+	overlay float calc_O2_ratio;
+	overlay float calc_N2_ratio;
+	overlay float calc_He_ratio;
+	overlay float calc_pSCR_drop;
+
+	overlay unsigned char status;
+
+
+	assert( 0.00 <= N2_ratio && N2_ratio <= 1.00 );
+	assert( 0.00 <= He_ratio && He_ratio <= 1.00 );
+	assert( (N2_ratio + He_ratio) <= 1.00 );
+	assert( 0.800 < pres_respiration && pres_respiration < 14.0 );
+
+	assert( 0.00 <= sim_N2_ratio && N2_ratio <= 1.00 );
+	assert( 0.00 <= sim_He_ratio && He_ratio <= 1.00 );
+	assert( (sim_N2_ratio + sim_He_ratio) <= 1.00 );
+	assert( 0.800 < sim_pres_respiration && sim_pres_respiration < 14.0 );
+
+
+	// get input data according to context
+	if( tissue_increment & TISSUE_FLAG )
+	{
+		//---- real tissues -----------------------------------------------------------
+		status         = char_O_main_status;
+		pres_diluent   = pres_respiration;
+		calc_pSCR_drop = pSCR_drop;
+
+		calc_O2_ratio  = O2_ratio;
+		calc_N2_ratio  = N2_ratio;
+		calc_He_ratio  = He_ratio;
+	}
+	else
+	{
+		//---- simulated tissues ------------------------------------------------------
+		status         = char_O_deco_status;
+		pres_diluent   = sim_pres_respiration;
+		calc_pSCR_drop = sim_pSCR_drop;
+
+		calc_O2_ratio  = sim_O2_ratio;
+		calc_N2_ratio  = sim_N2_ratio;
+		calc_He_ratio  = sim_He_ratio;
+
+		// take deco offset into account, but not at surface
+		if( pres_diluent > pres_surface ) pres_diluent += float_deco_distance;
+	}
+
+	//---- OC, CCR and Bailout Mode Gas Calculations -----------------------------------
+
+	// calculate ppO2 of pure oxygen
+	O2_ppO2 = (pres_diluent - ppWater);
+
+	// capture failure condition in case pres_respiration is < ppWater (should never happen...)
+	if( O2_ppO2 < 0.0 ) O2_ppO2 = 0.0;
+
+	// calculate ppO2 of the pure gas (diluent)
+	OC_ppO2 = O2_ppO2 * calc_O2_ratio;
+
+	// calculate pSCR ppO2
+	pSCR_ppO2 = OC_ppO2 - calc_pSCR_drop;
+
+	// capture failure condition in case pSCR_ppO2 becomes negative
+	if( pSCR_ppO2 < 0.0 ) pSCR_ppO2 = 0.0;
+
+
+	//---- Loop modes : adjust ppN2 and ppHe for change in ppO2 due to setpoint (CCR) or drop (pSCR) ---
+	if( status & DECO_MODE_LOOP )
+	{
+		overlay float const_ppO2;
+
+		// get the current sensor reading (CCR / pSCR if fitted) or the fixed setpoint (CCR) / a zero (pSCR)
+		const_ppO2 = 0.01 * char_I_const_ppO2;
+
+		// Limit the setpoint to the maximum physically possible ppO2. This prevents for
+		// example calculating with a setpoint of 1.3 bar in only 2 meters of depth.
+		// Additionally, if limiting occurs, the ppO2 can be further reduced to account
+		// for residual inert gases by the user-adjustable setting char_I_cc_max_frac_o2.
+
+		if( const_ppO2 > pres_diluent )		// no ppWater subtracted here to give some margin for
+		{									// sensors delivering data a little bit over target
+			const_ppO2 = 0.01 * char_I_cc_max_frac_o2 * (pres_diluent - ppWater);
+		}
+
+		// check which kind of loop we are on
+		if( status & DECO_MODE_PSCR )
 		{
-			//---- PSCR mode : compute loop gas ----------------------------------------
-			//
-			// As the ppO2 in the loop changes with water depth, we can not use the current
-			// sensor value as with CCR mode, but need to compute the ppO2 for the given depth.
-			// Then we continue with the CCR mode code which calculates the increases of ppN2
-			// and ppH2 due to the reduction of the ppO2 in the loop. Essentially, diving a
-			// PSCR is like diving a CCR with a setpoint lower than the ambient pressure x the
-			// O2 fraction of the diluent would yield...
-			//
-
-			// deco_diluent          is 0.0 ...     in bar
-			// calc_O2_ratio         is 0.0 ...   1 as factor
-			// char_I_PSCR_drop      is 0   ...  15 as %
-			// char_I_PSCR_lungratio is 5   ...  20 as %
-			// const_ppO2		     is 0.0 ...     in bar
-
-			const_ppO2 = (deco_diluent * calc_O2_ratio) - (1 - calc_O2_ratio) * 0.01 * char_I_PSCR_drop * char_I_PSCR_lungratio;
-		
-			// capture failure condition
-			if( const_ppO2 < 0.0 ) const_ppO2 = 0.0;
-		}		
+			//---- pSCR Mode --------------------------------------------------------------------------
+
+			// Use the sensor value if available, but only in real tissue context!
+			// In all other cases use calculated ppO2.
+			if( char_I_const_ppO2 && (tissue_increment & TISSUE_FLAG)) ppO2 = const_ppO2;
+			else                                                       ppO2 = pSCR_ppO2;
+		}
 		else
 		{
-			
-			//---- CCR mode ------------------------------------------------------------ 
-		
-			// Limit the setpoint to the maximum physically possible ppO2. This prevents for
-			// example calculating with a setpoint of 1.3 bar in only 2 meters of depth.
-			// Additionally, if limiting occurs, the ppO2 can be further reduced to account
-			// for residual inert gases by the user-adjustable setting char_I_cc_max_frac_o2.
-		
-			if( const_ppO2 > deco_diluent )		// no ppWater subtracted here to give some margin for
-			{										// sensors delivering data a little bit over target
-			
-				const_ppO2 = 0.01 * char_I_cc_max_frac_o2 * (deco_diluent - ppWater);
-			}
+			//---- CCR Mode ---------------------------------------------------------------------------
+
+			// derive breathed ppO2 from (char_I_)const_ppO2,
+			// which holds sensor reading or fixed setpoint
+			ppO2 = const_ppO2;
 		}
 
-		if      ( const_ppO2 == 0.0   ) char_actual_ppO2 =   0;
-		else if ( const_ppO2 >  2.545 )	char_actual_ppO2 = 255;
-		else                            char_actual_ppO2 = (unsigned char)(const_ppO2*100 + 0.5);
-
-        // Note: ppO2 and ratios are known outside the lungs, so there is no ppWater in the equations below:
-        deco_diluent -= const_ppO2;
-        deco_diluent /= calc_N2_ratio + calc_He_ratio;
-        
-		// capture all failure conditions, including div/0 in case diluent is pure O2
- 		if( (deco_diluent < 0.0) || (calc_O2_ratio > 99.5) )
+		// adjust diluent pressure (ppN2 + ppHe) for change
+		// in ppO2 due to setpoint (CCR) or drop (pSCR)
+		pres_diluent -= const_ppO2;
+		pres_diluent /= calc_N2_ratio + calc_He_ratio;
+
+		// capture all failure conditions, including div/0
+		// in case diluent is pure O2
+		if( (pres_diluent < 0.0) || (calc_O2_ratio > 99.5) )
 		{
-			deco_diluent = 0.0;
-			
-			char_actual_ppO2 = (unsigned char)(temp_deco*100 + 0.5);	// without float_deco_distance here as this situation
-																		// is likely to occur only at 6 meters or shallower
+			pres_diluent = 0.0;
+			ppO2         = OC_ppO2;
 		}
-    }
-	else 
-	{
-		//---- OC mode: char_actual_ppO2 will be needed for CNS calculation later --------------------------------
-
-		overlay float ppO2 = pres_respiration * calc_O2_ratio;
-		
-		if   ( ppO2 > 2.545 ) char_actual_ppO2 = 255;
-		else                  char_actual_ppO2 = (unsigned char)(ppO2*100 + 0.5);
+	}
+	else
+	{	//---- OC mode ---------------------------------------------------------------------------------
+
+		// breathed ppO2 is ppO2 of pure gas
+		ppO2 = OC_ppO2;
 	}
 
-	
-    if( deco_diluent > ppWater )
-    {
-        ppN2 = calc_N2_ratio * (deco_diluent - ppWater);
-        ppHe = calc_He_ratio * (deco_diluent - ppWater);
-    }
-    else
-    {
-        ppN2 = 0.0;
-        ppHe = 0.0;
-    }
-
-    assert( 0.0 <= ppN2 && ppN2 < 14.0 );
-    assert( 0.0 <= ppHe && ppHe < 14.0 );
+
+	// derive char_ppO2 in [cbar], used for calculating CNS%
+	if      ( ppO2 <  0.01  ) char_ppO2  =   0;
+	else if ( ppO2 >= 2.545 ) char_ppO2  = 255;
+	else                      char_ppO2  = (unsigned char)(100 * ppO2 + 0.5);
+
+
+	//---- calculate ppN2 and ppHe ---------------------------------------------------------------------
+
+	if( pres_diluent > ppWater )
+	{
+		ppN2 = calc_N2_ratio * (pres_diluent - ppWater);
+		ppHe = calc_He_ratio * (pres_diluent - ppWater);
+	}
+	else
+	{
+		ppN2 = 0.0;
+		ppHe = 0.0;
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1276,65 +1407,62 @@
 // optimized in v.101 (var_N2_a)
 //
 // preload tissues with standard pressure for the given ambient pressure.
-// Note: fixed N2_ratio for standard air.
 //
 static void clear_tissue(void)
 {
 	pres_respiration = 0.001  * int_I_pres_respiration;
 	N2_equilibrium   = 0.7902 * (pres_respiration - ppWater);
-	
-    for(ci=0; ci<NUM_COMP; ci++)
-    {
-        // cycle through the 16 Buhlmann N2 tissues
-		pres_tissue_N2[ci] 				= N2_equilibrium;	// initialize data for "real" tissue
+
+	for(ci=0; ci<NUM_COMP; ci++)
+	{
+		// cycle through the 16 Buhlmann N2 tissues
+		pres_tissue_N2[ci]              = N2_equilibrium;	// initialize data for "real" tissue
 		char_O_tissue_N2_saturation[ci] = 11;				// initialize data for tissue graphics
-			
-
-        // cycle through the 16 Buhlmann He tissues
-        pres_tissue_He[ci] 				= 0.0;				// initialize data for "real" tissue
+
+		// cycle through the 16 Buhlmann He tissues
+		pres_tissue_He[ci]              = 0.0;				// initialize data for "real" tissue
 		char_O_tissue_He_saturation[ci] = 0;				// initialize data for tissue graphics
-    }
-
-	clear_CNS_fraction();
-	
-    clear_deco_table();
-	
-	char_O_main_status		= 0;
-    char_O_deco_status		= 0;
-    char_O_nullzeit			= 0;
-	char_O_gtissue_no		= 0;
-	char_O_deco_warnings	= 0;
-
-    int_O_ascenttime		= 0;
-    int_O_gradient_factor	= 0;
-
-	calc_lead_tissue_limit	= 0.0;
+	}
+
+	// reset CNS values
+	CNS_fraction = 0.0;
+	int_O_CNS_fraction = int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = 0;
+
+
+	// reset any warnings
+	char_O_deco_warnings		= 0;
+
+	// reset some more vars to their defaults
+	char_O_nullzeit				= 240;
+	int_O_ascenttime			= 0;
+	int_O_alternate_ascenttime	= 0;
+	int_O_gradient_factor		= 0;
 }
 
+
 //////////////////////////////////////////////////////////////////////////////
 // calc_hauptroutine
 //
 // this is the major code in dive mode calculates:
-// 		the tissues,
-//		the bottom time,
-//		and simulates the ascend with all deco stops.
-//
+//      the tissues,
+//      the bottom time,
+//      and simulates the ascend with all deco stops.
 //
 static void calc_hauptroutine(void)
 {
-	unsigned int int_ppO2_min;
-	unsigned int int_ppO2_max;
-
+	overlay unsigned int int_ppO2_min;
+	overlay unsigned int int_ppO2_max;
+	overlay unsigned int int_ppO2_max_dil;
 
 	//--- set-up part --------------------------------------------------------------------------------
-	
+
 	// twosectimer:
 	// calc_hauptroutine is now invoked every second to speed up the deco planning.
 	// Because the tissue and CNS calculations are based on a 2 seconds period, the
 	// the following toggle-timer will be used by the respective routines to skip
 	// every 2nd invocation.
 	twosectimer = (twosectimer) ? 0 : 1;			// toggle the toggle-timer
-	
+
 
 	// set up normal tissue updating or "fast forward" updating for simulator sim+5' function
 	// and deco calculator bottom time calculation
@@ -1342,7 +1470,7 @@
 	{
 		// configure char_I_sim_advance_time minutes of tissue updating
 		tissue_increment = char_I_sim_advance_time	// given number of minutes, limited to 127
-						 | 128;						// set flag for updating the "real" tissues & CNS
+						 | TISSUE_FLAG;				// set flag for updating the "real" tissues & CNS
 
 		char_I_sim_advance_time = 0;				// clear "mailbox"
 	}
@@ -1350,337 +1478,390 @@
 	{
 		// configure 2 seconds of tissue updating
 		tissue_increment = 0						// encoding for 2 seconds update
-						 | 128;						// set flag for updating the "real" tissues & CNS
+						 | TISSUE_FLAG;				// set flag for updating the "real" tissues & CNS
 	}
 
+
 	//---- calculate the real tissue's data -----------------------------------------------------------------
-	
-	calc_hauptroutine_data_input();			// acquire current environment data 
-	
-	calc_hauptroutine_update_tissues();		// update tissue pressures, also sets char_actual_ppO2
-	
-	calc_CNS_fraction();					// calculate CNS% for the real tissues
-	
-	compute_CNS_for_display();				// compute integer copy of CNS value for display purpose
-		
-	calc_gradient_factor();					// compute current GF
+
+	// acquire current environment data
+	calc_hauptroutine_data_input();
+
+	// update tissue pressures, also sets char_ppO2 for calc_CNS_increment()
+	calc_hauptroutine_update_tissues();
+
+	// calculate CNS value increment for the real tissues
+	calc_CNS_increment();
+
+	// update the CNS value for the real tissues
+	CNS_fraction += CNS_fraction_inc;
+
+	// compute integer copy of CNS value for display purpose
+	convert_CNS_for_display();
 
 
 	//---- compute ppO2 warnings ------------------------------------------------------------------------------
-	
+
 	// compute conditional min/max values
 	int_ppO2_min = (char_O_main_status   & DECO_MODE_LOOP) ? (unsigned int)char_I_ppO2_min_loop : (unsigned int)char_I_ppO2_min;
 	int_ppO2_max = (char_O_deco_warnings & DECO_FLAG     ) ? (unsigned int)char_I_ppO2_max_deco : (unsigned int)char_I_ppO2_max;
 
+	// default value for the upper diluent ppO2 warning threshold is the normal upper warning threshold
+	int_ppO2_max_dil = int_ppO2_max;
+
+	// when in CCR mode, the upper diluent warning threshold gets adjust according to the current setpoint
+	if( (char_O_main_status & DECO_MODE_MASK) == DECO_MODE_CCR )
+	{
+		overlay unsigned int max_dil;
+
+		//  The upper diluent ppO2 threshold is ppO2_GAP_TO_SETPOINT below the setpoint...
+		// (the condition protects from negative numbers which would cause a wrap-around)
+		max_dil = (char_I_const_ppO2 > ppO2_GAP_TO_SETPOINT) ? (unsigned int)(char_I_const_ppO2 - ppO2_GAP_TO_SETPOINT) : 0;
+
+		// ...but never above int_ppO2_max.
+		if( max_dil < int_ppO2_max ) int_ppO2_max_dil = max_dil;
+
+		// We do not need to guard int_ppO2_max_dil against becoming lower than char_I_ppO2_min because the check
+		// against char_I_ppO2_min is done first and will then raise a low warning and inhibit further checks.
+	}
+
 	// check for safe range of pure oxygen
-	if		( int_O_O2_ppO2   	  >=           int_ppO2_max    ) int_O_O2_ppO2 		 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+	if		( int_O_O2_ppO2       >=           int_ppO2_max     ) int_O_O2_ppO2       |= INT_FLAG_WARNING + INT_FLAG_HIGH;
 
 	// check for safe range of breathed gas
-	if		( int_O_breathed_ppO2 <=           int_ppO2_min    ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_LOW;
-	else if ( int_O_breathed_ppO2 >=           int_ppO2_max    ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
-	else if ( char_O_main_status  &            DECO_MODE_LOOP  ) ; // no attention generated in loop modes
-	else if ( int_O_breathed_ppO2 >= ppO2_prewarn_threshold    ) int_O_breathed_ppO2 |= INT_FLAG_PREWARNING;
-		
+	if		( int_O_breathed_ppO2 <=           int_ppO2_min     ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if ( int_O_breathed_ppO2 >=           int_ppO2_max     ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+	else if ( char_O_main_status  &            DECO_MODE_LOOP   ) ; // no attention generated in loop modes
+	else if ( int_O_breathed_ppO2 >=   ppO2_ATTENTION_THRESHOLD ) int_O_breathed_ppO2 |= INT_FLAG_ATTENTION;
+
 	// check for safe range of pure diluent
-	if		( int_O_pure_ppO2 <= (unsigned int)char_I_ppO2_min ) int_O_pure_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_LOW;
-	else if	( int_O_pure_ppO2 >=               int_ppO2_max    ) int_O_pure_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
-		
+	if		( int_O_pure_ppO2 <= (unsigned int)char_I_ppO2_min  ) int_O_pure_ppO2     |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if ( int_O_pure_ppO2 >=               int_ppO2_max     ) int_O_pure_ppO2     |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+	else if ( int_O_pure_ppO2 >=               int_ppO2_max_dil ) int_O_pure_ppO2     |= INT_FLAG_ATTENTION;
+
 	// check for safe range of calculated pSCR loop gas
-	if		( int_O_pSCR_ppO2 <=               int_ppO2_min    ) int_O_pSCR_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_LOW;
-	else if	( int_O_pSCR_ppO2 >=               int_ppO2_max    ) int_O_pSCR_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
-	
-
-    //---- toggle between calculation for NDL (bottom time), deco stops and more deco stops (continue) ------
-
+	if		( int_O_pSCR_ppO2 <=               int_ppO2_min     ) int_O_pSCR_ppO2     |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if ( int_O_pSCR_ppO2 >=               int_ppO2_max     ) int_O_pSCR_ppO2     |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+
+
+
+	//---- toggle between calculation for NDL (bottom time),  ------
+	//---- deco stops and more deco stops (continue)          ------
+
+
+	// done with the real tissues, all following operations
+	// target the simulated tissues so clear flag in bit 7
+	tissue_increment = 0;
+
+	// branch to the code for the current phase the deco calculations are in
 	switch( char_O_deco_status & DECO_STATUS_MASK )
-    {
+	{
 		overlay unsigned char i;
 
-	case DECO_STATUS_INIT: //---- At surface: start a new dive ---------------------
-
+	case DECO_STATUS_INIT: //---- At surface: Start a new dive ---------------------
+
+		// clear the internal stops table from remains lasting from the last dive
 		clear_deco_table();
-        copy_deco_table();
-
-
-		char_I_gas_change_time = 1;		// TODO: validate proper operation before enabling this options-table parameter		
-
-		char_I_ascent_speed    = 10;	// TODO: validate proper operation before enabling this options-table parameter,
-										//       caution: values < 10 may have an impact on the deco calculation run-times!
-
-		
-		float_ascent_speed            = 1.00 * char_I_ascent_speed;
-		float_desaturation_multiplier = 0.01 * char_I_desaturation_multiplier;
-		float_saturation_multiplier   = 0.01 * char_I_saturation_multiplier;
-		float_deco_distance           = 0.01 * char_I_deco_distance;
-		
-        int_O_ascenttime			  = 0;		// reset ascent time in normal plan
-		int_O_alternate_ascenttime    = 0; 		// reset ascent time in alternative plan
-		char_O_nullzeit               = 0;		// reset no decompression limit (NDL) in normal plan
-		char_O_alternate_nullzeit     = 0;		// reset no decompression limit (NDL) in alternative plan
-		char_O_deco_warnings          = 0;		// reset all deco warning flags
-		deco_tissue_vector		      = 0;		// reset tissue deco vector
-		IBCD_tissue_vector            = 0;		// reset tissue IBCD vector
-		
-		int_O_desaturation_time       = 65535;	// tag desaturation time as invalid (it will not be computed during a dive)
-		
-
+
+		// publish the cleared stops table to the display functions
+		publish_deco_table();
+
+		// clear the gas needs table
 		for(i=0; i<NUM_GAS; ++i)
 		{
 			int_O_gas_volumes[i]    = 0;
-			int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO;	// 0 bar + flag for 0 bar
+			int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO;
 		}
 
+		// initialize the balancing between N2 and He for later no-fly time calculation
 		for(i=0; i<NUM_COMP; ++i)
-		{		
-			split_N2_He[i] = 90;							// used for calculation of no-fly time
+		{
+			split_N2_He[i] = 90;	// assumes 90% of total tissue pressure will be needed for N2
 		}
 		
-		
-		// init CNS counters
-		CNS_sim_norm_fraction     = CNS_sim_alt_fraction         = CNS_fraction;		// the floats
-		int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = int_O_CNS_fraction;	// the integers
-
-		
-        // Values that should be reset just once for the full real dive.
-        // This is used to record the lowest stop for the whole dive,
-        // including ACCROSS all simulated ascents.
-        low_depth_norm      = low_depth_alt      = 0.0;
-        locked_GF_step_norm = locked_GF_step_alt = 0.0;
-
-
-		// continue in state DECO_STATUS_START to calculate the bottom-part of the dive and the NDL
-		char_O_deco_status &= ~DECO_STATUS_MASK;	
-		
-		// code execution continues in state DECO_STATUS_START
-		
-		
-	case DECO_STATUS_START: //---- bottom time -------------------------------------
-    default:
-
-		// reread the GF settings in case there was a switch between GF/aGF
-		GF_low   = char_I_GF_Low_percentage  * 0.01;
-		GF_high  = char_I_GF_High_percentage * 0.01;
-		GF_delta = GF_high - GF_low;
-
-        // Lookup current gas and store it also as the first gas used. This gas will be used for the bottom
-		// segment of the dive and for the period of delayed ascent when calculating fTTS or bailout.
-		gas_find_current();		
-		
-		// setup the calculation ratio's calc_N2_ratio, calc_He_ratio and calc_O2_ratio
-        gas_switch_set();		
-
-		// calculate ppN2 and ppHe from calc_N2_ratio & calc_He_ratio
-		sim_alveolar_presures();
+		// ** UNDER CONSTRUCTION - temporary code only **
+		char_I_gas_change_time = 1;		// TODO: validate proper operation before enabling this options-table parameter		
+		char_I_ascent_speed    = 10;	// TODO: validate proper operation before enabling this options-table parameter,
+										//       caution: values < 10 may have an impact on the deco calculation run-times!
+
+		// initialize values that are constant during the course of the dive
+		float_ascent_speed            = 1.00  * char_I_ascent_speed;
+		float_desaturation_multiplier = 0.01  * char_I_desaturation_multiplier;
+		float_saturation_multiplier   = 0.01  * char_I_saturation_multiplier;
+		float_deco_distance           = 0.01  * char_I_deco_distance;
+
+		// initialize values that will be recalculated later on periodically
+		char_O_nullzeit               = 0;	// reset NDL time for the normal plan
+		char_O_alternate_nullzeit     = 0;	// reset NDL time for the alternative plan
+		int_O_ascenttime              = 0;	// reset ascent time for the normal plan
+		int_O_alternate_ascenttime    = 0;	// reset ascent time for the alternative plan
+		char_O_deco_warnings          = 0;	// reset all deco warnings
+		deco_tissue_vector            = 0;	// reset tissue deco vector
+		IBCD_tissue_vector            = 0;	// reset tissue IBCD vector
+		NDL_lead_tissue               = 0;	// reset first tissue to look at during NDL calculation
+
+		// tag desaturation time as invalid (it will not be computed during a dive)
+		int_O_desaturation_time       = 65535;
+
+		// initialize CNS values
+		int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = int_O_CNS_fraction;
+
+		// Values that should be reset just once for the full real dive.
+		// This is used to record the lowest stop for the whole dive,
+		// including ACCROSS all simulated ascents.
+		low_depth_norm      = low_depth_alt      = 0.0;
+		locked_GF_step_norm = locked_GF_step_alt = 0.0;
+
+		//
+		// --> code execution continues in state DECO_STATUS_START
+		//
+
+	case DECO_STATUS_START: //---- Bottom Time & initial Ascent --------------------
+	default:
 
 		// clear the internal(!) stops table
-		clear_deco_table();		
+		clear_deco_table();
 		
 		// initialize the simulated tissues with the current state of the real tissues
-		update_startvalues();	
-
-		// calculate the effect of extended bottom time due to delayed ascent / fTTS on current gas
-		if( char_O_deco_status & DECO_ASCENT_DELAYED ) sim_extra_time();
-		
-		// calculate if we are within no decompression limit (NDL)
-        calc_nullzeit();
-
-		// check which plan we are on
-		if( char_O_deco_status & DECO_PLAN_ALTERNATE )
+		for(i=0; i<NUM_COMP; i++)
 		{
-			//---- alternate dive plan --------------------------------------------------------------------
-			
-			// Some NDL time left in alternate plan?
-			if( char_O_alternate_nullzeit > 0 )
-			{
-				// clear tank pressure needs
-				if( char_O_deco_status & DECO_VOLUME_CALCULATE )
-					for(i=0; i<NUM_GAS; ++i) int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO; // 0 bar + flag for 0 bar
-
-				// calculate the CNS% at the end of the dive if requested:
-				// as we are in no stop, CNS at end of dive is more or less the same CNS we have now
-				if( char_O_deco_status & DECO_CNS_CALCULATE ) int_O_alternate_CNS_fraction = int_O_CNS_fraction;
-				
-				// clear fTTS ascent time
-				int_O_alternate_ascenttime = 0;
-
-				// YES - computation of alternate plan completed
-				char_O_deco_status &= ~DECO_STATUS_MASK;
-			}
-			else
-			{
-				// NO - clear status bits and set status bits for
-				//      calculation of ascent on next invocation
-				char_O_deco_status &= ~DECO_STATUS_MASK;
-				char_O_deco_status |=  DECO_STATUS_ASCENT;
-			}
+			sim_pres_tissue_N2[i] = pres_tissue_N2[i];
+			sim_pres_tissue_He[i] = pres_tissue_He[i];
+		}
+
+		// Lookup the current gas and store it also as the first gas used.
+		// This gas will be used for the bottom segment of the dive and for
+		// the period of delayed ascent when calculating fTTS or bailout.
+		gas_find_current();
+
+		// setup the calculation ratio's for N2, He and O2 (sim_N2/He/O2_ratio)
+		gas_set_ratios();
+
+		// initialize depth in absolute pressure, it is needed by
+		// - calc_alveolar_pressures(),
+		// - calc_ascent_to_first_stop(), and
+		// - calc_hauptroutine_calc_deco()
+		sim_pres_respiration = pres_respiration;
+
+		// calculate ppN2 and ppHe from sim_N2/He_ratio (<- tissue_increment has been set to 0)
+		calc_alveolar_pressures();
+
+		// calculate the effect of extended bottom time due to delayed ascent
+		if( char_O_deco_status & DECO_ASCENT_DELAYED )
+		{
+			// program interval on simulated tissues (flag bit 7 = 0)
+			tissue_increment = char_I_extra_time;
+
+			// update the tissues
+			calc_tissues();
+		}
+
+		// calculate if we are within no decompression limit (NDL)
+		calc_NDL_time();
+
+		// Calculate the initial ascent if in deco. calc_NDL_time() is very fast
+		// in detecting being beyond NDL, so there is enough time left in this
+		// phase to do the initial ascent calculation.
+		if( NDL_time == 0 )
+		{
+			//--- in deco --------------------------------------------------------
+
+			// calculate ascent to first stop
+			calc_ascent_to_first_stop();
+
+			// continue with calculating the stops
+			char_O_deco_status &= ~DECO_STATUS_MASK;	// clear status bits and set status bits for
+			char_O_deco_status |=  DECO_STATUS_STOPS;	// calculation of stops on next invocation
 		}
 		else
 		{
-			//---- normal dive plan -------------------------------------------------------------------------
-			
-			// Some NDL time left in normal plan?
-			if( char_O_nullzeit > 0 )
+			//--- within NDL -----------------------------------------------------
+
+			// continue with gathering all results
+			char_O_deco_status &= ~DECO_STATUS_MASK;
+			char_O_deco_status |=  DECO_STATUS_RESULTS;
+		}
+
+		break;
+
+
+	case DECO_STATUS_STOPS: //---- Calculate Stops ---------------------------------
+
+		// calculate the stops
+		calc_hauptroutine_calc_deco();
+
+		// calc_hauptroutine_calc_deco iterates in this phase as long as it is
+		// calculating the stops. Once done, it will set the status to doing the
+		// results gathering.
+
+		break;
+
+
+	case DECO_STATUS_RESULTS: //--- Gathering of all Results -----------------------
+
+		// if in normal plan, publish the stops table to the display functions
+		if( !(char_O_deco_status & DECO_PLAN_ALTERNATE) ) publish_deco_table();
+
+		// The current depth is needed by calc_CNS_planning() and gas_volumes().
+		// As it may be needed in different code blocks below but we don't want
+		// it to be in the code multiple times, it's done here on stockpile.
+		bottom_depth = (unsigned char)((pres_respiration - pres_surface) * BAR_TO_METER);
+
+		// Calculate the ascent time.
+		// When within NDL, potential gas switches will be treated as done "on the fly".
+		calc_ascenttime();
+
+		// results to publish depend whether within NDL or in deco
+		if( NDL_time )
+		{
+			//---- within NDL ----------------------------------------------
+
+			// Calculate the initial ascent (not yet done when within NDL) - 
+			// just to get potential gas switches into the stops table for use
+			// by gas_volumes(). The stops table can be polluted by now because
+			// the clean table has already been published to the display
+			// functions before.
+			calc_ascent_to_first_stop();
+
+			// check which plan we are on
+			if( char_O_deco_status & DECO_PLAN_ALTERNATE )
 			{
-				// published (erased) stops table
-				copy_deco_table();
-
-				// ** commented out - char_O_deco_last_stop is not used for anything
-				//
-				// // set last stop to 0 (for OSTC menu animation)
-				// char_O_deco_last_stop = 0;
-				
-				// clear tank pressure needs
-				if( char_O_deco_status & DECO_VOLUME_CALCULATE )
-					for(i=0; i<NUM_GAS; ++i) int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO; // 0 bar + flag for 0 bar
-
-				// calculate the CNS% at the end of the dive if requested:
-				// as we are in no stop, CNS at end of dive is more or less the same CNS we have now
-				if( char_O_deco_status & DECO_CNS_CALCULATE ) int_O_normal_CNS_fraction = int_O_CNS_fraction;
-
-				// YES - computation of normal plan completed
-				char_O_deco_status &= ~DECO_STATUS_MASK;
+				//---- alternate dive plan ---------------------------------
+
+				// As we are in no stop, CNS at end of dive is more or less
+				// the same CNS as we have right now. It's so simple that we
+				// don't check if it requested to be computed or not...
+				int_O_alternate_CNS_fraction = int_O_CNS_fraction;
+
+				// output NDL time
+				char_O_alternate_nullzeit  = NDL_time;
+
+				// clear ascent time
+				int_O_alternate_ascenttime = 0;
 			}
 			else
 			{
-				// NO - clear status bits and set status bits for
-				//      calculation of ascent on next invocation
-				char_O_deco_status &= ~DECO_STATUS_MASK;
-				char_O_deco_status |=  DECO_STATUS_ASCENT;
+				//---- normal dive plan ------------------------------------
+
+				// As we are in no stop, CNS at end of dive is more or less
+				// the same CNS as we have right now. It's so simple that we
+				// don't check if it requested to be computed or not...
+				int_O_normal_CNS_fraction = int_O_CNS_fraction;
+
+				// output NDL time
+				char_O_nullzeit = NDL_time;
+
+				// clear ascent time
+				int_O_ascenttime = 0;
 			}
-		}
-
-		break;
-
-		
-	case DECO_STATUS_ASCENT: //---- Simulate ascent to first stop -------------------
-		
-		// initialize depth (in abs.pressure) for ascent and deco simulation, start from current real depth
-		temp_deco = pres_respiration;
-		
-		// calculate ascent to first stop
-        sim_ascent_to_first_stop();
-
-        // calculate all further stops next time
-		char_O_deco_status &= ~DECO_STATUS_MASK;	// clear status bits and set status bits
-		char_O_deco_status |=  DECO_STATUS_STOPS;	// for calculation of stops on next invocation
-		
-        break;
-
-
-	case DECO_STATUS_STOPS: //---- Simulate stops ----------------------------------
-	
-        calc_hauptroutine_calc_deco();
-
-		// If simulation is finished, do some more computations if requested
-		// and restore the GF low reference so that the next ascent simulation
-		// is done from the current depth: 
-		if( !(char_O_deco_status & DECO_STATUS_MASK) )
-        {
-			// Calculate ascent time, result in int_O_ascenttime or int_O_alternate_ascenttime
-            calc_ascenttime();
-
-			// the current depth is needed by calc_CNS_planning() and gas_volumes()
-			bottom_depth = (unsigned char)((pres_respiration - pres_surface)*BAR_TO_METER);
-			
-			// if requested, calculate the CNS% at the end of the dive (including the deco stops)
-			if( char_O_deco_status & DECO_CNS_CALCULATE    ) calc_CNS_planning();
-			
-			// if requested, calculate the required gas volumes and tank pressures at the end of the dive.
-			if( char_O_deco_status & DECO_VOLUME_CALCULATE ) gas_volumes();			
-			
-			// some more aftermath dependent on the current plan
-			if( char_O_deco_status & DECO_PLAN_ALTERNATE   )
+		} // NDL
+		else
+		{
+			//---- in DECO -------------------------------------------------
+
+			// check which plan we are on
+			if( char_O_deco_status & DECO_PLAN_ALTERNATE )
 			{
 				//---- alternative plan ----------------------------------------------------
 
-				// was CNS at end of dive calculated?
+				// shall the CNS at the end of the dive be calculated?
 				if( char_O_deco_status & DECO_CNS_CALCULATE )
 				{
-					// yes - compute CNS value to display
-					if		( CNS_sim_alt_fraction < 0.01  ) int_O_alternate_CNS_fraction = 0;
-					else if ( CNS_sim_alt_fraction > 9.985 ) int_O_alternate_CNS_fraction = 999 + INT_FLAG_WARNING;
-					else
-					{	
-						// convert float to integer
-						int_O_alternate_CNS_fraction = (unsigned short)(100 * CNS_sim_alt_fraction + 0.5);
-	
-						// set warning flag if CNS is >= 100%
-						if( int_O_alternate_CNS_fraction >= 100 )
-						int_O_alternate_CNS_fraction |= INT_FLAG_WARNING;
-				
-						// set invalid flag if there is an overflow in the stops table
-						if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
-						int_O_alternate_CNS_fraction |= INT_FLAG_INVALID;
-					}
+					// calculate the CNS for the predicted ascent, result in sim_CNS_fraction
+					calc_CNS_planning();
+
+					// add current CNS value
+					sim_CNS_fraction += CNS_fraction;
+
+					// convert to integer value
+					convert_sim_CNS_for_display();
+
+					// export result
+					int_O_alternate_CNS_fraction = int_sim_CNS_fraction;
 				}
-				else
-				{
-					// no - invalidate value (value = 0, invalid flag set)
-					int_O_alternate_CNS_fraction = INT_FLAG_INVALID;
-				}
-			}
+
+				// clear NDL time
+				char_O_alternate_nullzeit  = 0;
+
+				// output ascent time
+				int_O_alternate_ascenttime = ascent_time;
+
+			} // alternative plan
 			else
 			{
 				//---- normal plan ---------------------------------------------------------
 
-				// publish the stops table
-				copy_deco_table();
-
-				// was CNS at end of dive calculated?
+				// shall the CNS at the end of the dive be calculated?
 				if( char_O_deco_status & DECO_CNS_CALCULATE )
 				{
-					// yes - compute CNS value to display
-					if		( CNS_sim_norm_fraction <  0.01  ) int_O_normal_CNS_fraction = 0;
-					else if ( CNS_sim_norm_fraction >= 9.985 ) int_O_normal_CNS_fraction = 999 + INT_FLAG_WARNING;
-					else
-					{	
-						// convert float to integer
-						int_O_normal_CNS_fraction = (unsigned short)(100 * CNS_sim_norm_fraction + 0.5);
-	
-						// set warning flag if CNS is >= 100%
-						if( int_O_normal_CNS_fraction >= 100 )
-							int_O_normal_CNS_fraction |= INT_FLAG_WARNING;
-				
-						// set invalid flag if there is an overflow in the stops table
-						if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
-							int_O_normal_CNS_fraction |= INT_FLAG_INVALID;
-					}
+					// calculate the CNS for the predicted ascent, result in sim_CNS_fraction
+					calc_CNS_planning();
+
+					// add current CNS value
+					sim_CNS_fraction += CNS_fraction;
+
+					// convert to integer value
+					convert_sim_CNS_for_display();
+
+					// export result
+					int_O_normal_CNS_fraction = int_sim_CNS_fraction;
 				}
-				else
-				{
-					// no - invalidate value (value = 0, invalid flag set)
-					int_O_normal_CNS_fraction = INT_FLAG_INVALID;
-				}
-
-			} // aftermath
-		} // if
-		
-        break;
-		
-    } // switch
+
+				// clear NDL time
+				char_O_nullzeit  = 0;
+
+				// output ascent time
+				int_O_ascenttime = ascent_time;
+
+			} // normal plan
+		} // DECO
+
+		// if requested, calculate the required gas volumes and tank pressures at the end of the dive
+		if( char_O_deco_status & DECO_VOLUME_CALCULATE ) gas_volumes();
+
+		// signal that the computation cycle is finished
+		char_O_deco_status &= ~DECO_STATUS_MASK;
+
+		break;
+
+	} // switch
 }
 
 //////////////////////////////////////////////////////////////////////////////
 // calc_hauptroutine_data_input
 //
-// Reset all C-code dive parameters from their ASM-code values.
+// Set all C-code dive parameters from their ASM-code values.
 // Detect gas change condition.
 //
 void calc_hauptroutine_data_input(void)
 {
+	overlay float IG_ratio;
+
 	// get the current pressures
-	pres_respiration = 0.001 * int_I_pres_respiration;
-    pres_surface     = 0.001 * int_I_pres_surface;
+	pres_surface     = 0.001  * int_I_pres_surface;
+	pres_respiration = 0.001  * int_I_pres_respiration;
+
+	// N2 tissue pressure at surface equilibrium, used for tissue graphics scaling
+	N2_equilibrium   = 0.7902 * (pres_surface - ppWater);
+
+	// read the GF settings (they may have been switch between GF/aGF)
+	GF_high  = 0.01 * char_I_GF_High_percentage;
+	GF_low   = 0.01 * char_I_GF_Low_percentage;
+	GF_delta = GF_high - GF_low;
 
 	// get the currently breathed gas mixture
-	O2_ratio         = 0.01 * char_I_O2_ratio;
-    He_ratio         = 0.01 * char_I_He_ratio;
-
-	// N2 ratios are computed within p2_deco.c from the O2 and He ratios
-	N2_ratio         = 1.0 - O2_ratio - He_ratio;
-	
-	// N2 tissue pressure at surface equilibrium, used for tissue graphics scaling
-	N2_equilibrium   = 0.7902 * (pres_surface - ppWater);
+	O2_ratio = 0.01 * char_I_O2_ratio;
+	He_ratio = 0.01 * char_I_He_ratio;
+
+	// inert gas ratio (local helper variable)
+	IG_ratio = 1.00 - O2_ratio;
+
+	// N2 ratio
+	N2_ratio = IG_ratio - He_ratio;
+
+	// precomputed values for ppO2 drop in pSCR loop
+	float_pSCR_factor = 0.01 * char_I_PSCR_drop * char_I_PSCR_lungratio;
+	pSCR_drop         = IG_ratio * float_pSCR_factor;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1688,212 +1869,60 @@
 //
 void calc_hauptroutine_update_tissues(void)
 {
-    overlay float pres_diluent = pres_respiration;
-
-	
-    assert( 0.00 <= N2_ratio && N2_ratio <= 1.00 );
-    assert( 0.00 <= He_ratio && He_ratio <= 1.00 );
-    assert( (N2_ratio + He_ratio) <= 1.00 );
-    assert( 0.800 < pres_respiration && pres_respiration < 14.0 );
-
-	
-	//---- OC, CCR and Bailout Mode Gas Calculations ------------------------------------------------------------
-	
-	// calculate ppO2 of pure oxygen
-	O2_ppO2 = (pres_respiration - ppWater);
-
-	// capture failure condition in case pres_respiration is < ppWater (should never happen...)
-	if( O2_ppO2 < 0.0 ) O2_ppO2 = 0.0;
-	
-	// calculate ppO2 of the pure gas (diluent)
-	pure_ppO2 = O2_ppO2 * O2_ratio;
-
-	
-	//---- PSCR Mode Gas Calculation-----------------------------------------------------------
-	
-	// With flags set for PSCR we compute the ppO2 in the loop from the diluent's O2
-	// ratio and the PSCR parameters. This figure will be used in the pSCR custom view.
-	// If sensors are used (char_I_const_ppO2 > 0), we will override the calculated ppO2
-	// with the sensor data. Then we continue with the CCR mode code which calculates
-	// the increase of ppN2 and ppH2 due to the reduction of the ppO2 in the loop.
-	// Essentially, diving a pSCR is like diving a CCR with a setpoint set lower than
-	// the ambient pressure multiplied with the O2 fraction of the diluent...
-			
-	// calculate pSCR ppO2
-	//
-	// pres_respiration      is 0.0 ...       in bar
-	// O2_ratio              is 0.0 ...   1.0 as factor
-	// char_I_PSCR_drop      is 0   ...  15   as %
-	// char_I_PSCR_lungratio is 5   ...  20   as %
-	// pSCRppO2				 is 0.0 ...       in bar
-
-	pSCR_ppO2 = (pres_respiration * O2_ratio) - (1 - O2_ratio) * 0.01 * char_I_PSCR_drop * char_I_PSCR_lungratio;
-
-	// capture failure condition if case pSCR_ppO2 becomes negative
-	if( pSCR_ppO2 < 0.0 ) pSCR_ppO2 = 0.0;	
-	
-	
-	//---- Loop modes : adjust ppN2 and ppHe for change in ppO2 due to setpoint (CCR) or drop (pSCR) ------------
-	if ( char_O_main_status & DECO_MODE_LOOP )
-    {
-		overlay float const_ppO2;
-
-		// get the current sensor reading (CCR / pSCR if fitted) or the fixed setpoint (CCR) / a zero (pSCR)
-        const_ppO2 = 0.01 * char_I_const_ppO2;
-		
-		// Limit the setpoint to the maximum physically possible ppO2. This prevents for
-		// example calculating with a setpoint of 1.3 bar in only 2 meters of depth.
-		// Additionally, if limiting occurs, the ppO2 can be further reduced to account
-		// for residual inert gases by the user-adjustable setting char_I_cc_max_frac_o2.
-		
-		if( const_ppO2 > pres_respiration )	// no ppWater subtracted here to give some margin for
-		{									// sensors delivering data a little bit over target
-			
-			const_ppO2 = 0.01 * char_I_cc_max_frac_o2 * (pres_respiration - ppWater);
-		}
-				
-		// check which kind of loop we are on
-		if( char_O_main_status & DECO_MODE_PSCR ) 
-		{
-			//---- pSCR Mode --------------------------------------------------------------------------
-
-			// check if a sensor is fitted
-			if( char_I_const_ppO2 ) breathed_ppO2 = const_ppO2;	// yes - derive ppO2s from (char_I_)const_ppO2
-			else                    breathed_ppO2 = pSCR_ppO2;	// no  - derive ppO2s from calculated ppO2
-		}
-		else
-		{
-			//---- CCR Mode ---------------------------------------------------------------------------
-
-			// derive breathed ppO2 from (char_I_)const_ppO2, which holds sensor reading or fixed setpoint
-			breathed_ppO2 = const_ppO2;
-		}
-
-		// adjust diluent pressure (ppN2 + ppHe) for change in ppO2 due to setpoint (CCR) or drop (pSCR)
-        pres_diluent -= const_ppO2;
-        pres_diluent /= N2_ratio + He_ratio;
-
-		// capture all failure conditions, including div/0 in case diluent is pure O2
-		if( (pres_diluent < 0.0) || (char_I_O2_ratio == 100) )
-		{
-			pres_diluent  = 0.0;
-			breathed_ppO2 = pure_ppO2;
-		}
-
-	}
-	else
-	{	//---- OC mode -----------------------------------------------------------------------------------------
-	
-		// breathed ppO2 is ppO2 of pure gas
-		breathed_ppO2 = pure_ppO2;
-	}
-
-
-	// derive char_actual_ppO2 in [cbar], used for calculating CNS%
-	if      ( breathed_ppO2 <  0.01  ) char_actual_ppO2  =   0;
-	else if ( breathed_ppO2 >= 2.545 ) char_actual_ppO2  = 255;
-	else                               char_actual_ppO2  = (unsigned char)(100 * breathed_ppO2 + 0.5);
-
-	
-	//---- export ppO2 values in [cbar] for warning generation and display purpose ------------------------------
+	overlay float EAD, END;
+
+	//---- calculations part ----------------------------------------------------------------------
+
+	// calculate ppN2 and ppHe
+	calc_alveolar_pressures();
+
+	// calculate the tissues
+	calc_tissues();
+
+	// calculate ceiling (at GF_high) and current GF
+	calc_limit(GF_high);
+
+	// calculate EAD (Equivalent Air Depth): equivalent depth for the same N2 level with plain air
+	EAD = (ppN2 / 0.7902 + ppWater - pres_surface) * BAR_TO_METER;
+
+	// calculate END (Equivalent Narcotic Depth): here O2 is treated as narcotic, too
+	// Source cited: The Physiology and Medicine of Diving by Peter Bennett and David Elliott,
+	//               4th edition, 1993, W.B.Saunders Company Ltd, London.
+	END = (pres_respiration - ppHe - pres_surface) * BAR_TO_METER;
+
+
+	//---- export ppO2 values in [cbar] for warning generation and display purpose ----------------
 
 	// pure oxygen ppO2
 	if		( O2_ppO2       <  0.01  ) int_O_O2_ppO2       =   0;
 	else if ( O2_ppO2       >= 9.995 ) int_O_O2_ppO2       = 999;
-	else                               int_O_O2_ppO2       = (unsigned int)(100 *       O2_ppO2 + 0.5);
+	else                               int_O_O2_ppO2       = (unsigned int)(100 *   O2_ppO2 + 0.5);
 	
 	// pure gas ppO2
-	if      ( pure_ppO2     <  0.01  ) int_O_pure_ppO2     =   0;
-	else if ( pure_ppO2     >= 9.995 ) int_O_pure_ppO2     = 999;
-	else                               int_O_pure_ppO2     = (unsigned int)(100 *     pure_ppO2 + 0.5);
+	if      ( OC_ppO2       <  0.01  ) int_O_pure_ppO2     =   0;
+	else if ( OC_ppO2       >= 9.995 ) int_O_pure_ppO2     = 999;
+	else                               int_O_pure_ppO2     = (unsigned int)(100 *   OC_ppO2 + 0.5);
 	
 	// calculated pSCR ppO2
 	if		( pSCR_ppO2     <  0.01  ) int_O_pSCR_ppO2     =   0;
 	else if ( pSCR_ppO2     >= 9.995 ) int_O_pSCR_ppO2     = 999;
-	else                               int_O_pSCR_ppO2     = (unsigned int)(100 *     pSCR_ppO2 + 0.5);
+	else                               int_O_pSCR_ppO2     = (unsigned int)(100 * pSCR_ppO2 + 0.5);
 
 	// breathed ppO2
-	if		( breathed_ppO2 <  0.01  ) int_O_breathed_ppO2 =   0;
-	else if ( breathed_ppO2 >= 9.995 ) int_O_breathed_ppO2 = 999;
-	else                               int_O_breathed_ppO2 = (unsigned int)(100 * breathed_ppO2 + 0.5);
-	
-
-	//---- calculate ppN2, ppHe and EAD, END -------------------------------------------------------------------
-	
-    if( pres_diluent > ppWater )
-    {
-        overlay float EAD, END;
-
-        ppN2 = N2_ratio * (pres_diluent - ppWater);
-        ppHe = He_ratio * (pres_diluent - ppWater);
-
-        // EAD : Equivalent Air Depth. Equivalent depth for the same N2 level with plain air.
-        //       ppN2 = 79% * (P_EAD - ppWater)
-        //       EAD = (P_EAD - Psurface) * 10
-        //   ie: EAD = (ppN2 / 0.7902 + ppWater -Psurface) * 10
-
-        EAD = (ppN2 / 0.7902 + ppWater - pres_surface) * BAR_TO_METER;
-
-        if( (EAD < 0.0) || (EAD > 245.5) ) EAD = 0.0;
-
-        char_O_EAD = (unsigned char)(EAD + 0.5);
-
-		
-        // END : Equivalent Narcotic Depth.
-        //       Here we count O2 as narcotic too. Hence everything but helium (has a narcosis
-        //       factor of 0.23 btw). Hence the formula becomes:
-        //       END * BarPerMeter * (1.0 - 0.0) - ppWater + Psurface == Pambient - ppHe - ppWater
-        //  ie:  END = (Pambient - ppHe - Psurface) * BAR_TO_METER
-        //
-        // Source cited:
-        //       The Physiology and Medicine of Diving by Peter Bennett and David Elliott,
-        //       4th edition, 1993, W.B.Saunders Company Ltd, London.
-
-        END = (pres_respiration - ppHe - pres_surface) * BAR_TO_METER;
-
-        if( (END < 0.0) || (END > 245.5) ) END = 0.0;
-
-		char_O_END = (unsigned char)(END + 0.5);
-    }
-    else
-    {
-        ppN2 = ppHe = 0.0;
-		
-		char_O_EAD = char_O_END = 0;
-    }
-
-
-	//---- calculate decompression status ----------------------------------------------------------------------
-		
-	// Calculate tissues
-	calc_tissue();
-
-    // Calculate limit for surface, ie. GF_high.
-    calc_limit();
-	
-
-    // Fill int_O_ceiling (in mbar) if ceiling is below the surface
-    if( (calc_lead_tissue_limit - pres_surface) > 0 )
-	{	
-
-// compatibility version
-        int_O_ceiling = (short)((calc_lead_tissue_limit - pres_surface) * 1000);
-
-// new version
-//		// Round up to next 10 cm so that the ceiling disappears on the display only when the ceiling
-//		// limit is really zero. This will coincident then with TTS switching back to NDL time.
-//		int_O_ceiling = (short)((calc_lead_tissue_limit - pres_surface) * 1000 + 9);
-				
-
-		// limit int_O_ceiling to 16000 mbar (150 m)
-		if( int_O_ceiling > 16000) int_O_ceiling = 16000;
-	}
-    else
-	{
-        int_O_ceiling = 0;
-	}
-
-    int_O_gtissue_press = (short)((pres_tissue_N2[char_O_gtissue_no] + pres_tissue_He[char_O_gtissue_no]) * 1000);
+	if		( ppO2          <  0.01  ) int_O_breathed_ppO2 =   0;
+	else if ( ppO2          >= 9.995 ) int_O_breathed_ppO2 = 999;
+	else                               int_O_breathed_ppO2 = (unsigned int)(100 *      ppO2 + 0.5);
+
+
+	//---- export EAD and END ---------------------------------------------------------------------
+
+	// EAD
+	if( (EAD < 0.0) || (EAD > 245.5) ) char_O_EAD = 0;
+	else                               char_O_EAD = (unsigned char)(EAD + 0.5);
+
+	// END
+	if( (END < 0.0) || (END > 245.5) ) char_O_END = 0;
+	else                               char_O_END = (unsigned char)(END + 0.5);
 }
 
 
@@ -1910,6 +1939,7 @@
 {
 	overlay unsigned char loop;
 
+
 	for(loop = 0; loop < 16; ++loop)
 	{
 		// limit loops to 512ms, using timer 5
@@ -1917,8 +1947,8 @@
 
 		// calc_nextdecodepth()
 		//
-		// INPUT  temp_deco        : current depth in absolute pressure
-		// OUTPUT temp_depth_limit : depth of next stop in meters
+		// INPUT  sim_pres_respiration : current depth in absolute pressure
+		// OUTPUT sim_depth_limit      : depth of next stop in meters
 		// RETURN true if a stop is needed
 		//
 		// The function manages gas changes by itself, including priming
@@ -1926,13 +1956,13 @@
 		//
 		if( calc_nextdecodepth() )
 		{
-			if( temp_depth_limit == 0 ) goto Surface;	// this check should not bee needed as in
+			if( sim_depth_limit == 0 ) goto Surface;	// this check should not bee needed as in
 														// this case the RETURN value will be false
 
-			//---- stop required at temp_depth_limit -------------------------------------
+			//---- stop required at sim_depth_limit -------------------------------------
 
 			// convert stop depth in meters to absolute pressure
-			temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
+			sim_pres_respiration = sim_depth_limit * METER_TO_BAR + pres_surface;
 
 			// add one minute to the current stop, or add a new stop,
 			// or abort deco calculation if the deco table is full.
@@ -1941,22 +1971,18 @@
 		else
 		{
 			//---- no stop required --------------------------------------
-			
+
 			// ascend by float_ascent_speed for 1 minute
-			temp_deco -= float_ascent_speed * METER_TO_BAR;
+			sim_pres_respiration -= float_ascent_speed * METER_TO_BAR;
 
 			// finish deco calculation if surface is reached
-			if( temp_deco <= pres_surface )
+			if( sim_pres_respiration <= pres_surface )
 			{
 Surface:
-				// set deco engine status to done (DECO_STATUS_FINISHED)
+				// continue with gathering all results in the next calculation phase
 				char_O_deco_status &= ~DECO_STATUS_MASK;
-			
-				// ** commented out - char_O_deco_last_stop is not used for anything
-				//
-				// // surface reached (to animate menu)
-				// if( !(char_O_deco_status & DECO_PLAN_ALTERNATE)) char_O_deco_last_stop = 0;
-				
+				char_O_deco_status |=  DECO_STATUS_RESULTS;
+
 				return;
 			}
 		}
@@ -1966,55 +1992,50 @@
 
 		// program 1 minute interval on simulated tissues (Flagbit 7 = 0)
 		tissue_increment = 1;
-		
+
 		// compute current ppN2 and ppHe
-		sim_alveolar_presures();
-		
+		calc_alveolar_pressures();
+
 		// update the tissues
-		calc_tissue();
+		calc_tissues();
 	}
-
-	// ** commented out - char_O_deco_last_stop is not used for anything
-	//
-	// // surface not reached, need more stops... store reached depth for menu animation.
-	// if( !(char_O_deco_status & DECO_PLAN_ALTERNATE) ) char_O_deco_last_stop = temp_depth_limit;
 }
 
 
 //////////////////////////////////////////////////////////////////////////////
-// Simulate ascent to first deco stop.
+// Calculate ascent to first deco stop.
 //
 //
-// Modified: temp_deco : current depth in ascent and deco simulation, in bar absolute pressure
+// Modified: sim_pres_respiration : current depth in ascent and deco simulation, in bar absolute pressure
 //
-void sim_ascent_to_first_stop(void)
+void calc_ascent_to_first_stop(void)
 {
 	overlay unsigned char fast      = 1;	// 1 = 1 minute steps,  0 = 2 seconds steps
 	overlay unsigned char gaschange = 0;	// 1 = do a gas change, 0 = no better gas available
-	
-	
+
+
 	//---- Loop until first deco stop or surface is reached ----------
 	for(;;)
 	{
 		// depth in absolute pressure we came from
-		overlay float old_deco = temp_deco;
-		
+		overlay float old_deco = sim_pres_respiration;
+
 		// try ascending 1 full minute (fast) or 2 seconds (!fast)
-		if	( fast ) temp_deco -=  float_ascent_speed       * METER_TO_BAR;	// 1 min at float_ascent_speed ( 5 .. 10  m/min)
-		else         temp_deco -= (float_ascent_speed/30.0) * METER_TO_BAR;	// 2 sec at float_ascent_speed (17 .. 33 cm/min)
+		if	( fast ) sim_pres_respiration -=  float_ascent_speed       * METER_TO_BAR;	// 1 min at float_ascent_speed ( 5 .. 10  m/min)
+		else         sim_pres_respiration -= (float_ascent_speed/30.0) * METER_TO_BAR;	// 2 sec at float_ascent_speed (17 .. 33 cm/min)
 
 		// but don't go over surface
-		if( temp_deco < pres_surface ) temp_deco = pres_surface;
-
-		// compute sim_lead_tissue_limit
-		if   ( char_I_deco_model != 0 ) sim_limit(GF_low);
-		else                            sim_limit(1.0);
+		if( sim_pres_respiration < pres_surface ) sim_pres_respiration = pres_surface;
+
+		// compute current ceiling of the simulated tissues
+		if   ( char_I_deco_model != 0 ) calc_limit(GF_low);
+		else                            calc_limit(1.0);
 
 		// did we overshoot the first deco stop?
-		if( temp_deco < sim_lead_tissue_limit )
+		if( sim_pres_respiration < (sim_ceiling + pres_surface) )
 		{
 			// YES - back to last depth below first stop
-			temp_deco = old_deco;
+			sim_pres_respiration = old_deco;
 
 			// switch to 2 seconds ascent if not yet in, else done
 			if( fast )
@@ -2029,13 +2050,13 @@
 		}
 
 		// If code execution passes along here, we did not overshoot the first stop.
-		
+
 		// did we reach the surface? if yes, done!
-		if( temp_deco == pres_surface ) break;
+		if( sim_pres_respiration == pres_surface ) break;
 
 		// depth in meters where we are now (no round-up)
-		temp_depth_limit = (unsigned char)((temp_deco - pres_surface) * BAR_TO_METER);
-		
+		sim_depth_limit = (unsigned char)((sim_pres_respiration - pres_surface) * BAR_TO_METER);
+
 		// Check if there is a better gas to switch to, but only in alternative plan mode
 		// or if override is set. If yes, introduce a stop for the gas change.
 		if(    ((char_O_deco_status & DECO_PLAN_ALTERNATE) || (char_O_main_status & DECO_GASCHANGE_OVRD))
@@ -2043,35 +2064,35 @@
 		{
 			// depth in meters we came from
 			overlay unsigned char old_depth_limit = (unsigned char)((old_deco - pres_surface) * BAR_TO_METER);			
-			
-			// adjust temp_depth_limit to the gas change depth, but not deeper than the depth we came from
-			temp_depth_limit = (sim_gas_last_depth < old_depth_limit) ? sim_gas_last_depth : old_depth_limit;
-			
+
+			// adjust sim_depth_limit to the gas change depth, but not deeper than the depth we came from
+			sim_depth_limit = (sim_gas_last_depth < old_depth_limit) ? sim_gas_last_depth : old_depth_limit;
+
 			// create a stop for the gas change
 			update_deco_table(char_I_gas_change_time);
 
 			// set the new calculation values for N2, He and O2
-			gas_switch_set();
-			
+			gas_set_ratios();
+
 			// signal to create a stop for the gas change and update the tissues
 			gaschange = char_I_gas_change_time;
-			
+
 			// Adjust the depth for the tissue update to the stop depth. In case of fast mode, this
 			// imposes that the ascent from the 'old_deco' depth to this stop took 1 minute although
 			// we might have only ascended one or two meters...
-			temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
-		}	
-		
+			sim_pres_respiration = sim_depth_limit * METER_TO_BAR + pres_surface;
+		}
+
 		// Did one minute pass by and/or do we have a gas change?
 		// Remark: The 2 seconds ascent iterations towards the first deco stop in !fast speed may take
 		// up to 28 seconds in total - for this rough half of a minute no tissue updates will be computed.
 		// Well, it could be done by setting tissue_increment = 0 in !fast condition and making calls to
-		// sim_alveolar_presures() and calc_tissue() - see code commented out below.
+		// calc_alveolar_pressures() and calc_tissues() - see code commented out below.
 		if( fast || gaschange )
 		{
 			// program interval on simulated tissues (flag bit 7 = 0)
 			tissue_increment = fast + gaschange;
-			
+
 			// clear gas change signal
 			gaschange = 0;
 	//	}
@@ -2081,92 +2102,83 @@
 	//		tissue_increment = 0;
 	//	}
 	//	{
-			// compute ppN2/ppHe for current depth from temp_deco
-			sim_alveolar_presures();
+			// compute ppN2/ppHe for current depth from sim_pres_respiration
+			calc_alveolar_pressures();
 			
 			// update the tissues
-			calc_tissue();
+			calc_tissues();
 		}
 	}
 }
 
-//////////////////////////////////////////////////////////////////////////////
-// Simulate extra time at the current depth.
-//
-// This routine is used for the futureTTS / delayed ascent feature.
-//
-void sim_extra_time(void)
-{
- 	overlay unsigned char backup = tissue_increment;	// back-up tissue_increment
-
-	tissue_increment  = char_I_extra_time;				// program interval on simulated tissues (Flagbit 7 = 0)
-	
-	calc_tissue();										// update the tissues
-	
-	tissue_increment = backup;							// restore tissue_increment
-}
 
 //////////////////////////////////////////////////////////////////////////////
-// calc_tissue
+// calc_tissues
 //
-// optimized in v.101
+// INPUT:    ppN2                          : partial pressure of inspired N2
+//           ppHe                          : partial pressure of inspired He
+//           tissue_increment              : integration time and tissue selector (real or simulated)
 //
-// INPUT:	 ppN2, ppHe, tissue_increment
-// MODIFIED: pres_tissue_N2[], pres_tissue_He[]
-// OUTPUT:	 char_O_tissue_N2_saturation[], char_O_tissue_He_saturation[]
+// MODIFIED: pres_tissue_N2[]              : tissue N2 pressures (in real tissues context)
+//           pres_tissue_He[]              : tissue He pressures (in real tissues context)
+//           sim_pres_tissue_N2[]          : tissue N2 pressures (in simulated tissues context)
+//           sim_pres_tissue_He[]          : tissue He pressures (in simulated tissues context)
 //
-static void calc_tissue()
+// OUTPUT:   char_O_tissue_N2_saturation[] : tissue N2 pressures scaled for display purpose (in real tissues context)
+//           char_O_tissue_He_saturation[] : tissue He pressures scaled for display purpose (in real tissues context)
+//
+static void calc_tissues()
 {
 	overlay float			temp_tissue_N2;
 	overlay float			temp_tissue_He;
 	overlay unsigned char	period;
 	overlay unsigned char	i;
-		
-		
-    assert( 0.00 <= ppN2 && ppN2 < 11.2 );  // 80% N2 at 130m
-    assert( 0.00 <= ppHe && ppHe < 12.6 );  // 90% He at 130m
-	
-	
-    for (ci=0;ci<NUM_COMP;ci++)			// iterate through all compartments
-    {
-		i = tissue_increment & 127;		// extract number of minutes to do    (if i > 0)
-										// or if one 2 second period is to do (if i = 0)
-		
-		if( i == 0 )					// check if we shall do one 2-seconds period
+
+
+	assert( 0.00 <= ppN2 && ppN2 < 11.2 );  // 80% N2 at 130m
+	assert( 0.00 <= ppHe && ppHe < 12.6 );  // 90% He at 130m
+
+
+	for (ci=0;ci<NUM_COMP;ci++)				// iterate through all compartments
+	{
+		i = tissue_increment & TIME_MASK;	// extract number of minutes to do    (if i > 0)
+											// or if one 2 second period is to do (if i = 0)
+
+		if( i == 0 )						// check if we shall do one 2-seconds period
 		{
-			read_Buhlmann_times(0); 	// YES, program coefficients for a 2 seconds period
-			period = 1;					//      set period length (in cycles)
-			i      = 1;					//      and one cycle to do
+			read_Buhlmann_times(0);			// YES, program coefficients for a 2 seconds period
+			period = 1;						//      set period length (in cycles)
+			i      = 1;						//      and one cycle to do
 		}
-		else if( i > 9 )				// check if we can start with 10 minutes periods
+		else if( i > 9 )					// check if we can start with 10 minutes periods
 		{
-			read_Buhlmann_times(2);		// YES, program coefficients for 10 minutes periods
-			period = 10;				//      set period length (in cycles) to ten
+			read_Buhlmann_times(2);			// YES, program coefficients for 10 minutes periods
+			period = 10;					//      set period length (in cycles) to ten
 		}
-		else							// we shall do 1 to 9 minutes
+		else								// we shall do 1 to 9 minutes
 		{
-			read_Buhlmann_times(1);		//      program coefficients for 1 minute periods
-			period = 1;					//      set period length (in cycles) to one
+			read_Buhlmann_times(1);			//      program coefficients for 1 minute periods
+			period = 1;						//      set period length (in cycles) to one
 		}
 
 		do
 		{
 			//---- N2 -------------------------------------------------------------------------------
 
-			temp_tissue = (tissue_increment & 128) ? pres_tissue_N2[ci] : sim_pres_tissue_N2[ci];
+			temp_tissue = (tissue_increment & TISSUE_FLAG) ? pres_tissue_N2[ci] : sim_pres_tissue_N2[ci];
 
 			temp_tissue = (ppN2 - temp_tissue) * var_N2_e;
 
 			temp_tissue_safety();
 
-			if( tissue_increment & 128 )
+			if( tissue_increment & TISSUE_FLAG )
 			{
 				// The temp variable takes on purpose just the tissue increment from the last loop's iteration.
 				temp_tissue_N2 = temp_tissue;
 				
 				// Update the real tissues if either we are on the 2 seconds interval,
 				// or if we shall advance the tissues on a one or several minutes basis.
-				if( twosectimer || (tissue_increment & 127) ) pres_tissue_N2[ci] += temp_tissue;
+				if( twosectimer || (tissue_increment & TIME_MASK) ) pres_tissue_N2[ci] += temp_tissue;
 			}
 			else
 			{
@@ -2177,22 +2189,21 @@
 
 
 			//---- He -------------------------------------------------------------------------------
-			
-			temp_tissue = (tissue_increment & 128) ? pres_tissue_He[ci] : sim_pres_tissue_He[ci];
+
+			temp_tissue = (tissue_increment & TISSUE_FLAG) ? pres_tissue_He[ci] : sim_pres_tissue_He[ci];
 
 			temp_tissue = (ppHe - temp_tissue) * var_He_e;
 
 			temp_tissue_safety();
 
-			if( tissue_increment & 128 )
+			if( tissue_increment & TISSUE_FLAG )
 			{
 				// The temp variable takes on purpose just the tissue increment from the last loop's iteration.
 				temp_tissue_He = temp_tissue;
 				
 				// Update the real tissues if either we are on the 2 seconds interval,
 				// or if we shall advance the tissues on a one or several minutes basis.
-				if( twosectimer || (tissue_increment & 127) ) pres_tissue_He[ci] += temp_tissue;
-
+				if( twosectimer || (tissue_increment & TIME_MASK) ) pres_tissue_He[ci] += temp_tissue;
 			}
 			else
 			{
@@ -2200,38 +2211,37 @@
 				// so we do not need to check of the 2 seconds interval.
 				sim_pres_tissue_He[ci] += temp_tissue;
 			}
-			
 
 			// decrement loop counter
 			i -= period;
-			
+
 			// check if we need to switch from 10 minute periods to 1 minute periods
 			if( (i > 0) && (period = 10) && (i < 10) )
 			{
-				read_Buhlmann_times(1); 	// program coefficients for 1 minute periods
+				read_Buhlmann_times(1);		// program coefficients for 1 minute periods
 				period = 1;					// set period length (in cycles) to one
 			}
 		}
 		while( i );
-			
-			
+
+
 		// have the computations been done for the "real" tissues?
-		if( (tissue_increment & 128) && (twosectimer || (tissue_increment & 127)) )
+		if( (tissue_increment & TISSUE_FLAG) && (twosectimer || (tissue_increment & TIME_MASK)) )
 		{
 			// net tissue balance
 			temp_tissue = temp_tissue_N2 + temp_tissue_He;
-			
+
 			// check tissue on-/off-gassing and IBCD with applying a threshold of +/-HYST
 			//
-			if		( temp_tissue < -HYST )				// Check if the tissue is off-gassing
+			if      ( temp_tissue < -HYST )				// Check if the tissue is off-gassing
 			{
-				deco_tissue_vector	|=  (1 << ci);		// tag tissue as being in decompression
-				IBCD_tissue_vector	&= ~(1 << ci);		// tag tissue as not experiencing mentionable IBCD
+				deco_tissue_vector |=  (1 << ci);		// tag tissue as being in decompression
+				IBCD_tissue_vector &= ~(1 << ci);		// tag tissue as not experiencing mentionable IBCD
 			}
 			else if ( temp_tissue > +HYST )				// check if the tissue in on-gassing
 			{
-				deco_tissue_vector	&= ~(1 << ci);		// tag tissue as not being in decompression
-				
+				deco_tissue_vector &= ~(1 << ci);		// tag tissue as not being in decompression
+
 				if(		((temp_tissue_N2 > 0.0) && (temp_tissue_He < 0.0))		// check for counter diffusion
 					||	((temp_tissue_N2 < 0.0) && (temp_tissue_He > 0.0)) )
 				{
@@ -2239,19 +2249,19 @@
 				}
 			}
 
-			
+
 			// keep the saturating / desaturating flags from last invocation
 			char_O_tissue_N2_saturation[ci] &= 128;
 			char_O_tissue_He_saturation[ci]	&= 128;
-			
+
 			// flip the flags applying a hysteresis of HYST (actual value: see #define of HYST)
 				 if( temp_tissue_N2 > +HYST ) char_O_tissue_N2_saturation[ci] = 128; // set flag for tissue pressure is increasing
 			else if( temp_tissue_N2 < -HYST ) char_O_tissue_N2_saturation[ci] =   0; // clear flag (-> tissue pressure is decreasing)
 
 				 if( temp_tissue_He > +HYST ) char_O_tissue_He_saturation[ci] = 128; // set flag for tissue pressure is increasing
 			else if( temp_tissue_He < -HYST ) char_O_tissue_He_saturation[ci] =   0; // clear flag (-> tissue pressure is decreasing)
-			
-			
+
+
 			// For N2 tissue display purpose:
 			// Scale tissue press so that saturation in 70m on AIR gives a value of approx. 80.
 			// The surface steady-state tissue loading of [0.7902 * (pres_respiration - ppWater)] bar
@@ -2259,13 +2269,13 @@
 			// This scaling is adapted to the capabilities of the tissue graphics in the custom views.
 			temp_tissue = (pres_tissue_N2[ci] / N2_equilibrium) * 10;
 
-			 // limit to 127 to leave space for sat/desat flag
+			// limit to 127 to leave space for sat/desat flag
 			if (temp_tissue > 127) temp_tissue = 127;
 
 			// export as integer
 			char_O_tissue_N2_saturation[ci] += (unsigned char)temp_tissue;
 
-			
+
 			// For H2 tissue display purpose:
 			// Scale tissue press so that saturation in 120m on TMX 10/70 gives a value of approx. 70.
 			// With no He in a tissue, result will be 0.
@@ -2274,122 +2284,205 @@
 
 			// limit to 127 to leave space for sat/desat flag
 			if (temp_tissue > 127) temp_tissue = 127; 
-			
+
 			// export as integer
 			char_O_tissue_He_saturation[ci] += (unsigned char)temp_tissue;
-		}
-				
-    }// for
+		} //if
+
+	} // for
+
+
+	// set   deco flag if we are in deco and at least one of the real tissues is off-gassing
+	// clear deco flag if all of the real tissues are on-gassing
+	if      ( (char_O_nullzeit == 0) &&  deco_tissue_vector ) char_O_deco_warnings |=  DECO_FLAG;
+	else if (                           !deco_tissue_vector ) char_O_deco_warnings &= ~DECO_FLAG; 
 }
 
 //////////////////////////////////////////////////////////////////////////////
 // calc_limit
 //
-// New in v.111 : separated from calc_tissue(), and depends on GF value.
+// Input:
+//        tissue_increment       : selector for context: real or simulated tissues
+//        sim_pres_tissue_N2/_He : tissue pressures (used in simulated tissues context)
+//        pres_tissue_N2/_He     : tissue pressures (used in real      tissues context)
 //
-static void calc_limit(void)
+// Output:
+//        sim_ceiling            : ceiling in bar  relative pressure (only in simulated tissues context)
+//        ceiling                : ceiling in bar  relative pressure (only in real      tissues context)
+//        int_O_ceiling          : ceiling in mbar relative pressure (only in real      tissues context)
+//        int_O_gradient_factor  : gradient factor in %              (only in real      tissues context)
+//
+// Modified:
+//        char_O_deco_warnings   : for IBCD, microbubbles and outside warning (only in real tissues context)
+//
+static void calc_limit(PARAMETER float GF_parameter)
 {
-    char_O_gtissue_no 		= 0;
-    calc_lead_tissue_limit 	= 0.0;
-
-	// clear IBCD, microbubbles and outside warning flags (locked warnings will be preserved)
-	char_O_deco_warnings &= ~(DECO_WARNING_IBCD + DECO_WARNING_MBUBBLES + DECO_WARNING_OUTSIDE);
-
-
-    for(ci=0; ci<NUM_COMP; ci++)
-    {
-        overlay float N2 = pres_tissue_N2[ci];
-        overlay float He = pres_tissue_He[ci];
-		overlay float pres_tissue = N2 + He;
+	overlay float lead_tissue_limit = 0.0;
+	overlay float lead_supersat     = 0.0;
+
+	overlay unsigned char lead_tissue_no = 0;
+
+
+	// check context
+	if( tissue_increment & TISSUE_FLAG )
+	{
+		// clear IBCD, microbubbles and outside warning flags (locked warnings will be preserved)
+		char_O_deco_warnings &= ~(DECO_WARNING_IBCD + DECO_WARNING_MBUBBLES + DECO_WARNING_OUTSIDE);
+	}
+
+
+	// loop over all tissues
+	for(ci=0; ci<NUM_COMP; ci++)
+	{
+		overlay float calc_pres_tissue_N2;
+		overlay float calc_pres_tissue_He;
+		overlay float pres_tissue;
 		overlay float pres_min;
-		overlay float gf;
-		overlay float threshold;
-
-        read_Buhlmann_coefficients();
-        var_N2_a = (var_N2_a * N2 + var_He_a * He) / pres_tissue;
-        var_N2_b = (var_N2_b * N2 + var_He_b * He) / pres_tissue;
-
-		// calculate minimum ambient pressure that the tissue can withstand according to straight Buhlmann
-		pres_min = (pres_tissue - var_N2_a) * var_N2_b;
-		
-		// calculate current gf value (1.0 = 100%) of this tissue
-		gf = (pres_tissue - pres_respiration) / (pres_tissue - pres_min);
-		if( gf < 0.0 ) gf = 0.0;
-		
-		// calculate a threshold value for use below
-		// ToDo: finalize the definition of the threshold
-		threshold = 0.02 * ci + 0.9;
-
-		// check if this tissue is likely to develop microbubbles
-		// and/or if this tissue is outside the Buhlmann model
-		if( ci <= 5 )
+
+		// get the tissue pressures
+		if( tissue_increment & TISSUE_FLAG )
 		{
-			if( gf >= threshold )
-			{
-				char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
-				
-				if( gf >= 1.0 )
-				{
-					char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
-				}
-			}
+			// context is real tissues
+			calc_pres_tissue_N2 = pres_tissue_N2[ci];
+			calc_pres_tissue_He = pres_tissue_He[ci];
 		}
 		else
 		{
-			if( gf >= 1.0 )
-			{
-				char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
+			// context is simulated tissues
+			calc_pres_tissue_N2 = sim_pres_tissue_N2[ci];
+			calc_pres_tissue_He = sim_pres_tissue_He[ci];
+		}
+
+		// overall tissue pressure
+		pres_tissue = calc_pres_tissue_N2 + calc_pres_tissue_He;
+
+		// get the coefficients for tissue ci
+		read_Buhlmann_coefficients();
+
+		// adapt the coefficients according to the N2/He ratio in the tissue
+		var_N2_a = (var_N2_a * calc_pres_tissue_N2 + var_He_a * calc_pres_tissue_He) / pres_tissue;
+		var_N2_b = (var_N2_b * calc_pres_tissue_N2 + var_He_b * calc_pres_tissue_He) / pres_tissue;
+
+		// calculate minimum ambient pressure that the tissue can withstand according to straight Buhlmann
+		pres_min = (pres_tissue - var_N2_a) * var_N2_b;
+
+		// next calculations are only relevant when invoked on the real tissues
+		if( tissue_increment & TISSUE_FLAG )
+		{
+			overlay float supersat;
+			overlay float threshold;
 	
-				if( gf >= threshold )
+			// calculate current supersaturation value (1.0 = 100%) of this tissue
+			supersat = (pres_tissue - pres_respiration) / (pres_tissue - pres_min);
+
+			// check if tissue is in supersaturation
+			if( supersat > 0.0 )
+			{
+				// memorize highest supersaturation found
+				if( supersat > lead_supersat ) lead_supersat = supersat;
+
+				// set a threshold value for the microbubbles and outside warnings
+				// ToDo: finalize the definition of the threshold
+				threshold = 0.02 * ci + 0.9;
+
+				// check if this tissue is likely to develop microbubbles
+				// and/or if this tissue is outside of the Buhlmann model
+				if( ci <= 5 )
 				{
-					char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
+					if( supersat >= threshold )
+					{
+						char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
+
+						if( supersat >= 1.0 )
+						{
+							char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
+						}
+					}
+				}
+				else // ci > 5
+				{
+					if( supersat >= 1.0 )
+					{
+						char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
+
+						if( supersat >= threshold )
+						{
+							char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
+						}
+					}
 				}
 			}
 		}
-		
-		
-        // Apply the Eric Baker's varying gradient factor correction if the GF-Model is selected.
-        // Note: the correction factor depends both on GF and b,
-        //       Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
-        //       so that can change who is the leading gas...
-        // Note: Also depends of the GF. So the calculus is different for GF_low, current GF, or GF_high...
-        //       *BUT* calc_tissue() is used to compute bottom time, hence what would happen at surface,
-        //       hence at GF_high.
-		if( char_I_deco_model != 0 ) pres_min =   ( pres_tissue - var_N2_a * (      GF_high) ) * var_N2_b
-		                                        / ( GF_high     + var_N2_b * (1.0 - GF_high) );
+
+		// Apply the Eric Baker's varying gradient factor correction if the GF-Model is selected.
+		// Note: the correction factor depends both on GF and b, so that can change who is the
+		//       leading gas...
+		if( char_I_deco_model != 0 ) pres_min =   ( pres_tissue        - (var_N2_a     * GF_parameter) )
+		                                        / ( 1.0 - GF_parameter + (GF_parameter / var_N2_b    ) );
 
 		// check if this tissue requires a higher ambient pressure than was found to be needed up to now
-        if( pres_min > calc_lead_tissue_limit )
-        {
-            char_O_gtissue_no      = ci;
-            calc_lead_tissue_limit = pres_min;
-        }
-    }
-	
-	// check IBCD condition
-	if( !IBCD_tissue_vector )
+		if( pres_min > lead_tissue_limit )
+		{
+			lead_tissue_limit = pres_min;
+			lead_tissue_no    = ci;
+		}
+	} // for
+
+
+	// compile outputs
+	if( tissue_increment & TISSUE_FLAG )
 	{
-		char_O_deco_warnings &= ~DECO_WARNING_IBCD;					// no IBCD in any tissue, clear flag
+		//--- real tissues -----------------------------------------------------
+
+		// check if leading tissue is in IBCD condition
+		if(    (IBCD_tissue_vector & (1 << lead_tissue_no))
+		    && ((pres_tissue_N2[lead_tissue_no] + pres_tissue_He[lead_tissue_no]) > pres_respiration) )
+		{
+			// leading tissue is in IBCD condition and in super-saturation, so issue a warning.
+			char_O_deco_warnings |= (DECO_WARNING_IBCD + DECO_WARNING_IBCD_lock);
+		}
+
+
+		// compute ceiling in bar relative pressure
+		ceiling = lead_tissue_limit - pres_surface;
+
+		// convert ceiling to int_O_ceiling in mbar
+		if      ( ceiling <=  0 ) int_O_ceiling = 0;
+		else if ( ceiling >  16 ) int_O_ceiling = 16000;
+	// Compatibility version
+		else                      int_O_ceiling = (short)(ceiling * 1000);
+
+	// New version: Rounds up to next 10 cm so that the ceiling disappears on the display only when the
+	// ceiling limit is really zero. This will coincident then with TTS switching back to NDL time.
+	//	else                      int_O_ceiling = (short)(ceiling * 1000 + 9);
+
+
+		// convert highest supersaturation found to int_O_gradient_factor in % (1.0 = 100%)
+		// limit to 255 because of constraints in ghostwriter code
+		if     ( lead_supersat <= 0.0   ) int_O_gradient_factor = 0;
+		else if( lead_supersat >  2.545 ) int_O_gradient_factor = 255 + INT_FLAG_WARNING;
+		else
+		{
+			int_O_gradient_factor = (unsigned int)(100 * lead_supersat + 0.5);
+
+			if      ( int_O_gradient_factor >= GF_WARNING_THRESHOLD      )
+				int_O_gradient_factor |= INT_FLAG_WARNING;
+
+			else if ( int_O_gradient_factor >= char_I_GF_High_percentage )
+				int_O_gradient_factor |= INT_FLAG_ATTENTION;
+		}
 	}
-	else if(    (IBCD_tissue_vector & (1 << char_O_gtissue_no))
-	         && ((pres_tissue_N2[char_O_gtissue_no] + pres_tissue_He[char_O_gtissue_no]) > pres_respiration) )
+	else
 	{
-		// leading tissue is in IBCD condition and in super-saturation, set flags.
-		char_O_deco_warnings |= (DECO_WARNING_IBCD + DECO_WARNING_IBCD_lock);
+		//--- simulated tissues ------------------------------------------------
+		
+		// compute ceiling for the simulated tissues in bar relative pressure
+		sim_ceiling = lead_tissue_limit - pres_surface;
 	}
-	
-	// set   deco flag if we are in deco and at least one of the real tissues is off-gassing
-	// clear deco flag if all of the real tissues are on-gassing
-	if      ( (char_O_nullzeit == 0) &&  deco_tissue_vector ) char_O_deco_warnings |=  DECO_FLAG;
-	else if (                    !deco_tissue_vector ) char_O_deco_warnings &= ~DECO_FLAG; 
-
-
-    assert( char_O_gtissue_no < NUM_COMP );
-    assert( 0.0 <= calc_lead_tissue_limit && calc_lead_tissue_limit <= 14.0);
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// calc_nullzeit
+// calc_NDL_time
 //
 // calculates the remaining bottom time
 //
@@ -2397,97 +2490,153 @@
 //       exponential term to the M-value equation, making it impossible to
 //       invert... So we have to make a fast-simu until we find a better way.
 //
-// Input:  pres_respiration
-// Output: char_O_nullzeit / char_O_alternate_nullzeit
+// Input:  ppN2
+//         ppHe
 //
-static void calc_nullzeit(void)
+// Output: NDL_time
+//
+static void calc_NDL_time(void)
 {
-	overlay unsigned char nullzeit = 240;
-	
-	
-    //---- Compute ppN2 and ppHe ---------------------------------------------
-    temp_deco = pres_respiration;
-    sim_alveolar_presures();
-	
-    for(ci=0; ci<NUM_COMP; ci++)
-    {
-        //---- Read A/B values and loading factor for N2 and He --------------
-
-		overlay float tN2 = sim_pres_tissue_N2[ci];
-        overlay float tHe = sim_pres_tissue_He[ci];
+	overlay unsigned char new_NDL_lead_tissue = 0;
+	overlay unsigned char i;
+
+
+	// initialize NDL_time to 240 minutes
+	NDL_time = 240;
+
+	for(i=0; i<NUM_COMP; i++)
+	{
+		overlay float calc_pres_tissue_N2;
+		overlay float calc_pres_tissue_He;
+		overlay float pres_tissue;
+
+		overlay unsigned char NDL_tissue;
+		overlay unsigned char period = 10;		// start with 10 minute periods
+
+
+		// check lead tissue from last NDL computation first
+		ci = i + NDL_lead_tissue;
+
+		// wrap around after the 16th tissue
+		if( ci >= NUM_COMP ) ci -= NUM_COMP;
+
+		// read Buhlmann a and b coefficients for tissue ci
+		read_Buhlmann_coefficients();
+
+		// read the loading factors for 10 minute periods
+		read_Buhlmann_times(2);
 		
-        overlay float t = tN2 + tHe;
-        overlay unsigned char ndl;
-        overlay unsigned char period = 10;
-
-        read_Buhlmann_coefficients();
-        read_Buhlmann_times(2);             // Starts with a 10min period.
-
-        //---- Simulate for that tissue --------------------------------------
-        // NOTE: No need to simulate for longer than the already found NDL.
-		for(ndl=0; ndl<nullzeit;)
-        {
-			//---- Compute updated mix M-value at surface
-			overlay float a = (var_N2_a * tN2 + var_He_a * tHe) / t;
-			overlay float b = (var_N2_b * tN2 + var_He_b * tHe) / t;
-			overlay float M0 = (a + pres_surface/b);
-
-			//---- Add 10min/1min to N2/He tissues
-			overlay float dTN2 = (ppN2 - tN2) * var_N2_e;
-			overlay float dTHe = (ppHe - tHe) * var_He_e;
-
-			//---- Apply safety margin for both models
-			// NDL can be computed while ascending... SO we have
-			// to check if we are saturating or desaturating.
-			if( dTN2 > 0.0 ) dTN2 *= float_saturation_multiplier;
-			else             dTN2 *= float_desaturation_multiplier;
-
-			if( dTHe > 0.0 ) dTHe *= float_saturation_multiplier;
-			else             dTHe *= float_saturation_multiplier;
-
-			// adopt M0 value when using the GF extension
-			if (char_I_deco_model != 0 ) M0 = GF_high * (M0 - pres_surface) + pres_surface;
-
-            //---- Simulate off-gassing while going to surface
-            // TODO !
-            // dTN2 -= exp( ... ascent time ... ppN2...)
-            // dTHe -= exp( ... ascent time ... ppHe...)
-
-            //---- Ok now, and still ok to surface after 1 or 10 minutes ?
-            if( (t <= M0) && (t + dTN2 + dTHe <= M0) )
-            {
-                tN2 += dTN2;		// YES: apply gas loadings,
-                tHe += dTHe;
-				t    = tN2 + tHe;				
+		// get the tissue pressures for N2 and He
+		calc_pres_tissue_N2 = sim_pres_tissue_N2[ci];
+		calc_pres_tissue_He = sim_pres_tissue_He[ci];
+
+		// calculate the total pressure tissue
+		pres_tissue = calc_pres_tissue_N2 + calc_pres_tissue_He;
+
+
+		// simulate an increasing bottom time and check when we hit the NDL ------------------------
+		for( NDL_tissue = 0; NDL_tissue < NDL_time; )	// not needed to simulate for longer than the already found NDL
+		{
+			overlay float var_a;
+			overlay float var_b;
+			overlay float pres_limit;
+			overlay float delta_pres_tissue_N2;
+			overlay float delta_pres_tissue_He;
+
+
+			// adopt a and b coefficients to current N2/He ratio inside the tissue
+			var_a = (var_N2_a * calc_pres_tissue_N2 + var_He_a * calc_pres_tissue_He) / pres_tissue;
+			var_b = (var_N2_b * calc_pres_tissue_N2 + var_He_b * calc_pres_tissue_He) / pres_tissue;
+
+			// compute pressure limit for tissues under surface pressure conditions
+			pres_limit = (var_a + pres_surface / var_b);
+
+			// adopt pressure limit when using the GF extension
+			if (char_I_deco_model != 0 ) pres_limit = GF_high * (pres_limit - pres_surface) + pres_surface;
+
+			//---- Check if this tissue is already beyond the NDL
+			if( pres_tissue > pres_limit)
+			{
+				// NO - finish the outer loop,
+				i = NUM_COMP;
+
+				// and finish the inner loop
+				break;
+			}
+
+			// compute delta to tissue pressures in 10 or 1 minutes of time ahead
+			delta_pres_tissue_N2 = (ppN2 - calc_pres_tissue_N2) * var_N2_e;
+			delta_pres_tissue_He = (ppHe - calc_pres_tissue_He) * var_He_e;
+
+			// apply safety factors to the pressure deltas
+			// NDL can be computed while ascending, so we have to check if we are saturating or desaturating
+			if( delta_pres_tissue_N2 > 0.0 ) delta_pres_tissue_N2 *= float_saturation_multiplier;
+			else                             delta_pres_tissue_N2 *= float_desaturation_multiplier;
+
+			if( delta_pres_tissue_He > 0.0 ) delta_pres_tissue_He *= float_saturation_multiplier;
+			else                             delta_pres_tissue_He *= float_saturation_multiplier;
+
+			// Simulate off-gassing while going to surface
+			// TODO !
+			// delta_pres_tissue_N2 -= exp( ... ascent time ... ppN2...)
+			// delta_pres_tissue_He -= exp( ... ascent time ... ppHe...)
+
+			// within NDL now, but still within in 10 or 1 minutes from now?
+			if( pres_tissue + delta_pres_tissue_N2 + delta_pres_tissue_He <= pres_limit )
+			{
+				// YES - apply the pressure deltas to tissues
+				calc_pres_tissue_N2 += delta_pres_tissue_N2;
+				calc_pres_tissue_He += delta_pres_tissue_He;
 				
-                ndl += period;		// increment NDL,
-
-                continue;			// and loop.
-            }
-
-            //---- Should we retry with smaller steps ?
-            if( period == 10 )
-            {
-                read_Buhlmann_times(1); // 1min coefs.
-                period = 1;
-
-                continue;
-            }
-
-            //---- ELSE make a linear approx for the last minute
-            // Useful to have a meaningful rounding of NDL.
-            // But ONLY if positive (negative casted to unsigned is bad).
-            if( M0 > t ) ndl += (unsigned char)(0.5f + (M0-t)/(dTN2+dTHe));
-			
-            break;
-        }
-
-        // Keep the shortest NDL found
-		if ( ndl < nullzeit ) nullzeit = ndl;
-    }
-	
-	if( char_O_deco_status & DECO_PLAN_ALTERNATE) char_O_alternate_nullzeit = nullzeit;
-	else                                          char_O_nullzeit           = nullzeit;
+				// update the overall tissue pressure
+				pres_tissue = calc_pres_tissue_N2 + calc_pres_tissue_He;
+
+				// increment the NDL
+				NDL_tissue += period;
+
+				// do next loop
+				continue;
+			}
+
+			// NO - if delta pressures were for 10 minutes of time ahead, try with 1 minute ahead
+			if( period == 10 )
+			{
+				// reduce period to 1 minute
+				period = 1;
+
+				// read the loading factors for 1 minute periods
+				read_Buhlmann_times(1);
+
+				// do next loop
+				continue;
+			}
+
+			// NO - not even within NDL in just one more minute, so make a linear approx for the last minute
+			// (make a meaningful rounding of NDL, but ONLY if positive: negative casted to unsigned is bad)
+			if( pres_limit > pres_tissue )
+				NDL_tissue += (unsigned char)(0.5 +    (pres_limit           - pres_tissue         )
+			                                  / (delta_pres_tissue_N2 + delta_pres_tissue_He) );
+
+			// finish the inner loop
+			break;
+		}
+
+		// is the current NDL short than the shortest so far?
+		if ( NDL_tissue < NDL_time )
+		{
+			// keep the current's tissue NDL as the new shortest NDL
+			NDL_time = NDL_tissue;
+
+			// store the causing tissue
+			new_NDL_lead_tissue = ci;
+		}
+		
+		// if NDL is > 0 the outer loop will continues with the next tissue
+		// if NDL found to be overrun, outer loop will be terminated through i = NUM_COMP statement
+	}
+
+	// store the NDL dominating tissue for to start with in the next NDL calculation
+	NDL_lead_tissue = new_NDL_lead_tissue;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -2496,22 +2645,27 @@
 // Sum up ascent from bottom to surface at float_ascent_speed,
 // but 1 minute per meter for the final ascent, and all stops.
 //
-// Result in int_O_ascenttime,
-//        or int_O_alternate_ascenttime if doing the alternative plan.
+// Input:  char_I_depth_last_deco
+//         pres_respiration
+//         pres_surface
+//         float_ascent_speed
+//         internal_deco_depth[]
+//
+// Output: ascent_time
 //
 static void calc_ascenttime(void)
 {
-    overlay unsigned char  x;
-    overlay unsigned short sum;
-	
+	overlay unsigned char x;
+
+
 	// preset final ascent
 	overlay float final  = (float)char_I_depth_last_deco;
 
-    // calculate depth
-    overlay float ascent = (pres_respiration - pres_surface) * BAR_TO_METER;
-	
+	// calculate depth
+	overlay float ascent = (pres_respiration - pres_surface) * BAR_TO_METER;
+
 	// check if we are already in final ascent
-    if (ascent <= final)
+	if (ascent <= final)
 	{
 		// yes - all ascent is final ascent
 		final  = ascent;
@@ -2521,99 +2675,28 @@
 	{
 		// no - subtract final ascent part from overall ascent
 		ascent -= final;
-		
+
 		// compute time for ascent part without final ascent
-		ascent /= float_ascent_speed;		
+		ascent /= float_ascent_speed;
 	}
-	
-	// add 1 minute for each meter of  final ascent
+
+	// add 1 minute for each meter of final ascent
 	ascent += final;
-	
+
 	// convert to integer
-    sum = (unsigned short)(ascent + 0.5);
+	ascent_time = (unsigned short)(ascent + 0.5);
 
 	// add all stop times
-    for(x=0; x<NUM_STOPS && internal_deco_depth[x]; x++)
-        sum += (unsigned short)internal_deco_time[x];
+	for(x=0; x<NUM_STOPS && internal_deco_depth[x]; x++)
+		ascent_time += (unsigned short)internal_deco_time[x];
 
 	// limit result to display max.
-	if( sum > 999) sum = 999;
-	
+	if( ascent_time > 999) ascent_time = 999;
+
 	// tag result as invalid if there is an overflow in the stops table
-	if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW ) sum |= INT_FLAG_INVALID;
-	
-	// route result to output variable
-	if( char_O_deco_status & DECO_PLAN_ALTERNATE ) int_O_alternate_ascenttime = sum;
-    else                                           int_O_ascenttime           = sum;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// update_startvalues
-//
-// updated in v.102
-//
-void update_startvalues(void)
-{
-    overlay unsigned char x;
-
-    // Start ascent simulation with current tissue partial pressures.
-    for(x=0; x<NUM_COMP; x++)
-    {
-        sim_pres_tissue_N2[x] = pres_tissue_N2[x];
-        sim_pres_tissue_He[x] = pres_tissue_He[x];
-    }
-
-    // No leading tissue (yet) for this ascent simulation.
-    sim_lead_tissue_limit = 0.0;
-    sim_lead_tissue_no    = 1;
+	if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW ) ascent_time |= INT_FLAG_INVALID;
 }
 
-//////////////////////////////////////////////////////////////////////////////
-// sim_limit()
-//
-// New in v.111
-//
-// Function separated from calc_tissue() to allow recomputing limit on
-// different depth, because it depends on current gradient factor.
-//
-static void sim_limit(PARAMETER float GF_current)
-{
-    assert( 0.0 < GF_current && GF_current <= 1.0 );
-
-    sim_lead_tissue_limit = 0.0;
-    sim_lead_tissue_no    = 0;		// If no one is critic, keep first tissue.
-
-    for(ci=0; ci<NUM_COMP; ci++)
-    {
-        overlay float N2 = sim_pres_tissue_N2[ci];
-        overlay float He = sim_pres_tissue_He[ci];
-        overlay float p = N2 + He;
-
-        read_Buhlmann_coefficients();
-        var_N2_a = (var_N2_a * N2 + var_He_a * He) / p;
-        var_N2_b = (var_N2_b * N2 + var_He_b * He) / p;
-
-        // Apply the Eric Baker's varying gradient factor correction.
-        // Note: the correction factor depends both on GF and b,
-        //       Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
-        //       so that can change who is the leading gas...
-        // Note: Also depends of the GF_current...
-		if( char_I_deco_model != 0 )  p =   ( p                - (var_N2_a   * GF_current) )
-		                                  / ( 1.0 - GF_current + (GF_current / var_N2_b  ) );
-
-		else                          p =   (p - var_N2_a) * var_N2_b;
-
-
-        if( p > sim_lead_tissue_limit )
-        {
-            sim_lead_tissue_no    = ci;
-            sim_lead_tissue_limit = p;
-        }
-    } // for ci
-
-    assert( sim_lead_tissue_no < NUM_COMP );
-    assert( 0.0 <= sim_lead_tissue_limit && sim_lead_tissue_limit <= 14.0 );
-}
 
 //////////////////////////////////////////////////////////////////////////////
 // clear_deco_table
@@ -2621,14 +2704,14 @@
 //
 static void clear_deco_table(void)
 {
-    overlay unsigned char x;
-
-    for(x=0; x<NUM_STOPS; ++x)
-    {
-        internal_deco_time [x] = 0;
-        internal_deco_depth[x] = 0;
-    }
-	
+	overlay unsigned char x;
+
+	for(x=0; x<NUM_STOPS; ++x)
+	{
+		internal_deco_time [x] = 0;
+		internal_deco_depth[x] = 0;
+	}
+
 	// clear stop table overflow warning
 	char_O_deco_warnings &= ~DECO_WARNING_STOPTABLE_OVERFLOW;
 }
@@ -2636,15 +2719,15 @@
 //////////////////////////////////////////////////////////////////////////////
 // update_deco_table
 //
-// Add time to a stop at temp_depth_limit
+// Add time to a stop at sim_depth_limit
 //
 // It is possible to create stops with a duration of 0 minutes, e.g. to
 // note a gas change "on the fly" while ascending. Therefore the criteria
 // to have reached the end of the list needs always to be depth == 0.
 //
-// Input:   temp_depth_limit  : stop's depth, in meters.
+// Input:   sim_depth_limit  : stop's depth, in meters.
 //          sim_gas_last_used : gas used at stop, as index 1..5 or 0 for gas 6
-//			PARAMETER time_increment    : number of minutes to add to the stop
+//          PARAMETER time_increment    : number of minutes to add to the stop
 //
 // Updated: internal_deco_depth[] : depth    (in meters)  of each stop
 //          internal_deco_time [] : time     (in minutes) of each stop
@@ -2654,16 +2737,16 @@
 {
 	overlay unsigned char x;
 
-	assert( temp_depth_limit > 0 );		// No stop at surface...
+	assert( sim_depth_limit > 0 );		// No stop at surface...
 
 	// loop through internal deco table
 	for(x=0; x<NUM_STOPS; ++x)
 	{
 		// Make sure deco-stops are recorded in order:
-		assert( !internal_deco_depth[x] || temp_depth_limit <= internal_deco_depth[x] );
+		assert( !internal_deco_depth[x] || sim_depth_limit <= internal_deco_depth[x] );
 
 		// Is there already a stop entry for our current depth?
-		if( internal_deco_depth[x] == temp_depth_limit )
+		if( internal_deco_depth[x] == sim_depth_limit )
 		{
 			// Yes - increment stop time if possible
 			// Stop time entries are limited to 99 minutes because of display constraints.
@@ -2681,82 +2764,21 @@
 		if( internal_deco_depth[x] == 0 )
 		{
 			internal_deco_time[x]  = time_increment;		// initialize entry with first stop's time,
-			internal_deco_depth[x] = temp_depth_limit;		// ... depth, and
+			internal_deco_depth[x] = sim_depth_limit;		// ... depth, and
 			internal_deco_gas[x]   = sim_gas_last_used;		// ... gas
 			return 1;										// return with status 'success'
 		}
 	}
 
 	// If program flow passes here, all deco table entries are used up.
-	
+
 	// set overflow warning
 	char_O_deco_warnings |= DECO_WARNING_STOPTABLE_OVERFLOW;
-	
-	
+
 	// return with status 'failed'.
 	return 0;
 }
 
-//////////////////////////////////////////////////////////////////////////////
-// calc_gradient_factor
-//
-// optimized in v.101 (var_N2_a)
-// new code in v.102
-//
-static void calc_gradient_factor(void)
-{
-    overlay float gf;
-    overlay float N2 = pres_tissue_N2[char_O_gtissue_no];
-    overlay float He = pres_tissue_He[char_O_gtissue_no];
-
-    assert( char_O_gtissue_no < NUM_COMP );
-    assert( 0.800 <= pres_respiration && pres_respiration < 14.0 );
-
-    // tissue > respiration (currently off-gassing)
-    // GF = 0.00 when respiration == tissue, ie. dissolved gases are at equilibrium.
-    // GF = 1.00 when respiration == limit.
-    temp_tissue = N2 + He;
-    if( temp_tissue <= pres_respiration )
-	{
-        gf = 0.0;
-		int_O_gradient_factor = 0;
-	}
-    else
-    {
-        overlay float limit = calc_lead_tissue_limit;
-        // NOTE: in GF model, calc_lead_tissue_limit include already the
-        //       correction due to gradient factor. To compute the actual
-        //       current GF, we need to (re-)compute the raw ambient-pressure
-        //       limit from the Buhlmann model.
-        if( char_I_deco_model != 0 )
-        {
-            ci = char_O_gtissue_no;
-
-            read_Buhlmann_coefficients();
-
-            var_N2_a = (var_N2_a * N2 + var_He_a * He) / temp_tissue;
-            var_N2_b = (var_N2_b * N2 + var_He_b * He) / temp_tissue;
-
-            limit    = (temp_tissue - var_N2_a) * var_N2_b;
-        }
-
-        gf = (temp_tissue - pres_respiration) / (temp_tissue - limit);
-		
-		// limit to 255 because of constraints in ghostwriter code
-		if     ( gf <= 0.0   ) int_O_gradient_factor = 0;
-        else if( gf >  2.545 ) int_O_gradient_factor = 255 + INT_FLAG_WARNING;
-        else
-		{
-			int_O_gradient_factor = (unsigned int)(100 * gf + 0.5);
-		
-			if 		( int_O_gradient_factor >= GF_warning_threshold      )
-				int_O_gradient_factor |= INT_FLAG_WARNING;
-
-			else if ( int_O_gradient_factor >= char_I_GF_High_percentage )
-				int_O_gradient_factor |= INT_FLAG_PREWARNING;
-		}
-	}
-}
 
 //////////////////////////////////////////////////////////////////////////////
 // calc_desaturation_time
@@ -2768,21 +2790,22 @@
 //
 void calc_desaturation_time_helper(void)
 {
-	if( pres_actual > pres_target )					// check if actual pressure is higher then target pressure
-	{												// YES - compute remaining time
+	if( pres_actual > pres_target )		// check if actual pressure is higher then target pressure
+	{									// YES - compute remaining time
 		overlay	float pres_ratio;
-		
+
 		pres_ratio = pres_actual / pres_target;
 
 		// Compute desaturation time with result rounded up to multiples of 10 minutes.
-		// Main purpose is to avoid confusion, because the times do not clock down in one minute steps any more
-		// but get constantly re-computed according to current ambient pressure and may therefor make steps of
-		// several minutes forwards and backwards as ambient pressure rises and falls.
-		short_time = (unsigned short)( (var_ht * log(pres_ratio) / desat_factor) + 0.9 );
+		// Main purpose is to avoid confusion, because the times do not clock down in
+		// one minute steps any more but get constantly re-computed according to current
+		// ambient pressure and may therefor make steps of several minutes forwards and
+		// backwards as ambient pressure rises and falls.
+		int_time = (unsigned int)( (var_ht * log(pres_ratio) / desat_factor) + 0.9 );
 	}
 	else
-	{												// NO  - desaturation state reached, no remaining time
-		short_time = 0;
+	{									// NO  - desaturation state reached, no remaining time
+		int_time = 0;
 	}
 }
 
@@ -2791,34 +2814,42 @@
 //
 void calc_desaturation_time(void)
 {
-    assert( 800 < int_I_pres_surface             && int_I_pres_surface             < 1100 );
-    assert( 0   < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
-
-
-    N2_ratio       = 0.7902; 															// fraction of N2 in respired air
-	pres_surface   = 0.001    * int_I_pres_surface;										// surface pressure in bar
-	N2_equilibrium = N2_ratio * (pres_surface - ppWater); 								// partial pressure of N2 in respired air
-	desat_factor   = 0.06931  * char_I_desaturation_multiplier * SURFACE_DESAT_FACTOR;	// pre-computed term for later use: 
-																						// 10 [Min] * 0.01 [%] * 0.6931 [ln(2)] * ...
+	assert( 800 < int_I_pres_surface             && int_I_pres_surface             < 1100 );
+	assert( 0   < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
+
+	// fraction of inert gases in respired air
+	N2_ratio       = 0.7902;
+	He_ratio       = 0.0;
+
+	// surface pressure in bar
+	pres_surface   = 0.001    * int_I_pres_surface;
+
+	// partial pressure of N2 in respired air
+	N2_equilibrium = N2_ratio * (pres_surface - ppWater);
+
+	// pre-computed term for later use: 10 [Min] * 0.01 [%] * 0.6931 [=log(2)] * ...
+	desat_factor   = 0.06931  * char_I_desaturation_multiplier * SURFACE_DESAT_FACTOR;
+
+	// initialize vars
 	int_O_desaturation_time = 0;
-	int_O_nofly_time		= 0;
-	
-
-    for(ci=NUM_COMP; ci>0;)
-    {
-		overlay float			pres_tissue_max;
-		overlay float			P_ambient_altitude;
-		overlay signed char		search_direction;
-		overlay unsigned short	nofly_N2   =  0;
-		overlay unsigned short	nofly_He   =  0;
-		overlay unsigned short	nofly_last = ~0;
-
-		
+	int_O_nofly_time        = 0;
+
+
+	for(ci=NUM_COMP; ci>0;)
+	{
+		overlay float        pres_tissue_max;
+		overlay float        P_ambient_altitude;
+		overlay signed char  search_direction;
+		overlay unsigned int nofly_N2   =  0;
+		overlay unsigned int nofly_He   =  0;
+		overlay unsigned int nofly_last = ~0;
+
+
 		ci -= 1;
-		
-        read_Buhlmann_ht();
+
+		read_Buhlmann_ht();
 		read_Buhlmann_coefficients();
-		
+
 		// get selected target altitude
 		switch( char_I_altitude_wait )
 		{
@@ -2827,19 +2858,18 @@
 			case 3:  P_ambient_altitude = P_ambient_3000m;	break;
 			default: P_ambient_altitude = P_ambient_fly;	break;
 		}
-		
+
 		// Target pressure for the tissue is the Buhlmann limit. We use the Buhlmann
 		// coefficients for N2 also for He because it is easier to calculate and the
 		// N2 coefficients are more conservative than those for He, so we are on the
 		// safe side, too.
-        pres_tissue_max = (P_ambient_altitude/var_N2_b + var_N2_a);
-		
+		pres_tissue_max = (P_ambient_altitude/var_N2_b + var_N2_a);
+
 		// Adjust target pressure in case the GF model is in use by GF-high
 		if( char_I_deco_model != 0 )
-		{
-			pres_tissue_max = ((pres_tissue_max - P_ambient_altitude) * char_I_GF_High_percentage * 0.01) + P_ambient_altitude;			
-		}
-		
+			pres_tissue_max = P_ambient_altitude +
+			                  0.01 * char_I_GF_High_percentage * (pres_tissue_max - P_ambient_altitude);
+
 
 		//
 		// Desaturation time
@@ -2849,7 +2879,7 @@
 		pres_actual = pres_tissue_N2[ci] - N2_equilibrium;
 		
 		// N2: half-time of the current tissue
-		var_ht		= var_N2_ht;
+		var_ht      = var_N2_ht;
 
 		// Calculate desaturation time for N2 in tissue.
 		// Desaturated state is defined as residual tissue pressure <= 1.05 x ppN2 respired
@@ -2858,15 +2888,15 @@
 
 		calc_desaturation_time_helper();
 
-		if( short_time > int_O_desaturation_time) int_O_desaturation_time = short_time;
-
-
-		// He: actual amount of tissue pressure above equilibrium.
-		pres_actual = pres_tissue_He[ci];								// equilibrium for He is 0 bar
+		if( int_time > int_O_desaturation_time) int_O_desaturation_time = int_time;
+
+
+		// He: actual amount of tissue pressure above equilibrium: equilibrium for He is 0 bar
+		pres_actual = pres_tissue_He[ci];
 
 		// He: half-time of the current tissue
-		var_ht		= var_He_ht;
-		
+		var_ht      = var_He_ht;
+
 		// Calculate desaturation time for He in the tissue.
 		// Desaturated state is defined as residual tissue pressure <= 0.05 x ppN2 respired
 
@@ -2874,7 +2904,7 @@
 
 		calc_desaturation_time_helper();
 
-		if( short_time > int_O_desaturation_time) int_O_desaturation_time = short_time;			
+		if( int_time > int_O_desaturation_time) int_O_desaturation_time = int_time;
 
 
 		//
@@ -2883,15 +2913,15 @@
 
 		// initialize search direction
 		search_direction = 0;
-		
+
 		for(;;)
 		{
 			// N2: actual amount of tissue pressure above equilibrium.
 			pres_actual = pres_tissue_N2[ci] - N2_equilibrium;
-		
+
 			// N2: half-time of the current tissue
-			var_ht		= var_N2_ht;
-		
+			var_ht      = var_N2_ht;
+
 			// Calculate no-fly time for N2 in the tissue.
 			// Flying is permitted when the N2 pressure fits into the assigned fraction above equilibrium.
 
@@ -2905,22 +2935,22 @@
 			else 
 			{
 				calc_desaturation_time_helper();
-				nofly_N2 = short_time;
+				nofly_N2 = int_time;
 			}
-		
+
 			// He: actual amount of tissue pressure above equilibrium - equilibrium for He is 0 bar.
 			pres_actual = pres_tissue_He[ci];
 
 			// He: half-time of the current tissue
-			var_ht		= var_He_ht;
-		
+			var_ht      = var_He_ht;
+
 			// Calculate no-fly time for He in the tissue.
 			// Flying is permitted when the He pressure fits into the assigned fraction.
 
-			pres_target = ((100 - split_N2_He[ci]) * 0.01) * (pres_tissue_max - N2_equilibrium);
+			pres_target = (0.01 * (100 - split_N2_He[ci])) * (pres_tissue_max - N2_equilibrium);
 
 			calc_desaturation_time_helper();
-			nofly_He = short_time;
+			nofly_He = int_time;
 
 
 			// Because the sum of N2 and He tissue pressures needs to fit into the Buhlmann limit for
@@ -2931,12 +2961,12 @@
 			// in the deco calculation code (although we tackle the same base problem here), so we just let
 			// the computer try out which split will balance the no-fly times induced by the N2 and the He
 			// at best.
-			
+
 			// first of all, skip any optimization in case the current compartment is not the leading one
 			if( (nofly_N2 <= int_O_nofly_time) && (nofly_He <= int_O_nofly_time) ) break;
 
 			// check if the N2 requires more waiting time than the He
-			if( nofly_N2 >= nofly_He )							
+			if( nofly_N2 >= nofly_He )
 			{
 				// check if the search direction has changed, which means we are beyond the
 				// optimum now, or if we are at the upper stop limit of split_N2_He
@@ -2949,8 +2979,8 @@
 				}
 
 				// store the no-fly time found in this iteration
-				nofly_last = nofly_N2;				
-				
+				nofly_last = nofly_N2;
+
 				// increase the N2 fraction of the split and set search direction towards more N2
 				split_N2_He[ci]  +=  1;
 				search_direction  = +1;
@@ -2960,7 +2990,7 @@
 				// check if the search direction has changed, which means we are beyond the
 				// optimum now, or if we are at the lower stop limit of split_N2_He
 				if( (search_direction > 0) || (split_N2_He[ci] == 1) )
-				{	
+				{
 					// Either the just completed iteration was more close to the optimum or the one before
 					// was, so we take the best (i.e. shortest) time of both as the final no-fly time.
 					int_O_nofly_time = (nofly_He < nofly_last) ? nofly_He : nofly_last;
@@ -2968,388 +2998,292 @@
 				}
 
 				// store the no-fly time found in this iteration
-				nofly_last = nofly_He;				
-				
+				nofly_last = nofly_He;
+
 				// decrease the N2 fraction of the split and set search direction towards less N2
 				split_N2_He[ci]  -=  1;
 				search_direction  = -1;	
 			}
-			
+
 		} // for(;;)
 
 	} // for(compartments)
 
-		
+
 	// Rescale int_O_desaturation_time and int_O_nofly_time to full minutes for display purpose
 	int_O_desaturation_time *= 10;
 	int_O_nofly_time		*= 10;
-		
+
 	// Limit int_O_desaturation_time and int_O_nofly_time to 5999 = 99 hours + 59 minutes
 	// because of display space constraints and rounding done above.
 	if( int_O_desaturation_time > 5999 ) int_O_desaturation_time = 5999;
 	if( int_O_nofly_time        > 5999 ) int_O_nofly_time        = 5999;
 
 
-	// Clear the microbubbles warning when the current gradient factor is < GF_warning_threshold.
+	// Clear the microbubbles warning when the current gradient factor is < GF_WARNING_THRESHOLD.
 	// As the locked warning will stay set, this will cause the warning be be displayed in attention
 	// color instead of warning color.
-	if( int_O_gradient_factor < GF_warning_threshold ) char_O_deco_warnings &= ~DECO_WARNING_MBUBBLES;
-	
+	if( int_O_gradient_factor < GF_WARNING_THRESHOLD )
+		char_O_deco_warnings &= ~DECO_WARNING_MBUBBLES;
+
 	// clear some warnings when the desaturation time has become zero
-	if( int_O_desaturation_time == 0 ) char_O_deco_warnings &= ~(   DECO_WARNING_IBCD     + DECO_WARNING_IBCD_lock
-																  + DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock
-																  + DECO_WARNING_OUTSIDE  + DECO_WARNING_OUTSIDE_lock  );
+	if( int_O_desaturation_time == 0 )
+		char_O_deco_warnings &= ~(   DECO_WARNING_IBCD     + DECO_WARNING_IBCD_lock
+		                           + DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock
+		                           + DECO_WARNING_OUTSIDE  + DECO_WARNING_OUTSIDE_lock  );
 
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// calc_wo_deco_step_1_min
+// Calculate desaturation of the real tissues for a given time interval
 //
-// optimized in v.101 (...saturation_multiplier)
-// desaturation slowed down to 70,42%
+// Caution: Works on the real tissues!
+//          If in doubt, use this function only inside a context surrounded with
+//          push_tissues_to_vault() / pull_tissues_from_vault() !
+//
+// Input:    int_I_pres_surface : surface pressure in mbar
+//           time_interval      : time interval in minutes, must be limited to 254 at max
 //
-// Input: int_I_pres_surface [mbar]
+// Modified: tissue pressures
+//           CNS value
+//           ceiling and current GF
 //
-static void calc_wo_deco_step_1_min(void)
+static void calc_interval(PARAMETER unsigned char time_interval)
 {
-    assert( 800 <  int_I_pres_surface             && int_I_pres_surface             <  1100 );
-    assert( 100 <= char_I_saturation_multiplier   && char_I_saturation_multiplier   <  200  );
-    assert( 0   <  char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100  );
+	overlay unsigned char time;
+
+
+	assert( 800 <  int_I_pres_surface             && int_I_pres_surface             <  1100 );
+	assert( 100 <= char_I_saturation_multiplier   && char_I_saturation_multiplier   <  200  );
+	assert( 0   <  char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100  );
+
 
 	// setup input data for deco routines
-    pres_respiration = pres_surface = int_I_pres_surface * 0.001;
-	
-	N2_ratio       = 0.7902; 									// according to Buhlmann
+	pres_respiration = pres_surface = 0.001 * int_I_pres_surface ;
+
+	N2_ratio       = 0.7902;									// according to Buhlmann
 	N2_equilibrium = N2_ratio * (pres_surface     - ppWater);	// used for N2 tissue graphics scaling
-    ppN2           = N2_ratio * (pres_respiration - ppWater);
-    ppHe           = 0.0;
-
-    float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01 * SURFACE_DESAT_FACTOR;
-    float_saturation_multiplier   = char_I_saturation_multiplier   * 0.01;
-
-
-	// program what to do: 128 = Flag for "real" tissues, 1 = 1 minute
-	tissue_increment = 128 + 1;
-
-	// update the pressure in the tissues N2/He in accordance with the new ambient pressure
-	calc_tissue();
-
-	// clock down CNS by a 1 minute step
-	//CNS_fraction *= 0.992327946;				// is done in deco_calc_CNS_decrease_15min
-
-	// compute integer copy of CNS value
-	//compute_CNS_for_display();				// is done in deco_calc_CNS_decrease_15min
-
-	// reset deco engine start condition (probably not needed to be done here...)
-	char_O_deco_status &= ~DECO_STATUS_MASK;	// clear bits
-	char_O_deco_status |= DECO_STATUS_INIT;		// set bits
-
-	// reset some more data that are not applicable in surface mode
-    char_O_nullzeit            = 0;
-    int_O_ascenttime           = 0;
-	int_O_alternate_ascenttime = 0;
-	clear_deco_table();
-	
-	// calculate gradient factor
-    calc_gradient_factor();
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// calc_dive_interval
-//
-// Prepare tissue for delay before the next dive simulation.
-//
-// Inputs:   char_I_dive_interval == delay before dive (in 1 Minute steps).
-// Modified: CNS_fraction, int_O_CNS_fraction
-// 			 pres_tissue_N2/He[]
-//
-// Should be protected by deco_push_tissues_to_vault(),
-//                        deco_pull_tissues_from_vault()
-//
-// desaturation slowed down to 70,42%.
-//
-static void calc_dive_interval(void)
-{
-    overlay unsigned char t;
-    
-    //---- Initialize simulation parameters ----------------------------------
-    pres_respiration = pres_surface = int_I_pres_surface * 0.001;
-	
-	N2_ratio       = 0.7902; 									// according to buehlmann
-	N2_equilibrium = N2_ratio * (pres_surface     - ppWater);	// used for N2 tissue graphics scaling
-    ppN2           = N2_ratio * (pres_respiration - ppWater);
-    ppHe           = 0.0;
-	
-    float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01 * SURFACE_DESAT_FACTOR;
-    float_saturation_multiplier   = char_I_saturation_multiplier   * 0.01;
-	
-    //---- Perform simulation ------------------------------------------------
-
-	// Calculate tissues:
-	// Because tissue_increment is limited to 127 minutes, we have to do two passes
-	// in case char_I_dive_interval is bigger than 127.
-	// Ops: char_I_dive_interval must be limited to 254!
-
-	t = char_I_dive_interval;
-
-	if ( t == 255 ) t = 254;
-
-	if ( t > 127 )							// extra pass needed?
+	ppN2           = N2_ratio * (pres_respiration - ppWater);
+	ppHe           = 0.0;
+
+	float_desaturation_multiplier = 0.01 * char_I_desaturation_multiplier * SURFACE_DESAT_FACTOR;
+	float_saturation_multiplier   = 0.01 * char_I_saturation_multiplier;
+
+
+	// Calculate the tissues:
+	// Because calc_tissues() can calculate for 127 minutes at max,
+	// the tissue updating may need to be done in two chunks.
+
+	time = time_interval;
+
+	// first chunk for the part exceeding 127 minutes
+	if( time > 127)
 	{
-		tissue_increment = 127				// dive interval length in minutes
-						 | 128;				// Flag to update the "real" tissues			
-		
-		calc_tissue();						// update tissues
-		
-		t -= 127;							// calculate remaining dive interval length
+		// do a full 127 minutes on the real tissues
+		tissue_increment = 127 | TISSUE_FLAG;
+		calc_tissues();
+
+		// determine the remaining part
+		time -= 127;
 	}
 
-	tissue_increment = t 					// dive interval length in minutes to do
-					 | 128;					// Flag to update the "real" tissues
-	calc_tissue();							// update tissues
-	
+	// program the remaining part (or full part if not exceeding 127 minutes)
+	tissue_increment = time | TISSUE_FLAG;
+
+	// update the N2 and He pressures in the tissues for the remaining part of the time interval
+	calc_tissues();
+
 
 	// Calculate CNS:
 	// To speed up things and because on most invocations of this code char_I_dive_interval
 	// is a multiple of 10 minutes, we loop the loop-counter down using two speeds.
 
-	t = char_I_dive_interval;
-
-	while ( t )
+	time = time_interval;
+
+	while ( time )
 	{
-		if( t > 9 )
+		if( time > 9 )
 		{
 			CNS_fraction *= 0.925874712;	// Half-time = 90min -> 10 min: (1/2)^(1/9)
-			t            -= 10;				// fast speed looping
+			time         -= 10;				// fast speed looping
 		}
 		else
 		{
 			CNS_fraction *= 0.992327946;	// Half-time = 90min ->  1 min: (1/2)^(1/90)
-			t            -= 1;				// slow speed looping
+			time         -= 1;				// slow speed looping
 		}
-	}	
+	}
 
 	// compute integer copy of CNS value
-	compute_CNS_for_display();
+	convert_CNS_for_display();
+
+
+	// calculate ceiling (for a GF high of 100%) and gradient factor
+	calc_limit(1.0);
 }
 
-//////////////////////////////////////////////////////////////////////////////
-// clear_CNS_fraction
-//
-// new in v.101
-//
-void clear_CNS_fraction(void)
-{
-	CNS_fraction       = CNS_sim_norm_fraction     = CNS_sim_alt_fraction         = 0;
-	int_O_CNS_fraction = int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = 0;
-}
 
 //////////////////////////////////////////////////////////////////////////////
-// calc_CNS_fraction
+// calc_CNS_increment
 //
-// Input:  char_actual_ppO2     : current ppO2 [decibars]
-//         tissue_increment  	: time increment and tissue selector
-//         CNS_fraction         : current CNS% as float before period
+// Input:  char_ppO2        : current ppO2 [decibars]
+//         tissue_increment : time increment and tissue selector
+//
+// Output: CNS_fraction_inc : increment of the CNS value
 //
-// Output: CNS_fraction,          int_O_CNS_fraction 			- for the real tissues
-//         CNS_sim_norm_fraction, int_O_normal_CNS_fraction		- in simulation mode, normal plan
-//         CNS_sim_alt_fraction,  int_O_alternate_CNS_fraction  - in simulation mode, alternative plan
-//
-void calc_CNS_fraction(void)
+void calc_CNS_increment(void)
 {
-    overlay float time_factor       = 1.0;		// default is 2sec
-	overlay float CNS_fraction_temp = 0.0;
-	
-    assert( char_actual_ppO2 > 15 );
-	
+	overlay float time_factor = 1.0;	// default is 2sec
+
+	assert( char_ppO2 > 15 );
+
 	// All deco code is now invoked every second. But as the CNS update is based on
 	// 2 seconds periods, we skip every 2nd seconds-based invocation of this function.
-	// 128 = 128 (flag for "real" CNS) + 0 (2 seconds period)
+	// TISSUE_FLAG = 128 (flag for "real" CNS) + 0 (2 seconds period)
 	// To distribute computational load, the CNS% is calculated in "the other second"
 	// than the tissues.
-	if( (tissue_increment == 128) && (twosectimer) ) return;
-	
+	if( (tissue_increment == TISSUE_FLAG) && (twosectimer) ) return;
+
 	// adjust time factor if minute-based stepping is commanded, mask out flag bit
-	if( tissue_increment & 127 ) time_factor = 30.0 * (float)(tissue_increment & 127);
-
-		
-    //------------------------------------------------------------------------
-    // Don't increase CNS below 0.5 bar, but keep it steady.
-    if (char_actual_ppO2 < 50)
-        ;   // no changes
-    //------------------------------------------------------------------------
-    // Below (and including) 1.60 bar
-    else if (char_actual_ppO2 < 61)
-        CNS_fraction_temp = time_factor/(-533.07 * char_actual_ppO2 + 54000.0);
-    else if (char_actual_ppO2 < 71)
-        CNS_fraction_temp = time_factor/(-444.22 * char_actual_ppO2 + 48600.0);
-    else if (char_actual_ppO2 < 81)
-        CNS_fraction_temp = time_factor/(-355.38 * char_actual_ppO2 + 42300.0);
-    else if (char_actual_ppO2 < 91)
-        CNS_fraction_temp = time_factor/(-266.53 * char_actual_ppO2 + 35100.0);
-    else if (char_actual_ppO2 < 111)
-        CNS_fraction_temp = time_factor/(-177.69 * char_actual_ppO2 + 27000.0);
-    else if (char_actual_ppO2 < 152)
-        CNS_fraction_temp = time_factor/( -88.84 * char_actual_ppO2 + 17100.0);
-    else if (char_actual_ppO2 < 167)
-        CNS_fraction_temp = time_factor/(-222.11 * char_actual_ppO2 + 37350.0);
-    //------------------------------------------------------------------------
-    // Arieli et all.(2002): Modeling pulmonary and CNS O2 toxicity:
-    // J Appl Physiol 92: 248--256, 2002, doi:10.1152/japplphysiol.00434.2001
-    // Formula (A1) based on value for 1.55 and c=20
-    // example calculation: Sqrt((1.7/1.55)^20)*0.000404
-    else if (char_actual_ppO2 < 172)
-        CNS_fraction_temp = time_factor*0.00102;
-    else if (char_actual_ppO2 < 177)
-        CNS_fraction_temp = time_factor*0.00136;
-    else if (char_actual_ppO2 < 182)
-        CNS_fraction_temp = time_factor*0.00180;
-    else if (char_actual_ppO2 < 187)
-        CNS_fraction_temp = time_factor*0.00237;
-    else if (char_actual_ppO2 < 192)
-        CNS_fraction_temp = time_factor*0.00310;
-    else if (char_actual_ppO2 < 198)
-        CNS_fraction_temp = time_factor*0.00401;
-    else if (char_actual_ppO2 < 203)
-        CNS_fraction_temp = time_factor*0.00517;
-    else if (char_actual_ppO2 < 233)
-        CNS_fraction_temp = time_factor*0.0209;
-    else
-        CNS_fraction_temp = time_factor*0.0482; // value for 2.5 bar, used for 2.33 bar and above
-
-
-	// Check from where we were called:
-	// flag (bit 7) is  set -> we were called from calc_hauptroutine()
-	// flag (bit 7) not set -> we were called from the deco planning routines
-	if       ( tissue_increment   & 128                 ) CNS_fraction          += CNS_fraction_temp;	// real tissues
-	else if  ( char_O_deco_status & DECO_PLAN_ALTERNATE ) CNS_sim_alt_fraction  += CNS_fraction_temp;	// alternative plan
-	     else                                             CNS_sim_norm_fraction += CNS_fraction_temp;	// normal plan
-
+	if( tissue_increment & TIME_MASK ) time_factor = 30.0 * (float)(tissue_increment & TIME_MASK);
+
+
+	//------------------------------------------------------------------------
+	// Don't increase CNS below 0.5 bar, but keep it steady.
+	if      (char_ppO2 <  50) CNS_fraction_inc = 0;				// no CNS increase below 0.5 bar ppO2
+	//------------------------------------------------------------------------
+	// Below (and including) 1.60 bar
+	else if (char_ppO2 <  61) CNS_fraction_inc = time_factor/(-533.07 * char_ppO2 + 54000.0);
+	else if (char_ppO2 <  71) CNS_fraction_inc = time_factor/(-444.22 * char_ppO2 + 48600.0);
+	else if (char_ppO2 <  81) CNS_fraction_inc = time_factor/(-355.38 * char_ppO2 + 42300.0);
+	else if (char_ppO2 <  91) CNS_fraction_inc = time_factor/(-266.53 * char_ppO2 + 35100.0);
+	else if (char_ppO2 < 111) CNS_fraction_inc = time_factor/(-177.69 * char_ppO2 + 27000.0);
+	else if (char_ppO2 < 152) CNS_fraction_inc = time_factor/( -88.84 * char_ppO2 + 17100.0);
+	else if (char_ppO2 < 167) CNS_fraction_inc = time_factor/(-222.11 * char_ppO2 + 37350.0);
+	//------------------------------------------------------------------------
+	// Arieli et all.(2002): Modeling pulmonary and CNS O2 toxicity:
+	// J Appl Physiol 92: 248--256, 2002, doi:10.1152/japplphysiol.00434.2001
+	// Formula (A1) based on value for 1.55 and c=20
+	// example calculation: Sqrt((1.7/1.55)^20)*0.000404
+	else if (char_ppO2 < 172) CNS_fraction_inc = time_factor*0.00102;
+	else if (char_ppO2 < 177) CNS_fraction_inc = time_factor*0.00136;
+	else if (char_ppO2 < 182) CNS_fraction_inc = time_factor*0.00180;
+	else if (char_ppO2 < 187) CNS_fraction_inc = time_factor*0.00237;
+	else if (char_ppO2 < 192) CNS_fraction_inc = time_factor*0.00310;
+	else if (char_ppO2 < 198) CNS_fraction_inc = time_factor*0.00401;
+	else if (char_ppO2 < 203) CNS_fraction_inc = time_factor*0.00517;
+	else if (char_ppO2 < 233) CNS_fraction_inc = time_factor*0.0209;
+	else                      CNS_fraction_inc = time_factor*0.0482; // value for 2.5 bar, used for 2.33 bar and above
 }
 
 //////////////////////////////////////////////////////////////////////////////
 // calc_CNS_planning
 //
-// Compute CNS during predicted ascent.
+// Compute CNS increase during predicted ascent
 //
-// Note:    Needs a call to deco_push_tissues_to_vault(),
-//          deco_pull_tissues_from_vault() to avoid trashing everything...
-//
-// Input:   CNS_fraction, internal_deco_time[], internal_deco_depth[], internal_deco_gas[]
-// Output:  CNS_fraction, int_O_normal_CNS_fraction / int_O_alternate_CNS_fraction
+// Input:   internal_deco_time[], internal_deco_depth[], internal_deco_gas[]
+// Output:  sim_CNS_fraction
 //
 void calc_CNS_planning(void)
 {
-	// start with CNS% we already have
-	if( char_O_deco_status & DECO_PLAN_ALTERNATE ) CNS_sim_alt_fraction  = CNS_fraction;
-	else                                           CNS_sim_norm_fraction = CNS_fraction;
-
-	
-    //---- CCR mode : do the full TTS at once ---------------------------------
+	// null sim_CNS_fraction
+	sim_CNS_fraction = 0.0;
+
+	//---- CCR mode : do the full TTS at once ---------------------------------
 
 	if( ((char_O_deco_status & DECO_MODE_MASK) == DECO_MODE_CCR) )
-    {
-		overlay unsigned short t;       				// needs 16 bits here !
+	{
+		overlay unsigned short t;						// needs 16 bits here !
 
 		// get current ppO2 from sensors or setpoint
-        char_actual_ppO2 = char_I_const_ppO2;
+		char_ppO2 = char_I_const_ppO2;
 
 		// calculate CNS% for the period of additional staying at bottom depth (fTTS / delayed ascent)
 		if( char_O_deco_status & DECO_ASCENT_DELAYED)
 		{
-			tissue_increment  = char_I_extra_time;		// must be limited to 127, is limited by range of char_I_extra_time
-			calc_CNS_fraction();
+			tissue_increment = char_I_extra_time;		// must be limited to 127, is limited by range of char_I_extra_time
+			calc_CNS_increment();						// calculate the CNS increment
+			sim_CNS_fraction += CNS_fraction_inc;		// sum up
 		}
-		
+
 		// get the ascent time dependent on the current plan
 		t = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? int_O_alternate_ascenttime : int_O_ascenttime;
-		
+
 		// start simulating CNS% in chunks of 127 minutes
 		tissue_increment = 127;
 
 		while( t > 127 )
 		{
 			t -= 127;									// tissue_increment is limited to 127 minutes because of flag in bit 7
-			calc_CNS_fraction();						// calculate CNS in chunks of full 127 minutes
+			calc_CNS_increment();						// calculate CNS in chunks of full 127 minutes
+			sim_CNS_fraction += CNS_fraction_inc;		// sum up
 		}
 
 		tissue_increment = (char)t;						// get the remaining minutes <= 127
-		calc_CNS_fraction();							// calculate CNS for the remaining minutes
-    }
+		calc_CNS_increment();							// calculate CNS for the remaining minutes
+		sim_CNS_fraction += CNS_fraction_inc;			// sum up
+	}
 	else //---- OC mode and pSCR without sensors: have to follow all gas switches... -----
-    {
+	{
 		overlay float float_actual_ppO2;
 		overlay float abs_pres;
 
 		overlay unsigned char stop_depth;
 		overlay unsigned char last_gas;
-		overlay unsigned char i;    					// stop table index
-
-		
+		overlay unsigned char i;						// stop table index
+
+
 		// retrieve bottom gas: 1-5 for the configured gases or 0 for the manually set gas
 		last_gas = sim_gas_last_used = sim_gas_first_used;
 
 		// get the calc_N2/He/O2_ratios of the bottom gas
-		gas_switch_set();             
+		gas_set_ratios();
 
 		// calculate absolute pressure
 		abs_pres = pres_surface + bottom_depth * METER_TO_BAR;
-		
-		// switch on deco mode pSCR / OC
-		if( char_O_deco_status & DECO_MODE_PSCR )
-		{
-			//---- pSCR calculated --------------------------------------------
-
-			// abs_pres              is 0.0 ...     in bar
-			// calc_O2_ratio		 is 0.0 ...   1.0 as factor
-			// char_I_PSCR_drop      is 0   ...  15 as %
-			// char_I_PSCR_lungratio is 5   ...  20 as %
-			// float_actual_ppO2     is 0.0 ...     in cbar (!)
-
-			float_actual_ppO2 =   (100 * abs_pres * calc_O2_ratio)
-			                    - (1.0 - calc_O2_ratio) * char_I_PSCR_drop * char_I_PSCR_lungratio;
-		}
-		else
-		{
-			//---- OC ---------------------------------------------------------
-			
-			float_actual_ppO2 = abs_pres * calc_O2_ratio * 100; // in cbar (!)
-		}
-	
-		// caution: float_actual_ppO2 is in cbar here!
-		if      ( float_actual_ppO2 < 0.0   ) char_actual_ppO2 =   0;
-        else if ( float_actual_ppO2 > 254.5 ) char_actual_ppO2 = 255;
-        else                                  char_actual_ppO2 = (unsigned char)(float_actual_ppO2 + 0.5);
-		
+
+		// calculate OC ppO2 (ppWater omitted here on purpose)
+		float_actual_ppO2 = abs_pres * sim_O2_ratio;
+
+		// correct ppO2 in case of pSCR mode by drop
+		if( char_O_deco_status & DECO_MODE_PSCR ) float_actual_ppO2 -= sim_pSCR_drop;
+
+		// convert ppO2 from float to char
+		if      ( float_actual_ppO2 < 0.0   ) char_ppO2 =   0;
+		else if ( float_actual_ppO2 > 2.545 ) char_ppO2 = 255;
+		else                                  char_ppO2 = (unsigned char)(100 * float_actual_ppO2 + 0.5);
+
 
 		// simulate extended bottom time (fTTS) / delay before ascent (bailout) if configured
 		if( char_O_deco_status & DECO_ASCENT_DELAYED )
 		{
-			tissue_increment  = char_I_extra_time;		// must be limited to 127, is limited by range of char_I_extra_time
-			calc_CNS_fraction();			
+			tissue_increment  = char_I_extra_time;	// must be limited to 127, is limited by range of char_I_extra_time
+			calc_CNS_increment();					// calculate the CNS increment
+			sim_CNS_fraction += CNS_fraction_inc;	// sum up
 		}
 
-		
+
 		// For simplicity reason (non-linearity of the relation between ppO2 and CNS increments), the
 		// whole ascent is calculated with bottom ppO2. This errs, but it does so to the safe side.
-		
+
 		// calculate ascent time (integer division and generous round-up)
 		tissue_increment = bottom_depth / char_I_ascent_speed + 1;
-		
-		// ** commented out - not needed when char_I_ascent_speed is limited to a
-		// **                 minimum of 2.something, it is indeed limited to 5.
+
+		// ** commented out - not needed when char_I_ascent_speed is limited to a minimum
+		// **                 of 2.something, it is indeed limited to a minimum of 5.
 		//
 		// // limit tissue_increment to 127 minutes
-		// if( tissue_increment > 127 ) tissue_increment = 127;			
+		// if( tissue_increment > 127 ) tissue_increment = 127;
 
 		// simulate the CNS increase
-		calc_CNS_fraction();
-
-
-        //---- Stops ---------------------------------------------------------
+		calc_CNS_increment();						// calculate the CNS increment
+		sim_CNS_fraction += CNS_fraction_inc;		// sum up
+
+
+		//---- Stops ---------------------------------------------------------
 		
-        for(i=0; i<NUM_STOPS; ++i)
-        {
+		for(i=0; i<NUM_STOPS; ++i)
+		{
 			// get the depth of the stop
 			stop_depth = internal_deco_depth[i];
 
@@ -3358,61 +3292,51 @@
 
 			// get the duration of the stop and the gas breathed
 			tissue_increment  = internal_deco_time[i];
-            sim_gas_last_used = internal_deco_gas[i];
-			
-            // do we have a gas switch?
-            if( sim_gas_last_used != last_gas )
-            {
-				// yes - get new calc ratios
-				gas_switch_set();				
+			sim_gas_last_used = internal_deco_gas[i];
+
+			// do we have a gas switch?
+			if( sim_gas_last_used != last_gas )
+			{
+				// yes - get new calculation ratios
+				gas_set_ratios();
 
 				// remember new gas as last gas
 				last_gas = sim_gas_last_used;
 			}
 
-            // calculate absolute pressure at stop depth
+			// calculate absolute pressure at stop depth
 			abs_pres = pres_surface + stop_depth * METER_TO_BAR;
-			
-			// pSCR mode
-			if( char_O_deco_status & DECO_MODE_PSCR )
-			{
-				// abs_pres              is 0.0 ...     in bar
-				// calc_O2_ratio		 is 0.0 ...   1.0 as factor
-				// char_I_PSCR_drop      is 0   ...  15 as %
-				// char_I_PSCR_lungratio is 5   ...  20 as %
-				// float_actual_ppO2     is 0.0 ...     in cbar (!)
-
-				float_actual_ppO2 =   (100 * abs_pres * calc_O2_ratio)
-				                    - (1.0 - calc_O2_ratio) * char_I_PSCR_drop * char_I_PSCR_lungratio;
-			}
-			else // OC mode
-			{
-				float_actual_ppO2 = abs_pres * calc_O2_ratio * 100;	// in cbar (!)
-			}
-
-			// caution: float_actual_ppO2 is in cbar here!
-			if      ( float_actual_ppO2 < 0.0   ) char_actual_ppO2 =   0;
-			else if ( float_actual_ppO2 > 254.5 ) char_actual_ppO2 = 255;
-			else                                  char_actual_ppO2 = (unsigned char)(float_actual_ppO2 + 0.5);
-
-			
+
+			// calculate OC ppO2 (ppWater omitted here on purpose)
+			float_actual_ppO2 = abs_pres * sim_O2_ratio;
+
+			// correct ppO2 in case of pSCR mode by drop
+			if( char_O_deco_status & DECO_MODE_PSCR ) float_actual_ppO2 -= sim_pSCR_drop;
+
+			// convert ppO2 from float to char
+			if      ( float_actual_ppO2 < 0.0   ) char_ppO2 =   0;
+			else if ( float_actual_ppO2 > 2.545 ) char_ppO2 = 255;
+			else                                  char_ppO2 = (unsigned char)(100 * float_actual_ppO2 + 0.5);
+
 			// ** Currently, stop times per stop entry are limited to 99 minutes in update_deco_table(),
 			// ** so the following code block is not needed at times.
 			//
-			// // tissue_increment is limited to 127 when fed to deco_calc_CNS_fraction(),
+			// // tissue_increment is limited to 127 when fed to calc_CNS_increment(),
 			// // so if the stop is longer than 127 minutes (but not longer than 254 minutes!)
 			// // we need to calculate the CNS in two chunks.
 			// if( tissue_increment > 127)
 			// {
-			//		tissue_increment -= 127;	// subtract full 127 minutes and do the "remaining" minutes first
-			//		calc_CNS_fraction();
-			//		tissue_increment  = 127;	// catch up with the previously subtracted full 127 minutes
+			//		tissue_increment -= 127;				// subtract full 127 minutes and do the "remaining" minutes first
+			//		calc_CNS_increment();					// calculate the CNS increment
+			//		sim_CNS_fraction += CNS_fraction_inc;	// sum up
+			//		tissue_increment  = 127;				// catch up with the previously subtracted full 127 minutes
 			// }
 
-            // calculate CNS% for the stop			
-			calc_CNS_fraction();
-        }
-    }
+			// calculate CNS% for the stop
+			calc_CNS_increment();					// calculate the CNS increment
+			sim_CNS_fraction += CNS_fraction_inc;	// sum up
+		}
+	}
 }
 
 
@@ -3421,25 +3345,25 @@
 //
 // calculates volumes and required tank fill pressures for each gas.
 //
-// Input:   bottom_depth			 depth of the bottom segment
-//			char_I_bottom_time		 duration of the bottom segment
-//			char_I_extra_time		 extra bottom time for fTTS / delayed ascent
-//			float_ascent_speed       ascent speed, in meters/minute
-//          sim_gas_first_used 		 the bottom gas (1-5 for configured gases, 0 for the manual gas)
-//          internal_deco_depth[]	 depth of the stops
-//			internal_deco_time[]	 duration of the stops
-//			internal_deco_gas[]      gas breathed at the stops
-//          char_I_bottom_usage 	 gas consumption during bottom part and initial ascent, in liters/minute
-//          char_I_deco_usage 		 gas consumption during stops and following ascents, in liters/minute
-//			char_I_tank_size[]       size of the tanks for gas 1-5, in liters
-//			char_I_tank_pres_fill[]  fill pressure of the tanks
+// Input:	bottom_depth			depth of the bottom segment
+//			char_I_bottom_time		duration of the bottom segment
+//			char_I_extra_time		extra bottom time for fTTS / delayed ascent
+//			float_ascent_speed		ascent speed, in meters/minute
+//			sim_gas_first_used		the bottom gas (1-5 for configured gases, 0 for the manual gas)
+//			internal_deco_depth[]	depth of the stops
+//			internal_deco_time[]	duration of the stops
+//			internal_deco_gas[]		gas breathed at the stops
+//			char_I_bottom_usage		gas consumption during bottom part and initial ascent, in liters/minute
+//			char_I_deco_usage		gas consumption during stops and following ascents, in liters/minute
+//			char_I_tank_size[]		size of the tanks for gas 1-5, in liters
+//			char_I_tank_pres_fill[]	fill pressure of the tanks
 //
-// Output:  int_O_gas_volumes[]      amount of gas needed, in liters
-//			int_O_tank_pres_need[]   in bar, + flags for fast evaluation by dive mode warnings:
-//											   2^15: pres_need >= pres_fill
-//											   2^14: pres_need >= press_fill * GAS_NEEDS_ATTENTION_THRESHOLD
-//											   2^11: pres_need == 0
-//											   2^10: pres_need invalid
+// Output:	int_O_gas_volumes[]		amount of gas needed, in liters
+//			int_O_tank_pres_need[]	in bar, + flags for fast evaluation by dive mode warnings:
+//											  2^15: pres_need >= pres_fill
+//											  2^14: pres_need >= press_fill * GAS_NEEDS_ATTENTION_THRESHOLD
+//											  2^11: pres_need == 0
+//											  2^10: pres_need invalid
 //
 void gas_volumes_helper(void)
 {
@@ -3447,7 +3371,7 @@
 	// We use 1.0 for the surface pressure to have stable results when used through
 	// the deco calculator (simulation mode).
 	volume = (float_depth * METER_TO_BAR + 1.0) * float_time * usage;
-	
+
 	return;
 }
 
@@ -3462,35 +3386,35 @@
 	overlay unsigned char stop_depth_last;
 	overlay unsigned char i;
 
-	
-    //---- initialization ----------------------------------------------------
-	
+
+	//---- initialization ----------------------------------------------------
+
 	// null the volume accumulators
-    for(i=0; i<NUM_GAS; ++i) volumes[i] = 0.0;
+	for(i=0; i<NUM_GAS; ++i) volumes[i] = 0.0;
 
 	// quit for CCR and pSCR mode
 	if( char_O_deco_status & DECO_MODE_LOOP ) goto done;
 
 
-    //---- bottom demand -----------------------------------------------------
-	
+	//---- bottom demand -----------------------------------------------------
+
 	// sim_gas_first_used : gas used during bottom segment (0, 1-5)
 	// bottom_depth: depth of the bottom segment
-	
+
 	assert(0 <= sim_gas_first_used && sim_gas_first_used <= NUM_GAS);
 
 	// get the gas used during bottom segment
 	stop_gas_last = stop_gas = sim_gas_first_used;
-	
+
 	// set the usage (SAC rate) to bottom usage rate for bottom part and initial ascent
 	usage = char_I_bottom_usage;
-		
+
 	// volumes are only calculated for gases 1-5, but not the manually configured one
 	if( stop_gas )
 	{
 		// set the bottom depth
 		float_depth = (float)bottom_depth;
-		
+
 		// calculate either bottom segment or just the fTTS/bailout delayed part
 		if( char_O_main_status & DECO_BOTTOM_CALCULATE )
 		{
@@ -3502,41 +3426,39 @@
 			// duration of delayed ascent
 			float_time = (float)char_I_extra_time;
 		}
-		
+
 		// calculate gas demand
 		gas_volumes_helper();
-		
+
 		// take result
 		volumes[stop_gas-1] = volume;
 	}
-	
-	
+
 	// initialize stop index with first stop
 	i = 0;
 
-	
 	//---- initial ascent demand ---------------------------------------------
-	
+
 	// stop_gas                : gas from bottom segment
-	// bottom_depth            : depth of the bottom segment in meters
+	// bottom_depth            : depth of the bottom segment
 	// internal_deco_depth[i=0]: depth of the first stop, may be 0 if no stop exists
-	
+
 	// get the data of the first stop	
 	stop_depth = internal_deco_depth[i];
 	stop_time  = internal_deco_time[i];
-	
+
 	// volumes are only calculated for gases 1-5, but not the manually configured one
 	if( stop_gas )
 	{
 		// compute distance between bottom and first stop
 		float_depth = (float)bottom_depth - (float)stop_depth;
-		
+
 		// initial ascent exists only if ascent distance is > 0
 		if( float_depth > 0.0 )
 		{
 			// compute ascent time
 			float_time = float_depth / float_ascent_speed;
-		
+
 			// compute average depth between bottom and first stop
 			float_depth = (float)bottom_depth - float_depth * 0.5;
 
@@ -3551,10 +3473,10 @@
 	// switch the usage (SAC rate) to deco usage rate
 	// for stops, intermediate and final ascent
 	usage = char_I_deco_usage;
-	
+
 	// is there a (first) stop? if yes, goto stops processing
 	if( stop_depth ) goto stops;
-	
+
 	// add demand of a 3 minutes safety stop at 5 meters, at least for contingency...
 	float_time  = 3.0;
 	float_depth = 5.0;
@@ -3566,16 +3488,16 @@
 	volumes[stop_gas-1] += volume;
 
 	// proceed to volume conversion and pressure calculations
-	goto done;			
-
-	
+	goto done;
+
+
 	//---- intermediate ascent demand ---------------------------------------
 inter_ascents:
 
 	// store last stop depth and gas
 	stop_depth_last = stop_depth;
 	stop_gas_last   = stop_gas;
-	
+
 	// check if we are at the end of the stops table
 	if( i < NUM_STOPS-1 )
 	{
@@ -3612,7 +3534,7 @@
 
 		// compute ascent time
 		float_time = float_depth / float_ascent_speed;
-		
+
 		// compute average depth between the two stops
 		float_depth = (float)stop_depth_last - float_depth * 0.5;
 
@@ -3626,32 +3548,32 @@
 
 	//---- next stop demand -------------------------------------------------
 stops:
-	
+
 	// convert depth of the stop
 	float_depth = (float)stop_depth;
-	
+
 	// get the next gas
 	stop_gas = internal_deco_gas[i];
-	
+
 	// do we we have a gas change?
 	if( stop_gas_last && (stop_gas != stop_gas_last) )
 	{
 		// yes - spend an additional char_I_gas_change_time on the old gas
 		float_time = (float)char_I_gas_change_time;
-		
+
 		// calculate gas demand
 		gas_volumes_helper();
 
 		// add result
 		volumes[stop_gas_last-1] += volume;
 	}
-	
+
 	// calculate and add demand on new gas for the full stop duration
 	if( stop_gas )
 	{
 		// get the duration of the stop
 		float_time = (float)stop_time;
-				
+
 		// calculate gas demand
 		gas_volumes_helper();
 
@@ -3668,16 +3590,16 @@
 
 	// float_depth: depth of last stop
 	// stop_gas   : gas from last stop (0 or 1-5)
-	
+
 	// volumes are only calculated for gases 1-5, but not the manually configured one	
 	if( stop_gas )
 	{
 		// set ascent time according to an ascent speed of 1 meter per minute
 		float_time = float_depth;
-		
+
 		// set half-way depth
 		float_depth *= 0.5;
-		
+
 		// calculate gas demand
 		gas_volumes_helper();
 
@@ -3686,12 +3608,12 @@
 	}
 
 
-    //---- convert results for the assembler interface -----------------------------
+	//---- convert results for the assembler interface -----------------------------
 done:
 
-    for(i=0; i<NUM_GAS; ++i)
+	for(i=0; i<NUM_GAS; ++i)
 	{
-        if( volumes[i] >= 65534.5 )
+		if( volumes[i] >= 65534.5 )
 		{
 			int_O_gas_volumes[i]	= 65535;
 			int_O_tank_pres_need[i]	= 999 + INT_FLAG_WARNING; // 999 bar + warning flag for > pres_fill
@@ -3699,18 +3621,18 @@
 		else
 		{
 			overlay unsigned short tank_pres_fill = 10.0 * (unsigned short)char_I_tank_pres_fill[i];
-			
+
 			// No distinct rounding done here because volumes are not accurate to the single liter anyhow
-			
+
 			// convert gas volumes to integers
-            int_O_gas_volumes[i]     = (unsigned short)volumes[i];
-		
+			int_O_gas_volumes[i]     = (unsigned short)volumes[i];
+
 			// compute how much pressure in the tank will be needed [in bar]  (integer-division)
 			int_O_tank_pres_need[i]  = (unsigned short)(int_O_gas_volumes[i] / char_I_tank_size[i]);
-			
+
 			// limit to 999 bar because of display constraints
 			if( int_O_tank_pres_need[i] > 999 ) int_O_tank_pres_need[i] = 999;
-			
+
 			// set flags for fast evaluation by divemode check for warnings
 			if     ( int_O_tank_pres_need[i] == 0 )
 			{
@@ -3726,8 +3648,8 @@
 			else if( int_O_tank_pres_need[i] >= tank_pres_fill * GAS_NEEDS_ATTENTION_THRESHOLD )
 			{
 				// set pre-warning flag
-				int_O_tank_pres_need[i] |= INT_FLAG_PREWARNING;	
-			}			
+				int_O_tank_pres_need[i] |= INT_FLAG_ATTENTION;
+			}
 
 			// set invalid flag if there is an overflow in the stops table
 			if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
@@ -3739,7 +3661,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void compute_CNS_for_display(void)
+void convert_CNS_for_display(void)
 {
 	if		( CNS_fraction <  0.01  ) int_O_CNS_fraction = 0;
 	else if ( CNS_fraction >= 9.985 ) int_O_CNS_fraction = 999 + INT_FLAG_WARNING;
@@ -3747,69 +3669,72 @@
 	{
 		// convert float to integer
 		int_O_CNS_fraction = (unsigned short)(100 * CNS_fraction + 0.5);
-	
-		// compute warnings
-		if		( int_O_CNS_fraction >= CNS_warning_threshold    )
-		{
-			// reset pre-warning and set main warning flag
-			int_O_CNS_fraction &= ~INT_FLAG_PREWARNING;			
-			int_O_CNS_fraction |=  INT_FLAG_WARNING;
-		}
-		else if	( int_O_CNS_fraction >= CNS_prewarning_threshold )
-		{
-			// reset main warning but set pre-warning flag
-			int_O_CNS_fraction &= ~INT_FLAG_WARNING;
-			int_O_CNS_fraction |=  INT_FLAG_PREWARNING;
-		}
-		else
-		{
-			// clear both warnings
-			int_O_CNS_fraction &= ~(INT_FLAG_WARNING + INT_FLAG_PREWARNING);
-		}
+
+		// set warnings
+		if		( int_O_CNS_fraction >= CNS_WARNING_THRESHOLD   ) int_O_CNS_fraction |= INT_FLAG_WARNING;
+		else if	( int_O_CNS_fraction >= CNS_ATTENTION_THRESHOLD ) int_O_CNS_fraction |= INT_FLAG_ATTENTION;
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void convert_sim_CNS_for_display(void)
+{
+	if		( sim_CNS_fraction <  0.01  ) int_sim_CNS_fraction = 0;
+	else if ( sim_CNS_fraction >= 9.985 ) int_sim_CNS_fraction = 999 + INT_FLAG_WARNING;
+	else
+	{
+		// convert float to integer
+		int_sim_CNS_fraction = (unsigned short)(100 * sim_CNS_fraction + 0.5);
+
+		// set warning flag if CNS is >= 100%
+		if      ( int_sim_CNS_fraction >= CNS_WARNING_THRESHOLD    ) int_sim_CNS_fraction |= INT_FLAG_WARNING;
+		else if ( int_sim_CNS_fraction >= CNS_ATTENTION_THRESHOLD  ) int_sim_CNS_fraction |= INT_FLAG_ATTENTION;
+
+		// set invalid flag if there is an overflow in the stops table
+		if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW ) int_sim_CNS_fraction |= INT_FLAG_INVALID;
 	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
-
-void deco_push_tissues_to_vault(void)
+// push_tissues_to_vault & pull_tissues_from_vault
+//
+// ATTENTION: Do not use from inside the deco engine!
+//            The vault is exclusively reserved to back-up and restore the real
+//            tissues and related data when entering / leaving simulation mode!
+//
+
+void push_tissues_to_vault(void)
 {
-    overlay unsigned char x;
-
-    RESET_C_STACK
-
-	low_depth_norm_vault = low_depth_norm;
-	low_depth_alt_vault  = low_depth_alt;
-    cns_vault_float      = CNS_fraction;
-	cns_vault_int        = int_O_CNS_fraction;
+	overlay unsigned char x;
+
+	cns_vault_float      = CNS_fraction;
 	deco_warnings_vault  = char_O_deco_warnings;
 
-    for (x=0;x<NUM_COMP;x++)
-    {
-        pres_tissue_N2_vault[x] = pres_tissue_N2[x];
-        pres_tissue_He_vault[x] = pres_tissue_He[x];
-    }
+	for (x=0;x<NUM_COMP;x++)
+	{
+		pres_tissue_N2_vault[x] = pres_tissue_N2[x];
+		pres_tissue_He_vault[x] = pres_tissue_He[x];
+	}
 }
 
-void deco_pull_tissues_from_vault(void)
+void pull_tissues_from_vault(void)
 {
-    overlay unsigned char x;
-
-    RESET_C_STACK
-
-	low_depth_norm       = low_depth_norm_vault;
-	low_depth_alt        = low_depth_alt_vault;
-    CNS_fraction         = cns_vault_float;
-    int_O_CNS_fraction   = cns_vault_int;
+	overlay unsigned char x;
+
+	CNS_fraction         = cns_vault_float;
 	char_O_deco_warnings = deco_warnings_vault;
-	
+
+	convert_CNS_for_display();
+
 	locked_GF_step_norm  = GF_delta / low_depth_norm;
 	locked_GF_step_alt   = GF_delta / low_depth_alt;
 	
-    for (x=0; x<NUM_COMP; x++)
-    {
-        pres_tissue_N2[x] = pres_tissue_N2_vault[x];
-        pres_tissue_He[x] = pres_tissue_He_vault[x];
-    }
+	for (x=0; x<NUM_COMP; x++)
+	{
+		pres_tissue_N2[x] = pres_tissue_N2_vault[x];
+		pres_tissue_He[x] = pres_tissue_He_vault[x];
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
--- a/src/p2_definitions.h	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/p2_definitions.h	Mon Feb 26 16:40:28 2018 +0100
@@ -2,7 +2,7 @@
 // ** Common definitions for the OSTC decompression code  **
 // *********************************************************
 
-//									REFACTORED VERSION	V2.95
+//									REFACTORED VERSION	V2.97
 
 //////////////////////////////////////////////////////////////////////////////
 // OSTC - diving computer code
@@ -31,15 +31,13 @@
 
 extern void deco_calc_hauptroutine(void);
 extern void deco_clear_tissue(void);
-extern void deco_calc_wo_deco_step_1_min(void);
+extern void deco_calc_dive_interval_1min(void);
 extern void deco_calc_dive_interval(void);
 extern void deco_calc_desaturation_time(void);
 extern void calc_CNS_fraction(void);
 extern void calc_CNS_planning(void);
-extern void deco_calc_CNS_decrease_15min(void);
-extern void clear_CNS_fraction(void);
-extern void deco_push_tissues_to_vault(void);
-extern void deco_pull_tissues_from_vault(void);
+extern void push_tissues_to_vault(void);
+extern void pull_tissues_from_vault(void);
 extern void gas_volumes(void);
 
 
--- a/src/rtc.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/rtc.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File rtc.asm
+;   File rtc.asm													## V2.98
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -11,7 +11,9 @@
 #include "hwos.inc"
 #include "math.inc"
 
-sensors     CODE
+sensors		CODE
+
+;=============================================================================
 
 	global	rtc_init
 rtc_init:
@@ -21,71 +23,70 @@
 	movwf	mins
 	movlw	.12
 	movwf	hours
-	movlw	.2
+	movlw	.1
 	movwf	day
-	movlw	.12
+	movlw	.3
 	movwf	month
-	movlw	.17
+	movlw	.18
 	movwf	year
 ;	rcall	rtc_set_rtc			; writes mins,sec,hours,day,month and year to rtc module
 ;	return
-	
+
 	global	rtc_set_rtc
 rtc_set_rtc:
-	banksel 0xF16				; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
-	movlw 	0x55
-	movwf 	EECON2
-	movlw 	0xAA
-	movwf 	EECON2
-	bsf 	RTCCFG,RTCWREN		; Unlock sequence for RTCWREN
-	bsf		RTCCFG,RTCPTR1
-	bsf		RTCCFG,RTCPTR0		; year
+	banksel	0xF16				; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM
+	movlw	0x55
+	movwf	EECON2
+	movlw	0xAA
+	movwf	EECON2
+	bsf	RTCCFG,RTCWREN		; Unlock sequence for RTCWREN
+	bsf	RTCCFG,RTCPTR1
+	bsf	RTCCFG,RTCPTR0		; year
 	movff	year,WREG
-	rcall	rtc_dec2bcd			; IN: temp1 in WREG, OUT: WREG in BCD, also sets to bank16h!
+	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
 	movwf	RTCVALL				; year
 	movwf	RTCVALH				; dummy write
 	movff	day,WREG
-	rcall	rtc_dec2bcd			; IN: temp1 in WREG, OUT: WREG in BCD, also sets to bank16h!
-	movwf	RTCVALL				;day
+	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
+	movwf	RTCVALL				; day
 	movff	month,WREG
-	rcall	rtc_dec2bcd			; IN: temp1 in WREG, OUT: WREG in BCD, also sets to bank16h!
-	movwf	RTCVALH				;month
+	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
+	movwf	RTCVALH				; month
 	movff	hours,WREG
-	rcall	rtc_dec2bcd			; IN: temp1 in WREG, OUT: WREG in BCD, also sets to bank16h!
-	movwf	RTCVALL				;hours
+	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
+	movwf	RTCVALL				; hours
 	movlw	d'0'
-	rcall	rtc_dec2bcd			; IN: temp1 in WREG, OUT: WREG in BCD, also sets to bank16h!
-	movwf	RTCVALH				;weekday
+	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
+	movwf	RTCVALH				; weekday
 	movff	secs,WREG
-	rcall	rtc_dec2bcd			; IN: temp1 in WREG, OUT: WREG in BCD, also sets to bank16h!
-	movwf	RTCVALL				;secs
+	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
+	movwf	RTCVALL				; secs
 	movff	mins,WREG
-	rcall	rtc_dec2bcd			; IN: temp1 in WREG, OUT: WREG in BCD, also sets to bank16h!
-	movwf	RTCVALH				;minutes
-	movlw 	0x55
-	movwf 	EECON2
-	movlw 	0xAA
-	movwf 	EECON2
-	bcf 	RTCCFG,RTCWREN		; Lock sequence for RTCWREN
+	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
+	movwf	RTCVALH				; minutes
+	movlw	0x55
+	movwf	EECON2
+	movlw	0xAA
+	movwf	EECON2
+	bcf	RTCCFG,RTCWREN		; Lock sequence for RTCWREN
 	banksel	common
 	return
 
 rtc_dec2bcd:
-	banksel	temp1
-	movwf	temp1				; Input in dec
-	setf	temp2				; 10s
-	
+	banksel	lo
+	movwf	lo					; Input in decimal
+	setf	hi					; 10s
 rtc_dec2bcd2:
-	incf	temp2,F             ; Count 10's
+	incf	hi,F				; Count 10's
 	movlw	d'10'
-	subwf	temp1,F
+	subwf	lo,F
 	btfss	STATUS,N
 	bra		rtc_dec2bcd2
 	movlw	d'10'
-	addwf	temp1,F				; 1s
-    swapf   temp2,W             ; swap to bit 7-4 -> WREG
-	addwf	temp1,W				; Result in BCD
-	banksel 0xF16				; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
+	addwf	lo,F				; 1s
+	swapf	hi,W				; swap to bit 7-4 -> WREG
+	addwf	lo,W				; Result in BCD
+	banksel	0xF16				; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM
 	return
 
 	END
\ No newline at end of file
--- a/src/shared_definitions.h	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/shared_definitions.h	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 #ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 ;
-;    shared_definitions.h							REFACTORED VERSION	V2.95a1
+;    shared_definitions.h							REFACTORED VERSION	V2.97
 ;
 ;    Declare variables used both in C and ASM code
 ;
@@ -45,8 +45,8 @@
 #endif
 
 #ifdef __18CXX
-    //------------------------------------------------------------------------
-    // C-style declarations:
+	//------------------------------------------------------------------------
+	// C-style declarations:
 #   ifndef TEST_MAIN
 #       define VAR_UCHAR(n)      extern unsigned  char n
 #       define TAB_UCHAR(n,size) extern unsigned  char n[size]
@@ -59,8 +59,8 @@
 #       define TAB_UINT(n,size)  unsigned short n[size]
 #   endif
 #else
-    ;-------------------------------------------------------------------------
-    ; ASM-style declarations:
+	;-------------------------------------------------------------------------
+	; ASM-style declarations:
 #define VAR_UCHAR(n)       n    res     1
 #define TAB_UCHAR(n,size)  n    res     size
 #define VAR_UINT(n)        n    res     2
@@ -85,50 +85,47 @@
 
 
 #ifdef __18CXX
-    //---- BANK 3 DATA -------------------------------------------------------
-    // Gather all data C-code --> ASM-code
+	//---- BANK 3 DATA -------------------------------------------------------
+	// Gather all data C-code --> ASM-code
+	// Memory usage: 41 Bytes left
 #   pragma udata overlay bank3=0x300
 #else
-    ; In ASM, put the same bank, in overlay mode, at the same address
+	; In ASM, put the same bank, in overlay mode, at the same address
 bank3   udata_ovr  0x300
 #endif
 
-VAR_UINT  (int_O_gtissue_press);					// pressure of leading compartment
+VAR_UINT  (int_O_desaturation_time);				// time until tissues desaturated to 5% remains, in minutes
+VAR_UINT  (int_O_nofly_time);						// altitude / no-fly waiting time time in minutes
 
-VAR_UINT  (int_O_desaturation_time);       			// time until tissues desaturated to 5% remains, in minutes
-VAR_UINT  (int_O_nofly_time);			   			// altitude / no-fly waiting time time in minutes
-
-VAR_UINT  (int_O_ascenttime);              			// time-to-surface (TTS) in minutes
-VAR_UINT  (int_O_alternate_ascenttime);    			// TTS for the alternative dive plan
+VAR_UINT  (int_O_ascenttime);						// time-to-surface (TTS) in minutes
+VAR_UINT  (int_O_alternate_ascenttime);				// TTS for the alternative dive plan
 
-VAR_UINT  (int_O_CNS_fraction);            			// current CNS%
-VAR_UINT  (int_O_normal_CNS_fraction); 	   			// CNS% at end of dive in normal dive plan
-VAR_UINT  (int_O_alternate_CNS_fraction);  			// CNS% at end of dive in alternative plan
+VAR_UINT  (int_O_CNS_fraction);						// current CNS%
+VAR_UINT  (int_O_normal_CNS_fraction);				// CNS% at end of dive in normal dive plan
+VAR_UINT  (int_O_alternate_CNS_fraction);			// CNS% at end of dive in alternative plan
 
-VAR_UINT  (int_O_gradient_factor);        			// current gradient factor in %
+VAR_UINT  (int_O_gradient_factor);					// current gradient factor in %
 
-VAR_UCHAR (char_O_nullzeit);               			// remaining NDL time in minutes
-VAR_UCHAR (char_O_alternate_nullzeit);	   			// remaining NDL time for the alternative dive plan
+VAR_UCHAR (char_O_nullzeit);						// remaining NDL time in minutes
+VAR_UCHAR (char_O_alternate_nullzeit);				// remaining NDL time for the alternative dive plan
 
 VAR_UCHAR (char_O_main_status);						// setup of the deco engine regarding the real tissue   computations
-VAR_UCHAR (char_O_deco_status);            			// setup of the deco engine regarding the decompression computations
+VAR_UCHAR (char_O_deco_status);						// setup of the deco engine regarding the decompression computations
 
-VAR_UCHAR (char_O_gtissue_no);             			// number of the leading compartment
+VAR_UCHAR (char_O_EAD);								// equivalent air      depth (EAD) of breathed gas
+VAR_UCHAR (char_O_END);								// equivalent narcosis depth (END) of breathed gas
 
-VAR_UCHAR (char_O_EAD);                    			// equivalent air      depth (EAD) of breathed gas
-VAR_UCHAR (char_O_END);                    			// equivalent narcosis depth (END) of breathed gas
+VAR_UCHAR (char_O_first_deco_depth);				// depth of first stop (deco or gas change)
+VAR_UCHAR (char_O_first_deco_time) ;				// duration of first stop
 
-VAR_UCHAR (char_O_first_deco_depth);        		// depth of first stop (deco or gas change)
-VAR_UCHAR (char_O_first_deco_time) ;        		// duration of first stop
+TAB_UCHAR (char_O_deco_depth, NUM_STOPS);			// stops table: depth, ...
+TAB_UCHAR (char_O_deco_time,  NUM_STOPS);			// ... duration, and
+TAB_UCHAR (char_O_deco_gas,   NUM_STOPS);			// ... gas breathed
 
-TAB_UCHAR (char_O_deco_depth, NUM_STOPS);   		// stops table: depth, ...
-TAB_UCHAR (char_O_deco_time,  NUM_STOPS);   		// ... duration, and
-TAB_UCHAR (char_O_deco_gas,   NUM_STOPS);   		// ... gas breathed
+TAB_UCHAR (char_O_deco_time_for_log, NUM_STOPS);	// variant of the stops table for logging purpose
 
-TAB_UCHAR (char_O_deco_time_for_log, NUM_STOPS); 	// variant of the stops table for logging purpose
-
-TAB_UCHAR (char_O_tissue_N2_saturation, NUM_COMP); 	// nitrogen tissue pressures for display purpose
-TAB_UCHAR (char_O_tissue_He_saturation, NUM_COMP); 	// helium   tissue pressures for display purpose
+TAB_UCHAR (char_O_tissue_N2_saturation, NUM_COMP);	// nitrogen tissue pressures for display purpose
+TAB_UCHAR (char_O_tissue_He_saturation, NUM_COMP);	// helium   tissue pressures for display purpose
 
 VAR_UCHAR (char_O_deco_warnings);					// vector of warnings generated by the deco engine
 
@@ -136,86 +133,75 @@
 TAB_UINT  (int_O_tank_pres_need, NUM_GAS);			// tank pressures needed in bar
 VAR_UINT  (int_O_ceiling);							// ultimate ascent bound in mbar relative pressure
 
-VAR_UINT  (int_O_O2_ppO2);				   			// ppO2 of pure O2 at current depth
+VAR_UINT  (int_O_O2_ppO2);							// ppO2 of pure O2 at current depth
 VAR_UINT  (int_O_pure_ppO2);						// ppO2 of the current gas or dil if breathed pure
-VAR_UINT  (int_O_pSCR_ppO2);			   			// ppO2 calculated in pSCR loop
+VAR_UINT  (int_O_pSCR_ppO2);						// ppO2 calculated in pSCR loop
 VAR_UINT  (int_O_breathed_ppO2);					// ppO2 actually breathed (= char_O_pure_ppO2 if in OC)
 
 
 #ifdef __18CXX
-    //---- BANK 4 DATA -------------------------------------------------------
-    // Gather all data ASM-code --> C-code
+	//---- BANK 4 DATA -------------------------------------------------------
+	// Gather all data ASM-code --> C-code
+	// Memory usage: 183 bytes left
 #   pragma udata overlay bank4=0x400
 #else
-    ; In ASM, put the same bank, in overlay mode, at the same address
+	; In ASM, put the same bank, in overlay mode, at the same address
 bank4   udata_ovr  0x400
 #endif
 
-VAR_UINT  (int_I_pres_respiration);        // absolute pressure breathed
-VAR_UINT  (int_I_pres_surface);            // absolute pressure at surface
-
-VAR_UCHAR (char_I_current_gas);            // number of gas currently breathed (1..5 for configured gases, 6 for the manual gas)
-VAR_UCHAR (char_I_He_ratio);               // helium   ratio of the currently breathed gas
-VAR_UCHAR (char_I_O2_ratio);               // oxygen   ratio of the currently breathed gas
+VAR_UINT  (int_I_pres_respiration);				// absolute pressure breathed
+VAR_UINT  (int_I_pres_surface);					// absolute pressure at surface
 
-VAR_UCHAR (char_I_saturation_multiplier);  // safety factor, 100 = no conservatism, 150 = 50% faster saturation
-VAR_UCHAR (char_I_desaturation_multiplier);// safety factor, 100 = no conservatism,  66 = 50% slower desaturation 
+VAR_UCHAR (char_I_current_gas);					// number of gas currently breathed (1..5 for configured gases, 6 for the manual gas)
+VAR_UCHAR (char_I_He_ratio);					// helium   ratio of the currently breathed gas
+VAR_UCHAR (char_I_O2_ratio);					// oxygen   ratio of the currently breathed gas
 
-VAR_UCHAR (char_I_GF_High_percentage);     // GF model high value
-VAR_UCHAR (char_I_GF_Low_percentage);      // GF model low value
+VAR_UCHAR (char_I_saturation_multiplier);		// safety factor, 100 = no conservatism, 150 = 50% faster saturation
+VAR_UCHAR (char_I_desaturation_multiplier);		// safety factor, 100 = no conservatism,  66 = 50% slower desaturation 
 
-VAR_UCHAR (char_I_deco_distance);          // assumed extra depth below required depth for CNS and gas volumes calculations
-VAR_UCHAR (char_I_depth_last_deco);        // depth of the last deco stop in meters
+VAR_UCHAR (char_I_GF_High_percentage);			// GF model high value
+VAR_UCHAR (char_I_GF_Low_percentage);			// GF model low value
 
-VAR_UCHAR (char_I_deco_model);             // deco model selection: 0 = ZH-L16, 1 = ZH-L16-GF (with gradient factors)
+VAR_UCHAR (char_I_deco_distance);				// assumed extra depth below required depth for CNS and gas volumes calculations
+VAR_UCHAR (char_I_depth_last_deco);				// depth of the last deco stop in meters
 
-VAR_UCHAR (char_I_bottom_depth);           // bottom depth, used for gas volume calculations
-VAR_UCHAR (char_I_bottom_time);            // bottom time,  used for gas volume calculations
-
-VAR_UCHAR (char_I_dive_interval);          // duration of surface break before next dive in minutes, used in simulation
-VAR_UCHAR (char_I_sim_advance_time);	   // 'fast forward' of dive time, used in simulation (+5 min function)
+VAR_UCHAR (char_I_deco_model);					// deco model selection: 0 = ZH-L16, 1 = ZH-L16-GF (with gradient factors)
 
-VAR_UCHAR (char_I_const_ppO2);             // ppO2 reported from sensors or by setpoint
-
-TAB_UCHAR (char_I_deco_gas_change,NUM_GAS); // change depths of the OC gases
+VAR_UCHAR (char_I_bottom_depth);				// bottom depth, used for gas volume calculations
+VAR_UCHAR (char_I_bottom_time);					// bottom time,  used for gas volume calculations
 
-TAB_UCHAR (char_I_setpoint_change,NUM_GAS); // change depth for the setpoints in meter
-TAB_UCHAR (char_I_setpoint_cbar,  NUM_GAS); // setpoints in cbar
+VAR_UCHAR (char_I_dive_interval);				// duration of surface break before next dive in minutes, used in simulation
+VAR_UCHAR (char_I_sim_advance_time);			// 'fast forward' of dive time, used in simulation (+5 min function)
 
-TAB_UCHAR (char_I_deco_O2_ratio,  NUM_GAS); // oxygen ratios of the configured gases, used for deco calculations
-TAB_UCHAR (char_I_deco_He_ratio,  NUM_GAS); // helium ratios of the configured gases, used for deco calculations
+VAR_UCHAR (char_I_const_ppO2);					// ppO2 reported from sensors or by setpoint
 
-TAB_UCHAR (char_I_tank_size,      NUM_GAS);	// tank sizes, used for pressure needs calculation
-TAB_UCHAR (char_I_tank_pres_fill, NUM_GAS);	// tank fill pressures, used for generating warnings
+TAB_UCHAR (char_I_deco_gas_change,NUM_GAS);		// change depths of the OC gases
+TAB_UCHAR (char_I_dil_change,     NUM_GAS);		// change depths of the diluent gases. Attention: must be placed after char_I_deco_gas_change!	Remark: not used by C code, only by ASM code
 
-VAR_UCHAR (char_I_cc_max_frac_o2);	 		// limiter for maximum O2% in loop
-VAR_UCHAR (char_I_PSCR_drop);				// pSCR parameter drop [%]
-VAR_UCHAR (char_I_PSCR_lungratio);			// pSCR parameter lung ratio [1/x]
+TAB_UCHAR (char_I_setpoint_change,NUM_GAS);		// change depth for the setpoints in meter
+TAB_UCHAR (char_I_setpoint_cbar,  NUM_GAS);		// setpoints in cbar
 
-VAR_UCHAR (char_I_altitude_wait);			// selector for altitude / no-fly waiting time calculation
+TAB_UCHAR (char_I_deco_O2_ratio,  NUM_GAS);		// oxygen ratios of the configured gases, used for deco calculations
+TAB_UCHAR (char_I_deco_He_ratio,  NUM_GAS);		// helium ratios of the configured gases, used for deco calculations
 
-VAR_UCHAR (char_I_bottom_usage);            // gas consumption during bottom part and initial ascent   in liters/minute
-VAR_UCHAR (char_I_deco_usage);              // gas consumption during deco stops and following ascents in liters/minute
-
-VAR_UCHAR (char_I_extra_time);              // extra bottom time for fTTs and delayed ascent calculation in minutes
+TAB_UCHAR (char_I_tank_size,      NUM_GAS);		// tank sizes, used for pressure needs calculation
+TAB_UCHAR (char_I_tank_pres_fill, NUM_GAS);		// tank fill pressures, used for generating warnings
 
-VAR_UCHAR (char_I_ppO2_max);				// warning threshold for maximum ppO2 during working phase of the dive
-VAR_UCHAR (char_I_ppO2_max_deco);			// warning threshold for maximum ppO2 during deco phase of the dive
-VAR_UCHAR (char_I_ppO2_min);				// warning threshold for maximum ppO2 when breathing OC
-VAR_UCHAR (char_I_ppO2_min_loop);			// warning threshold for maximum ppO2 when breathing from CCR or pSCR
+VAR_UCHAR (char_I_cc_max_frac_o2);				// limiter for maximum O2% in loop
+VAR_UCHAR (char_I_PSCR_drop);					// pSCR parameter drop [%]
+VAR_UCHAR (char_I_PSCR_lungratio);				// pSCR parameter lung ratio [1/x]
 
-VAR_UCHAR (char_I_ascent_speed);			// ascent speed in meters/minute
-VAR_UCHAR (char_I_gas_change_time);			// extra time spent during a stop for doing a gas change, in minutes
+VAR_UCHAR (char_I_altitude_wait);				// selector for altitude / no-fly waiting time calculation
 
+VAR_UCHAR (char_I_bottom_usage);				// gas consumption during bottom part and initial ascent   in liters/minute
+VAR_UCHAR (char_I_deco_usage);					// gas consumption during deco stops and following ascents in liters/minute
 
-#ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-// VAR_UCHAR (char_I_step_is_1min);        // Use 1min integration for tissue and CNS.	DELETED ## V2.95 - made local to p2_deco.c
-// VAR_UINT  (int_I_temp);                 // new in v101								DELETED ## no fly
-// VAR_UINT  (int_I_divemins);             // Dive time (minutes)					 	DELETED ## V2.95 - not used by p2_deco.c
-// VAR_UCHAR (char_I_temp);                // new in v101							 	DELETED ## no fly
-// VAR_UCHAR (char_I_actual_ppO2);         //										 	DELETED ## V2.94
-// VAR_UCHAR (char_I_first_gas);           // Gas used at start of dive (bottom mix) 	DELETED ## V2.95 - made local to p2_deco.c
-// VAR_UCHAR (char_I_N2_ratio);            // N2 ratio of the currently breathed gas	DELETED ## V2.95 - not read from ASM, but actually computed by p2_deco.c from H2 and O2 ratio
-// VAR_UCHAR (char_O_deco_last_stop);      // Depth reached during deco planning.		DELETED ## V2.95 - not used in ASM
-// VAR_UCHAR (temp_bankx400);              // reserved space for temporary variables
-#endif
+VAR_UCHAR (char_I_extra_time);					// extra bottom time for fTTs and delayed ascent calculation in minutes
+
+VAR_UCHAR (char_I_ppO2_max);					// warning threshold for maximum ppO2 during working phase of the dive
+VAR_UCHAR (char_I_ppO2_max_deco);				// warning threshold for maximum ppO2 during deco phase of the dive
+VAR_UCHAR (char_I_ppO2_min);					// warning threshold for maximum ppO2 when breathing OC
+VAR_UCHAR (char_I_ppO2_min_loop);				// warning threshold for maximum ppO2 when breathing from CCR or pSCR
+
+VAR_UCHAR (char_I_ascent_speed);				// ascent speed in meters/minute
+VAR_UCHAR (char_I_gas_change_time);				// extra time spent during a stop for doing a gas change, in minutes
--- a/src/simulator.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/simulator.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,118 +1,119 @@
 ;=============================================================================
 ;
-;   File simulator.asm								REFACTORED VERSION V2.95a1
+;   File simulator.asm								REFACTORED VERSION V2.98
 ;
 ;   Decoplan interface to C model code.
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
 ; HISTORY
-;  2011-07-09 : [jDG] Creation...
+; 2011-07-09 : [jDG] Creation...
 
-#include "hwos.inc"						; Mandatory include
-#include "convert.inc"                  ; output_*
-#include "shared_definitions.h"         ; Mailbox from/to p2_deco.c
-#include "strings.inc"                  ; STRCPY,...
-#include "tft.inc"                      ; WIN_LEFT,...
-#include "wait.inc"                     ; speed_*
+#include "hwos.inc"					; Mandatory include
+#include "convert.inc"				; output_*
+#include "shared_definitions.h"		; Mailbox from/to p2_deco.c
+#include "strings.inc"				; STRCPY,...
+#include "tft.inc"					; WIN_LEFT,...
+#include "wait.inc"					; speed_*
 #include "start.inc"
 #include "divemode.inc"
 #include "math.inc"
 #include "eeprom_rs232.inc"
 #include "tft_outputs.inc"
 #include "gaslist.inc"
+#include "isr.inc"
 
-gui     CODE
+gui		CODE
 
-    extern  deco_clear_tissue
-    extern  deco_push_tissues_to_vault
-    extern  deco_calc_dive_interval
-    extern  deco_calc_hauptroutine
-    extern  deco_pull_tissues_from_vault
-    extern  TFT_display_decotype_surface1
-	extern	get_first_dil_to_WREG
-	extern	get_first_gas_to_WREG
-	extern	setup_dil_registers
-	extern	setup_gas_registers
-	extern	deco_setup_cc_diluents
-	extern	deco_setup_oc_gases
+	extern deco_clear_tissue
+	extern deco_push_tissues_to_vault
+	extern deco_calc_dive_interval
+	extern deco_calc_hauptroutine
+	extern deco_pull_tissues_from_vault
+	extern TFT_display_decotype_surface1
+	extern get_first_dil_to_WREG
+	extern get_first_gas_to_WREG
+	extern setup_dil_registers
+	extern setup_gas_registers
+	extern deco_setup_cc_diluents
+	extern deco_setup_oc_gases
+	extern log_screendump_and_onesecond
+	extern logbook_preloop_tasks
+	extern do_return_demo_planner
 
 
-    extern  log_screendump_and_onesecond, logbook_preloop_tasks
-    extern  do_planner_menu
-
-;---- Private temp variables -------------------------------------------------
+;---- Private local variables -------------------------------------------------
 
-	CBLOCK  tmp+0x12                ; Reserved space for word processor and convert
-		decoplan_index              ; within each page
-		decoplan_gindex             ; global index
-		decoplan_last               ; Depth of last stop (CF#29)
-		decoplan_flags              ; Various private flags.
-		decoplan_page               ; page number
-		decoplan_warnings			; deco engine warnings (ex reserved to tmp+0x18...)
-	ENDC
-		
+	CBLOCK local1				; max size is 16 Byte !!!
+		decoplan_index			; within each page
+		decoplan_gindex			; global index
+		decoplan_last			; Depth of last stop (CF#29)
+		decoplan_flags			; Various private flags.
+		decoplan_page			; page number
+		decoplan_warnings		; deco engine warnings
+		gas_counter				; counter for looping through the gases
+		row_pos					; used for positioning of graphic elements
+	ENDC						; used: 8 byte, remaining: 8 byte
+
 ;---- Defines ----------------------------------------------------------------
 
 #define decoplan_last_ceiling_shown	decoplan_flags,0
-#define	decoplan_abort				decoplan_flags,1
+#define decoplan_abort				decoplan_flags,1
 
 ;---- Demo deco planner ------------------------------------------------------
-	global  do_demo_planner
 
+	global	do_demo_planner
 do_demo_planner:
 	btfsc	FLAG_gauge_mode				; =1: In Gauge mode
-	goto	do_planner_menu
+	goto	do_return_demo_planner
 	btfsc	FLAG_apnoe_mode				; =1: In Apnea mode
-	goto	do_planner_menu
+	goto	do_return_demo_planner
 	bcf		decoplan_abort				; initialize (clear) abort flag
 	bcf		is_bailout					; clear bailout condition (may have remained set from last invocation)
 	rcall	deco_planer
 	btfss	decoplan_abort				; skip recall deco_show_plan if calculations were aborted
 	rcall	deco_show_plan
-	goto	do_planner_menu
+	goto	do_return_demo_planner
 
 
 	global	deco_setup
 deco_setup:
-	banksel	common
 	btfsc	FLAG_ccr_mode
 	bra		deco_setup_cc
 	btfsc	FLAG_pscr_mode
 	bra		deco_setup_cc
 deco_setup_oc:
-	call    get_first_gas_to_WREG			; gets first gas (1-5) into WREG
-    call	setup_gas_registers				; with WREG=Gas 1-5
+	call	get_first_gas_to_WREG			; gets first gas (1-5) into WREG
+	call	setup_gas_registers				; with WREG=Gas 1-5
 	call	deco_setup_oc_gases				; setup OC/Bailout Gases and configure for OC deco calculation
 	bra		deco_setup_cont
 deco_setup_cc:
-    call    get_first_dil_to_WREG           ; gets first gas (1-5) into WREG
-    call	setup_dil_registers				; with WREG=Gas 1-5
+	call	get_first_dil_to_WREG			; gets first gas (1-5) into WREG
+	call	setup_dil_registers				; with WREG=Gas 1-5
 	call	deco_setup_cc_diluents			; setup CCR/pSCR diluents and configure for CCR/pSCR deco calculation
 deco_setup_cont:
-	; use ambient conditions for simulation ## V2.94
-	#include    "isr.inc"
+	; use ambient conditions for simulation
 	SAFE_2BYTE_COPY last_surfpressure_30min, int_I_pres_surface	; copy surface pressure to deco routine
-	
+
 	movlw	deco_distance
 	movff	WREG,char_I_deco_distance
 
 	movff	opt_last_stop,char_I_depth_last_deco
 	movff	opt_GF_low,char_I_GF_Low_percentage
 	movff	opt_GF_high,char_I_GF_High_percentage
-	
+
 	; overwrite GF if aGF is wanted
 	bsf		use_agf
 	TSTOSS	opt_sim_use_aGF
 	bcf		use_agf
 
-	btfsc	use_agf					; =1: Use aGF
+	btfsc	use_agf							; =1: Use aGF
 	movff	opt_aGF_low,char_I_GF_Low_percentage
-	btfsc	use_agf					; =1: Use aGF
+	btfsc	use_agf							; =1: Use aGF
 	movff	opt_aGF_high,char_I_GF_High_percentage
 
 	bcf		is_bailout
-	
+
 	; setup char_I_const_ppO2 for CC modes
 	clrf	WREG
 	btfsc	FLAG_pscr_mode
@@ -120,256 +121,248 @@
 	btfss	FLAG_ccr_mode
 	return									; done if not in CCR mode
 	movff	opt_sim_setpoint_number,WREG	; configure CCR computations to selected setpoint
-	decf    WREG,W							; 1-5 -> 0-4
-	lfsr    FSR1,char_I_setpoint_cbar		; load base address of setpoint list
-	movff   PLUSW1,char_I_const_ppO2		; setup setpoint
+	decf	WREG,W							; 1-5 -> 0-4
+	lfsr	FSR1,char_I_setpoint_cbar		; load base address of setpoint list
+	movff	PLUSW1,char_I_const_ppO2		; setup setpoint
 	return
-	
+
 ;=============================================================================
 ; Launch deco planning
-; 
-		global  deco_planer
+;
+		global	deco_planer
 deco_planer:
-        call    speed_fastest				; Quick !
-		call    deco_push_tissues_to_vault
-        rcall   deco_setup					; Setup all model parameters.
+	call	speed_fastest					; Quick !
+	call	deco_push_tissues_to_vault		; C-code: back-up state of the real tissues
+	banksel	common
+	rcall	deco_setup						; Setup all model parameters.
 
 ;---- Specific settings ------------------------------------------------------
 
-		; configure the deco engine for normal plan, CNS & gas volume calculation and no delayed ascent
-		movff	char_O_deco_status,WREG		; bank-safe copy
-		bcf		WREG,DECO_PLAN_FLAG			; normal plan mode,
-		bsf		WREG,DECO_CNS_FLAG			; enable CNS calculation (CNS at end of dive),
-		bsf		WREG,DECO_VOLUME_FLAG		; enable gas volume calculation, and
-		bcf		WREG,DECO_ASCENT_FLAG		; disable delayed ascent calculation
-		movff	WREG,char_O_deco_status		; bank-safe copy back
+	; configure the deco engine for normal plan, CNS & gas volume calculation and no delayed ascent
+	movff	char_O_deco_status,WREG			; bank-safe copy
+	bcf		WREG,DECO_PLAN_FLAG				; normal plan mode,
+	bsf		WREG,DECO_CNS_FLAG				; enable CNS calculation (CNS at end of dive),
+	bsf		WREG,DECO_VOLUME_FLAG			; enable gas volume calculation, and
+	bcf		WREG,DECO_ASCENT_FLAG			; disable delayed ascent calculation
+	movff	WREG,char_O_deco_status			; bank-safe copy back
 
-		; configure the deco engine for total-dive gas volume calculation
-		movff	char_O_main_status,WREG		; bank-safe copy
-		bsf		WREG,DECO_BOTTOM_FLAG		; set bottom flag
-		movff	WREG,char_O_main_status		; bank-safe copy back
+	; configure the deco engine for total-dive gas volume calculation
+	movff	char_O_main_status,WREG			; bank-safe copy
+	bsf		WREG,DECO_BOTTOM_FLAG			; set bottom flag
+	movff	WREG,char_O_main_status			; bank-safe copy back
 
 deco_planer_redo:
+	; show deco calculation is in progress
+	call	TFT_ClearScreen
+	WIN_COLOR	color_greenish
+	TEXT_SMALL	.20,.40, tCalculating
+	WIN_COLOR	color_lightblue
+	WIN_SMALL	.1,.215
+	STRCPY_TEXT_PRINT tAbort
 
-		; show deco calculation is in progress
-		call	TFT_ClearScreen
-        WIN_COLOR	color_greenish
-		TEXT_SMALL	.20,.40, tCalculating
-		WIN_COLOR	color_lightblue
-		WIN_SMALL	.1,.215
-		STRCPY_TEXT_PRINT  tAbort
-
-		; configure the deco engine for restart:
-		movff	char_O_deco_status,WREG		; bank-safe copy
-		bsf		WREG,DECO_STATUS_0_FLAG		; configure init ...
-		bsf		WREG,DECO_STATUS_1_FLAG		; ... state,
-		movff	WREG,char_O_deco_status		; bank-safe copy back
+	; configure the deco engine for restart:
+	movff	char_O_deco_status,WREG			; bank-safe copy
+	bsf		WREG,DECO_STATUS_0_FLAG			; configure init ...
+	bsf		WREG,DECO_STATUS_1_FLAG			; ... state,
+	movff	WREG,char_O_deco_status			; bank-safe copy back
 
 ;---- Add delay at surface, if needed ----------------------------------------
-		
-		banksel	char_I_dive_interval
-        tstfsz  char_I_dive_interval
-        call    deco_calc_dive_interval
+	banksel	char_I_dive_interval
+	tstfsz	char_I_dive_interval
+	call	deco_calc_dive_interval
 
 ;---- Dive loop --------------------------------------------------------------
+	; Compute dive ambient conditions
+	banksel	char_I_bottom_depth
+	movf	char_I_bottom_depth,W
+	mullw	.100
+	movlw	LOW(.1000)
+	addwf	PRODL,W
+	movwf	int_I_pres_respiration+0
+	movlw	HIGH(.1000)
+	addwfc	PRODH,W
+	movwf	int_I_pres_respiration+1
+	banksel common
 
-        ; Compute dive ambient conditions
-        banksel char_I_bottom_depth
-        movf    char_I_bottom_depth,W
-        mullw   .100
-        movlw   LOW(.1000)
-        addwf   PRODL,W
-        movwf   int_I_pres_respiration+0
-        movlw   HIGH(.1000)
-        addwfc  PRODH,W
-        movwf   int_I_pres_respiration+1
-		
-		banksel common
+	movff	char_I_bottom_time,char_I_sim_advance_time
+
+	clrf	TMR5L
+	clrf	TMR5H							; 30,51757813µs/bit in TMR5L:TMR5H
 
-		movff	char_I_bottom_time,char_I_sim_advance_time
-		
-        clrf    TMR5L
-        clrf    TMR5H                   	; 30,51757813µs/bit in TMR5L:TMR5H
+	call	deco_calc_hauptroutine			; C-code: initialization + complete bottom time part
+	banksel	common
 
-        call    deco_calc_hauptroutine  	; initialization + complete bottom time part
-        banksel common
-		
 ;---- BAILOUT: Switch to OC gases for ascent cycles --------------------------
-
-        btfss   is_bailout              	; Doing a bailout deco plan ?
-        bra     deco_planer_finishing   	; NO  - keep gases
+	btfss	is_bailout						; Doing a bailout deco plan ?
+	bra	 deco_planer_finishing				; NO  - keep gases
 											; YES - switch to OC gas 
 
-		; reconfigure the deco engine for delayed ascent mode
-		movff	char_O_deco_status,lo		; bank-safe copy
-		bsf		lo,DECO_ASCENT_FLAG			; set flag for delayed ascent calculation
-		movff	lo,char_O_deco_status		; bank-safe copy back
+	; reconfigure the deco engine for delayed ascent mode
+	movff	char_O_deco_status,lo			; bank-safe copy
+	bsf		lo,DECO_ASCENT_FLAG				; set flag for delayed ascent calculation
+	movff	lo,char_O_deco_status			; bank-safe copy back
 
-		; configure the deco engine for delayed ascent part gas volume calculation
-		movff	char_O_main_status,WREG		; bank-safe copy
-		bcf		WREG,DECO_BOTTOM_FLAG		; set bottom flag
-		movff	WREG,char_O_main_status		; bank-safe copy back
+	; configure the deco engine for delayed ascent part gas volume calculation
+	movff	char_O_main_status,WREG			; bank-safe copy
+	bcf		WREG,DECO_BOTTOM_FLAG			; set bottom flag
+	movff	WREG,char_O_main_status			; bank-safe copy back
 
-		; reconfigure gas settings to OC gases
-		call    get_first_gas_to_WREG		; get first gas (1-5) into WREG
-		call	setup_gas_registers			; With WREG=Gas 1-5 (or 6, not applicable here)
-		call	deco_setup_oc_gases			; With WREG=Gas 1-5 (or 6, not applicable here)
-		
-		; set the gas change override flag to allow gas changes before deco stops as done in alternative plan
-		movff	char_O_main_status,lo		; bank-safe copy
-		bsf		lo,DECO_GASCHANGE_OVRD		; set flag for gas change override
-		movff	lo,char_O_main_status		; bank-safe copy back
+	; reconfigure gas settings to OC gases
+	call	get_first_gas_to_WREG			; get first gas (1-5) into WREG
+	call	setup_gas_registers				; With WREG=Gas 1-5 (or 6, not applicable here)
+	call	deco_setup_oc_gases				; With WREG=Gas 1-5 (or 6, not applicable here)
+
+	; set the gas change override flag to allow gas changes before deco stops as done in alternative plan
+	movff	char_O_main_status,lo			; bank-safe copy
+	bsf		lo,DECO_GASCHANGE_OVRD			; set flag for gas change override
+	movff	lo,char_O_main_status			; bank-safe copy back
 
 ;---- Wait until status reaches zero -------------------------------------------
+deco_planer_finishing:
+	call	deco_calc_hauptroutine			; C-code: Simulate more dive time to trigger the deco calculations
+	banksel	common
 
-deco_planer_finishing:
-        call    deco_calc_hauptroutine  	; Simulate more dive time to trigger the deco calculations
-		banksel	common
-		
-		btfss	switch_left					; check if left button was pressed
-		bra		deco_planer_finishing_1		; NO  - continue calculations
-		bsf		decoplan_abort				; YES - set abort flag so that deco_show_plan will not be called
-		bra		deco_planer_finishing_2		;       do some clean-up and return
+	btfss	switch_left						; check if left button was pressed
+	bra		deco_planer_finishing_1			; NO  - continue calculations
+	bsf		decoplan_abort					; YES - set abort flag so that deco_show_plan will not be called
+	bra		deco_planer_finishing_2			;       do some clean-up and return
 deco_planer_finishing_1:
-		movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
-		movlw	DECO_STATUS_MASK			; bit mask for deco status bit set
-		andwf	lo,W						; mask out bits showing state of computation
-		tstfsz	WREG						; check if a compute cycle is finished (bits 1 and 0 == 0)
-		bra		deco_planer_finishing		; NO - needs more computation cycles
+	movff	char_O_deco_status,lo			; working copy of char_O_deco_status in bank common
+	movlw	DECO_STATUS_MASK				; bit mask for deco status bit set
+	andwf	lo,W							; mask out bits showing state of computation
+	tstfsz	WREG							; check if a compute cycle is finished (bits 1 and 0 == 0)
+	bra		deco_planer_finishing			; NO - needs more computation cycles
 
 ;---- Done: add CNS from decoplan, and restore tissues
-
 deco_planer_finishing_2:
-
 	movff	char_O_deco_warnings,decoplan_warnings	; copy warnings
-		
-        call    deco_pull_tissues_from_vault			; restore "real" deco data
-        banksel common                  				; back to bank 1
+
+	call	deco_pull_tissues_from_vault	; C-code: restore status of the real tissues
+	banksel	common							; back to bank 1
 
-	movlw	b'00111000'								; 1:8 Prescaler -> 65,536ms@16MHz
+	movlw	b'00111000'						; 1:8 Prescaler -> 65,536ms@16MHz
 	movwf	T3CON
-        goto	speed_normal	    ;(and return)
+	goto	speed_normal					; (and return)
 
 ;-----------------------------------------------------------------------------
 ; Draw a stop of the deco plan (simulator or dive).
-; Inputs: lo      = depth. Range 3m...93m
-;                 + 0x80 if this is a switch-gas stop.
-;         up      = minutes. range 1'..240'.
-;         win_top = line to draw on screen.
-; Trashed: up, lo, win_height, win_leftx2, win_width, win_color*,
+; Inputs:  lo      = depth
+;          hi      = minutes
+;          win_top = line to draw on screen.
+;
+; Trashed: hi, lo,
+;          win_height, win_leftx2, win_width, win_color*,
 ;          WREG, PROD, TBLPTR TABLAT.
 ;
 deco_plan_show_stop:
+	;---- Print depth ----------------------------------------------------
+	lfsr	FSR2,char_O_deco_gas		; needed to be initialized here every time because...
+	movf	decoplan_gindex,W			; ...FSR2 is also used for string operations
+	movff	PLUSW2,WREG					; get current gas and copy it to WREG for color-coding
+	call	TFT_color_code_gas			; set output color dependent on gas (1-5)
 
-		;---- Print depth ----------------------------------------------------
-		bcf     lo,7					; clear gas-switch flag (not used any more anyhow)
-		lfsr	FSR2,char_O_deco_gas
-		movf    decoplan_gindex,W		; index
-    	movff	PLUSW2,WREG				; get current gas
-		rcall	simulator_color_gas		; set output color dependent on gas (1-5)
+	lfsr	FSR2,buffer
 
-	    lfsr	FSR2,buffer
-
-		TSTOSS  opt_units				; 0=Meters, 1=Feets
-		bra		deco_plan_show_nstd_stop_metric
+	TSTOSS	opt_units					; 0=Meters, 1=Feets
+	bra		deco_plan_show_nstd_stop_metric
 
-        WIN_LEFT .85
-		movf	lo,W					; lo = m
-		mullw	.100					; PRODL:PRODH = mbar
-		movff	PRODL,lo
-		movff	PRODH,hi
-		; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops...
-		movff	lo,xA+0
-		movff	hi,xA+1
-		movlw	LOW 	d'334'          ; 334feet/100m
-		movwf	xB+0
-		movlw	HIGH 	d'334'
-		movwf	xB+1
-		call	mult16x16			    ; xA*xB=xC (lo:hi * 328)
-		movlw	d'50'                   ; round up
-		addwf	xC+0,F
-		movlw	0
-		addwfc	xC+1,F
-		addwfc	xC+2,F
-		addwfc	xC+3,F
-		movlw	d'100'					
-		movwf	xB+0
-		clrf	xB+1
-		call	div32x16  			    ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-		movff	xC+0,lo
-		movff	xC+1,hi				    ; restore lo and hi with updated value
-		bsf		leftbind
-		bsf		ignore_digit4			; Only full feet
-		output_16
-		bcf     leftbind
-		STRCAT_PRINT	"ft "
-		bra		deco_plan_show_nstd_stop_common
+	WIN_LEFT .85
+	movf	lo,W						; lo = m
+	mullw	.100						; PRODL:PRODH = mbar
+	movff	PRODL,lo
+	movff	PRODH,hi
+	; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops...
+	movff	lo,xA+0
+	movff	hi,xA+1
+	movlw	LOW  d'334'					; 334feet/100m
+	movwf	xB+0
+	movlw	HIGH d'334'
+	movwf	xB+1
+	call	mult16x16					; xA*xB=xC (lo:hi * 328)
+	movlw	d'50'						; round up
+	addwf	xC+0,F
+	movlw	.0
+	addwfc	xC+1,F
+	addwfc	xC+2,F
+	addwfc	xC+3,F
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	call	div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movff	xC+0,lo
+	movff	xC+1,hi						; restore lo and hi with updated value
+	bsf		leftbind
+	bsf		ignore_digit4				; Only full feet
+	output_16
+	bcf		leftbind
+	STRCAT_PRINT "ft "
+	bra		deco_plan_show_nstd_stop_common
 
 deco_plan_show_nstd_stop_metric:
-        WIN_LEFT .90
-	    bsf     leftbind
-	    output_8					    ; outputs into Postinc2!
-		bcf     leftbind
-        STRCAT_PRINT 	"m "
+	WIN_LEFT .90
+	bsf	leftbind
+	output_8							; outputs into Postinc2!
+	bcf	leftbind
+	STRCAT_PRINT "m "
+
 deco_plan_show_nstd_stop_common:
-        ;---- Print duration -------------------------------------------------
-	    WIN_LEFT	.135
-	    lfsr	FSR2,buffer
-	    
-	    movf    lo,W                    ; Swap up & lo
-	    movff   up,lo
-	    movwf   up
+	;---- Print duration -------------------------------------------------
+	WIN_LEFT .135
+	lfsr	FSR2,buffer
 
-	    output_8					    ; Allow up to 240'
-        STRCAT       "'  "              ; 1 to 3 chars for depth.
-        clrf    WREG
-        movff   WREG,buffer+.3          ; limit to 4 chars
-        STRCAT_PRINT 	""
+	movf	lo,W						; Swap hi & lo
+	movff	hi,lo
+	movwf	hi
+
+	output_8							; Allow up to 240'
+	clrf	WREG
+	movff	WREG,buffer+.3				; limit to 2 chars
+	STRCAT_PRINT ""
 
-	    movf    lo,W                    ; Swap back up & lo
-	    movff   up,lo
-	    movwf   up
+	movf	lo,W						; Swap back hi & lo
+	movff	hi,lo
+	movwf	hi
 
-        ;---------------------------------------------------------------------
-        ; Draw the bar graph used for deco stops (deco plan in simulator or dive).
-        incf   win_top,F
-        movlw	.19
-        movwf   win_height
-        movlw	.118
-        movwf	win_leftx2    		    ; column left (0-159)
-        movlw	.16
-        movwf	win_width+0    		    ; column max width.
-		clrf    win_width+1
+	;---------------------------------------------------------------------
+	; Draw the bar graph used for deco stops (deco plan in simulator or dive).
+	incf	win_top,F
+	movlw	.19
+	movwf	win_height
+	movlw	.118
+	movwf	win_leftx2					; column left (0-159)
+	movlw	.16
+	movwf	win_width+0					; column max width.
+	clrf	win_width+1
 
-        ; Draw used area (up = minutes):
-        movlw	.16                     ; Limit length (16min)
-        cpfslt	up
-        movwf	up
-        movff	up,win_bargraph         ; Active width, the rest is cleared.
-        call	TFT_box
+	; Draw used area (hi = minutes):
+	movlw	.16							; Limit length (16min)
+	cpfslt	hi
+	movwf	hi
+	movff	hi,win_bargraph				; Active width, the rest is cleared.
+	call	TFT_box
 
-        ; Restore win_top
-	    call    TFT_standard_color
-        decf    win_top,F               ; Restore win_top
-        return
+	; Restore win_top
+	call	TFT_standard_color
+	decf	win_top,F					; Restore win_top
+	return
 
 ;-----------------------------------------------------------------------------
 ; Clear unused area below last stop
 ; Inputs: win_top : last used area...
 deco_plan_show_clear_bottom:
-        movf    win_top,W               ; Get back from bank0
-        sublw   .239                    ; No: bottom row in planning
-        movwf   win_height
+	movf	win_top,W					; Get back from bank0
+	sublw	.239						; No: bottom row in planning
+	movwf	win_height
 
-        WIN_LEFT .85                    ; Full dive menu width
-        movlw   .159-.85+1
-        movwf   win_width+0
-		clrf    win_width+1
+	WIN_LEFT .85						; Full dive menu width
+	movlw	.159-.85+.1
+	movwf	win_width+0
+	clrf	win_width+1
 
-        clrf    win_color1              ; Fill with black
-        clrf    win_color2
+	clrf	win_color1					; Fill with black
+	clrf	win_color2
 
-        goto	TFT_box		    		; and return
+	goto	TFT_box						; and return
 
 ;-----------------------------------------------------------------------------
 ; Display the deco plan (simulator).
@@ -377,381 +370,331 @@
 ;         decoplan_page = page number.
 ;
 deco_show_plan_page:
-        bcf     win_invert              ; Reset invert flag
+	bcf	 win_invert						; Reset invert flag
 
-        ;---- Is there deco stops ? ------------------------------------------
-    	movff   char_O_first_deco_depth,WREG
-    	iorwf   WREG
-        bnz		deco_plan_show_1
+	;---- Is there deco stops ? ------------------------------------------
+	movff	char_O_first_deco_depth,WREG
+	iorwf	WREG
+	bnz		deco_plan_show_1
 
-        ;---- No Deco --------------------------------------------------------
-    	call    TFT_standard_color
-        TEXT_SMALL   .80, .0, tNoDeco
-        bsf     decoplan_last_ceiling_shown
-        return
+	;---- No Deco --------------------------------------------------------
+	call	TFT_standard_color
+	TEXT_SMALL .80, .0, tNoDeco
+	bsf		decoplan_last_ceiling_shown
+	return
 
 deco_plan_show_1:
-    	lfsr	FSR0,char_O_deco_depth  ; Initialize indexed addressing.
-	    lfsr	FSR1,char_O_deco_time
+	lfsr	FSR0,char_O_deco_depth		; Initialize indexed addressing.
+	lfsr	FSR1,char_O_deco_time
 
-        clrf    decoplan_index          ; Start with index = 0
-        clrf	win_top                 ; and row = 0
+	clrf	decoplan_index				; Start with index = 0
+	clrf	win_top						; and row = 0
 
-        ; Read stop parameters, indexed by decoplan_index and decoplan_page
-        movf    decoplan_page,W         ; decoplan_gindex = 6*decoplan_page + decoplan_index
-        mullw   .8                      ; 8 lines/page in deco plan
-        movf    decoplan_index,W
-        addwf   PRODL,W
-        movwf   decoplan_gindex         ; --> decoplan_gindex
+	; Read stop parameters, indexed by decoplan_index and decoplan_page
+	movf	decoplan_page,W				; decoplan_gindex = 6*decoplan_page + decoplan_index
+	mullw	.8							; 8 lines/page in deco plan
+	movf	decoplan_index,W
+	addwf	PRODL,W
+	movwf	decoplan_gindex				; --> decoplan_gindex
 
-        bcf     decoplan_last_ceiling_shown   ; Not finished yet...
+	bcf		decoplan_last_ceiling_shown	; Not finished yet...
 
 deco_plan_show_2:
-        btfsc   decoplan_gindex,5       ; Reached table length (32) ?
-        bra     deco_plan_show_99       ; YES: finished...
+	btfsc	decoplan_gindex,5			; Reached table length (32) ?
+	bra		deco_plan_show_99			; YES: finished...
 
-        ; Read stop parameters, indexed by decoplan_index
-        movf    decoplan_gindex,W       ; index
-    	movff	PLUSW1,up               ; char_O_deco_time [gindex] --> up
-	    movff	PLUSW0,lo               ; char_O_deco_depth[gindex]
-        movf    lo,W
-        bz      deco_plan_show_99       ; depth == 0 : finished.
+	; Read stop parameters, indexed by decoplan_index
+	movf	decoplan_gindex,W			; index
+	movff	PLUSW0,lo					; char_O_deco_depth[gindex]
+	movff	PLUSW1,hi					; char_O_deco_time [gindex]
+	movf	lo,W
+	bz		deco_plan_show_99			; depth == 0 : finished.
 
-        ; Display the stop line
-    	rcall	deco_plan_show_stop
+	; Display the stop line
+	rcall	deco_plan_show_stop
 
-        ; Next
-        movlw   .24
-        addwf   win_top,F				; row: += 24
-	    incf	decoplan_index,F		; local index += 1
-	    incf	decoplan_gindex,F		; global index += 1
+	; Next
+	movlw	.24
+	addwf	win_top,F					; row: += 24
+	incf	decoplan_index,F			; local index += 1
+	incf	decoplan_gindex,F			; global index += 1
 
-        ; Max number of lines/page reached ?
-    	movlw   .8						; 8 lines/page in deco plan
-    	cpfseq	decoplan_index
-    	bra		deco_plan_show_2		; NO: loop
+	; Max number of lines/page reached ?
+	movlw	.8							; 8 lines/page in deco plan
+	cpfseq	decoplan_index
+	bra		deco_plan_show_2			; NO: loop
 
-    	; Check if next stop is end-of-list ?
-    	movf    decoplan_gindex,W
-	    movf	PLUSW0,W				; char_O_deco_depth[gindex]
-    	bz      deco_plan_show_99		; End of list...
+	; Check if next stop is end-of-list ?
+	movf	decoplan_gindex,W
+	movf	PLUSW0,W					; char_O_deco_depth[gindex]
+	bz		deco_plan_show_99			; End of list...
 
-        ; Display the message "more..."
-        rcall   deco_plan_show_clear_bottom  ; Clear from next line
+	; Display the message "more..."
+	rcall	deco_plan_show_clear_bottom	; Clear from next line
 
-    	call    TFT_standard_color
-        TEXT_SMALL .88, .220, tMore
-        return
+	call	TFT_standard_color
+	TEXT_SMALL .88, .220, tMore
+	return
 
 deco_plan_show_99:
-        bsf		decoplan_last_ceiling_shown ; Nothing more in table to display.
-        rcall   deco_plan_show_clear_bottom ; Clear from next line
-        return
+	bsf		decoplan_last_ceiling_shown ; Nothing more in table to display.
+	rcall	deco_plan_show_clear_bottom ; Clear from next line
+	return
 
 ;-----------------------------------------------------------------------------
 ; Loop to show all pages of the deco plan (surface mode)
 
-        global  deco_show_plan
+	global	deco_show_plan
 deco_show_plan:
-        clrf    decoplan_page
-        call    TFT_ClearScreen
-        WIN_COLOR   color_greenish
-		btfsc	is_bailout
-		bra	deco_show_plan_bail_title
-        TEXT_SMALL  .1,.1, tDivePlan
-		bra	deco_show_plan2
+	clrf	decoplan_page
+	call	TFT_ClearScreen
+	WIN_COLOR color_greenish
+	btfsc	is_bailout
+	bra		deco_show_plan_bail_title
+	TEXT_SMALL .1,.1, tDivePlan
+	bra		deco_show_plan2
 deco_show_plan_bail_title:	
-		TEXT_SMALL  .1,.1, tDiveBailout
+		TEXT_SMALL .1,.1, tDiveBailout
 deco_show_plan2:
-		call    TFT_standard_color
-        ;---- Display Plan Parameters
-        WIN_SMALL   .0,.25
-        STRCPY  "Int:"
-        movff   char_I_dive_interval,lo
-        bsf     leftbind
-        output_8
-		bcf     leftbind
-        STRCAT_PRINT  "'"
-        WIN_SMALL   .0,.50
-        STRCPY_TEXT tBtTm_short
-        movff   char_I_bottom_time,lo
-        bsf     leftbind
-        output_8
-		bcf     leftbind
-        STRCAT_PRINT  "'"
-        WIN_SMALL   .0,.75
-        STRCPY_TEXT tDepth
-        PUTC    ":"
-        movff   char_I_bottom_depth,lo
-        bsf     leftbind
-        output_8
-		bcf     leftbind
-        STRCAT_PRINT  "m"
-		
-		WIN_SMALL   .0,.105					; set position for warnings or sat/dsat factors
-	
-		;---- Check for Stop Table Overflow
-		btfss	decoplan_warnings,stoptable_overflow	; check if we have a overflow warning
-		bra		deco_show_plan2a						; NO  - skip
-		;---- Display Overflow warning
-		call	TFT_warnings_color						; YES - show overflow warning
-		STRCAT_PRINT  "incomplete"						; max 10 characters
-		bra		deco_show_plan_m1						; skip displaying sat/dsat factors
+	call	TFT_standard_color
+	;---- Display Plan Parameters
+	WIN_SMALL .0,.25
+	STRCPY	"Int:"
+	movff	char_I_dive_interval,lo
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	STRCAT_PRINT "'"
+	WIN_SMALL .0,.50
+	STRCPY_TEXT tBtTm_short
+	movff	char_I_bottom_time,lo
+	bsf	leftbind
+	output_8
+	bcf	leftbind
+	STRCAT_PRINT "'"
+	WIN_SMALL .0,.75
+	STRCPY_TEXT tDepth
+	PUTC	":"
+	movff	char_I_bottom_depth,lo
+	bsf	leftbind
+	output_8
+	bcf	leftbind
+	STRCAT_PRINT "m"
+	WIN_SMALL .0,.105								; set position for warnings or sat/dsat factors
 
-deco_show_plan2a:		
-		;---- Check for IBCD Warning
-		btfss	decoplan_warnings,IBCD_warning_lock		; check if we have a locked IBCD warning
-		bra		deco_show_plan2b						; NO  - skip
-		;---- Display IBCD warning
-		call	TFT_attention_color						; YES - show IBCD warning
-		STRCAT_PRINT  "IBCD!"							; max 10 characters
-		bra		deco_show_plan_m1						; skip displaying sat/dsat factors
-		
+	;---- Check for Stop Table Overflow
+	btfss	decoplan_warnings,stoptable_overflow	; check if we have a overflow warning
+	bra		deco_show_plan2a						; NO  - skip
+	;---- Display Overflow warning
+	call	TFT_warnings_color						; YES - show overflow warning
+	STRCAT_PRINT "incomplete"						; max 10 characters
+	bra		deco_show_plan_m1						; skip displaying sat/dsat factors
+
+deco_show_plan2a:
+	;---- Check for IBCD Warning
+	btfss	decoplan_warnings,IBCD_warning_lock		; check if we have a locked IBCD warning
+	bra		deco_show_plan2b						; NO  - skip
+	;---- Display IBCD warning
+	call	TFT_attention_color						; YES - show IBCD warning
+	STRCAT_PRINT "IBCD!"							; max 10 characters
+	bra		deco_show_plan_m1						; skip displaying sat/dsat factors
+
 deco_show_plan2b:
-        ;---- Display Sat/Desat Factors --> is skipped if there were warnings
-		STRCAT_PRINT "SD:"
-        WIN_SMALL   .25,.105
-        movff   char_I_saturation_multiplier,lo
-        output_8
-        STRCAT  "/"
-        movff   char_I_desaturation_multiplier,lo
-        output_8
-        STRCAT_PRINT  ""
+	;---- Display Sat/Desat Factors --> omitted if there were warnings
+	STRCAT_PRINT "SD:"
+	WIN_SMALL .25,.105
+	movff	char_I_saturation_multiplier,lo
+	output_8
+	STRCAT "/"
+	movff	char_I_desaturation_multiplier,lo
+	output_8
+	STRCAT_PRINT ""
 
 deco_show_plan_m1:
-		call	TFT_standard_color			; clean-up from warnings
+	call	TFT_standard_color				; clean-up from warnings
 
-		;---- Get Model
-        movff   char_I_deco_model,WREG
-        iorwf   WREG
-        bz     deco_show_plan_m2
+	;---- Get Model
+	movff	char_I_deco_model,WREG
+	iorwf	WREG
+	bz	 deco_show_plan_m2
 
-        ;---- Display GF low/high values
-        WIN_SMALL  .0,.130
-		STRCAT_PRINT "GF:"
-        WIN_SMALL   .25,.130
-        movff   char_I_GF_Low_percentage,lo
-        output_99x
-        STRCAT  "/"
-        movff   char_I_GF_High_percentage,lo
-        output_99x
-        STRCAT_PRINT  ""
+	;---- Display GF low/high values
+	WIN_SMALL .0,.130
+	STRCAT_PRINT "GF:"
+	WIN_SMALL .25,.130
+	movff	char_I_GF_Low_percentage,lo
+	output_99x
+	STRCAT	"/"
+	movff	char_I_GF_High_percentage,lo
+	output_99x
+	STRCAT_PRINT ""
 
 deco_show_plan_m2:
-		;---- Display Deco Mode
-		WIN_SMALL   .0,.155
-        lfsr    FSR2,buffer
-        movff   opt_dive_mode,lo        	; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-        call    TFT_display_decotype_surface1
-		btfss	FLAG_ccr_mode				; current dive mode = CCR ?
-		bra		deco_show_plan2c			; NO  - branch
-		WIN_SMALL   .25,.155
-        STRCPY  "SP:"						; output setpoint used for calculation
-        movff   opt_sim_setpoint_number,lo
-        bsf     leftbind
-        output_8
-		bcf     leftbind
-        STRCAT_PRINT  ""
+	;---- Display Deco Mode
+	WIN_SMALL .0,.155
+	lfsr	FSR2,buffer
+	movff	opt_dive_mode,lo				; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	call	TFT_display_decotype_surface1
+	btfss	FLAG_ccr_mode					; current dive mode = CCR ?
+	bra		deco_show_plan2c				; NO  - branch
+	WIN_SMALL .25,.155
+	STRCPY	"SP:"							; output setpoint used for calculation
+	movff	opt_sim_setpoint_number,lo
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	STRCAT_PRINT ""
 
 deco_show_plan2c:
-        ;---- Display TTS result
-        WIN_SMALL   .0,.180
-        STRCPY_TEXT tTTS
-        STRCAT  ": "
-        movff   int_O_ascenttime+0,lo
-        movff   int_O_ascenttime+1,hi
-        bsf     leftbind
-        output_16
-		bcf     leftbind
-        STRCAT_PRINT "'"
+	;---- Display TTS result
+	WIN_SMALL .0,.180
+	STRCPY_TEXT tTTS
+	STRCAT	": "
+	movff	int_O_ascenttime+0,lo
+	movff	int_O_ascenttime+1,hi
+	bsf		leftbind
+	output_16
+	bcf		leftbind
+	STRCAT_PRINT "'"
 
-        ;---- Display CNS result
-        WIN_TOP     .205
-        STRCPY_TEXT tCNS2	; "CNS:"
-        movff   int_O_CNS_fraction+0,lo
-        movff   int_O_CNS_fraction+1,hi
-		TFT_color_code	warn_cns			; Color-code CNS output
-		bsf		leftbind
-	    output_16_3                     	; limit to 999 and display only (0-999)
-		bcf		leftbind
-        STRCAT  "%\x92"						; "->"
-		movff   int_O_normal_CNS_fraction+0,lo
-        movff   int_O_normal_CNS_fraction+1,hi
-		TFT_color_code	warn_cns			; Color-code CNS output
-		bsf		leftbind
-        output_16_3                     	; limit to 999 and display only (0-999)
-		bcf		leftbind
-        STRCAT_PRINT "%"
-		call	TFT_standard_color
-       
-        ;---- Loop through pages
+	;---- Display CNS result
+	WIN_TOP	.205
+	STRCPY_TEXT tCNS2						; "CNS:"
+	movff	int_O_CNS_fraction+0,lo
+	movff	int_O_CNS_fraction+1,hi
+	call	TFT_color_code_cns				; Color-code CNS output
+	bsf		leftbind
+	output_16_3								; limit to 999 and display only (0-999)
+	bcf		leftbind
+	STRCAT	"%\x92"							; "->"
+	movff	int_O_normal_CNS_fraction+0,lo
+	movff	int_O_normal_CNS_fraction+1,hi
+	call	TFT_color_code_cns				; Color-code CNS output
+	bsf		leftbind
+	output_16_3								; limit to 999 and display only (0-999)
+	bcf		leftbind
+	STRCAT_PRINT "%"
+	call	TFT_standard_color
+
+	;---- Loop through pages
 deco_show_plan_1:
-		; Clear the complete stop result column:
-		WIN_BOX_BLACK   .0, .239, .80, .159 ; top, bottom, left, right
-		
-        rcall   deco_show_plan_page
-        incf    decoplan_page,F
-        call    logbook_preloop_tasks
+	; Clear the complete stop result column:
+	WIN_BOX_BLACK .0, .239, .80, .159		; top, bottom, left, right
+
+	rcall	deco_show_plan_page
+	incf	decoplan_page,F
+	call	logbook_preloop_tasks
 deco_show_plan_2:
-        btfsc   switch_right
-        bra     deco_show_plan_3
-        btfsc   switch_left
-        return                                  ; Return to simulator menu
-        call    log_screendump_and_onesecond    ; Check if we need to make a screen shot and check for new second
-    	btfsc	sleepmode                       ; Timeout?
-        goto    restart
-        bra     deco_show_plan_2
+	btfsc	switch_right
+	bra		deco_show_plan_3
+	btfsc	switch_left
+	return									; Return to simulator menu
+	call	log_screendump_and_onesecond	; Check if we need to make a screen shot and check for new second
+	btfsc	sleepmode						; Timeout?
+	goto	restart
+	bra		deco_show_plan_2
 
 deco_show_plan_3:
-        btfss   decoplan_last_ceiling_shown
-        bra     deco_show_plan_1
-        ; All stops shown
-       
-;---- In CCR and pSCR mode, compute a BAILOUT deco plan -----------------------
+	btfss	decoplan_last_ceiling_shown
+	bra		deco_show_plan_1
+	; All stops shown
 
-    banksel common
-	movff	char_O_deco_status,WREG		; get deco calculation status
-	btfss	WREG,DECO_MODE_LOOP_FLAG	; check if in CCR or pSCR mode
-	bra     simulator_show_decoplan5_0  ; NO  - normal OC mode: just display
-    bsf     is_bailout                  ; YES - redo 2nd deco-plan in bailout mode
-	rcall   deco_planer_redo            ; 		redo plan computation
+;---- In CCR and pSCR mode, compute a BAILOUT deco plan -----------------------
+	movff	char_O_deco_status,WREG			; get deco calculation status
+	btfss	WREG,DECO_MODE_LOOP_FLAG		; check if in CCR or pSCR mode
+	bra		simulator_show_decoplan5_0		; NO  - normal OC mode: just display
+	bsf		is_bailout						; YES - redo 2nd deco-plan in bailout mode
+	rcall	deco_planer_redo				;       redo plan computation
 
-	btfss	decoplan_abort				; shall we abort?
-    bra     deco_show_plan              ; NO  - display bailout stops
-	return								; YES
+	btfss	decoplan_abort					; shall we abort?
+	bra		deco_show_plan					; NO  - display bailout stops
+	return									; YES
 
 
-;---- In OC+BAIL modes, show the gas Usage special page -----------------------
-simulator_show_decoplan5_0:    
-	
-    movlb   .1
-
-    ; Clear the complete stop result column:
-    WIN_BOX_BLACK   .0, .239, .80, .159 ; top, bottom, left, right
+;---- In OC+BAIL modes, show the gas usage special page -----------------------
+simulator_show_decoplan5_0:
+	; Clear the complete stop result column:
+	WIN_BOX_BLACK .0, .239, .80, .159		; top, bottom, left, right
 
-    movlw	.25
-    movwf	waitms_temp                 ; Row for gas list is .25+.25
-    clrf	wait_temp                   ; Gas counter
-    lfsr	FSR0,int_O_gas_volumes      ; Initialize indexed addressing.
+	movlw	.25
+	movwf	row_pos							; Row for gas list is .25+.25
+	clrf	gas_counter						; Gas counter
+	lfsr	FSR0,int_O_gas_volumes			; Initialize indexed addressing.
 
-    WIN_LEFT	.80                     ; Set column
-    call    TFT_standard_color   
+	WIN_LEFT .80							; Set column
+	call	TFT_standard_color
 
 simulator_show_decoplan5_loop:
-    movff   wait_temp,PRODL             ; Copy to PRODL first
-    incf    wait_temp,F                 ; Increment gas #
+	movff	gas_counter,PRODL				; Copy to PRODL first
+	incf	gas_counter,F					; Increment gas #
+
+	movff	gas_counter,WREG				; copy current gas to WREG for color-coding
+	call	TFT_color_code_gas				; set output color according to gas (1-5)
 
-	movff	wait_temp,WREG
-	rcall	simulator_color_gas			; set output color according to gas (number 1-5 in WREG)
+	lfsr	FSR2,buffer
+	bsf		short_gas_decriptions
+	bsf		divemode						; Tweak "customview_show_mix:"
+	call	gaslist_strcat_gas				; Input: PRODL : gas number (0..4), Output: "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	bcf		divemode						; Tweak "customview_show_mix:"
 
-    lfsr    FSR2,buffer
-    bsf     short_gas_decriptions
-    bsf     divemode                    ; Tweak "customview_show_mix:"
-    call    gaslist_strcat_gas          ; Input: PRODL : gas number (0..4), Output: "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
-    bcf     divemode                    ; Tweak "customview_show_mix:"
-    
 	movlw	.25
-	addwf	waitms_temp,F		        ; Increase row position
-	movff	waitms_temp,win_top         ; Set Row
+	addwf	row_pos,F						; Increase row position
+	movff	row_pos,win_top					; Set Row
+
+	movff	POSTINC0,lo						; Read (16bit) result, low first,
+	movff	POSTINC0,hi						; then high.
 
-    movff   POSTINC0,lo                 ; Read (16bit) result, low first,
-    movff   POSTINC0,hi                 ; then high.
+	movf	lo,W
+	andwf	hi,W
+	incf	WREG							; > 65535? 
+	bnz		simulator_show_decoplan5_1		; NO
+	STRCAT_PRINT ">65500"					; YES
+	bra		simulator_show_decoplan5_2
 
-    movf    lo,W
-    andwf   hi,W
-    incf    WREG						; > 65535? 
-    bnz     simulator_show_decoplan5_2	; NO
-	STRCAT_PRINT  ">65500"				; YES
-    bra     simulator_show_decoplan5_1
-    
-simulator_show_decoplan5_2: 
-    PUTC    ":"
-    bsf     leftbind
-    output_16                           	; No decimal anymore.
-    bcf     leftbind
-    STRCAT_PRINT  ""                    	; No unit: can be bars or litters.
-    
-    ; Loop for all 5 gas
 simulator_show_decoplan5_1:
-	movlw	d'5'                        	; list all five gases
-	cpfseq	wait_temp                   	; All gases shown?
+	PUTC	":"
+	bsf		leftbind
+	output_16								; No decimal anymore.
+	bcf		leftbind
+	STRCAT_PRINT ""
+
+	; Loop for all 5 gas
+simulator_show_decoplan5_2:
+	movlw	d'5'							; list all five gases
+	cpfseq	gas_counter						; All gases shown?
 	bra		simulator_show_decoplan5_loop	; No
-	
-    WIN_COLOR   color_greenish
-    WIN_SMALL   .80,.25
-	STRCPY_TEXT tGasUsage               	; OC: "Gas Usage"
-    STRCAT_PRINT  ":"
-    call	TFT_standard_color
-    call    logbook_preloop_tasks
+
+	WIN_COLOR color_greenish
+
+	movlw	.30
+	addwf	row_pos,F						; Increase row position
+	movff	row_pos,win_top					; Set Row
+	STRCPY_TEXT_PRINT tBarLiter				; "Bar Liter"
+
+	WIN_SMALL .80,.25
+	STRCPY_TEXT tGasUsage					; "Gas Usage"
+	STRCAT_PRINT ":"
+
+	call	TFT_standard_color
+	call	logbook_preloop_tasks
 
 simulator_show_decoplan5_3:
-	btfss   switch_right
+	btfss	switch_right
 	bra		simulator_show_decoplan5_3a
 	bcf		switch_right
-	clrf    decoplan_page
+	clrf	decoplan_page
 	bra		deco_show_plan_1				; toggle between stops plan and gas usage
 simulator_show_decoplan5_3a:
-    btfss   switch_left						
+	btfss	switch_left
 	bra		simulator_show_decoplan5_4
-    bcf     is_bailout                  	; Back to normal
-    bcf	    ccr_diluent_setup				; init for OC/Bailout
-    return                                  ; Return to simulator menu
-	
-simulator_show_decoplan5_4:
-    call    log_screendump_and_onesecond    ; Check if we need to make a screen shot and check for new second
-    btfsc	sleepmode                       ; Timeout?
-    goto    restart
-    bra     simulator_show_decoplan5_3
-
+	bcf		is_bailout						; Back to normal
+	bcf		ccr_diluent_setup				; init for OC/Bailout
+	return									; Return to simulator menu
 
-simulator_color_gas:				; set output color dependent on gas (1-5, in WREG)
-	movwf	tft_temp1				; used in TFT_set_color anyway
-	dcfsnz	tft_temp1,F
-	movlw	color_white				; color for Gas 1
-	dcfsnz	tft_temp1,F
-	movlw	color_green				; color for Gas 2
-	dcfsnz	tft_temp1,F
-	movlw	color_red				; Color for Gas 3
-	dcfsnz	tft_temp1,F
-	movlw	color_yellow			; color for Gas 4
-	dcfsnz	tft_temp1,F
-	movlw	color_cyan				; color for Gas 5
-	goto	TFT_set_color			; set color and return...
-	
-;=============================================================================
-;
-        global  do_demo_divemode
-do_demo_divemode:
-		extern	option_save_all
-		call	option_save_all				; Save all settings into EEPROM before starting simulation
- 		call    deco_push_tissues_to_vault
-        banksel common                  	; Bank1
+simulator_show_decoplan5_4:
+	call	log_screendump_and_onesecond	; Check if we need to make a screen shot and check for new second
+	btfsc	sleepmode						; Timeout?
+	goto	restart
+	bra		simulator_show_decoplan5_3
 
-		; +++ COMMENTED OUT FOR TESTING PURPOSE ONLY !!! +++
-		; +++ DO NOT COMMENT OUT IN OPERATIONAL USE  !!! +++
-		bsf	restore_deco_data			; Restore tissue and CNS after simulator use
-
-		bcf	pressure_refresh
-		btfss	pressure_refresh			; Wait for sensor
-		bra	$-2
-
-		bsf	simulatormode_active			; Set Flag
-        ; Compute dive ambient conditions
-        banksel char_I_bottom_depth
-        movf    char_I_bottom_depth,W
-        mullw   .100
-        movff   PRODL,rel_pressure+0
-        movff   PRODH,rel_pressure+1
-        movlw   LOW(.1000)
-        addwf   PRODL,W
-        movff   WREG,sim_pressure+0
-        movlw   HIGH(.1000)
-        addwfc  PRODH,W
-        movff   WREG,sim_pressure+1
-
-        banksel common                  	; Bank1
-		bsf		divemode
-		goto	diveloop					; Switch into Divemode!
-
-
-        END
\ No newline at end of file
+	END
\ No newline at end of file
--- a/src/sleepmode.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/sleepmode.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,113 +1,129 @@
 ;=============================================================================
 ;
-;   File sleepmode.asm
+;   File sleepmode.asm											Version 2.98
 ;
 ;   Sleepmode
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
-;=============================================================================
+;==============================================================================
 ; HISTORY
 ;  2011-08-12 : [mH] moving from OSTC code
 
-#include    "hwos.inc"                  ; Mandatory header
-#include 	"shared_definitions.h"      ; Mailbox from/to p2_deco.c
-#include	"surfmode.inc"
-#include	"tft.inc"
-#include	"isr.inc"
-#include	"start.inc"
-#include	"adc_lightsensor.inc"
-#include	"math.inc"
-#include	"ms5541.inc"
-#include	"wait.inc"
-#include	"eeprom_rs232.inc"
-#include 	"external_flash.inc"
-#include	"ghostwriter.inc"
-#include    "i2c.inc"
-#include    "mcp.inc"
+#include "hwos.inc"							; Mandatory header
+#include "shared_definitions.h"				; Mailbox from/to p2_deco.c
+#include "surfmode.inc"
+#include "tft.inc"
+#include "isr.inc"
+#include "start.inc"
+#include "adc_lightsensor.inc"
+#include "math.inc"
+#include "ms5541.inc"
+#include "wait.inc"
+#include "eeprom_rs232.inc"
+#include "external_flash.inc"
+#include "ghostwriter.inc"
+#include "i2c.inc"
+#include "mcp.inc"
 
 
-    extern  vault_decodata_into_eeprom
+	extern	vault_decodata_into_eeprom
+
+
+	;---- Private local variables -------------------------------------------------
 
-gui     CODE
+	CBLOCK	local1						; max size is 16 Byte !!!
+		sm_temp1						; sleepmode temporary 1
+		sm_temp2						; sleepmode temporary 2
+		sm_timer1						; timer for pressure check every 10 seconds
+		sm_timer2						; timer for 10 minutes tasks (updating of tissues)
+		sm_timer3						; timer for 15 minutes tasks (updating of surface pressure)
+	ENDC								; used: 5 byte, remaining: 11 byte
+
+
+gui	CODE
+
+;==============================================================================
 
 	global	sleeploop
-sleeploop:							; enter sleepmode!
-    call    disable_ir_s8           ; IR/S8 off
-    call    mcp_sleep
-	bcf	LEDg
-	bcf	LEDr
-	movff   menupos3,customview_surfmode; save last customview
+sleeploop:									; enter sleepmode!
+	call	disable_ir_s8					; IR/S8 off
+	call	mcp_sleep
+	bcf		LEDg
+	bcf		LEDr
 	call	TFT_Display_FadeOut
-	call	TFT_DisplayOff			; display off
-	bcf     enable_screen_dumps     ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-	call	disable_rs232			; USB off
-	call    vault_decodata_into_eeprom  ; store deco data
-	call	ext_flash_enable_protection	; enable write protection for external flash
-	call	update_battery_registers	; update battery registers into EEPROM
-	clrf	divemins+0
-	clrf	divemins+1
-	clrf	apnoe_max_pressure+0
-	clrf	apnoe_max_pressure+1
+	call	TFT_DisplayOff					; display off
+	bcf		enable_screen_dumps				; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	call	disable_rs232					; USB off
+	call	vault_decodata_into_eeprom		; store deco data
+	call	ext_flash_enable_protection		; enable write protection for external flash
+	call	update_battery_registers		; update battery registers into EEPROM
+	clrf	sm_temp1
+	clrf	sm_temp2
+	clrf	sm_timer1
+	clrf	sm_timer2
+	clrf	sm_timer3
 	call	speed_normal
-	bsf	no_sensor_int			; No sensor interrupt
-	clrf	ADCON0				; Power-Down ADC Module
+	bsf		no_sensor_int					; No sensor interrupt
+	clrf	ADCON0							; Power-Down ADC Module
+
 sleeploop_pre:
-	bcf	deep_sleep			; Normal sleepmode
-	call    I2C_sleep_accelerometer
-	call    I2C_sleep_compass
-        btfss   analog_switches
-        bra	sleeploop_loop     ; no analog switches
+	bcf		deep_sleep						; Normal sleepmode
+	call	I2C_sleep_accelerometer
+	call	I2C_sleep_compass
+	btfss	analog_switches
+	bra		sleeploop_loop					; no analog switches
 
-        bsf     power_sw1
-        btfss   power_sw1
-        bra     $-4
-        bsf     power_sw2
-        btfss   power_sw2
-        bra     $-4
-	movlw	.4				; Wait for button circuity
-	movwf	apnoe_max_pressure+0		; Used as temp
+	bsf		power_sw1
+	btfss	power_sw1
+	bra		$-4
+	bsf		power_sw2
+	btfss	power_sw2
+	bra		$-4
+	movlw	.4								; Wait for button circuity
+	movwf	sm_temp1			; Used as temp
 	bcf	onesecupdate
+
 sleeploop_pre1:
 	rcall	sleepmode_sleep
-	btfss	onesecupdate			; Wait 1 second
-	bra	sleeploop_pre1
-	bcf	onesecupdate
-	decfsz	apnoe_max_pressure+0,F
-	bra	sleeploop_pre1
+	btfss	onesecupdate					; Wait 1 second
+	bra		sleeploop_pre1
+	bcf		onesecupdate
+	decfsz	sm_temp1,F
+	bra		sleeploop_pre1
+	movlw	.32								; Wait for button circuity
+	movwf	sm_temp1			; Used as temp
 
-	movlw	.32				; Wait for button circuity
-	movwf	apnoe_max_pressure+0		; Used as temp
 sleeploop_pre2:	
 	call	get_analog_switches
-	decfsz	apnoe_max_pressure+0,F
-	bra	sleeploop_pre2
-	
-	bcf	PIR1,TMR1IF
-	bcf	INTCON,INT0IF
-	bcf	INTCON3,INT1IF
-	bcf	PIR5,TMR7IF
-	bcf	switch_left
-	bcf	switch_right
-	bcf	analog_sw2_pressed
-	bcf	analog_sw1_pressed
-	bsf	PIE1,0		; (Re)Start Timer 1 Interrupt
-	bsf	PIE2,1		; (Re)Start Timer 2 Interrupt
-	bsf	PIE5,3		; (Re)Start Timer 7 Interrupt
-	bsf	INTCON,4	; (Re)Start INT0 Interrupt
-	bsf	INTCON3,3	; (Re)Start INT1 Interrupt
+	decfsz	sm_temp1,F
+	bra		sleeploop_pre2
+
+	bcf		PIR1,TMR1IF
+	bcf		INTCON,INT0IF
+	bcf		INTCON3,INT1IF
+	bcf		PIR5,TMR7IF
+	bcf		switch_left
+	bcf		switch_right
+	bcf		analog_sw2_pressed
+	bcf		analog_sw1_pressed
+	bsf		PIE1,0							; (Re)Start Timer 1 Interrupt
+	bsf		PIE2,1							; (Re)Start Timer 2 Interrupt
+	bsf		PIE5,3							; (Re)Start Timer 7 Interrupt
+	bsf		INTCON,4						; (Re)Start INT0 Interrupt
+	bsf		INTCON3,3						; (Re)Start INT1 Interrupt
 
 sleeploop_loop:
-	btfsc	onesecupdate			; one second in sleep?
-	rcall	onesec_sleep			; check switches, check pressure sensor, etc.
+	btfsc	onesecupdate					; one second in sleep?
+	rcall	onesec_sleep					; check switches, check pressure sensor, etc.
+
+	btfss	sleepmode						; wake up? (This bit will be set in other routines)
+	goto	restart							; yes
 
-	btfss	sleepmode			; wake up? (This bit will be set in other routines)
-	goto	restart				; yes
-	
-	btfsc	deep_sleep			; Enter deep sleep?
-	bra	deepsleep			; Yes
+	btfsc	deep_sleep						; Enter deep sleep?
+	bra		deepsleep						; Yes
+
 no_deepsleep:
-    
-	rcall 	sleepmode_sleep			; Wait at least 35ms (every 62,5ms Timer7 wakeup)
+	rcall	sleepmode_sleep					; Wait at least 35ms (every 62,5ms Timer7 wakeup)
 
 	; Any button pressed in sleep?
 ;	btfsc	switch_left	
@@ -115,207 +131,229 @@
 ;	btfsc	switch_right
 ;	rcall	onesec_sleep1a
 ;
-;	btfss	sleepmode				; wake up? (This bit will be set in other routines)
-;	goto	restart					; yes
+;	btfss	sleepmode						; wake up? (This bit will be set in other routines)
+;	goto	restart							; yes
 
-	bra		sleeploop_loop			; do loop until someting happens
+	bra		sleeploop_loop					; do loop until something happens
 
 deepsleep:
-	btfss   analog_switches
-        bra	no_deepsleep			; no analog switches, no deep sleep required
+	btfss	analog_switches
+	bra		no_deepsleep					; no analog switches, no deep sleep required
 
-	bcf	PIE1,0		; Stop Timer 1 Interrupt
-	bcf	PIE2,1		; Stop Timer 2 Interrupt
-	bcf	PIE5,3		; Stop Timer 7 Interrupt
-	bcf	INTCON,4	; Stop INT0 Interrupt
-	bcf	INTCON3,3	; Stop INT1 Interrupt
-	bcf	power_sw1
-	bcf	power_sw2
-	rcall	deepsleep_get_accel	    ; Read accelerometer into WREG
-	movwf	apnoe_max_pressure+0	    ; Store init value
-    
-deepsleep_loop:	
-    	btfsc	onesecupdate			; one second in sleep?
-	rcall	onesec_deepsleep		; check accelerometer
+	bcf		PIE1,0							; Stop Timer 1 Interrupt
+	bcf		PIE2,1							; Stop Timer 2 Interrupt
+	bcf		PIE5,3							; Stop Timer 7 Interrupt
+	bcf		INTCON,4						; Stop INT0 Interrupt
+	bcf		INTCON3,3						; Stop INT1 Interrupt
+	bcf		power_sw1
+	bcf		power_sw2
+	rcall	deepsleep_get_accel				; Read accelerometer into WREG
+	movwf	sm_temp1			; Store init value
 
-	btfsc	onesecupdate			; one second in sleep?
-	rcall	onesec_sleep			; check switches, check pressure sensor, etc.
+deepsleep_loop:
+	btfsc	onesecupdate					; one second in sleep?
+	rcall	onesec_deepsleep				; check accelerometer
+
+	btfsc	onesecupdate					; one second in sleep?
+	rcall	onesec_sleep					; check switches, check pressure sensor, etc.
 
 	rcall	sleepmode_sleep
-    
-	btfss	deep_sleep			; Enter normal sleepmode?
-	bra	sleeploop_pre			; Yes
 
-	bra	deepsleep_loop			; do loop until someting happens
+	btfss	deep_sleep						; Enter normal sleepmode?
+	bra		sleeploop_pre					; Yes
+
+	bra		deepsleep_loop					; do loop until something happens
 
 onesec_deepsleep:
-	rcall	deepsleep_get_accel	    ; Read accelerometer into WREG
-	subwf	apnoe_max_pressure+0,W	    ; apnoe_max_pressure+0 - accel_DZ+0 -> WREG
-	btfsc	STATUS,N		    ; Result negative?
-	negf	WREG			    ; Yes, negate it
-	movwf	apnoe_max_pressure+1	    ; change of acceleration in Z-axis
-	movlw	.50			    ; Threshold (mg)
-	cpfslt	apnoe_max_pressure+1	    ; bigger then the threshold?
-	bcf	deep_sleep		    ; Yes!
+	rcall	deepsleep_get_accel				; Read accelerometer into WREG
+	subwf	sm_temp1,W			; sm_temp1 - accel_DZ+0 -> WREG
+	btfsc	STATUS,N						; Result negative?
+	negf	WREG							; Yes, negate it
+	movwf	sm_temp2			; change of acceleration in Z-axis
+	movlw	.50								; Threshold (mg)
+	cpfslt	sm_temp2			; bigger then the threshold?
+	bcf		deep_sleep						; Yes!
 
 ;	extern	piezo_config_tx
-;	movff	apnoe_max_pressure+0,WREG
+;	movff	sm_temp1,WREG
 ;	call	piezo_config_tx
 ;	movff	accel_DZ+0,WREG
 ;	call	piezo_config_tx
-;	movff	apnoe_max_pressure+1,WREG
+;	movff	sm_temp2,WREG
 ;	call	piezo_config_tx
+
 	return
-	
+
 deepsleep_get_accel:
-	call    I2C_init_compass	    ; required for compass1
-	call	I2C_init_accelerometer	    ; required for compass2
-	call    I2C_RX_accelerometer        ; read Accelerometer
-	call    I2C_sleep_compass	    ; required for compass1
-	call	I2C_sleep_accelerometer	    ; required for compass2
+	call	I2C_init_compass				; required for compass1
+	call	I2C_init_accelerometer			; required for compass2
+	call	I2C_RX_accelerometer			; read Accelerometer
+	call	I2C_sleep_compass				; required for compass1
+	call	I2C_sleep_accelerometer			; required for compass2
 	movff	accel_DZ+0,WREG
 	return
-	
+
 onehour_sleep:
-    call	update_battery_registers    ; update battery registers into EEPROM
-    call    vault_decodata_into_eeprom  ; update deco data
-    bcf		onehourupdate               ; all done
-    return
+	call	update_battery_registers		; update battery registers into EEPROM
+	call	vault_decodata_into_eeprom		; update deco data
+	bcf		onehourupdate					; all done
+	return
 
 onemin_sleep:
-	btfsc	onehourupdate		; one hour in sleep?
-	rcall   onehour_sleep           ; Yes
+	btfsc	onehourupdate					; one hour in sleep?
+	rcall	onehour_sleep					; Yes
+
+	btfsc	battery_gauge_available
+	call	get_battery_voltage				; Check for charger
 
-	btfsc   battery_gauge_available
-	call    get_battery_voltage     ; Check for charger
-	
-    ;---- adjust airpressure compensation any 15 minutes
-	incf	divemins+1,F			; counts to 14...
-	movlw	d'14'
-	cpfsgt	divemins+1
-	bra		onemin_sleep2			; 15 minutes not done!
-
-; Tasks every 15 minutes in sleep
-	bsf	deep_sleep		; enter deep-sleep mode
-
-	clrf	divemins+1				; reset counter
-
-	call	deco_calc_CNS_decrease_15min		; compute CNS decay in sleep only
+	;---- update tissues and CNS every 10 minutes when gradient factor is 0 (no supersaturation in any tissue any more)
+	movff	int_O_gradient_factor+0,WREG	; get gradient factor, only the lower byte is used for the value
+	tstfsz	WREG							; gradient factor = 0?
+	bra		onemin_sleep1					; NO - continue with air pressure compensation
+	incf	sm_timer2,F						; count-up...
+	movlw	d'9'							; ...to 9
+	cpfsgt	sm_timer2						; 10 minutes over?
+	bra		onemin_sleep1					; NO - continue with air pressure compensation
+	clrf	sm_timer2						; reset counter
+	SAFE_2BYTE_COPY amb_pressure, int_I_pres_respiration ; copy pressure to deco routine
+	call	deco_calc_dive_interval_10min	; calculate 10 minutes under surface conditions
 	banksel	common
 
-	SAFE_2BYTE_COPY last_surfpressure_15min, last_surfpressure_30min		; save older airpressure
-	SAFE_2BYTE_COPY amb_pressure, last_surfpressure_15min		; save new airpressure
+onemin_sleep1:
+	;---- adjust air pressure compensation any 15 minutes
+	incf	sm_timer3,F						; count-up...
+	movlw	d'14'							; ...to 14
+	cpfsgt	sm_timer3						; 15 minutes over?
+	bra		onemin_sleep2					; NO - continue with every-minute-tasks
 
-	movlw	LOW		max_surfpressure
-	movff	WREG,sub_a+0				; max. "allowed" airpressure in mbar
-	movlw	HIGH	max_surfpressure
-	movff	WREG,sub_a+1				; max. "allowed" airpressure in mbar
+	; Tasks every 15 minutes in sleep
+	bsf		deep_sleep						; enter deep-sleep mode
+	clrf	sm_timer3						; reset counter
+
+	SAFE_2BYTE_COPY last_surfpressure_15min, last_surfpressure_30min	; save older air pressure
+	SAFE_2BYTE_COPY amb_pressure,            last_surfpressure_15min	; save new   air pressure
+
+	movlw	LOW  max_surfpressure
+	movff	WREG,sub_a+0					; max. "allowed" air pressure in mbar
+	movlw	HIGH max_surfpressure
+	movff	WREG,sub_a+1					; max. "allowed" air pressure in mbar
 	movff	last_surfpressure_15min+0,sub_b+0
 	movff	last_surfpressure_15min+1,sub_b+1
-	call	subU16					; sub_c = sub_a - sub_b
-	btfss	neg_flag                ; Is 1080mbar < amb_pressure ?
-	bra		onemin_sleep2			; NO: current airpressure is lower then "allowed" airpressure, ok!
+	call	subU16							; sub_c = sub_a - sub_b
+	btfss	neg_flag						; Is 1080mbar < amb_pressure ?
+	bra		onemin_sleep2					; NO: current air pressure is lower then "allowed" air pressure, ok!
 
-    ; not ok! Overwrite with max. "allowed" airpressure
-	movlw	LOW		max_surfpressure
-	movff	WREG,last_surfpressure_15min+0	; max. "allowed" airpressure in mbar
-	movlw	HIGH	max_surfpressure
-	movff	WREG,last_surfpressure_15min+1	; max. "allowed" airpressure in mbar
+	; not ok! Overwrite with max. "allowed" air pressure
+	movlw	LOW  max_surfpressure
+	movff	WREG,last_surfpressure_15min+0	; max. "allowed" air pressure in mbar
+	movlw	HIGH max_surfpressure
+	movff	WREG,last_surfpressure_15min+1	; max. "allowed" air pressure in mbar
 
 onemin_sleep2:
-; Tasks every minute in sleep
-    SAFE_2BYTE_COPY amb_pressure, int_I_pres_respiration ; LOW copy pressure to deco routine
-	call	deco_calc_wo_deco_step_1_min	; "calc_tissue_sleep"
-	banksel		common
+	; Tasks every minute in sleep
+
+	;---- update tissues and CNS every minute when gradient factor is >0 (supersaturation in at least one tissue)
+	movff	int_O_gradient_factor+0,WREG	; get gradient factor, only the lower byte is used for the value
+	tstfsz	WREG							; gradient factor = 0?
+	bra		onemin_sleep3					; NO  - do tissue update on 1 minute schedule
+	bra		onemin_sleep4					; YES - tissue update is done on 10 minutes schedule
 
-	bcf		oneminupdate			; all done
+onemin_sleep3:
+	SAFE_2BYTE_COPY amb_pressure, int_I_pres_respiration ; copy pressure to deco routine
+	call	deco_calc_dive_interval_1min	; calculate 1 minute under surface conditions
+	banksel	common
+
+onemin_sleep4:
+	bcf		oneminupdate					; all done
 	return
 
 onesec_sleep:
-	btfsc	oneminupdate			; one minute in sleep?
-	rcall	onemin_sleep			; do oneminute tasks, e.g. calculate desaturation
+	btfsc	oneminupdate					; one minute in sleep?
+	rcall	onemin_sleep					; do one-minute tasks, e.g. calculate desaturation
 
-	btfsc   battery_gauge_available
-	call    get_battery_voltage     ; Check for charger
+	btfsc	battery_gauge_available
+	call	get_battery_voltage				; Check for charger
 
-	incf	divemins+0,F 			; counts to #test_pressure_in_sleep (10)
+	incf	sm_timer1,F						; counts to #test_pressure_in_sleep (10)
 	movlw	d'10'
-	cpfsgt	divemins+0			; here: temp variable
-	bra	onesec_sleep1			; #test_pressure_in_sleep not done yet
+	cpfsgt	sm_timer1						; here: temp variable
+	bra		onesec_sleep1					; #test_pressure_in_sleep not done yet
 
-	clrf	divemins+0				; clear counter
-	rcall	pressuretest_sleep_fast	; Gets pressure without averaging (faster!)
-        ; compare current ambient pressure with wake_up_from_sleep
-	movlw	LOW	wake_up_from_sleep
-	movwf	sub_a+0					; power on if ambient pressure is greater threshold
-	movlw	HIGH	wake_up_from_sleep
-	movwf	sub_a+1					; power on if ambient pressure is greater threshold
+	clrf	sm_timer1						; clear counter
+	rcall	pressuretest_sleep_fast			; Gets pressure without averaging (faster!)
+	; compare current ambient pressure with wake_up_from_sleep
+	movlw	LOW  wake_up_from_sleep
+	movwf	sub_a+0							; power on if ambient pressure is greater threshold
+	movlw	HIGH wake_up_from_sleep
+	movwf	sub_a+1							; power on if ambient pressure is greater threshold
 	SAFE_2BYTE_COPY amb_pressure, sub_b
-	call	subU16					; Is (1160mbar - averaged(amb_pressure)) < 0 ?
-	btfsc	neg_flag				; Wake up from Sleep?
-	bra		onesec_sleep1a			; Yes, skip button checks, wake up!
+	call	subU16							; Is (1160mbar - averaged(amb_pressure)) < 0 ?
+	btfsc	neg_flag						; Wake up from Sleep?
+	bra		onesec_sleep1a					; Yes, skip button checks, wake up!
 
-    btfsc   battery_gauge_available
-    bra     onesec_sleep1           ; No wake-up with cR hardware
-    btfsc   vusb_in                 ; USB plugged in?
- 	bra		onesec_sleep1a			; Yes, skip button checks, wake up!
+	btfsc	battery_gauge_available
+	bra		onesec_sleep1					; No wake-up with cR hardware
+	btfsc	vusb_in							; USB plugged in?
+	bra		onesec_sleep1a					; Yes, skip button checks, wake up!
 
 onesec_sleep1:
-	bcf	onesecupdate			; all done.
-; Check switches
+	bcf	onesecupdate						; all done.
+	; Check switches
 	btfsc	switch_left
-	bra	onesec_sleep1a
+	bra		onesec_sleep1a
 	btfsc	switch_right
-	bra	onesec_sleep1a				
+	bra		onesec_sleep1a
+
 ; No button pressed
-;	bcf		INTCON,INT0IF				; Clear flag
-;	bcf		INTCON3,INT1IF				; Clear flag
+;	bcf		INTCON,INT0IF					; Clear flag
+;	bcf		INTCON3,INT1IF					; Clear flag
+
 	return
 
-onesec_sleep1a:	; At least one button pressed or amb_pressure > wake_up_from_sleep
-;	bcf		INTCON,INT0IF				; Clear flag
-;	bcf		INTCON3,INT1IF				; Clear flag
-	bcf		sleepmode                   ; wake up!
+onesec_sleep1a:								; At least one button pressed or amb_pressure > wake_up_from_sleep
+;	bcf		INTCON,INT0IF					; Clear flag
+;	bcf		INTCON3,INT1IF					; Clear flag
+	bcf		sleepmode						; wake up!
 	SAFE_2BYTE_COPY last_surfpressure_30min, amb_pressure	; copy for compatibility
 	movlw	.0
-	movff	WREG,sensor_state_counter	; Reset sensor state counter
-	bcf		no_sensor_int				; normal sensor interrupt mode
+	movff	WREG,sensor_state_counter		; Reset sensor state counter
+	bcf		no_sensor_int					; normal sensor interrupt mode
 	return
-	
-pressuretest_sleep_fast:				; Get pressure without averaging (Faster to save some power in sleep mode)
-	banksel 	isr_backup              ; Back to Bank0 ISR data
-	clrf		amb_pressure_avg+0  	; pressure average registers
-	clrf		amb_pressure_avg+1
-	clrf		temperature_avg+0
-	clrf		temperature_avg+1
-	call		get_temperature_start	; and start temperature integration (73,5us)
-	banksel		common
-	rcall 		sleepmode_sleep			; Wait at least 35ms (every 62,5ms Timer7 wakeup)
-	rcall 		sleepmode_sleep			; Wait at least 35ms (every 62,5ms Timer7 wakeup)
-	banksel 	isr_backup              ; Back to Bank0 ISR data
-	call		get_temperature_value	; State 1: Get temperature	
-	call		get_pressure_start	 	; Start pressure integration.
-	banksel 	common
-	rcall 		sleepmode_sleep			; Wait at least 35ms (every 62,5ms Timer7 wakeup)
-	rcall 		sleepmode_sleep			; Wait at least 35ms (every 62,5ms Timer7 wakeup)
-	banksel 	isr_backup              ; Back to Bank0 ISR data
-	call		get_pressure_value		; State2: Get pressure (51us)
-	call		calculate_compensation		; calculate temperature compensated pressure (27us)
-	banksel 	common
-    SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure	; copy for compatibility
+
+pressuretest_sleep_fast:					; Get pressure without averaging (Faster to save some power in sleep mode)
+	banksel	isr_backup						; Back to Bank0 ISR data
+	clrf	amb_pressure_avg+0				; pressure average registers
+	clrf	amb_pressure_avg+1
+	clrf	temperature_avg+0
+	clrf	temperature_avg+1
+	call	get_temperature_start			; and start temperature integration (73,5us)
+	banksel	common
+	rcall	sleepmode_sleep					; Wait at least 35ms (every 62,5ms Timer7 wakeup)
+	rcall	sleepmode_sleep					; Wait at least 35ms (every 62,5ms Timer7 wakeup)
+	banksel	isr_backup						; Back to Bank0 ISR data
+	call	get_temperature_value			; State 1: Get temperature
+	call	get_pressure_start				; Start pressure integration.
+	banksel	common
+	rcall	sleepmode_sleep					; Wait at least 35ms (every 62,5ms Timer7 wakeup)
+	rcall	sleepmode_sleep					; Wait at least 35ms (every 62,5ms Timer7 wakeup)
+	banksel	isr_backup						; Back to Bank0 ISR data
+	call	get_pressure_value				; State2: Get pressure (51us)
+	call	calculate_compensation			; calculate temperature compensated pressure (27us)
+	banksel	common
+	SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure	; copy for compatibility
 	return
 
 sleepmode_sleep:
-	banksel 	0xF16				; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
-	clrf		T7GCON				; Reset Timer7 Gate Control register
-	movlw		b'10001101'			; 1:1 Prescaler -> 2seconds@32768Hz, not synced
-	movwf		T7CON
+	banksel 0xF16							; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM.
+	clrf	T7GCON							; Reset Timer7 Gate Control register
+	movlw	b'10001101'						; 1:1 Prescaler -> 2seconds@32768Hz, not synced
+	movwf	T7CON
 	sleep
 	sleep
-	clrf		T7GCON				; Reset Timer7 Gate Control register
-	movlw		b'10001001'			; 1:1 Prescaler -> 2seconds@32768Hz, synced
-	movwf		T7CON
-    banksel 	common              ; Bank1
+	clrf	T7GCON							; Reset Timer7 Gate Control register
+	movlw	b'10001001'						; 1:1 Prescaler -> 2seconds@32768Hz, synced
+	movwf	T7CON
+	banksel	common							; Bank1
 	return
 
  END
\ No newline at end of file
--- a/src/start.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/start.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File start.asm									REFACTORED VERSION	V2.95a1
+;   File start.asm									REFACTORED VERSION	V2.98
 ;
 ;   Startup subroutines
 ;
@@ -9,219 +9,223 @@
 ; HISTORY
 ;  2011-08-06 : [mH] moving from OSTC code
 
-#include    "hwos.inc"                  ; Mandatory header
-#include	"ms5541.inc"
-#include	"isr.inc"
-#include 	"shared_definitions.h"      ; Mailbox from/to p2_deco.c
-#include	"eeprom_rs232.inc"
-#include	"math.inc"
-#include	"tft.inc"
-#include	"surfmode.inc"
-#include	"wait.inc"
-#include	"rtc.inc"
-#include 	"external_flash.inc"
-#include	"convert.inc"
-#include	"strings.inc"
-#include	"tft_outputs.inc"
-#include    "adc_lightsensor.inc"
-#include    "i2c.inc"
+#include "hwos.inc"							; Mandatory header
+#include "ms5541.inc"
+#include "isr.inc"
+#include "shared_definitions.h"				; Mailbox from/to p2_deco.c
+#include "eeprom_rs232.inc"
+#include "math.inc"
+#include "tft.inc"
+#include "surfmode.inc"
+#include "wait.inc"
+#include "rtc.inc"
+#include "external_flash.inc"
+#include "convert.inc"
+#include "strings.inc"
+#include "tft_outputs.inc"
+#include "adc_lightsensor.inc"
+#include "i2c.inc"
 
-        extern  init_ostc
-        extern  option_restore_all
+	extern	init_ostc
+	extern	option_restore_all
+	extern	deco_setup
+	extern	restore_decodata_from_eeprom
+	extern	color_image
+	extern	oPressureAdjust
+	extern	option_reset
+	extern	option_save
+	extern	option_save_all
+	extern	option_check_all
+	extern	do_new_battery_select
+	extern	use_old_batteries
+	extern	use_old_prior_209
 
 ;=============================================================================
 ; Reset vector: What to do on device wake-up and hard reset.
 ;
-reset_v code     0x00000
-;    goto    start
-	goto	0x1FF00     	; Bootloader
+reset_v code 0x00000
 
-	ORG     0x00004			; Needed for second-level bootloader
+;	goto	start
+	goto	0x1FF00							; Bootloader
+
+	ORG		0x00004							; Needed for second-level bootloader
 	goto	start
+
 ;=============================================================================
-boot   CODE
-	global start
+
+boot	CODE
 
+	global	start
 start:
-	lfsr	FSR0,0x000				; Clear rambank 0-14
+	lfsr	FSR0,0x000						; Clear rambank 0-14
 clear_rambank:
 	clrf	POSTINC0
 	movlw	0x0F
-	cpfseq	FSR0H					; Bank 14 done?
-	bra		clear_rambank			; clear...
+	cpfseq	FSR0H							; Bank 14 done?
+	bra		clear_rambank					; clear...
 
-    call    init_ostc
+	call	init_ostc
 
-    ; Get button type from Bootloader-Info
-	movlw   .16
-	movff   WREG,analog_counter	; init averaging
-	bsf	analog_switches
-	movlw   0x7C
-	movwf   TBLPTRL
-	movlw   0xF7
-	movwf   TBLPTRH
-	movlw   0x01
-	movwf   TBLPTRU
-	TBLRD*+							; Reads 0x07 for analog buttons
+	; Get button type from Bootloader-Info
+	movlw	.16
+	movff	WREG,analog_counter				; init averaging
+	bsf		analog_switches
+	movlw	0x7C
+	movwf	TBLPTRL
+	movlw	0xF7
+	movwf	TBLPTRH
+	movlw	0x01
+	movwf	TBLPTRU
+	TBLRD*+									; Reads 0x07 for analog buttons
 	movlw	0x07
 	cpfseq	TABLAT
-	bcf	analog_switches
+	bcf		analog_switches
 
 	; read button polarity
-	movlw	LOW	.897
+	movlw	LOW  .897
 	movwf	EEADR
-	movlw	HIGH	.897
+	movlw	HIGH .897
 	movwf	EEADRH
-	call    read_eeprom             ; EEDATA into EEPROM@EEADR
-	clrf	EEADRH			    	; Reset EEADRH
-	movff	EEDATA,button_polarity	; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
+	call	read_eeprom						; EEDATA into EEPROM@EEADR
+	clrf	EEADRH							; Reset EEADRH
+	movff	EEDATA,button_polarity			; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
 
-; Air pressure compensation	after reset
-	call	get_calibration_data	; Get calibration data from pressure sensor
-	banksel common                  ; get_calibration_data uses isr_backup
+	; Air pressure compensation	after reset
+	call	get_calibration_data			; get calibration data from pressure sensor
+	banksel	common							; get_calibration_data uses isr_backup
 
-	call	TFT_DisplayOff			; display off
-	bsf     LEDr                    ; Status LED
-	bcf	pressure_refresh
-; First pass will not have valid temperature!
-	btfss	pressure_refresh 		; Air pressure compensation
+	call	TFT_DisplayOff					; turn off display
+	bsf		LEDr							; turn on  red LED
+	bcf		pressure_refresh
+	; First pass will not have valid temperature!
+	btfss	pressure_refresh				; Air pressure compensation
 	bra		$-2
-    ; Second pass
+	; Second pass
 	bcf		pressure_refresh
-	btfss	pressure_refresh 		; Air pressure compensation
+	btfss	pressure_refresh				; Air pressure compensation
 	bra		$-2
-    bcf     LEDr
-    
+	bcf		LEDr
+
 	clrf	rel_pressure+0
 	clrf	rel_pressure+1
 	clrf	surface_interval+0
 	clrf	surface_interval+1
 
-    SAFE_2BYTE_COPY amb_pressure, last_surfpressure
+	SAFE_2BYTE_COPY amb_pressure, last_surfpressure
 
-	movlw	LOW		max_surfpressure
-	movff	WREG,sub_a+0				; max. "allowed" airpressure in mbar
-	movlw	HIGH	max_surfpressure
-	movff	WREG,sub_a+1				; max. "allowed" airpressure in mbar
+	movlw	LOW  max_surfpressure
+	movff	WREG,sub_a+0					; max. "allowed" air pressure in mbar
+	movlw	HIGH max_surfpressure
+	movff	WREG,sub_a+1					; max. "allowed" air pressure in mbar
 	movff	last_surfpressure+0,sub_b+0
 	movff	last_surfpressure+1,sub_b+1
-	call	subU16						; sub_c = sub_a - sub_b
-	btfss	neg_flag                	; Is 1080mbar < amb_pressure ?
-	bra		start_copy_pressure			; NO: current airpressure is lower then "allowed" airpressure, ok!
+	call	subU16							; sub_c = sub_a - sub_b
+	btfss	neg_flag						; Is 1080mbar < amb_pressure ?
+	bra		start_copy_pressure				; NO: current air pressure is lower then "allowed" air pressure, ok!
 
-    ; not ok! Overwrite with max. "allowed" airpressure
-	movlw	LOW		max_surfpressure
-	movff	WREG,last_surfpressure+0	; max. "allowed" airpressure in mbar
-	movlw	HIGH	max_surfpressure
-	movff	WREG,last_surfpressure+1	; max. "allowed" airpressure in mbar
+	; not ok! Overwrite with max. "allowed" air pressure
+	movlw	LOW  max_surfpressure
+	movff	WREG,last_surfpressure+0		; max. "allowed" air pressure in mbar
+	movlw	HIGH max_surfpressure
+	movff	WREG,last_surfpressure+1		; max. "allowed" air pressure in mbar
 
 start_copy_pressure:
 	movff	last_surfpressure+0,last_surfpressure_15min+0
 	movff	last_surfpressure+1,last_surfpressure_15min+1
 	movff	last_surfpressure+0,last_surfpressure_30min+0
-	movff	last_surfpressure+1,last_surfpressure_30min+1	; resets all airpressure registers
-
-; reset deco data for surface mode
-	movlw	.21												; 21%
-	movff	WREG,char_I_O2_ratio            				; ... oxygen
-	movlw	.0												;  0%
-	movff	WREG,char_I_He_ratio            				; ... helium
+	movff	last_surfpressure+1,last_surfpressure_30min+1	; resets all air pressure registers
 
 	; initialize GF high (needed by deco engine for color-coding the GF value)
 	movff	opt_GF_high,char_I_GF_High_percentage
 
-    SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration 	; breathing at surface
-	movff	int_I_pres_respiration+0,int_I_pres_surface+0	; surface pressue
-	movff	int_I_pres_respiration+1,int_I_pres_surface+1		
+	SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration		; breathing at surface
+	movff	int_I_pres_respiration+0,int_I_pres_surface+0	; surface pressure
+	movff	int_I_pres_respiration+1,int_I_pres_surface+1
 
-	extern	deco_setup
-	call	deco_setup				; set up all model parameters.
-    call    deco_clear_tissue       ; Set all tissues to Pamb * N2_ratio (C-Code)
-    banksel common                  ; back to bank 1, needed after every return from C code
+	call	deco_setup						; set up all model parameters (code located in simulator.asm)
+
+	call	deco_clear_tissue				; Set all tissues to Pamb * N2_ratio (code located in p2_deco.c)
+	banksel	common							; back to bank 1, needed after every return from C code
 
 	call	rtc_init						; init clock
 
-    movlw   HIGH .512           			; =2
-    movwf   EEADRH
-    read_int_eeprom .0
-    clrf    EEADRH
-    movlw   0xAA
-    cpfseq  EEDATA              			; =0xAA
-    bra     no_deco_restore     			; No
+	movlw	HIGH .512						; =2
+	movwf	EEADRH
+	read_int_eeprom	.0
+	clrf	EEADRH
+	movlw	0xAA
+	cpfseq	EEDATA							; =0xAA
+	bra		no_deco_restore					; No
+	call	restore_decodata_from_eeprom	; Reload deco data and date/time from eeprom
+no_deco_restore:
+	call	deco_calc_dive_interval_1min	; calculate deco in surface mode
+	call	deco_calc_desaturation_time		; calculate desaturation and no-fly time
+	banksel	common
 
-    extern  restore_decodata_from_eeprom
-    call    restore_decodata_from_eeprom    ; Reload deco data and date/time from eeprom
-
-no_deco_restore:
-	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode
-	call	deco_calc_desaturation_time     ; calculate desaturation and no-fly time
-	banksel common
-	
 	bcf		menubit							; clear menu flag
 
-; Check for Power-on reset here
-	extern	use_old_prior_209
-    ; *****************************************************************************
+	; Check for Power-on reset here
+
+	; *****************************************************************************
 	; "new_battery_menu" and "use_old_batteries" 'goto' back to "power_on_return"
-    ; *****************************************************************************
+	; *****************************************************************************
 
-    ; Try to migrate the old battery status from firmware 2.09 or earlier..
-    btfsc	RCON,POR						; Was this a power-on reset?
-    call	use_old_prior_209				; No
+	; Try to migrate the old battery status from firmware 2.09 or earlier..
+	btfsc	RCON,POR						; Was this a power-on reset?
+	call	use_old_prior_209				; No
 
-    bcf		use_old_batt_flag	
-    btfsc	RCON,POR						; Was this a power-on reset?
-    bsf		use_old_batt_flag				; No
-    
-    call    lt2942_get_status               ; Check for gauge IC
-    btfss   battery_gauge_available         ; cR or 2 hardware?
-    bra	    power_on_return2		    	; no
+	bcf		use_old_batt_flag
+	btfsc	RCON,POR						; Was this a power-on reset?
+	bsf		use_old_batt_flag				; No
+ 
+	call	lt2942_get_status				; Check for gauge IC
+	btfss	battery_gauge_available			; cR or 2 hardware?
+	bra		power_on_return2				; no
 
-    movlw   .30
-    movff   WREG,opt_cR_button_right
-    movff   WREG,opt_cR_button_left         ; Reset on power-on reset
-    call    piezo_config                    ; Yes, configure buttons
-    call    piezo_config                    ; Yes, configure buttons (2 times)
+	movlw	.30
+	movff	WREG,opt_cR_button_right
+	movff	WREG,opt_cR_button_left			; Reset on power-on reset
+	call	piezo_config					; Yes, configure buttons
+	call	piezo_config					; Yes, configure buttons (2 times)
 
 power_on_return2:
 ; check firmware and reset Custom Functions after an update
 	movlw	d'1'
-	movwf	EEADR                   ; =1
-	movwf	EEADRH                  ; =1
-	call	read_eeprom				; read current version x
-	movff	EEDATA,temp1
-	incf	EEADR,F					; set to 0x102
-	call	read_eeprom				; read current version y
-	movff	EEDATA,temp2
-	clrf	EEADRH					; Reset EEADRH
+	movwf	EEADR							; =1
+	movwf	EEADRH							; =1
+	call	read_eeprom						; read current version x
+	movff	EEDATA,lo
+	incf	EEADR,F							; set to 0x102
+	call	read_eeprom						; read current version y
+	movff	EEDATA,hi
+	clrf	EEADRH							; Reset EEADRH
 
 	movlw	softwareversion_x
-	cpfseq	temp1					; compare version x
-	bra		check_firmware_new		; is not equal -> reset CF and store new version in EEPROM
+	cpfseq	lo							; compare version x
+	bra		check_firmware_new				; is not equal -> reset CF and store new version in EEPROM
 
 	movlw	softwareversion_y
-	cpfseq	temp2					; compare version y
-	bra		check_firmware_new		; is not equal -> reset CF and store new version in EEPROM
-	bra		restart					; x and y are equal -> do not reset cf
-		
+	cpfseq	hi							; compare version y
+	bra		check_firmware_new				; is not equal -> reset CF and store new version in EEPROM
+	bra		restart							; x and y are equal -> do not reset cf
+
 check_firmware_new:
-	call	TFT_boot                ; Initialize TFT (includes clear screen)
-	clrf    CCPR1L          		; Backlight off
-    WIN_TOP     .50
-    WIN_LEFT    .10
-    movlw   LOW     0x1E000
-    movwf   TBLPTRL
-    movlw   HIGH    0x1E000
-    movwf   TBLPTRH
-    movlw   UPPER   0x1E000
-    movwf   TBLPTRU
-    extern  color_image
-    call    color_image             ; Show logo
+	call	TFT_boot						; Initialize TFT (includes clear screen)
+	clrf	CCPR1L							; Backlight off
+	WIN_TOP  .50
+	WIN_LEFT .10
+	movlw	LOW   0x1E000
+	movwf	TBLPTRL
+	movlw	HIGH  0x1E000
+	movwf	TBLPTRH
+	movlw	UPPER 0x1E000
+	movwf	TBLPTRU
+	call	color_image						; Show logo
 	call	TFT_standard_color
-	WIN_SMALL   .10,.100
-	STRCPY_PRINT	"Update successful!"		; Hard coded since language switch does not work here
-	WIN_SMALL   .10,.140
-	STRCPY		"New Firmware: "
+	WIN_SMALL .10,.100
+	STRCPY_PRINT "Update successful!"		; Hard coded since language switch does not work here
+	WIN_SMALL .10,.140
+	STRCPY	"New Firmware: "
 	movlw	softwareversion_x
 	movwf	lo
 	bsf		leftbind
@@ -231,30 +235,29 @@
 	movwf	lo
 	output_99x
 	bcf		leftbind
-	STRCAT_PRINT	""				; Print second row
-    call    TFT_Display_FadeIn      ; Display resulting surface screen.
+	STRCAT_PRINT ""							; Print second row
+	call	TFT_Display_FadeIn				; Display resulting surface screen.
 
-; place "after-update reset" here...
 
-    extern  oPressureAdjust, option_reset, option_save
-    lfsr    FSR0,oPressureAdjust
-    call    option_reset            ; Reset FSR0 option to factory default.
-    lfsr    FSR0,oPressureAdjust
-    call    option_save             ; Save in EEPROM
+	; place "after-update reset" here...
+	lfsr	FSR0,oPressureAdjust
+	call	option_reset					; Reset FSR0 option to factory default.
+	lfsr	FSR0,oPressureAdjust
+	call	option_save						; Save in EEPROM
+
+	rcall	backup_flash_page				; backup the first 128 bytes from flash to EEPROM
 
-    rcall   backup_flash_page       ; backup the first 128bytes from flash to EEPROM
-
-	movlw	d'1'					; store current version in EEPROM
-	movwf	EEADR                   ; =1
-	movwf	EEADRH                  ; =1
+	movlw	d'1'							; store current version in EEPROM
+	movwf	EEADR							; =1
+	movwf	EEADRH							; =1
 	movlw	softwareversion_x
-	movwf	EEDATA		
-	call	write_eeprom			; write version x
-	incf	EEADR,F					; set to 0x102
+	movwf	EEDATA
+	call	write_eeprom					; write version x
+	incf	EEADR,F							; set to 0x102
 	movlw	softwareversion_y
-	movwf	EEDATA		
-	call	write_eeprom			; write version y
-	clrf	EEADRH					; Reset EEADRH
+	movwf	EEDATA
+	call	write_eeprom					; write version y
+	clrf	EEADRH							; Reset EEADRH
 
 	movlw	.7
 	movwf	lo
@@ -263,194 +266,197 @@
 	bcf		onesecupdate
 	btfss	onesecupdate
 	bra		$-2
-	decfsz	lo,F					; Wait 10 seconds...
+	decfsz	lo,F							; Wait 10 seconds...
 	bra		check_firmware_new2
 
-	global	restart	
+	global	restart
 restart:
-    clrf    STKPTR                  ; Never return from here
-    clrf	CCP1CON					; stop PWM
-	bcf		PORTC,2					; Pull PWM out to GND
+	clrf	STKPTR							; Never return from here
+	clrf	CCP1CON							; stop PWM
+	bcf		PORTC,2							; Pull PWM out to GND
 
-	extern	option_save_all, option_check_all
+	btfsc	menubit							; Return from Menu/COMM mode or timeout?
+	call	option_save_all					; Yes, save all settings into EEPROM
 
-	btfsc	menubit					; Return from Menu/COMM mode or timeout?
-	call	option_save_all			; Yes, save all settings into EEPROM
-
-    call    option_restore_all      ; Restore everything from EEPROM into RAM
-    call    option_check_all        ; Check all options (and reset if not within their min/max boundaries)
-    call    option_save_all	    	; Save all settings into EEPROM after they have been checked
+	call	option_restore_all				; Restore everything from EEPROM into RAM
+	call	option_check_all				; Check all options (and reset if not within their min/max boundaries)
+	call	option_save_all					; Save all settings into EEPROM after they have been checked
 
-    clrf	flag1					; clear all flags
-    clrf	flag2
-    clrf	flag3
-    clrf	flag4
-    clrf	flag5
-    clrf	flag6
-    clrf	flag7
-    clrf	flag8
-    clrf	flag9
-    clrf	flag10
-    ; Do not clear flag11 (Sensor calibration and charger status)
-    clrf	flag12
-    ; Do not clear flag13 (Important hardware flags)
-    clrf	flag14
-    clrf	hardware_flag           ; hardware descriptor flag
-    bsf		tft_is_dimming          ; TFT is dimming up (soon), ignore ambient sensor!
+	clrf	flag1							; clear all flags
+	clrf	flag2
+	clrf	flag3
+	clrf	flag4
+	clrf	flag5
+	clrf	flag6
+	clrf	flag7
+	clrf	flag8
+	clrf	flag9
+	clrf	flag10
+	; Do not clear flag11 (Sensor calibration and charger status)
+	clrf	flag12
+	; Do not clear flag13 (Important hardware flags)
+	clrf	flag14
+	clrf	hardware_flag					; hardware descriptor flag
 
-    ; configure hardware_flag byte
+	bsf		tft_is_dimming					; TFT is dimming up (soon), ignore ambient sensor!
 
-    bsf     ambient_sensor          ; Set flag
-    bsf     optical_input           ; Set flag
+	; configure hardware_flag byte
+	bsf		ambient_sensor					; Set flag
+	bsf		optical_input					; Set flag
+
+	call	lt2942_get_status				; Check for gauge IC
+	btfss	battery_gauge_available			; cR/2 hardware?
+	bra		restart2						; No
 
-    call    lt2942_get_status       ; Check for gauge IC
-    btfss   battery_gauge_available	; cR/2 hardware?
-    bra     restart2                ; No
+	call	lt2942_init						; Yes, init battery gauge IC
+	bcf		optical_input					; Clear flag
 
-    call    lt2942_init             ; Yes, init battery gauge IC
-    bcf     optical_input           ; Clear flag
-    
-    banksel 0xF16
-    bcf	    ANCON0,7		    	; AN7 Digital input
-    banksel common
-    bcf	    lightsen_power	    	; Power-down ambient light sensor
-    bcf     ambient_sensor          ; Clear flag
-    nop
-    btfss   PORTF,2		    		; Light sensor available?
-    bsf	    ambient_sensor          ; Yes.
-    banksel 0xF16
-    bsf	    ANCON0,7		    	; AN7 Analog again
-    banksel common
-    bsf	    lightsen_power	    	; Power-up ambient light sensor again
-    
+	banksel	0xF16
+	bcf		ANCON0,7						; AN7 Digital input
+	banksel common
+	bcf		lightsen_power					; Power-down ambient light sensor
+	bcf		ambient_sensor					; Clear flag
+	nop
+	btfss	PORTF,2							; Light sensor available?
+	bsf		ambient_sensor					; Yes.
+	banksel	0xF16
+	bsf		ANCON0,7						; AN7 Analog again
+	banksel	common
+	bsf		lightsen_power					; Power-up ambient light sensor again
+
 restart2:
-    btfsc   vusb_in
-    bra     restart3                ; USB (and powered on)
-    bcf     PORTE,0                 ; Start comms
-    WAITMS  d'1'
-    btfss   vusb_in
-    bra     restart3                ; USB (and powered off)
-    bsf     ble_available           ; ble available
-restart3:    
-    bsf     PORTE,0                 ; Stop comms
-    btfsc   ble_available           ; ble available?
-    bra     restart4                ; Yes, can't be a cR
-    btfss   battery_gauge_available            ; Rechargeable
-    bra     restart4                ; No, can't be a cR
-    bsf     analog_o2_input         ; Set flag for analog
+	btfsc	vusb_in
+	bra		restart3						; USB (and powered on)
+	bcf		PORTE,0							; Start comms
+	WAITMS	d'1'
+	btfss	vusb_in
+	bra		restart3						; USB (and powered off)
+	bsf		ble_available					; ble available
+
+restart3:
+	bsf		PORTE,0							; Stop comms
+	btfsc	ble_available					; ble available?
+	bra		restart4						; Yes, can't be a cR
+	btfss	battery_gauge_available			; Rechargeable
+	bra		restart4						; No, can't be a cR
+	bsf		analog_o2_input					; Set flag for analog
+
+	; The hardware_flag is now:
+	; 0x11: 2 with BLE
+	; 0x13: 2 with BLE & ambient
+	; 0x05: cR
+	; 0x0A: 3
+	; 0x1A: 3 with BLE
+
 restart4:
-    ; The hardware_flag is now:
-    ; 3: 0x0A
-    ; cR: 0x05
-    ; 2 with BLE: 0x11
-    ; 3 with BLE: 0x1A 
-    ; 2 with ambient: 0x13
-
 	; Select high altitude (Fly) mode?
 	movff	last_surfpressure_30min+0,sub_b+0
 	movff	last_surfpressure_30min+1,sub_b+1
-	movlw	HIGH	high_altitude_threshold
+	movlw	HIGH high_altitude_threshold
 	movwf	sub_a+1
-	movlw	LOW		high_altitude_threshold	; Hard-wired 880mbar
+	movlw	LOW  high_altitude_threshold	; hard-wired 880mbar
 	movwf	sub_a+0
-	call	subU16					; sub_c = sub_a - sub_b
-	btfss	neg_flag				; Result negative (Ambient>880mbar)?
-	bsf		high_altitude_mode		; No, Set Flag!
-
-    btfss   analog_o2_input
-    bsf     TRISB,3
-    btfss   battery_gauge_available
-    bsf     TRISG,0
-	call	ext_flash_disable_protection	; Disable write protection for external flash
+	call	subU16							; sub_c = sub_a - sub_b
+	btfss	neg_flag						; result negative (ambient > 880mbar)?
+	bsf		high_altitude_mode				; NO - set flag!
 
-    bsf     flip_screen             ; Flip 180°
-    TSTOSS  opt_flip_screen         ; =1: Flip the screen
-    bcf     flip_screen             ; Normal orientation
-
-    btfsc   use_old_batt_flag   	; =1: load old battery information after power-on reset
-    goto    use_old_batteries		; Returns to "surfloop"!
+	btfss	analog_o2_input
+	bsf		TRISB,3
+	btfss	battery_gauge_available
+	bsf		TRISG,0
+	call	ext_flash_disable_protection	; disable write protection for external flash
 
-    btfsc   RCON,POR	   			; Was this a power-on reset?
-    goto    surfloop	    		; Jump to Surfaceloop!
-    bsf	    RCON,POR	    		; Set bit for next detection
-    ; Things to do after a power-on reset
-    extern  new_battery_menu,use_old_batteries
-    goto    new_battery_menu		; Returns to "surfloop"!
+	bsf		flip_screen						; flip 180°
+	TSTOSS	opt_flip_screen					; =1: Flip the screen
+	bcf		flip_screen						; normal orientation
+
+	btfsc	use_old_batt_flag				; =1: load old battery information after power-on reset
+	goto	use_old_batteries				; returns to "surfloop"!
+
+	btfsc	RCON,POR						; was this a power-on reset?
+	goto	surfloop						; jump to surface loop!
+	bsf		RCON,POR						; set bit for next detection
+	; Things to do after a power-on reset
+	goto	do_new_battery_select			; returns to "surfloop"!
 
 ;=============================================================================
 ; Setup all flags and parameters for divemode and simulator computations.
 ;
 	global	restart_set_modes_and_flags
-restart_set_modes_and_flags:		    ; "Call"ed from divemode, as well!
-    call    option_restore_all      	; Restore everything from EEPROM
+restart_set_modes_and_flags:				; "Call"ed from divemode, as well!
+	call	option_restore_all				; Restore everything from EEPROM
 
-    ; Setup sampling rate
-    movlw   .2
-    movwf   samplingrate
-    TSTOSS  opt_sampling_rate           ; =1: 10s, =0: 2s
-    bra     restart_set_modes_and_flags1
-    movlw   .10
-    movwf   samplingrate
+	; Setup sampling rate
+	movlw	.2
+	movwf	samplingrate
+	TSTOSS	opt_sampling_rate				; =1: 10s, =0: 2s
+	bra		restart_set_modes_and_flags1
+	movlw	.10
+	movwf	samplingrate
+
 restart_set_modes_and_flags1:
-    bcf	    twosecupdate				; to have divemode routines in sync
-    
-    bcf	    FLAG_apnoe_mode
-    bcf     FLAG_ccr_mode				; =1: CCR mode (Fixed ppO2 or Sensor) active
-    bcf     FLAG_gauge_mode				; =1: In Gauge mode
-    bcf	    FLAG_pscr_mode
-    call    disable_ir_s8				; IR off
+	bcf		twosecupdate					; to have divemode routines in sync
+	bcf		FLAG_apnoe_mode
+	bcf		FLAG_ccr_mode					; =1: CCR mode (Fixed ppO2 or Sensor) active
+	bcf		FLAG_gauge_mode					; =1: In Gauge mode
+	bcf		FLAG_pscr_mode
+	call	disable_ir_s8					; IR off
 
-    ; Setup char_I_saturation_multiplier and char_I_desaturation_multiplier
-    movff   opt_sat_multiplier_gf,char_I_saturation_multiplier
-    movff   opt_desat_multiplier_gf,char_I_desaturation_multiplier
-    movff   char_I_deco_model,lo           ; 0 = ZH-L16, 1 = ZH-L16-GF
-    tstfsz  lo
-    bra	    restart_set_modes_and_flags1b
-    movff   opt_sat_multiplier_non_gf,char_I_saturation_multiplier
-    movff   opt_desat_multiplier_non_gf,char_I_desaturation_multiplier
-    
-restart_set_modes_and_flags1b:    
-    movff   opt_dive_mode,lo            ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-    tstfsz  lo
-    bra     restart_set_modes_and_flags2
-    ; OC Mode
-	
-    return
+	; Setup char_I_saturation_multiplier and char_I_desaturation_multiplier
+	movff	opt_sat_multiplier_gf,char_I_saturation_multiplier
+	movff	opt_desat_multiplier_gf,char_I_desaturation_multiplier
+	movff	char_I_deco_model,lo			; 0 = ZH-L16, 1 = ZH-L16-GF
+	tstfsz	lo
+	bra		restart_set_modes_and_flags1b
+	movff	opt_sat_multiplier_non_gf,char_I_saturation_multiplier
+	movff	opt_desat_multiplier_non_gf,char_I_desaturation_multiplier
+
+restart_set_modes_and_flags1b:
+	movff	opt_dive_mode,lo				; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	tstfsz	lo
+	bra		restart_set_modes_and_flags2
+
+	; OC Mode
+	return
 
 restart_set_modes_and_flags2:
-    decfsz  lo,F
-    bra     restart_set_modes_and_flags3
-    ; CC Mode
-    btfsc   analog_o2_input                 ; cR?
-    bra     restart_set_modes_and_flags2b   ; Yes, skip mode check
-    btfsc   optical_input                   ; 3
-    bra     restart_set_modes_and_flags2b   ; Yes, skip mode check
-    ; Make sure Sensor is not selected
-    ; opt_ccr_mode must be <> 1 (=0: Fixed SP, =1: Sensor, =2: Auto SP)
-    banksel opt_ccr_mode
-    movlw   .1
-    cpfseq  opt_ccr_mode                    ; = Sensor?
-    bra     restart_set_modes_and_flags2b   ; No
-    clrf    opt_ccr_mode                    ; Yes, reset to Fixed SP
+	decfsz	lo,F
+	bra		restart_set_modes_and_flags3
+
+	; CC Mode
+	btfsc	analog_o2_input					; cR?
+	bra		restart_set_modes_and_flags2b	; Yes, skip mode check
+	btfsc	optical_input					; 3
+	bra		restart_set_modes_and_flags2b	; Yes, skip mode check
+
+	; Make sure Sensor is not selected
+	; opt_ccr_mode must be <> 1 (=0: Fixed SP, =1: Sensor, =2: Auto SP (CCR only))
+	banksel	opt_ccr_mode
+	movlw	.1
+	cpfseq	opt_ccr_mode					; = Sensor?
+	bra		restart_set_modes_and_flags2b	; No
+	clrf	opt_ccr_mode					; Yes, reset to Fixed SP
+
 restart_set_modes_and_flags2b:
-    banksel common
-	bsf     FLAG_ccr_mode               	; =1: CCR mode (Fixed SP, Auto SP or Sensor) active
-    call    enable_ir_s8                	; Enable IR/S8-Port
-    return
+	banksel	common
+	bsf		FLAG_ccr_mode					; =1: CCR mode (Fixed SP, Auto SP or Sensor) active
+	call	enable_ir_s8					; Enable IR/S8-Port
+	return
 
 restart_set_modes_and_flags3:
-    decfsz  lo,F
-    bra     restart_set_modes_and_flags4
-    ; Gauge Mode
-    bsf     FLAG_gauge_mode           		; =1: In Gauge mode
-    return
+	decfsz	lo,F
+	bra		restart_set_modes_and_flags4
+
+	; Gauge Mode
+	bsf		FLAG_gauge_mode					; =1: In Gauge mode
+	return
 
 restart_set_modes_and_flags4:
-    decfsz  lo,F
-    bra     restart_set_modes_and_flags5
-    ; Apnea Mode
-    bsf		FLAG_apnoe_mode
-    return							    	; start in Surfacemode
+	decfsz	lo,F
+	bra		restart_set_modes_and_flags5
+	; Apnea Mode
+	bsf		FLAG_apnoe_mode
+	return									; start in Surfacemode
 
 restart_set_modes_and_flags5:
 	; PSCR Mode
@@ -474,29 +480,30 @@
 	bsf		FLAG_pscr_mode
 	return									; start in Surfacemode
 
-    
-backup_flash_page:       ; backup the first 128bytes from flash to EEPROM
-    	; Start address in internal flash
-    	movlw   0x00
-        movwf   TBLPTRL
-        movwf   TBLPTRH
-        movwf   TBLPTRU
+
+; backup the first 128bytes from flash to EEPROM
+backup_flash_page:
+	; Start address in internal flash
+	movlw	0x00
+	movwf	TBLPTRL
+	movwf	TBLPTRH
+	movwf	TBLPTRU
 
-        movlw	.128
-        movwf	lo              	; Byte counter
-        clrf    EEADR
-        movlw   .3
-        movwf   EEADRH          	; Setup backup address
+	movlw	.128
+	movwf	lo								; Byte counter
+	clrf	EEADR
+	movlw	.3
+	movwf	EEADRH							; Setup backup address
 
-        TBLRD*-						; Dummy read to be in 128 byte block
+	TBLRD*-									; Dummy read to be in 128 byte block
 backup_flash_loop:
-        tblrd+*						; Table Read with Pre-Increment
-        movff	TABLAT,EEDATA		; put 1 byte
-        call    write_eeprom    	; save it in EEPROM
-        incf    EEADR,F
-        decfsz 	lo,F            	; 128byte done?
-        bra 	backup_flash_loop 	; No
-        clrf    EEADRH          	; Reset EEADRH
-        return                  	; Done.
+	tblrd+*									; Table Read with Pre-Increment
+	movff	TABLAT,EEDATA					; put 1 byte
+	call	write_eeprom					; save it in EEPROM
+	incf	EEADR,F
+	decfsz	lo,F							; 128byte done?
+	bra		backup_flash_loop				; No
+	clrf	EEADRH							; Reset EEADRH
+	return									; Done.
 
 	END
\ No newline at end of file
--- a/src/start.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/start.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File start.inc														V2.95
+;   File start.inc														V2.97
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
--- a/src/surfmode.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/surfmode.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,108 +1,111 @@
 ;=============================================================================
 ;
-;   File surfmode.asm								REFACTORED VERSION	V2.94
+;   File surfmode.asm								REFACTORED VERSION	V2.98
 ;
 ;   Surfacemode
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
 ; HISTORY
-;  2011-08-07 : [mH] moving from OSTC code
+; 2011-08-07 : [mH] moving from OSTC code
 
-#include    "hwos.inc"					; Mandatory header
-#include    "shared_definitions.h"      ; Mailbox from/to p2_deco.c
-#include    "start.inc"
-#include    "tft.inc"
-#include    "tft_outputs.inc"
-#include    "isr.inc"
-#include    "adc_lightsensor.inc"
-#include    "menu_processor.inc"
-#include    "strings.inc"
-#include    "sleepmode.inc"
-#include    "wait.inc"                  ; speed_*
-#include    "external_flash.inc"
-#include    "customview.inc"
-#include    "divemode.inc"
-#include    "mcp.inc"                   ; RX
-#include    "i2c.inc"
-#include    "comm.inc"
-#include    "eeprom_rs232.inc"
-#include    "calibrate.inc"
+#include "hwos.inc"					; Mandatory header
+#include "shared_definitions.h"		; Mailbox from/to p2_deco.c
+#include "start.inc"
+#include "tft.inc"
+#include "tft_outputs.inc"
+#include "isr.inc"
+#include "adc_lightsensor.inc"
+#include "menu_processor.inc"
+#include "strings.inc"
+#include "sleepmode.inc"
+#include "wait.inc"					; speed_*
+#include "external_flash.inc"
+#include "customview.inc"
+#include "divemode.inc"
+#include "mcp.inc"					; RX
+#include "i2c.inc"
+#include "comm.inc"
+#include "eeprom_rs232.inc"
+#include "calibrate.inc"
 
-   	extern   do_main_menu
+	extern	do_main_menu
+	extern	color_image
+
+
+	;---- Private local variables -------------------------------------------------
 
-#DEFINE	menu_pos_row		.215
-#DEFINE	menu_pos_column		.1
-#DEFINE	view_row            .215
-#DEFINE	view_column         .124
+		CBLOCK	local1						; max size is 16 Byte !!!
+											; currently not used
+		ENDC								; used: 0 byte, remaining: 16 byte
+
 
-gui     CODE
+#DEFINE menu_pos_row		.215
+#DEFINE menu_pos_column		.1
+#DEFINE view_row			.215
+#DEFINE view_column			.124
 
+gui	CODE
 
 ;=============================================================================
 ; Boot tasks for all modes
 	global	surfloop
 surfloop:
-    call    speed_normal
-    bcf     no_sensor_int           ; Normal pressure mode
+	call	speed_normal
+	bcf		no_sensor_int			; Normal pressure mode
 
-    bcf     LEDr
+	bcf		LEDr
 
-    clrf    CCP1CON					; stop PWM
-    bcf	    PORTC,2					; Pull PWM output to GND
-    call    TFT_boot                ; Initialize TFT (includes clear screen)
-    bcf	    restore_deco_data
+	clrf	CCP1CON					; stop PWM
+	bcf		PORTC,2					; Pull PWM output to GND
+	call	TFT_boot				; Initialize TFT (includes clear screen)
+	bcf		restore_deco_data
 
-    WIN_TOP     .50
-    WIN_LEFT    .10
-    movlw   LOW     0x1E000
-    movwf   TBLPTRL
-    movlw   HIGH    0x1E000
-    movwf   TBLPTRH
-    movlw   UPPER   0x1E000
-    movwf   TBLPTRU
-    extern  color_image
-    call    color_image             ; Show logo
+	WIN_TOP	 .50
+	WIN_LEFT .10
+	movlw	LOW   0x1E000
+	movwf	TBLPTRL
+	movlw	HIGH  0x1E000
+	movwf	TBLPTRH
+	movlw	UPPER 0x1E000
+	movwf	TBLPTRU
+	call	color_image				; Show logo
 
-    WIN_TOP     .100
-    WIN_LEFT    .34
-    extern  ostc_logo_block
-    movlw   LOW(ostc_logo_block)
-    movwf   TBLPTRL
-    movlw   HIGH ostc_logo_block;&0xFFFF
-    movwf   TBLPTRH
-    movlw   UPPER(ostc_logo_block)
-    movwf   TBLPTRU
-    call    color_image
-    call    TFT_Display_FadeIn      ; Show splash
-	call	TFT_serial              ; Show serial and firmware version
+	WIN_TOP	 .100
+	WIN_LEFT .34
+	extern	ostc_logo_block
+	movlw	LOW   ostc_logo_block
+	movwf	TBLPTRL
+	movlw	HIGH  ostc_logo_block	; &0xFFFF
+	movwf	TBLPTRH
+	movlw	UPPER ostc_logo_block
+	movwf	TBLPTRU
+	call	color_image
+	call	TFT_Display_FadeIn		; Show splash
+	call	TFT_serial				; Show serial and firmware version
 
-    ;---- Do any usefull initializes that takes time -------------------------
-	call	restart_set_modes_and_flags	; Sets decomode flags
+	;---- Do any useful initializes that takes time -------------------------
+	call	restart_set_modes_and_flags	; Sets deco mode flags
 	bcf		pressure_refresh
-    call    I2C_init_compass
-    call    I2C_init_accelerometer
+	call	I2C_init_compass
+	call	I2C_init_accelerometer
 	clrf	ext_flash_address+0
 	clrf	ext_flash_address+1
 	clrf	ext_flash_address+2
 
-    movlw   surface_sp                  ; in cbar
-    call    transmit_setpoint           ; Transmit current setpoint from WREG (in cbar) to external electronics
+	movlw	surface_sp				; in cbar
+	call	transmit_setpoint		; Transmit current setpoint from WREG (in cbar) to external electronics
 
 	clrf	timeout_counter2
-	clrf 	timeout_counter3
-	bcf		menubit						; clear menu flag
-    bcf     premenu
+;	clrf	timeout_counter3		; not used / required [rl]
+	bcf		menubit					; clear menu flag
+	bcf		premenu
 	clrf	last_pressure+0
 	clrf	last_pressure+1
-    bcf     is_bailout                  ; =1: Bailout
-    bcf     ccr_diluent_setup           ; Use OC gases for gaslist routine
+	bcf		is_bailout				; =1: Bailout
+	bcf		ccr_diluent_setup		; Use OC gases for gaslist routine
 
-	bcf		simulatormode_active		; Quit simulator mode (if active)
-
-	; MOVE from here to below ## V2.94
-	; bcf		switch_left
-	; bcf		switch_right
+	bcf		simulatormode_active	; Quit simulator mode (if active)
 
 	;---- Fade to standard surface view --------------------------------------
 	; Wait 1 second
@@ -114,80 +117,73 @@
 	btfss	onesecupdate
 	bra		$-2
 
-	call    TFT_Display_FadeOut         ; Go to black screen
-	call	TFT_ClearScreen             ; Then change everything
-	WIN_TOP		.0
-	WIN_LEFT	.0
-	WIN_FONT 	FT_SMALL
-	bcf     win_invert              ; Reset invert flag
+	call	TFT_Display_FadeOut		; Go to black screen
+	call	TFT_ClearScreen			; Then change everything
+	WIN_TOP	 .0
+	WIN_LEFT .0
+	WIN_FONT FT_SMALL
+	bcf		win_invert				; Reset invert flag
 
-    WIN_COLOR	color_lightblue
-	WIN_SMALL	menu_pos_column,menu_pos_row
-    STRCPY_TEXT_PRINT  tMenu		;"<Menu"
-	WIN_SMALL	view_column,view_row
-    STRCPY_TEXT_PRINT  tView        ;"View>"
-	call    TFT_standard_color
+	WIN_COLOR			color_lightblue
+	WIN_SMALL			menu_pos_column,menu_pos_row
+	STRCPY_TEXT_PRINT	tMenu		;"<Menu"
+	WIN_SMALL			view_column,view_row
+	STRCPY_TEXT_PRINT	tView		;"View>"
+	call				TFT_standard_color
 
 ; Logo
-    WIN_TOP     .0
-    WIN_LEFT    .70
-    movlw   LOW(ostc_logo_block)
-    movwf   TBLPTRL
-    movlw   HIGH ostc_logo_block;&0xFFFF
-    movwf   TBLPTRH
-    movlw   UPPER(ostc_logo_block)
-    movwf   TBLPTRU
-    call    color_image
+	WIN_TOP	 .0
+	WIN_LEFT .70
+	movlw	LOW   ostc_logo_block
+	movwf	TBLPTRL
+	movlw	HIGH  ostc_logo_block		; &0xFFFF
+	movwf	TBLPTRH
+	movlw	UPPER ostc_logo_block
+	movwf	TBLPTRU
+	call	color_image
 
 	call	TFT_clock					; display time
-    call    update_surfloop60
+	call	update_surfloop60
 	call	get_battery_voltage			; get battery voltage
 	call	TFT_update_batt_voltage		; display battery voltage
 	call	TFT_update_surf_press		; display surface pressure
 	call	TFT_temp_surfmode			; Displays temperature
 	call	TFT_display_decotype_surface
-	
 	call	calc_deko_divemode_sensor
 
-    movff   opt_dive_mode,lo            ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-    tstfsz  lo
-    bra     surfloop_no_oc              ; Not OC
-    call    TFT_show_OC_startgas_surface; Show first gas and "OSTC2-like" active gases
+	movff	opt_dive_mode,lo			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	tstfsz	lo
+	bra		surfloop_no_oc				; Not OC
+	call	TFT_show_OC_startgas_surface; Show first gas and "OSTC2-like" active gases
 surfloop_no_oc:
-    movff   customview_surfmode,menupos3    ; Reload last customview
-    call    surf_customview_mask        ; Update #menupos3 view
+	movff	customview_surfmode,menupos3; Reload last customview
+	call	surf_customview_mask		; Update #menupos3 view
 
-    call    TFT_Display_FadeIn          ; Display resulting surface screen.
+	call	TFT_Display_FadeIn			; Display resulting surface screen.
 
-	; MOVED from above to here	## V2.94
 	bcf		switch_left
 	bcf		switch_right
-	
-    ;---- Late initialisations -----------------------------------------------    
-	movff	last_surfpressure_30min+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine		## not used any more (!?)
-	movff	last_surfpressure_30min+1,int_I_pres_respiration+1		; 30min old values 								## not used any more (!?)
+
+	;---- Late initializations -----------------------------------------------
+	movff	last_surfpressure_30min+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
+	movff	last_surfpressure_30min+1,int_I_pres_respiration+1		; 30min old values
 	movff	last_surfpressure_30min+0,int_I_pres_surface+0			; copy surface air pressure to deco routine
-	movff	last_surfpressure_30min+1,int_I_pres_surface+1			; 30min old values 
-	movff	last_surfpressure_30min+0,last_surfpressure+0			; Use 30min old airpressure 
+	movff	last_surfpressure_30min+1,int_I_pres_surface+1			; 30min old values
+	movff	last_surfpressure_30min+0,last_surfpressure+0			; Use 30min old airpressure
 	movff	last_surfpressure_30min+1,last_surfpressure+1			; Use 30min old airpressure
 
-	; NEW	## no fly
 	movff	opt_GF_low,char_I_GF_Low_percentage
 	movff	opt_GF_high,char_I_GF_High_percentage
-	
-    ; Startup tasks for all modes
-    ; Desaturation time needs:
-    ;   int_I_pres_surface
-    ;   char_I_desaturation_multiplier
+
+	; Startup tasks for all modes
+	; Desaturation time needs:
+	;   int_I_pres_surface
+	;   char_I_desaturation_multiplier
 	call	deco_calc_desaturation_time ; calculate desaturation time
-	
-	; REPLACE	## (code unification)
-	; movlb	b'00000001'					; select ram bank 1
-	; BY
 	banksel	common
 
-    btfsc   enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    call	enable_rs232				; Also sets to speed_normal ...
+	btfsc	enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	call	enable_rs232				; Also sets to speed_normal ...
 
 surfloop_loop:
 	btfss	onesecupdate				; do every second tasks?
@@ -201,12 +197,12 @@
 	call	get_battery_voltage			; get battery voltage
 	call	TFT_update_batt_voltage		; display battery voltage
 	call	set_dive_modes				; tests if depth>threshold
-    btfss   secs,0                      ; Every two seconds...
+	btfss	secs,0						; Every two seconds...
 	call	TFT_temp_surfmode			; Displays temperature
-    btfss   secs,0                      ; Every two seconds...
-    call    surfmode_check_for_warnings ; ... check for warnings (and display/update) them
+	btfss	secs,0						; Every two seconds...
+	call	surfmode_check_for_warnings ; ... check for warnings (and display/update) them
 	bcf		onesecupdate				; every second tasks done
-	
+
 surfloop_loop2:	
 ; Tasks approx. every 50ms for all modes
 	call	test_switches_surfmode		; check switches
@@ -228,262 +224,187 @@
 	bcf		pressure_refresh			; until new pressure is available
 
 ; Updates every 1/4 second
-    btfss   quarter_second_update
-    bra     surfloop_loop2b
+	btfss	quarter_second_update
+	bra		surfloop_loop2b
+
+	bcf		quarter_second_update
+
+	; Update Sensors
+	call	calc_deko_divemode_sensor
+
+	btfsc	FLAG_ccr_mode				; In CCR mode?
+	bra		surfloop_loop2a1			; Yes.
+	btfss	FLAG_pscr_mode				; In PSCR mode?
+	bra		surfloop_loop2a				; No, skip
 
-    bcf     quarter_second_update
-    
-    call	calc_deko_divemode_sensor
-	
-    btfsc   FLAG_ccr_mode               ; In CCR mode?
-    bra	    surfloop_loop2a1			; Yes.
-    btfss   FLAG_pscr_mode              ; In PSCR mode?
-    bra	    surfloop_loop2a				; No, skip
-        
-surfloop_loop2a1:    
-    movff   opt_ccr_mode,WREG           ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                          ; opt_ccr_mode = 1 (Sensor)?
-    bnz     surfloop_loop2a				; No, skip
+surfloop_loop2a1:
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensor)?
+	bnz		surfloop_loop2a				; No, skip
 
-    call    TFT_surface_sensor          ; ...update sensor data in surface mode
-    call    TFT_sensor_surface_warning	; Show a warning arrow-down behind sensor readings when sensor is end-of-life
-    movlw   .9 
-    cpfseq  menupos3					; in Sensor mV surface custom view? 
-    bra	    surfloop_loop2a				; No
-    extern  TFT_sensor_mV 
-    call    TFT_sensor_mV		; Yes, update mV readings (Each 1/4 second and not each second as in customview.asm)
+	call	TFT_surface_sensor			; ...update sensor data in surface mode
+	call	TFT_sensor_surface_warning	; Show a warning arrow-down behind sensor readings when sensor is end-of-life
+	movlw	.9 
+	cpfseq	menupos3					; in Sensor mV surface custom view? 
+	bra		surfloop_loop2a				; No
+	extern	TFT_sensor_mV 
+	call	TFT_sensor_mV				; Yes, update mV readings (Each 1/4 second and not each second as in customview.asm)
 
 surfloop_loop2a:
-    movlw   .6
-    cpfseq  menupos3                    ; in compass view?
-    bra     surfloop_loop2b             ; No
-    extern  TFT_surface_compass_heading
-    call    TFT_surface_compass_heading ; Yes, update compass heading value
+	movlw	.6
+	cpfseq	menupos3					; in compass view?
+	bra		surfloop_loop2b				; No
+	extern	TFT_surface_compass_heading
+	call	TFT_surface_compass_heading	; Yes, update compass heading value
 
 surfloop_loop2b:
 	btfsc	toggle_customview			; Next view?
-	call	surf_customview_toggle      ; Yes, show next customview (and delete this flag)
+	call	surf_customview_toggle		; Yes, show next customview (and delete this flag)
+
+	btfsc	enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	bra		surfloop_loop3
 
-    btfsc   enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    bra     surfloop_loop3
-	
-	; DELETE - In surface mode, only charing is available now - but now you can see the charging status :-)	## USB
-	;          To do USB communication, you now need to be in menu or logbook mode
-    ;btfsc   vusb_in                     ; USB plugged in?
-    ;call    comm_mode                   ; Start COMM mode
-	
-    bra     surfloop_loop4
+	;btfsc	vusb_in						; USB plugged in?
+	;call	comm_mode					; Start COMM mode
+
+	bra		surfloop_loop4
+
 surfloop_loop3:
-    btfss   vusb_in                     ; USB (still) plugged in?
-    bcf     enable_screen_dumps         ; No, clear flag
-    call    rs232_get_byte
-    btfsc   rs232_recieve_overflow
-    bra     surfloop_loop4
-    movlw   "l"
-    cpfseq	RCREG1
-    bra     surfloop_loop4
-    call    TFT_dump_screen             	; Dump the screen contents
+	btfss	vusb_in						; USB (still) plugged in?
+	bcf		enable_screen_dumps			; No, clear flag
+	call	rs232_get_byte
+	btfsc	rs232_receive_overflow
+	bra		surfloop_loop4
+	movlw	"l"
+	cpfseq	RCREG1
+	bra		surfloop_loop4
+	call	TFT_dump_screen				; Dump the screen contents
+
 surfloop_loop4:
-	btfsc	sleepmode						; Sleepmode active?
-	goto	sleeploop						; Yes, switch into sleepmode!
+	btfss	sleepmode					; shall we go into sleepmode?
+	bra		surfloop_loop				; NO  - loop in surfacemode
+	movff	menupos3,customview_surfmode; YES - save last customview
+	goto	sleeploop					;       switch into sleepmode
 
-	bra		surfloop_loop					; loop surfacemode
 
 update_surfloop60:
 ; One minute tasks for all modes
-	call	TFT_date						; Update date
-	
-	; REPLACE	## no fly 2
-	; call	calc_deko_surfmode				; calculate desaturation time every minute
-	; BY
-	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode. int_I_pres_surface gets updated by
-	call	deco_calc_desaturation_time		; TFT_update_surf_press when amb_pressure has changed by >= 10 mbar
+	call	TFT_date					; Update date
+
+	call	deco_calc_dive_interval_1min; calculate deco in surface mode. int_I_pres_surface gets updated by
+	call	deco_calc_desaturation_time	; TFT_update_surf_press when amb_pressure has changed by >= 10 mbar
 	banksel	common
-	
-	; NEW	## deco engine
+
 	; update tissue diagram if it is on display
-	movlw	.5								; number of tissue custom view
-	cpfseq	menupos3						; is this the current customview?
-	bra		update_surfloop60_1				; NO	
-	call    TFT_standard_color				; YES - set standard color
-    call	TFT_surface_tissues				; 	    show tissue diagram
+	movlw	.5							; number of tissue custom view
+	cpfseq	menupos3					; is this the current customview?
+	bra		update_surfloop60_1			; NO
+	call	TFT_standard_color			; YES - set standard color
+	call	TFT_surface_tissues			;       show tissue diagram
+
 update_surfloop60_1:
-
-	; NEW	## no fly
 	; update last dive info if it is on display
-	movlw	.8								; number of the last dive info customview
-	cpfseq	menupos3						; is this the current customview?
-	bra		update_surfloop60_2				; NO	
-	call    TFT_standard_color				; YES - set standard color
-    call	TFT_surface_lastdive			; 	    show last dive infos
+	movlw	.8							; number of the last dive info customview
+	cpfseq	menupos3					; is this the current customview?
+	bra		update_surfloop60_2			; NO
+	call	TFT_standard_color			; YES - set standard color
+	call	TFT_surface_lastdive		;       show last dive infos
+
 update_surfloop60_2:
-
-	bcf		oneminupdate				
+	bcf		oneminupdate
 	return
 
-    extern  check_cns_violation,check_warn_battery,check_and_store_gf_violation
+	extern  check_cns_violation,check_warn_battery,check_and_store_gf_violation
 surfmode_check_for_warnings:
+	bcf		warning_active				; Clear flag
+	clrf	warning_counter				; Clear counter
 
-	; DELETE	## (screen flicker)
-	; movf	warning_counter_backup,W
-	; cpfseq	warning_counter						; warning_counter_backup = warning_counter?
-	; call	TFT_clear_warning_text              ; No, clear all warnings
-	; movff	warning_counter,warning_counter_backup	; copy warning_counter
-
-	bcf		warning_active                      ; Clear flag
-	clrf	warning_counter						; Clear counter
+	; Warnings for all modes
+	call	check_warn_battery			; Check if the battery level should be displayed/warned
 
-    ; Warnings for all modes
-    call	check_warn_battery                  ; Check if the battery level should be displayed/warned
-	
-	; DELETE HERE...	## (general fix)
-    ; rcall   surfmode_check_for_nofly            ; Check if nofly time should be shown
-    ; rcall   surfmode_check_for_desat            ; Check if desat time should be shown
-	
-	; DELETE - surface interval is now shown in last dive custom view, not as "warning" any more	## no fly
-    ; rcall   surfmode_check_for_interval         ; Check if surface interval should be shown
-
-	btfsc	FLAG_apnoe_mode             		; Done for Apnoe or Gauge mode
-    bra     surfmode_check_for_warnings2
-	btfsc	FLAG_gauge_mode             		; Done for Apnoe or Gauge mode
-	bra     surfmode_check_for_warnings2
+	btfsc	FLAG_apnoe_mode				; Done for Apnoe or Gauge mode
+	bra		surfmode_check_for_warnings2
+	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
+	bra		surfmode_check_for_warnings2
 
-    ; Warnings only in deco modes
-	
-	; ...INSERT HERE ## (general fix) - desat and no-fly time belong to deco modes
-	rcall   surfmode_check_for_desat            ; Check if desat time should be shown
-	rcall   surfmode_check_for_nofly            ; Check if nofly time should be shown
-	
-	call	check_cns_violation					; Check CNS value and display it, if required
-    call	check_and_store_gf_violation		; Check GF value and display it, if required
+	; Warnings only in deco modes
+	rcall	surfmode_check_for_desat	; Check if desat time should be shown
+	rcall	surfmode_check_for_nofly	; Check if nofly time should be shown
+	call	check_cns_violation			; Check CNS value and display it, if required
+	call	check_and_store_gf_violation; Check GF value and display it, if required
 
-	; NEW	## microbubbles
-	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
-	btfsc	WREG,mbubble_warning_lock			; do we have a microbubbles warning?
+	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
+	btfsc	WREG,mbubble_warning_lock	; do we have a microbubbles warning?
 	extern	warn_mbubbles
-	call	warn_mbubbles						; YES	
+	call	warn_mbubbles				; YES
 
 surfmode_check_for_warnings2:
-; Setup warning_page number
-    incf    warning_page,F
-    bcf     STATUS,C
-    rlcf    warning_page,W                      ; *2
-    cpfsgt  warning_counter                     ; > warning_counter
-    clrf    warning_page                        ; No, clear
-	
-	; NEW	## (screen flicker)
-; Clear both rows of warnings if there is nothing to show at all
-	tstfsz	warning_counter						; any warnings?
-	bra		surfmode_check_for_warnings3		; YES - look if second row needs to be cleared
-	call	TFT_clear_warning_text              ; NO  - clear complete warnings area
-	return
-surfmode_check_for_warnings3:
+	; Setup warning_page number
+	incf	warning_page,F
+	bcf		STATUS,C
+	rlcf	warning_page,W				; *2
+	cpfsgt  warning_counter				; > warning_counter
+	clrf	warning_page				; No, clear
 
-; Clear 2nd row of warnings if there is nothing to show (on this page)
-    btfss   second_row_warning                  ; =1: The second row contains a warning
-    call    TFT_clear_warning_text_2nd_row      ; No, clear this row
-    return                                      ; Done.
+	; Clear both rows of warnings if there is nothing to show at all
+	tstfsz	warning_counter				; any warnings?
+	bra		surfmode_check_for_warnings3; YES - look if second row needs to be cleared
+	call	TFT_clear_warning_text		; NO  - clear complete warnings area
+	return
 
-; DELETE - surface interval is now shown in last dive custom view, not as "warning" any more	## no fly
-;
-;surfmode_check_for_interval:
-;	movf    surface_interval+0,W           		; Is interval null ?
-;    iorwf   surface_interval+1,W
-;    bnz     surfmode_check_for_interval2		; No
-;    return
-;surfmode_check_for_interval2:
-;	incf    warning_counter,F					; increase counter
-;    call    TFT_interval
-;    return
-
+surfmode_check_for_warnings3:
+	; Clear 2nd row of warnings if there is nothing to show (on this page)
+	btfss	second_row_warning				; =1: The second row contains a warning
+	call	TFT_clear_warning_text_2nd_row	; No, clear this row
+	return									; Done.
 
 surfmode_check_for_desat:
-	; REPLACE	## no fly
-	; movf    desaturation_time+0,W           	; Is nofly null ?
-    ; iorwf   desaturation_time+1,W
-	; BY
 	banksel	int_O_desaturation_time
-	movf    int_O_desaturation_time+0,W			; Is nofly null ?
-	iorwf   int_O_desaturation_time+1,W
-	
-    bnz     surfmode_check_for_desat2			; No
-	
-	; NEW	## no fly
-	banksel common
-	
-    return
-
-surfmode_check_for_desat2:
-	; NEW	## no fly
-	banksel common
-	
-	incf	warning_counter,F					; increase counter
-    call    TFT_desaturation_time
-    return
+	movf	int_O_desaturation_time+0,W	; is nofly-time null ?
+	iorwf	int_O_desaturation_time+1,W
+	banksel	common
+	bnz		surfmode_check_for_desat_1	; NO
+	return
+surfmode_check_for_desat_1:				; YES
+	incf	warning_counter,F			; increase counter
+	call	TFT_desaturation_time		; show desaturation time
+	return
 
 surfmode_check_for_nofly:
-	; REPLACE	## no fly
- 	; movf    nofly_time+0,W              		; Is nofly null ?
-    ; iorwf   nofly_time+1,W
-	; BY
 	banksel	int_O_nofly_time
-	movf    int_O_nofly_time+0,W           		; Is nofly null ?
-	iorwf   int_O_nofly_time+1,W
-	
-    bnz     surfmode_check_for_nofly2   		; No...
-	
-	; NEW	## no fly
+	movf	int_O_nofly_time+0,W		; is nofly-time null ?
+	iorwf	int_O_nofly_time+1,W
 	banksel	common
-	
-    return
-
-surfmode_check_for_nofly2:
-	; NEW	## no fly
-	banksel	common
-	
-	incf	warning_counter,F					; increase counter
-    call    TFT_nofly_time
-    return
+	bnz		surfmode_check_for_nofly_1	; No...
+	return
+surfmode_check_for_nofly_1:				; YES
+	incf	warning_counter,F			; increase counter
+	call	TFT_nofly_time				; show nofly-time
+	return
 
 
 ;=============================================================================
 
-; DELETE - not used any more	## no fly
-;	global	calc_deko_surfmode
-;calc_deko_surfmode:
-;
-;	; DELETE - deco_calc_wo_deco_step_1_min uses int_I_pres_surface, not int_I_pres_respiration	## no fly
-;    ; SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy surface air pressure to deco routine
-;
-;	call	deco_calc_wo_deco_step_1_min    			; calculate deco in surface mode
-;	
-;	; NEW	## no fly
-;	; call	deco_calc_desaturation_time
-;	
-;	banksel		common
-;	return
-
-test_switches_surfmode:		; checks switches in surfacemode
+test_switches_surfmode:					; checks switches in surfacemode
 	btfsc	switch_right
 	bra		test_switches_surfmode2
 	btfsc	switch_left
-	bra		test_switches_surfmode3		
-	
-	; No button press
+	bra		test_switches_surfmode3
+	; No button pressed
 	return
 
 test_switches_surfmode3:
-    movlw   .6
-    cpfseq  menupos3                    ; in compass view?
-    bra     test_switches_surfmode3a    ; No
+	movlw	.6
+	cpfseq	menupos3					; in compass view?
+	bra	 test_switches_surfmode3a		; No
 
-    btfsc   premenu                     ; already shown "Bearing"
-    bra     test_switches_surfmode3b    ; Yes, remove it
+	btfsc	premenu						; already shown "Bearing"
+	bra		test_switches_surfmode3b	; Yes, remove it
 
-    extern  TFT_surf_set_bearing
-    call    TFT_surf_set_bearing        ; Yes.
-    bcf		switch_left
-    return
+	extern	TFT_surf_set_bearing
+	call	TFT_surf_set_bearing		; Yes.
+	bcf		switch_left
+	return
 
 test_switches_surfmode3a:
 	bcf		switch_left
@@ -491,51 +412,51 @@
 	return
 
 test_switches_surfmode3b:
-    ; Clear "Heading?"
-    WIN_BOX_BLACK   .158,.190, .15, .99  ; top, bottom, left, right
-    bcf     premenu
-    bcf		switch_left
-    return
+	; Clear "Heading?"
+	WIN_BOX_BLACK	.158,.190, .15, .99	; top, bottom, left, right
+	bcf		premenu
+	bcf		switch_left
+	return
 
 test_switches_surfmode2:
-    movlw   .6
-    cpfseq  menupos3                    ; in compass view?
-    bra     test_switches_surfmode2a    ; No
-    btfss   premenu                     ; "Heading?" shown?
-    bra     test_switches_surfmode2a    ; No
-    ; Set new heading
-    bcf     premenu
-    bsf     compass_bearing_set
-    movff   compass_heading_shown+0,compass_bearing+0
-    movff   compass_heading_shown+1,compass_bearing+1
+	movlw	.6
+	cpfseq	menupos3					; in compass view?
+	bra		test_switches_surfmode2a	; No
+	btfss	premenu						; "Heading?" shown?
+	bra		test_switches_surfmode2a	; No
+	; Set new heading
+	bcf		premenu
+	bsf		compass_bearing_set
+	movff	compass_heading_shown+0,compass_bearing+0
+	movff	compass_heading_shown+1,compass_bearing+1
 	bcf		switch_right
-    return
+	return
 
 test_switches_surfmode2a:
 	bcf		switch_right
 	bsf		toggle_customview
-    bcf     premenu
-    clrf	timeout_counter2        ; and reset timeout
+	bcf		premenu
+	clrf	timeout_counter2			; and reset timeout
 	return
 
 	global	timeout_surfmode
 timeout_surfmode:
-	movlw	timeout_surfacemode		; [s] Default timeout
-    btfsc   menu_show_sensors2      ; In the "Calibrate" menu?
-    movlw   timeout_calibrate_menu  ; [s] CCR Calibrate Menu timeout
-    btfsc   menubit                 ; in Menu?
-    bra     timeout_testmode        ; No, done.
-    ; Must be in surface mode
-    btfss   FLAG_ccr_mode           ; =1: CCR mode (Fixed ppO2 or Sensor) active
-    bra     timeout_testmode        ; No, not CCR
-    movlw   timeout_ccr_surface     ; [s] CCR Surface mode timeout
+	movlw	timeout_surfacemode			; [s] Default timeout
+	btfsc	menu_show_sensors2			; In the "Calibrate" menu?
+	movlw	timeout_calibrate_menu		; [s] CCR Calibrate Menu timeout
+	btfsc	menubit						; in Menu?
+	bra		timeout_testmode			; No, done.
+	; Must be in surface mode
+	btfss	FLAG_ccr_mode				; =1: CCR mode (Fixed ppO2 or Sensor) active
+	bra		timeout_testmode			; No, not CCR
+	movlw	timeout_ccr_surface			; [s] CCR Surface mode timeout
 
 	global	timeout_testmode
 timeout_testmode:
-	incf	timeout_counter2,F		; increase timeout counter
-	cpfsgt	timeout_counter2		; Compare with timeout_counter2
-	return							; return, no timeout
-	bsf		sleepmode				; Set Flag
-	return							; Return
+	incf	timeout_counter2,F			; increase timeout counter
+	cpfsgt	timeout_counter2			; Compare with timeout limit
+	return								; return, no timeout
+	bsf		sleepmode					; Set Flag
+	return								; Return
 
- END
\ No newline at end of file
+	END
\ No newline at end of file
--- a/src/surfmode.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/surfmode.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File surfmode.inc								REFACTORED VERSION V2.92
+;   File surfmode.inc								REFACTORED VERSION V2.97
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -8,109 +8,107 @@
 ; HISTORY
 ;  2011-08-07 : [mH] moving from OSTC code
 
- extern surfloop
-; extern	calc_deko_surfmode			DELETED - not used any more	## no fly
- extern	timeout_surfmode
- extern	timeout_testmode
+	extern surfloop
+	extern	timeout_surfmode
+	extern	timeout_testmode
 
 ; Surfacemode/Homescreen layout:
 ; row=0...239
 ; column=0...159 (x2)
 
-#DEFINE	surf_clock_row		.0
-#DEFINE	surf_clock_column	.5
-#DEFINE	surf_date_row		.25
-#DEFINE	surf_date_column	.1
+#DEFINE surf_clock_row					.0
+#DEFINE surf_clock_column				.5
+#DEFINE surf_date_row					.25
+#DEFINE surf_date_column				.1
 
-#DEFINE	batt_voltage_row	.8
-#DEFINE	batt_voltage_column	.45
-#DEFINE	batt_percent_row	.26
-#DEFINE	batt_percent_column	.60
+#DEFINE batt_voltage_row				.8
+#DEFINE batt_voltage_column				.45
+#DEFINE batt_percent_row				.26
+#DEFINE batt_percent_column				.60
 
-#DEFINE	surf_desat_row		.103
-#DEFINE	surf_desat_column	.65
-#DEFINE	surf_nofly_row		.128
-#DEFINE	surf_nofly_column	.65
+#DEFINE surf_desat_row					.103
+#DEFINE surf_desat_column				.65
+#DEFINE surf_nofly_row					.128
+#DEFINE surf_nofly_column				.65
 
-#DEFINE surf_warning1_column    .40
-#DEFINE surf_warning1_row       .191
-#DEFINE surf_warning2_column    surf_warning1_column
-#DEFINE surf_warning2_row       surf_warning1_row+.24
-#DEFINE surf_warning_length     .11                 ; total string length
+#DEFINE surf_warning1_column			.40
+#DEFINE surf_warning1_row				.191
+#DEFINE surf_warning2_column			surf_warning1_column
+#DEFINE surf_warning2_row				surf_warning1_row+.24
+#DEFINE surf_warning_length				.11						; total string length
 
-#DEFINE	surf_temp_row		.185
-#DEFINE	surf_temp_column	.120					; CHANGED - clear overlapp with warning text area ## temp
-#DEFINE	surf_press_row		.160
-#DEFINE	surf_press_column	.98
+#DEFINE	surf_temp_row					.185
+#DEFINE	surf_temp_column				.120
+#DEFINE	surf_press_row					.160
+#DEFINE	surf_press_column				.98
 
-#DEFINE	surf_gaslist_row        .66
-#DEFINE	surf_gaslist_column     .2
-#DEFINE surf_gaslist_spacing    .24
+#DEFINE	surf_gaslist_row				.66
+#DEFINE	surf_gaslist_column				.2
+#DEFINE surf_gaslist_spacing			.24
 
-#DEFINE surf_customview_title_row   .52
-#DEFINE surf_customview_title_column   .15
+#DEFINE surf_customview_title_row		.52
+#DEFINE surf_customview_title_column	.15
 
-#DEFINE surf_customtext_row1    .66
-#DEFINE surf_customtext_row2    surf_customtext_row1+.24
-#DEFINE surf_customtext_row3    surf_customtext_row2+.24
-#DEFINE surf_customtext_row4    surf_customtext_row3+.24
-#DEFINE surf_customtext_row5    surf_customtext_row4+.24
-#DEFINE surf_customtext_column  .5
+#DEFINE surf_customtext_row1			.66
+#DEFINE surf_customtext_row2			surf_customtext_row1+.24
+#DEFINE surf_customtext_row3			surf_customtext_row2+.24
+#DEFINE surf_customtext_row4			surf_customtext_row3+.24
+#DEFINE surf_customtext_row5			surf_customtext_row4+.24
+#DEFINE surf_customtext_column			.5
 
-#DEFINE surf_compass_mask_row       surf_customtext_row2
-#DEFINE surf_compass_mask_column    .10
-#DEFINE surf_compass_head_row       surf_customtext_row4-.8
-#DEFINE surf_compass_head_column    .10
+#DEFINE surf_compass_mask_row			surf_customtext_row2
+#DEFINE surf_compass_mask_column		.10
+#DEFINE surf_compass_head_row			surf_customtext_row4-.8
+#DEFINE surf_compass_head_column		.10
 
-#DEFINE surf_compass_bear_column    .15
-#DEFINE surf_compass_bear_row       surf_customtext_row5
+#DEFINE surf_compass_bear_column		.15
+#DEFINE surf_compass_bear_row			surf_customtext_row5
 
-#DEFINE surf_hud_sensor1_column .112
-#DEFINE surf_hud_sensor1_row    .87
-#DEFINE surf_hud_sensor2_column surf_hud_sensor1_column
-#DEFINE surf_hud_sensor2_row    .111
-#DEFINE surf_hud_sensor3_column surf_hud_sensor1_column
-#DEFINE surf_hud_sensor3_row    .135
+#DEFINE surf_hud_sensor1_column			.112
+#DEFINE surf_hud_sensor1_row			.87
+#DEFINE surf_hud_sensor2_column			surf_hud_sensor1_column
+#DEFINE surf_hud_sensor2_row			.111
+#DEFINE surf_hud_sensor3_column			surf_hud_sensor1_column
+#DEFINE surf_hud_sensor3_row			.135
 
-#DEFINE surf_menu_sensor1_column    .80
-#DEFINE surf_menu_sensor1_row       .60
-#DEFINE surf_menu_sensor2_column    surf_menu_sensor1_column
-#DEFINE surf_menu_sensor2_row       surf_menu_sensor1_row+.27*.1
-#DEFINE surf_menu_sensor3_column    surf_menu_sensor1_column
-#DEFINE surf_menu_sensor3_row       surf_menu_sensor1_row+.27*.2
-#DEFINE surf_menu_sensor4_column    surf_menu_sensor1_column
-#DEFINE surf_menu_sensor4_row       surf_menu_sensor1_row-.27*.1
-#DEFINE surf_menu2_sensor1_row      .47
-#DEFINE surf_menu2_sensor2_row      surf_menu2_sensor1_row+.27*.1
-#DEFINE surf_menu2_sensor3_row      surf_menu2_sensor1_row+.27*.2
-#DEFINE surf_menu2_ambient_row      surf_menu2_sensor1_row+.27*.4
-#DEFINE surf_menu2_ambient_column   .95
- 
+#DEFINE surf_menu_sensor1_column		.80
+#DEFINE surf_menu_sensor1_row			.60
+#DEFINE surf_menu_sensor2_column		surf_menu_sensor1_column
+#DEFINE surf_menu_sensor2_row			surf_menu_sensor1_row+.27*.1
+#DEFINE surf_menu_sensor3_column		surf_menu_sensor1_column
+#DEFINE surf_menu_sensor3_row			surf_menu_sensor1_row+.27*.2
+#DEFINE surf_menu_sensor4_column		surf_menu_sensor1_column
+#DEFINE surf_menu_sensor4_row			surf_menu_sensor1_row-.27*.1
+#DEFINE surf_menu2_sensor1_row			.47
+#DEFINE surf_menu2_sensor2_row			surf_menu2_sensor1_row+.27*.1
+#DEFINE surf_menu2_sensor3_row			surf_menu2_sensor1_row+.27*.2
+#DEFINE surf_menu2_ambient_row			surf_menu2_sensor1_row+.27*.4
+#DEFINE surf_menu2_ambient_column		.95
+
 #DEFINE	surf_mV_sensor_status_column	.145
 
-#DEFINE surf_tissue_diagram_top     .66
-#DEFINE surf_tissue_diagram_bottom  surf_tissue_diagram_top+.117  ; 183
-#DEFINE surf_tissue_diagram_left    .5
-#DEFINE surf_tissue_diagram_right   surf_decotype_column-.5
-#DEFINE surf_tissue_N2_row          surf_tissue_diagram_top+.1
-#DEFINE surf_tissue_N2_column       surf_tissue_diagram_left+.5
-#DEFINE surf_tissue_He_row          surf_tissue_diagram_top+.56
-#DEFINE surf_tissue_He_column       surf_tissue_N2_column
+#DEFINE surf_tissue_diagram_top			.66
+#DEFINE surf_tissue_diagram_bottom		surf_tissue_diagram_top+.117  ; 183
+#DEFINE surf_tissue_diagram_left		.5
+#DEFINE surf_tissue_diagram_right		surf_decotype_column-.5
+#DEFINE surf_tissue_N2_row				surf_tissue_diagram_top+.1
+#DEFINE surf_tissue_N2_column			surf_tissue_diagram_left+.5
+#DEFINE surf_tissue_He_row				surf_tissue_diagram_top+.56
+#DEFINE surf_tissue_He_column			surf_tissue_N2_column
 
-#DEFINE surf_decotype_row       .60
-#DEFINE surf_decotype_column    .100
+#DEFINE surf_decotype_row				.60
+#DEFINE surf_decotype_column			.100
 
 ; OSTC2-style start gas and boxes
-#DEFINE surf_decotype_boxes_top     surf_decotype_row+.30+.25-.1
-#DEFINE surf_decotype_boxes_bottom  surf_decotype_boxes_top+.22
-#DEFINE surf_decotype_boxes_left1   surf_decotype_column+.5
-#DEFINE surf_decotype_boxes_left2   surf_decotype_boxes_left1+.9
-#DEFINE surf_decotype_boxes_left3   surf_decotype_boxes_left1+.18
-#DEFINE surf_decotype_boxes_left4   surf_decotype_boxes_left1+.27
-#DEFINE surf_decotype_boxes_left5   surf_decotype_boxes_left1+.36
- 
- #DEFINE surf_mV_sensor_column .5 
- #DEFINE surf_mV_sensor1_row .90 
- #DEFINE surf_mV_sensor2_row surf_mV_sensor1_row+.24 
- #DEFINE surf_mV_sensor3_row surf_mV_sensor2_row+.24
+#DEFINE surf_decotype_boxes_top			surf_decotype_row+.30+.25-.1
+#DEFINE surf_decotype_boxes_bottom		surf_decotype_boxes_top+.22
+#DEFINE surf_decotype_boxes_left1		surf_decotype_column+.5
+#DEFINE surf_decotype_boxes_left2		surf_decotype_boxes_left1+.9
+#DEFINE surf_decotype_boxes_left3		surf_decotype_boxes_left1+.18
+#DEFINE surf_decotype_boxes_left4		surf_decotype_boxes_left1+.27
+#DEFINE surf_decotype_boxes_left5		surf_decotype_boxes_left1+.36
 
+#DEFINE surf_mV_sensor_column			.5 
+#DEFINE surf_mV_sensor1_row				.90 
+#DEFINE surf_mV_sensor2_row				surf_mV_sensor1_row+.24 
+#DEFINE surf_mV_sensor3_row				surf_mV_sensor2_row+.24
--- a/src/text_english.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/text_english.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -136,7 +136,7 @@
     TCODE   tGF_high,   	"GF high:"
     TCODE   tSaturationMult,  "Saturation  :"	; 								## MODIFIED (layout)
     TCODE   tDesaturationMult,"Desaturation:"
-	TCODE   tFTTSMenu,  	"fTTS/Delay:"		; Future TTS / Ascent Delay		## MODIFIED (layout)
+	TCODE   tFTTSMenu,  	"fTTS/fB/O:"		; Future TTS / Ascent Delay		## MODIFIED (layout)
     TCODE   taGFMenu,   	"Alternative GF"    ; Alternative GF
     TCODE   taGF_low,   	"aGF low :"         ; aGF low						## MODIFIED (layout)
     TCODE   taGF_high,  	"aGF high:"         ; aGF high
@@ -150,6 +150,7 @@
 	TCODE	tCalcAscGas,	 "Calc.Gas (B/O):"	;								## NEW bailout gas needs
 	TCODE	tTankSizes,		 "Tank Sizes"		;								## NEW bailout gas needs
 	TCODE   tLiter,			 " l"				;								## NEW bailout gas needs 
+	TCODE	tBarLiter,		"Bar Liter"
 	TCODE	tTankFillPress,	 "Tank Press Budget";
 	TCODE	tGas1,			 "Gas 1:"			;								## NEW bailout gas needs
 	TCODE	tGas2,			 "Gas 2:"			;								## NEW bailout gas needs
--- a/src/text_french.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/text_french.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -136,7 +136,7 @@
     TCODE   tGF_high,   "GF Haut:"
     TCODE   tSaturationMult,    "Saturation:"
     TCODE   tDesaturationMult,  "Désaturation:"
-    TCODE   tFTTSMenu,  "Future DTR:"			; Future TTS
+    TCODE   tFTTSMenu,  "fDTR/fB/O:"			; Future TTS
     TCODE   taGFMenu,   "GF Alternatif"			; Alternative GF
     TCODE   taGF_low,   "aGF Bas:"				; aGF Low
     TCODE   taGF_high,  "aGF Haut:"				; aGF High
@@ -150,6 +150,7 @@
 	TCODE	tCalcAscGas,	 "Calc.Gaz (B/O):"	;								## NEW bailout gas needs
 	TCODE	tTankSizes,		 "Volumes Blocs"	; Tank Sizes					## NEW bailout gas needs
 	TCODE   tLiter,			 " l"				;								## NEW bailout gas needs 
+	TCODE	tBarLiter,		"Bar Litre"
 	TCODE	tTankFillPress,	 "Pressions Blocs"	; Tank Press Budget				## NEW bailout gas needs
 	TCODE	tGas1,			 "Gaz 1:"			;								## NEW bailout gas needs
 	TCODE	tGas2,			 "Gaz 2:"			;								## NEW bailout gas needs
--- a/src/text_german.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/text_german.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -57,7 +57,7 @@
     TCODE   tGaslist,   		"OC Gas Liste"
     TCODE   tGaslistCC, 		"CC Gas Liste"  		; CC Diluents
     TCODE   tGasEdit,   		"Gas einstellen"
-    TCODE   tType,      		"Type: "
+    TCODE   tType,      		"Typ: "
     TCODE   tGasDisabled,		"Deaktiviert"  			; Disabled
     TCODE   tGasFirst,   		"Start"        			; First
     TCODE   tGasTravel,  		"Reise"        			; Travel
@@ -123,20 +123,20 @@
     TCODE   tDvApnea,   		"Apnoe"
     TCODE   tDvPSCR,			"pSCR"
     TCODE   tDvCC,      		"CC"
-    TCODE   tDkMode,    		"Decotype:ZH-L16"		;								## MODIFIED (memory needs)
+    TCODE   tDkMode,    		"Decotyp:ZH-L16"		;								## MODIFIED (memory needs)
     TCODE   tZHL16,     		" "						; keep order, enum from here...	## MODIFIED (memory needs)
     TCODE   tZHL16GF,   		"+GF"					; ...up to here!				## MODIFIED (memory needs)
     TCODE   tPPO2Max,   		"Max.     :"
     TCODE   tPPO2DECO,			"Max. Deko:"
     TCODE   tPPO2MIN,   		"Min.     :"
 	TCODE	tPPO2MINCC, 		"Min. Loop:"
-	TCODE   tLastDecostop, 		"Letzt.Stop:"
+	TCODE   tLastDecostop, 		"Letzt.Stopp:"
     TCODE   tDecoparameters, 	"Deko Parameter"
     TCODE   tGF_low,    		"GF low :"
     TCODE   tGF_high,   		"GF high:"
     TCODE   tSaturationMult,    "Sättigung   :"
     TCODE   tDesaturationMult,  "Entsättigung:"
-    TCODE   tFTTSMenu,  		"fTTS/Verz.:"	        ; Future TTS
+    TCODE   tFTTSMenu,  		"fTTS/fB/O:"	        ; Future TTS
     TCODE   taGFMenu,   		"Alternativ-GF"         ; Alternative GF
     TCODE   taGF_low,   		"aGF low :"             ; aGF low
     TCODE   taGF_high,  		"aGF high:"             ; aGF high
@@ -144,12 +144,13 @@
     TCODE   tDiveaGF_active,	"aGF aktiv"      		; aGF Active
     TCODE   tppO2settings,		"ppO2 Parameter"   		; ppO2 Settings
     TCODE   tsafetystopmenu,	"Sicherheitsstop:"      ; Safety Stop:
-	TCODE   tGasUsage,  		"Gas Usage"         	; Gas Usage
+	TCODE   tGasUsage,  		"Verbrauch"         	; Gas Usage
     TCODE   tSetBotUse, 		"Reise Gas: "      		; Bottom Gas: (space)
     TCODE   tSetDecoUse,		"Deko  Gas: "      		; Deco   Gas: (space)
 	TCODE	tCalcAscGas,	 	"Gasmenge(B/O):"
 	TCODE	tTankSizes,		 	"Tank Größen"
 	TCODE   tLiter,			 	" l"
+	TCODE	tBarLiter,			"Barliter"
 	TCODE	tTankFillPress,	 	"Tank Nutzmenge"
 	TCODE	tGas1,			 	"Gas 1:"
 	TCODE	tGas2,				"Gas 2:"
@@ -165,7 +166,7 @@
     TCODE   tMedium,    		"Mittel"
     TCODE   tHigh,      		"Hoch"
     TCODE   tDvSalinity,		"Salinität: "			; Salinity
-	TCODE   tShowppO2,  		"ständig zeigen:"		; Always show ppO2:
+	TCODE   tShowppO2,  		"Ständig zeigen:"		; Always show ppO2:
     TCODE   tFlip,      		"Anzeige drehen:"		; Rotate Screen
     TCODE   tMODwarning,		"MOD  Warnung:"			; MOD warning
 	TCODE	tIBCDwarning,		"IBCD Warnung:"			; IBCD Warning	
@@ -307,7 +308,7 @@
 
 ; Logbook
 	TCODE	tCNS2,				"ZNS:"
-	TCODE	tAVG,				"Mit:"
+	TCODE	tAVG,				"Mittel:"
 	TCODE	tGF,				"GF:"
 	TCODE	tSAT,				"Sät:"					; Sat:
 
--- a/src/text_italian.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/text_italian.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -136,7 +136,7 @@
     TCODE   tGF_high,   "GF Alto:"
     TCODE   tSaturationMult,    "Saturazione:"
     TCODE   tDesaturationMult,  "Desaturazione:"
-    TCODE   tFTTSMenu,  "TTS Futuro:"            ; Future TTS
+    TCODE   tFTTSMenu,  "fTTS/fB/O:"            ; Future TTS
     TCODE   taGFMenu,   "GF Alternativo"         ; Alternative GF
     TCODE   taGF_low,   "aGF Basso:"               ; aGF low
     TCODE   taGF_high,  "aGF Alto:"              ; aGF high
@@ -210,6 +210,7 @@
     TCODE   tMinutes,   "'"
     TCODE   tPercent,   "%"
     TCODE   tLitersMinute, "l/min"
+    TCODE	tBarLiter,			"Bar Liter"
 	TCODE	tbar,		"bar"					; bar
 	TCODE	tbar10,		"0 bar"					; bar							## NEW 2.95
 	TCODE	tMeterMinute, "m/min"				; meter per minute				## NEW ascent speed
--- a/src/tft.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/tft.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File tft.asm
+;   File tft.asm													## V2.97
 ;
 ;   Managing the TFT screen
 ;
@@ -17,56 +17,43 @@
 #include "eeprom_rs232.inc"
 
 ;=============================================================================
-; TFT_frame needs to backup coordinates.
-        CBLOCK  tmp
-            save_top                
-            save_height 
-            save_left   
-            save_width
-        	ds_line                 ; Current line (0..239).
-        	ds_column               ; Current columnx2 (0..159)
-        	ds_pixel:2              ; Current pixel color.
-        	ds_count                ; Repetition count.
-        ENDC
-
-;=============================================================================
 ; Basic bit-level macros
 
-RD_H		macro
-			bsf tft_rd,0
-			endm
+RD_H	macro
+		bsf tft_rd,0
+		endm
 
-RD_L		macro
-			bcf tft_rd,0
-			endm
+RD_L	macro
+		bcf tft_rd,0
+		endm
 
-RS_H		macro
-			bsf tft_rs,0
-			endm
+RS_H	macro
+		bsf tft_rs,0
+		endm
 
-RS_L		macro
-			bcf tft_rs,0
-			endm
+RS_L	macro
+		bcf tft_rs,0
+		endm
 
-NCS_H		macro
-			bsf tft_cs,0
-			endm
+NCS_H	macro
+		bsf tft_cs,0
+		endm
 
-NCS_L		macro
-			bcf tft_cs,0
-			endm
+NCS_L	macro
+		bcf tft_cs,0
+		endm
 
-WR_H		macro
-			bsf tft_nwr,0
-			endm
+WR_H	macro
+		bsf tft_nwr,0
+		endm
 
-WR_L		macro
-			bcf tft_nwr,0
-			endm
+WR_L	macro
+		bcf tft_nwr,0
+		endm
 
 ;=============================================================================
-; Byte-leve macros
-;
+; Byte-level macros
+
 Index_out		macro low_b
 				movlw low_b
 				rcall TFT_CmdWrite
@@ -80,96 +67,95 @@
 				endm
 
 
-basic   CODE
-;
-;
+basic	CODE
+
 ;;=============================================================================
 ;; TFT_write_flash_image
 ;;
 ;; Inputs:  FSR2 = EEPROM address / 256
-;;          win_left, win_top : imagte CENTER position
+;;          win_left, win_top : image CENTER position
 ;; Outputs: win_height, win_width.
-;;          image copyed on screen.
+;;          image copied on screen.
 ;; Trashed: PROD, hi, lo
 ;;
 ;	global	TFT_write_flash_image
 ;TFT_write_flash_image:
-;    ; Get back the full 24bit EEPROM address
-;    clrf    ext_flash_address+0
-;    movff   FSR2L,ext_flash_address+1
-;    movf    FSR2H,W
-;    iorlw   0x30
-;    movwf   ext_flash_address+2
+;	; Get back the full 24bit EEPROM address
+;	clrf	ext_flash_address+0
+;	movff	FSR2L,ext_flash_address+1
+;	movf	FSR2H,W
+;	iorlw	0x30
+;	movwf	ext_flash_address+2
 ;
-;    ; Read header: width and height
-;    global  TFT_write_flash_image_addr
+;	; Read header: width and height
+;	global	TFT_write_flash_image_addr
 ;TFT_write_flash_image_addr:
 ;	call	ext_flash_read_block_start
-;	movff   SSP2BUF,win_width+0
-;	movwf	SSP2BUF						; Write to buffer to initiate new read
-;	btfss	SSP2STAT, BF                ; Next byte ready ?
-;	bra		$-2                         ; NO: wait...
-;   	movff   SSP2BUF,win_width+1
-;	movwf	SSP2BUF						; Write to buffer to initiate new read
-;	btfss	SSP2STAT, BF                ; Next byte ready ?
-;	bra		$-2                         ; NO: wait...
-;	movff   SSP2BUF,win_height
-;	movwf	SSP2BUF						; Write to buffer to initiate new read
-;	btfss	SSP2STAT, BF                ; Next byte ready ?
-;	bra		$-2                         ; NO: wait...
-;	movff   SSP2BUF,WREG                ; drop 4th byte.
-;	movwf	SSP2BUF						; Write to buffer to initiate new read
-;	btfss	SSP2STAT, BF                ; Next byte ready ?
-;	bra		$-2                         ; NO: wait...
+;	movff	SSP2BUF,win_width+0
+;	movwf	SSP2BUF					; Write to buffer to initiate new read
+;	btfss	SSP2STAT, BF			; Next byte ready ?
+;	bra		$-2						; NO: wait...
+;	movff	SSP2BUF,win_width+1
+;	movwf	SSP2BUF					; Write to buffer to initiate new read
+;	btfss	SSP2STAT, BF			; Next byte ready ?
+;	bra		$-2						; NO: wait...
+;	movff	SSP2BUF,win_height
+;	movwf	SSP2BUF					; Write to buffer to initiate new read
+;	btfss	SSP2STAT, BF			; Next byte ready ?
+;	bra		$-2						; NO: wait...
+;	movff   SSP2BUF,WREG			; drop 4th byte.
+;	movwf	SSP2BUF					; Write to buffer to initiate new read
+;	btfss	SSP2STAT, BF			; Next byte ready ?
+;	bra		$-2						; NO: wait...
 ;
-;    ; Sanity check on header to avoid badly uploaded images.
-;    iorwf   WREG                        ; Check height < 256
-;    bnz     TFT_write_flash_image_failed
-;    movf    win_width+1,W               ; Check width < 512
-;    andlw   0xFE
-;    bnz     TFT_write_flash_image_failed
+;	; Sanity check on header to avoid badly uploaded images.
+;	iorwf	WREG					; Check height < 256
+;	bnz		TFT_write_flash_image_failed
+;	movf	win_width+1,W			; Check width < 512
+;	andlw	0xFE
+;	bnz		TFT_write_flash_image_failed
 ;
-;    ; Center image on win_top, win_left values
-;    bcf     STATUS,C                    ; Clear carry
-;    rrcf    win_height,W                ; And get height/2
-;    subwf   win_top,F                   ; top -= height/2
-;    rrcf    win_width+1,W               ; Get 9th bit into carry
-;    rrcf    win_width+0,W               ; Get width/2 (in 0..320 range)
-;    bcf     STATUS,C
-;    rrcf    WREG,W                      ; Get width/2 in 0..160 range
-;    subwf   win_leftx2,F                ; left -= width/2
+;	; Center image on win_top, win_left values
+;	bcf		STATUS,C				; Clear carry
+;	rrcf	win_height,W			; And get height/2
+;	subwf	win_top,F				; top -= height/2
+;	rrcf	win_width+1,W			; Get 9th bit into carry
+;	rrcf	win_width+0,W			; Get width/2 (in 0..320 range)
+;	bcf		STATUS,C
+;	rrcf	WREG,W					; Get width/2 in 0..160 range
+;	subwf	win_leftx2,F			; left -= width/2
 ;
-;	rcall	TFT_box_write		    	; Inputs : win_top, win_leftx2, win_height, win_width(in 1..320 range)
+;	rcall	TFT_box_write			; Inputs : win_top, win_leftx2, win_height, win_width(in 1..320 range)
 ;
-;    ; Compute number of pixels to move (result on 17 bits !)
-;    clrf    TBLPTRU
-;    movf    win_width+0,W
-;    mulwf   win_height                  ; Result in PRODL:H
-;    movf    win_width+1,W
-;    bz      TFT_write_flash_image_1     ; width > 8bits ?
-;    movf    win_height,W                ; YES: add extra
-;    addwf   PRODH,F
-;    rlcf    TBLPTRU                     ; And carry into upper register.
+;	; Compute number of pixels to move (result on 17 bits !)
+;	clrf	TBLPTRU
+;	movf	win_width+0,W
+;	mulwf	win_height				; Result in PRODL:H
+;	movf	win_width+1,W
+;	bz		TFT_write_flash_image_1	; width > 8bits ?
+;	movf	win_height,W			; YES: add extra
+;	addwf	PRODH,F
+;	rlcf	TBLPTRU					; And carry into upper register.
 ;TFT_write_flash_image_1:
-;    incf    PRODH,F                     ; Pre-condition nested loops
-;    incf    TBLPTRU,F
+;	incf	PRODH,F					; pre-condition nested loops
+;	incf	TBLPTRU,F
 ;
-;    ; Write pixels
-;	Index_out 0x22						; Frame Memory Data Write start
-;	RS_H								; Data
+;	; Write pixels
+;	Index_out 0x22					; Frame Memory Data Write start
+;	RS_H							; Data
 ;
 ;TFT_write_flash_image_loop:
-;	btfss	SSP2STAT, BF				; Buffer full?
-;	bra		$-2                         ; NO: wait...
-;	movff	SSP2BUF,PORTH			    ; Read lo
-;	movwf	SSP2BUF						; Write to buffer to initiate new read
+;	btfss	SSP2STAT, BF			; Buffer full?
+;	bra		$-2						; NO: wait...
+;	movff	SSP2BUF,PORTH			; Read lo
+;	movwf	SSP2BUF					; Write to buffer to initiate new read
 ;
-;	btfss	SSP2STAT, BF				; Buffer full?
-;	bra		$-2                         ; NO: wait...
-;	movff	SSP2BUF,PORTA               ; And read hi
-;	movwf	SSP2BUF						; Write to buffer to initiate new read
+;	btfss	SSP2STAT, BF			; Buffer full?
+;	bra		$-2						; NO: wait...
+;	movff	SSP2BUF,PORTA			; And read hi
+;	movwf	SSP2BUF					; Write to buffer to initiate new read
 ;	WR_L
-;	WR_H								; Write 1 Pixel
+;	WR_H							; Write 1 Pixel
 ;
 ;	decfsz	PRODL,F
 ;	bra		TFT_write_flash_image_loop
@@ -178,76 +164,75 @@
 ;	decfsz	TBLPTRU,F
 ;	bra		TFT_write_flash_image_loop
 ;
-;	btfss	SSP2STAT, BF				; Buffer full?
-;	bra		$-2	                        ; No, wait
-;	movf	SSP2BUF,W                   ; Read dummy byte
+;	btfss	SSP2STAT, BF			; Buffer full?
+;	bra		$-2						; No, wait
+;	movf	SSP2BUF,W				; Read dummy byte
 ;
-;	bsf		flash_ncs					; CS=1
-;	movlw	0x00                        ; NOP, to stop window mode
-;	bra     TFT_CmdWrite				; This routine "returns"
+;	bsf		flash_ncs				; CS=1
+;	movlw	0x00					; NOP, to stop window mode
+;	bra		TFT_CmdWrite			; This routine "returns"
 ;
 ;	;---- Draw a 4x4 red square in place of missing images...
 ;TFT_write_flash_image_failed:
-;    movlw   -1
-;    addwf   win_leftx2,F
-;    movlw   -2
-;    addwf   win_top,F
-;    movlw   2
-;    movwf   win_width+0
-;    clrf    win_width+1
-;    movlw   4
-;    movwf   win_height
-;    movlw   color_red
-;    rcall   TFT_set_color
-;    goto    TFT_box
+;	movlw	-1
+;	addwf	win_leftx2,F
+;	movlw	-2
+;	addwf	win_top,F
+;	movlw	2
+;	movwf	win_width+0
+;	clrf	win_width+1
+;	movlw	4
+;	movwf	win_height
+;	movlw	color_red
+;	rcall	TFT_set_color
+;	goto	TFT_box
 ;
 ;;=============================================================================
-;
 
-    global  TFT_CmdWrite
+	global	TFT_CmdWrite
 TFT_CmdWrite:
-	RS_L				; Command
-	clrf	PORTA		; Upper
-	bcf	INTCON,GIE
-	movwf	PORTH		; Lower
+	RS_L							; Command
+	clrf	PORTA					; Upper
+	bcf		INTCON,GIE
+	movwf	PORTH					; Lower
 	WR_L
-	WR_H				; Tick
-	bsf	INTCON,GIE
-	return;
+	WR_H							; Tick
+	bsf		INTCON,GIE
+	return
 
-    global  TFT_DataWrite
+	global	TFT_DataWrite
 TFT_DataWrite:
-	RS_H				; Data
-	bcf	INTCON,GIE
-	movwf 	PORTH		; Lower
+	RS_H							; Data
+	bcf		INTCON,GIE
+	movwf 	PORTH					; Lower
 	WR_L
-	WR_H				; Tick
-	bsf	INTCON,GIE
+	WR_H							; Tick
+	bsf		INTCON,GIE
 	return
 
 ;=============================================================================
-;
-    global  TFT_ClearScreen
+
+	global	TFT_ClearScreen
 TFT_ClearScreen:
-	Index_out 0x50				; Window Horizontal Start Address
-	Parameter_out 0x00, 0x00	; 0-239
-	Index_out 0x51				; Window Horizontal End Address
-	Parameter_out 0x00, 0xEF	; 0-239
-	Index_out 0x52				; Window Vertical Start Address
-	Parameter_out 0x00, 0x00	; 0-319
-	Index_out 0x53				; Window Vertical End Address
-	Parameter_out 0x01, 0x3F	; 0-319
-	Index_out 0x20				; Frame Memory Horizontal Address
-	Parameter_out 0x00, 0x00	; 0-239
-	Index_out 0x21				; Frame Memory Vertical Address
-	Parameter_out 0x01, 0x3F	; 0-319
+	Index_out 0x50					; Window Horizontal Start Address
+	Parameter_out 0x00, 0x00		; 0-239
+	Index_out 0x51					; Window Horizontal End Address
+	Parameter_out 0x00, 0xEF		; 0-239
+	Index_out 0x52					; Window Vertical Start Address
+	Parameter_out 0x00, 0x00		; 0-319
+	Index_out 0x53					; Window Vertical End Address
+	Parameter_out 0x01, 0x3F		; 0-319
+	Index_out 0x20					; Frame Memory Horizontal Address
+	Parameter_out 0x00, 0x00		; 0-239
+	Index_out 0x21					; Frame Memory Vertical Address
+	Parameter_out 0x01, 0x3F		; 0-319
 
-	Index_out 0x22				; Frame Memory Data Write start
+	Index_out 0x22					; Frame Memory Data Write start
 
-	RD_H						; Not Read
-	RS_H						; Data
-	NCS_L						; Not CS
-	clrf	PORTH				; Data Lower
+	RD_H							; Not Read
+	RS_H							; Data
+	NCS_L							; Not CS
+	clrf	PORTH					; Data Lower
 
 	movlw	d'10'
 	movwf	tft_temp3
@@ -256,32 +241,32 @@
 	movwf	tft_temp2
 TFT_ClearScreen3:
 	clrf	tft_temp1				; 30*10*256=76800 Pixels -> Clear complete 240*320
-	bcf	INTCON,GIE
+	bcf		INTCON,GIE
 TFT_ClearScreen4:
 	WR_L
 	WR_H							; Tick
 	decfsz	tft_temp1,F
 	bra		TFT_ClearScreen4
-	bsf	INTCON,GIE
+	bsf		INTCON,GIE
 	decfsz	tft_temp2,F
 	bra		TFT_ClearScreen3
 	decfsz	tft_temp3,F
 	bra		TFT_ClearScreen2
-	
-	movlw	0x00                        ; NOP, to stop window mode
-        bra	TFT_CmdWrite		    ; And return
-;	return
+
+	movlw	0x00					; NOP, to stop window mode
+	bra		TFT_CmdWrite			; And return
+
 
 ;=============================================================================
-; 
-    global  TFT_DisplayOff
+
+	global	TFT_DisplayOff
 TFT_DisplayOff:
-	clrf	CCPR1L				; PWM OFF
+	clrf	CCPR1L					; PWM OFF
 	clrf	PORTA
-    clrf	PORTH
-	RD_L	; LOW
+	clrf	PORTH
+	RD_L							; LOW
 	nop
-	RS_L	; LOW
+	RS_L							; LOW
 	bcf		tft_nwr
 	nop
 	bcf		tft_cs
@@ -295,7 +280,8 @@
 ; -----------------------------
 ; TFT boot
 ; -----------------------------
-    global  TFT_boot
+
+	global	TFT_boot
 TFT_boot:
 	clrf	PORTA
 	clrf	PORTH
@@ -320,66 +306,66 @@
 	WAITMS	d'5'
 	bsf		tft_nreset
 	WAITMS	d'150'
-	bsf		lightsen_power  		; Supply power to light sensor
+	bsf		lightsen_power			; Supply power to light sensor
 
-; Data Transfer Synchronization
+	; Data Transfer Synchronization
 	Parameter_out 0x00, 0x00
 	Parameter_out 0x00, 0x00
-	
+
 	; Get screentype from Bootloader-Info
-	movlw   0x7B
-	movwf   TBLPTRL
-	movlw   0xF7
-	movwf   TBLPTRH
-	movlw   0x01
-	movwf   TBLPTRU
-	TBLRD*+			; Reads .110 for cR and USB OSTC3, .0 for BLE (2 and 3), and .2 for display1 OSTC
+	movlw	0x7B
+	movwf	TBLPTRL
+	movlw	0xF7
+	movwf	TBLPTRH
+	movlw	0x01
+	movwf	TBLPTRU
+	TBLRD*+							; Reads .110 for cR and USB OSTC3, .0 for BLE (2 and 3), and .2 for display1 OSTC
 	movlw	0x02
 	cpfseq	TABLAT
-	bra     TFT_boot_0      ; Display0
+	bra		TFT_boot_0				; Display0
 
 TFT_boot_1:
-; Init through config table...
-    movlw   0x74
-    movwf   TBLPTRL
-    movlw   0xF7
-    movwf   TBLPTRH
-    movlw   0x01
-    movwf   TBLPTRU
-    bsf     screen_type
-    bra     TFT_boot_com
+	; Init through config table...
+	movlw	0x74
+	movwf	TBLPTRL
+	movlw	0xF7
+	movwf	TBLPTRH
+	movlw	0x01
+	movwf	TBLPTRU
+	bsf		screen_type
+	bra		TFT_boot_com
 
 TFT_boot_0:
-; Init through config table...
-    movlw   LOW     display0_config_table
-    movwf   TBLPTRL
-    movlw   HIGH    display0_config_table
-    movwf   TBLPTRH
-    movlw   UPPER   display0_config_table
-    movwf   TBLPTRU
-    bcf     screen_type
-    
+	; Init through config table...
+	movlw	LOW   display0_config_table
+	movwf	TBLPTRL
+	movlw	HIGH  display0_config_table
+	movwf	TBLPTRH
+	movlw	UPPER display0_config_table
+	movwf	TBLPTRU
+	bcf		screen_type
+
 TFT_boot_com:
-    rcall   display0_init_loop
+	rcall	display0_init_loop
 
-    Index_out 0x03
-    btfsc   flip_screen             ; 180° rotation ?
-    bra     TFT_boot2               ; Yes
+	Index_out 0x03
+	btfsc	flip_screen				; 180° rotation ?
+	bra		TFT_boot2				; Yes
 
-    btfss   screen_type             ; display1?
-    bra     TFT_boot1a              ; no
-    Parameter_out 0x10, 0x00        ; display1
-    bra     TFT_boot3
+	btfss	screen_type				; display1?
+	bra		TFT_boot1a				; no
+	Parameter_out 0x10, 0x00		; display1
+	bra		TFT_boot3
 TFT_boot1a:
-    Parameter_out 0x50, 0x20        ; display0
-    bra     TFT_boot3
+	Parameter_out 0x50, 0x20		; display0
+	bra		TFT_boot3
 TFT_boot2:
-    btfss   screen_type             ; display1?
-    bra     TFT_boot2a              ; no
-    Parameter_out 0x10, 0x30        ; display1
-    bra     TFT_boot3
+	btfss	screen_type				; display1?
+	bra		TFT_boot2a				; no
+	Parameter_out 0x10, 0x30		; display1
+	bra		TFT_boot3
 TFT_boot2a:
-    Parameter_out 0x50, 0x10        ; display0
+	Parameter_out 0x50, 0x10		; display0
 TFT_boot3:
 	Index_out 0x22
 	rcall	TFT_ClearScreen
@@ -388,48 +374,48 @@
 	return
 
 display0_config_table:
-    ; Reg, Dat0, Dat1 or 0xFF,0x00,0x00 for end
-    db  0xA4,0x00,0x01,0xFF,.002,0x00
-    db  0x09,0x00,0x01,0x92,0x04,0x00
-    db  0x93,0x04,0x02,0x94,0x00,0x02
-    db  0x07,0x00,0x00,0x10,0x04,0x30
-    db  0x11,0x02,0x37,0x12,0x11,0x8D
-    db  0x13,0x11,0x00,0x01,0x01,0x00
-    db  0x02,0x02,0x00,0x03,0x50,0x20
-    db  0x0A,0x00,0x08,0x0D,0x00,0x00
-    db  0x0E,0x00,0x30,0xFF,.151,0x00
-    db  0x12,0x11,0xBD,0x20,0x00,0x00
-    db  0x21,0x00,0x00,0x30,0x06,0x02
-    db  0x31,0x56,0x0D,0x32,0x05,0x07
-    db  0x33,0x06,0x09,0x34,0x00,0x00
-    db  0x35,0x09,0x06,0x36,0x57,0x05
-    db  0x37,0x0D,0x06,0x38,0x02,0x06
-    db  0x39,0x00,0x00,0xFF,0x00,0x00
+	; Reg, Dat0, Dat1 or 0xFF,0x00,0x00 for end
+	db  0xA4,0x00,0x01,0xFF,.002,0x00
+	db  0x09,0x00,0x01,0x92,0x04,0x00
+	db  0x93,0x04,0x02,0x94,0x00,0x02
+	db  0x07,0x00,0x00,0x10,0x04,0x30
+	db  0x11,0x02,0x37,0x12,0x11,0x8D
+	db  0x13,0x11,0x00,0x01,0x01,0x00
+	db  0x02,0x02,0x00,0x03,0x50,0x20
+	db  0x0A,0x00,0x08,0x0D,0x00,0x00
+	db  0x0E,0x00,0x30,0xFF,.151,0x00
+	db  0x12,0x11,0xBD,0x20,0x00,0x00
+	db  0x21,0x00,0x00,0x30,0x06,0x02
+	db  0x31,0x56,0x0D,0x32,0x05,0x07
+	db  0x33,0x06,0x09,0x34,0x00,0x00
+	db  0x35,0x09,0x06,0x36,0x57,0x05
+	db  0x37,0x0D,0x06,0x38,0x02,0x06
+	db  0x39,0x00,0x00,0xFF,0x00,0x00
 
 display0_init_loop:
-    TBLRD*+
-    movlw   0xFF
-    cpfseq  TABLAT
-    bra     display0_config_write    ; Write Config pair to Display
-    ; Delay ms or quit (return)
-    TBLRD*+
-    tstfsz  TABLAT                  ; End of config?
-    bra     $+4                     ; No
-    return                          ; Done.
-    movf    TABLAT,W
-    call    WAITMSX                 ; Wait WREG milliseconds
-    TBLRD*+                         ; Dummy read (Third byte of delay command)
-    bra     display0_init_loop      ; Loop
+	TBLRD*+
+	movlw	0xFF
+	cpfseq	TABLAT
+	bra		display0_config_write	; Write Config pair to Display
+	; Delay ms or quit (return)
+	TBLRD*+
+	tstfsz	TABLAT					; End of config?
+	bra		$+4						; No
+	return							; Done.
+	movf	TABLAT,W
+	call	WAITMSX					; Wait WREG milliseconds
+	TBLRD*+							; Dummy read (Third byte of delay command)
+	bra		display0_init_loop		; Loop
 
-display0_config_write:              ; With command in WREG
-    movf    TABLAT,W
-    rcall   TFT_CmdWrite            ; Write command
-    TBLRD*+                         ; Get config0
-    movff   TABLAT,PORTA
-    TBLRD*+                         ; Get config1
-    movf    TABLAT,W
-    rcall   TFT_DataWrite           ; Write config
-    bra     display0_init_loop      ; Loop
+display0_config_write:				; With command in WREG
+	movf	TABLAT,W
+	rcall	TFT_CmdWrite			; Write command
+	TBLRD*+							; Get config0
+	movff	TABLAT,PORTA
+	TBLRD*+							; Get config1
+	movf	TABLAT,W
+	rcall	TFT_DataWrite			; Write config
+	bra		display0_init_loop		; Loop
 
 
 ;=============================================================================
@@ -437,81 +423,80 @@
 ;
 ; Trashes: WREG, PRODL
 ; Typical usage:
-;    clrf    CCPR1L            ; Backlight off
-;   [draw splash screen]
-;   call     TFT_DisplayFadeIn
-;
-        global  TFT_Display_FadeIn
+;	clrf	CCPR1L					; Backlight off
+;	[draw splash screen]
+;	call	TFT_DisplayFadeIn
+
+	global	TFT_Display_FadeIn
 TFT_Display_FadeIn:
-    	movlw	CCP1CON_VALUE			; See hwos.inc
-        movwf	CCP1CON
-		bsf		tft_is_dimming	; TFT is dimming, ignore ambient sensor!
-        clrf    CCPR1L          ; Backlight off - to be sure
-		movff	max_CCPR1L,PRODL
+	movlw	CCP1CON_VALUE			; See hwos.inc
+	movwf	CCP1CON
+	bsf		tft_is_dimming			; TFT is dimming, ignore ambient sensor!
+	clrf	CCPR1L					; Backlight off - to be sure
+	movff	max_CCPR1L,PRODL
 TFT_Display_FadeIn_0:
-        incf    CCPR1L,F        ; Duty cycle
-        WAITMS  d'2'
-        decfsz  PRODL,F
-        bra     TFT_Display_FadeIn_0 
-		bcf		tft_is_dimming	; dimming done.
-        return
+	incf	CCPR1L,F				; Duty cycle
+	WAITMS	d'2'
+	decfsz	PRODL,F
+	bra		TFT_Display_FadeIn_0 
+	bcf		tft_is_dimming			; dimming done.
+	return
 
 ;=============================================================================
 ; Smooth lighting-off of the display:
 ; Trashes: WREG, PRODL
-        global  TFT_Display_FadeOut
+
+	global	TFT_Display_FadeOut
 TFT_Display_FadeOut:
-		movff	max_CCPR1L,PRODL
-		bsf		tft_is_dimming	; TFT is dimming, ignore ambient sensor!
+	movff	max_CCPR1L,PRODL
+	bsf		tft_is_dimming			; TFT is dimming, ignore ambient sensor!
 TFT_Display_FadeOut_0:
-        movff   PRODL,CCPR1L    ; Duty cycle
-        WAITMS  d'1'
-        decfsz  PRODL,F
-        bra     TFT_Display_FadeOut_0 
-        clrf    CCPR1L
-        return
+	movff	PRODL,CCPR1L			; Duty cycle
+	WAITMS	d'1'
+	decfsz	PRODL,F
+	bra		TFT_Display_FadeOut_0 
+	clrf	CCPR1L
+	return
 
 ;=============================================================================
 
-        global  box_std_block, box_black_block, box_color_block
+	global  box_std_block, box_black_block, box_color_block
 
-box_std_block:                          ; Use white color
-        setf    WREG
-        bra     box_common
-box_black_block:                        ; Use black color
-        clrf    WREG
+box_std_block:						; Use white color
+	setf	WREG
+	bra	box_common
+box_black_block:					; Use black color
+	clrf	WREG
 box_common:
 box_color_block:
-        rcall   TFT_set_color
-        VARARGS_BEGIN
-            VARARGS_GET8    win_top
-            VARARGS_GET8    win_height
-            VARARGS_GET8    win_leftx2
-            VARARGS_GET8    win_width
-        VARARGS_END
-        bra    TFT_box
+	rcall	TFT_set_color
+	VARARGS_BEGIN
+	VARARGS_GET8 win_top
+	VARARGS_GET8 win_height
+	VARARGS_GET8 win_leftx2
+	VARARGS_GET8 win_width
+	VARARGS_END
+	bra		TFT_box
 
 ;-----------------------------------------------------------------------------
 
-        global  box_frame_std, box_frame_common, box_frame_color, box_frame_color16
+	global	box_frame_std, box_frame_common, box_frame_color, box_frame_color16
 
 box_frame_std:
-        setf    WREG
-        rcall   TFT_set_color
-
+	setf	WREG
+	rcall	TFT_set_color
 box_frame_common:
-        VARARGS_BEGIN
-            VARARGS_GET8    win_top
-            VARARGS_GET8    win_height
-            VARARGS_GET8    win_leftx2
-            VARARGS_GET8    win_width
-        VARARGS_END
-        bra    TFT_frame
-
+	VARARGS_BEGIN
+	VARARGS_GET8 win_top
+	VARARGS_GET8 win_height
+	VARARGS_GET8 win_leftx2
+	VARARGS_GET8 win_width
+	VARARGS_END
+	bra		TFT_frame
 box_frame_color:
-      	rcall	TFT_set_color
+	rcall	TFT_set_color
 box_frame_color16:
-		bra		box_frame_common
+	bra		box_frame_common
 
 ;;=============================================================================
 ;; Init for half_pixel_write
@@ -519,172 +504,176 @@
 ;; Inputs: win_leftx2
 ;; Outputs: win_color:2
 ;; Trashed: WREG, PROD
-;        global init_pixel_write
+;
+;	global	init_pixel_write
 ;init_pixel_write:
-;        movf   win_leftx2,W
-;        mullw   2
-;        rcall   pixel_write_col320      ; Start Address Vertical (.0 - .319)
-;        setf    WREG
-;        bra     TFT_set_color
+;	movf	win_leftx2,W
+;	mullw	2
+;	rcall	pixel_write_col320		; Start Address Vertical (.0 - .319)
+;	setf	WREG
+;	bra	TFT_set_color
 
 ;-----------------------------------------------------------------------------
 ; Writes two half-pixels at position (win_top,win_leftx2)
 ; Inputs: win_leftx2, win_top, win_color:2
 ; Trashed: WREG, PROD
-    global  pixel_write
+
+	global	pixel_write
 pixel_write:
-        movf   win_leftx2,W
-        mullw   2						; win_leftx2 x 2 -> PRODH:PRODL
-        rcall   pixel_write_col320      ; Start Address Vertical (.0 - .319)
-        rcall   half_pixel_write        ; Write this half-one.
-
-        movf   win_leftx2,W	        ; Address of next one
-        mullw   2
-        infsnz  PRODL                   ; +1
-        incf    PRODH
-    	rcall   pixel_write_col320
-    	bra     half_pixel_write        ; Note: Cmd 0x20 is mandatory, because
-    	                                ; of the autoincrement going vertical
+	movf	win_leftx2,W
+	mullw	2						; win_leftx2 x 2 -> PRODH:PRODL
+	rcall	pixel_write_col320		; Start Address Vertical (.0 - .319)
+	rcall	half_pixel_write		; Write this half-one.
+	movf	win_leftx2,W			; Address of next one
+	mullw	2
+	infsnz	PRODL					; +1
+	incf	PRODH
+	rcall	pixel_write_col320
+	bra		half_pixel_write		; Note: Cmd 0x20 is mandatory, because
+									; of the auto-increment going vertical
 
 	global	pixel_write_col320
 pixel_write_col320:
-        btfsc   screen_type             ; display1?
-        bra     pixel_write_col320_d1   ; Yes
-        ; Display0
-    	btfss  flip_screen              ; 180° rotation?
-        bra    pixel_write_noflip_H     ; No
-        bra    pixel_write_flip_H       ; Yes
-pixel_write_col320_d1:                  ; Display1
-    	btfsc  flip_screen              ; 180° rotation?
-        bra    pixel_write_noflip_H     ; Yes for d1
-pixel_write_flip_H: ; Flip d0
-        movf    PRODL,W                 ; 16bits 319 - PROD --> PROD
-        sublw   LOW(.319)               ; 319-W --> W
-        movwf   PRODL
-        movf    PRODH,W
-        btfss   STATUS,C                ; Borrow = /CARRY
-        incf    WREG
-        sublw   HIGH(.319)
-        movwf   PRODH
+	btfsc	screen_type				; display1?
+	bra		pixel_write_col320_d1	; Yes
+	; Display0
+	btfss	flip_screen				; 180° rotation?
+	bra		pixel_write_noflip_H	; No
+	bra		pixel_write_flip_H		; Yes
+pixel_write_col320_d1:				; Display1
+	btfsc	flip_screen				; 180° rotation?
+	bra	pixel_write_noflip_H		; Yes for d1
+pixel_write_flip_H:					; Flip d0
+	movf	PRODL,W					; 16bits 319 - PROD --> PROD
+	sublw	LOW(.319)				; 319-W --> W
+	movwf	PRODL
+	movf	PRODH,W
+	btfss	STATUS,C				; Borrow = /CARRY
+	incf	WREG
+	sublw	HIGH(.319)
+	movwf	PRODH
 
 pixel_write_noflip_H:
-		Index_out 0x21					; Frame Memory Vertical Address
-		bra     TFT_DataWrite_PROD      ; and return...
+	Index_out 0x21					; Frame Memory Vertical Address
+	bra		TFT_DataWrite_PROD		; and return...
 
 ;-----------------------------------------------------------------------------
 ; Writes one half-pixel at position (win_top,win_leftx2).
 ; Inputs: win_leftx2, win_top, win_color:2
 ; Trashed: WREG, PROD
-        global  half_pixel_write
+
+	global	half_pixel_write
 half_pixel_write:
-    	movf  	win_top,W               ; d'0' ... d'239'
-    ; Variant with Y position in WREG.
+	movf	win_top,W				; d'0' ... d'239'
+	; Variant with Y position in WREG.
 half_pixel_write_1:
-    	btfss   flip_screen             ; 180° rotation?
-    	sublw   .239                    ; 239-Y --> Y
-        mullw   1                       ; Copy row to PRODL (PRODH=0)
-		Index_out 0x20                  ; Frame Memory Horizontal Address
-		rcall   TFT_DataWrite_PROD
+	btfss	flip_screen				; 180° rotation?
+	sublw	.239					; 239-Y --> Y
+	mullw	.1						; Copy row to PRODL (PRODH=0)
+	Index_out 0x20					; Frame Memory Horizontal Address
+	rcall	TFT_DataWrite_PROD
 
-		Index_out 0x22                  ; Frame Memory Data Write start
-		RS_H				; Data
-		bcf	INTCON,GIE
-		movff	win_color1,PORTA		; Upper
-		movff	win_color2,PORTH		; Lower
-		WR_L
-		WR_H				; Tick
-		bsf	INTCON,GIE
-    	return
+	Index_out 0x22					; Frame Memory Data Write start
+	RS_H							; Data
+	bcf		INTCON,GIE
+	movff	win_color1,PORTA		; Upper
+	movff	win_color2,PORTH		; Lower
+	WR_L
+	WR_H							; Tick
+	bsf		INTCON,GIE
+	return
 
 ;-----------------------------------------------------------------------------
 ; Writes a vertical line of half-pixel at position (win_top,win_leftx2,win_height).
 ; Inputs: win_leftx2, win_top, win_height, win_color:2
 ; Trashed: WREG, PROD, TABLAT, TBLPTRL
+
 	global	half_vertical_line
 half_vertical_line:
-        clrf    TABLAT                  ; Loop index.
+	clrf	TABLAT					; Loop index.
 
 half_vertical_line_loop:
-        movf	win_leftx2,W	        ; Init X position.
-        mullw   2
-        movf    TABLAT,W                ; Get loop index
-        andlw   1                       ; Just low bit
-        xorwf   PRODL,F                 ; And use it to jitter current X position
-        rcall   pixel_write_col320      ; Start Address Vertical (.0 - .319)
+	movf	win_leftx2,W			; Init X position.
+	mullw	.2
+	movf	TABLAT,W				; Get loop index
+	andlw	.1						; Just low bit
+	xorwf	PRODL,F					; And use it to jitter current X position
+	rcall	pixel_write_col320		; Start Address Vertical (.0 - .319)
 
-        movf    win_height,W            ; Index reached height (Bank0 read) ?
-        xorwf   TABLAT,W
-        btfsc   STATUS,Z                ; Equals ?
-        return                          ; Yes: done.
-        movf    win_top,W              ; Y = top + index (Bank0 read)
-        addwf   TABLAT,W
-        rcall   half_pixel_write_1
-        incf    TABLAT,F                ; index++
-        bra     half_vertical_line_loop
+	movf	win_height,W			; Index reached height (Bank0 read) ?
+	xorwf	TABLAT,W
+	btfsc	STATUS,Z				; Equals ?
+	return							; Yes: done.
+	movf	win_top,W				; Y = top + index (Bank0 read)
+	addwf	TABLAT,W
+	rcall	half_pixel_write_1
+	incf	TABLAT,F				; index++
+	bra		half_vertical_line_loop
 
 ;-----------------------------------------------------------------------------
 ; Writes a horizontal line of half-pixel at position (win_top,win_leftx2,win_width).
 ; Inputs: win_leftx2, win_top, win_width, win_color:2
 ; Trashed: WREG, PROD, TABLAT, TBLPTRL
+
 	global	half_horizontal_line
 half_horizontal_line:
-        clrf    TABLAT                  ; Loop index.
+	clrf	TABLAT					; Loop index.
 
 half_horizontal_line_loop:
-        movf   win_leftx2,W	        ; Init X position.
-        mullw   2
-        rcall   pixel_write_col320      ; Start Address Vertical (.0 - .319)
-        movf    win_width,W             ; Index reached height (Bank0 read) ?
-        xorwf   TABLAT,W
-        btfsc   STATUS,Z                ; Equals ?
-        return                          ; Yes: done.
-        movf    win_top,W               ; Y = top + index (Bank0 read)
-        addwf   TABLAT,W
-        rcall   half_pixel_write_1
-        incf    TABLAT,F                ; index++
-        bra     half_horizontal_line_loop
+	movf	win_leftx2,W			; Init X position.
+	mullw	.2
+	rcall	pixel_write_col320		; Start Address Vertical (.0 - .319)
+	movf	win_width,W				; Index reached height (Bank0 read) ?
+	xorwf	TABLAT,W
+	btfsc	STATUS,Z				; Equals ?
+	return							; Yes: done.
+	movf	win_top,W				; Y = top + index (Bank0 read)
+	addwf	TABLAT,W
+	rcall	half_pixel_write_1
+	incf	TABLAT,F				; index++
+	bra		half_horizontal_line_loop
 
 
 ;-----------------------------------------------------------------------------
 ; TFT Data Cmd via W
-;
-    global  TFT_DataWrite_PROD
+
+	global	TFT_DataWrite_PROD
 TFT_DataWrite_PROD:
-;	RD_H				; Keep high
-	RS_H				; Data
-	bcf	INTCON,GIE
-	movff	PRODH,PORTA	; Move high byte to PORTA
-	movff	PRODL,PORTH	; Move low byte to PORTH
+;	RD_H							; Keep high
+	RS_H							; Data
+	bcf		INTCON,GIE
+	movff	PRODH,PORTA				; Move high byte to PORTA
+	movff	PRODL,PORTH				; Move low byte to PORTH
 	WR_L
-	WR_H                ; Tick
-	bsf	INTCON,GIE
+	WR_H							; Tick
+	bsf		INTCON,GIE
 	return
 
 TFT_DataRead_PROD:
-    Index_out 0x22                  ; Frame Memory Data Read start
+	Index_out 0x22					; Frame Memory Data Read start
 TFT_CmdRead_PROD:
-    setf    TRISA                   ; PortA as input.
-    setf    TRISH                   ; PortH as input.
-	RS_H				; Data
-	WR_H                ; Not write
-	RD_L                ; Read!
-    nop
-    nop
-    nop
-	RD_H				; Tick
-    nop
-    nop
-    nop
-	RD_L                ; Read!
-    nop
- ;   nop
- ;   nop
-    movff   PORTA,PRODH
-    movff   PORTH,PRODL
-	RD_H				; Tick
-    nop
-    clrf    TRISA                   ; PortA as output
-    clrf    TRISH                   ; PortH as output
+	setf	TRISA					; PortA as input.
+	setf	TRISH					; PortH as input.
+	RS_H							; Data
+	WR_H							; Not write
+	RD_L							; Read!
+	nop
+	nop
+	nop
+	RD_H							; Tick
+	nop
+	nop
+	nop
+	RD_L							; Read!
+	nop
+	;nop
+	;nop
+	movff	PORTA,PRODH
+	movff	PORTH,PRODL
+	RD_H							; Tick
+	nop
+	clrf	TRISA					; PortA as output
+	clrf	TRISH					; PortH as output
 	return
 
 ;=============================================================================
@@ -692,235 +681,234 @@
 ; Inputs : win_top, win_leftx2, win_height, win_width.
 ; Output : PortA/PortH commands.
 ; Trashed: PROD
-;
-        global  TFT_box_write
+
+	global	TFT_box_write
 TFT_box_write:
-	movf	win_leftx2,W            ; Compute left = 2*leftx2 --> PROD
+	movf	win_leftx2,W			; Compute left = 2*leftx2 --> PROD
 	mullw	2
 
-        global  TFT_box_write_16bit_win_left
-TFT_box_write_16bit_win_left:           ; With column in PRODL:PRODH
-        btfsc   screen_type             ; display1?
-        bra     TFT_box_write_16bit_win_left_d1 ; Yes
-        ; Display0
-    	btfsc  flip_screen              ; 180° rotation?
-    	bra    DISP_box_flip_H          ; Yes
-        bra     TFT_box_write_16bit_win_left_com    ; No
-TFT_box_write_16bit_win_left_d1:        ; Display1
-    	btfss  flip_screen              ; 180° rotation?
-    	bra    DISP_box_flip_H          ; No for d1
-        ; Yes for d1
+	global	TFT_box_write_16bit_win_left
+TFT_box_write_16bit_win_left:					; With column in PRODL:PRODH
+	btfsc	screen_type							; display1?
+	bra		TFT_box_write_16bit_win_left_d1		; Yes
+	; Display0
+	btfsc	flip_screen							; 180° rotation?
+	bra		DISP_box_flip_H						; Yes
+	bra		TFT_box_write_16bit_win_left_com	; No
+TFT_box_write_16bit_win_left_d1:				; Display1
+	btfss	flip_screen							; 180° rotation?
+	bra		DISP_box_flip_H						; No for d1
+	; Yes for d1
 TFT_box_write_16bit_win_left_com:
-        ;---- Normal horizontal window ---------------------------------------
-	Index_out 0x52				; Window Vertical Start Address
-	rcall   TFT_DataWrite_PROD          ; Output left
-	Index_out 0x21				; Frame Memory Vertical Address
-	rcall   TFT_DataWrite_PROD			; Output left
+	;---- Normal horizontal window ---------------------------------------
+	Index_out 0x52					; Window Vertical Start Address
+	rcall	TFT_DataWrite_PROD		; Output left
+	Index_out 0x21					; Frame Memory Vertical Address
+	rcall	TFT_DataWrite_PROD		; Output left
 
-	movf	win_width+0,W   	    ; right = left + width - 1
+	movf	win_width+0,W			; right = left + width - 1
 	addwf	PRODL,F
 	movf	win_width+1,W
 	addwfc	PRODH,F
-	decf	PRODL,F			    ; decrement result
-	btfss   STATUS,C
+	decf	PRODL,F					; decrement result
+	btfss	STATUS,C
 	decf	PRODH,F
 
-	Index_out 0x53				; Window Vertical End Address
-	rcall   TFT_DataWrite_PROD
-	bra     DISP_box_noflip_H
+	Index_out 0x53					; Window Vertical End Address
+	rcall	TFT_DataWrite_PROD
+	bra		DISP_box_noflip_H
 
-        ;---- Flipped horizontal window --------------------------------------
+	;---- Flipped horizontal window --------------------------------------
 DISP_box_flip_H:
-        movf    PRODL,W                 ; 16bits 319 - PROD --> PROD
-        sublw   LOW(.319)               ; 319-W --> W
-        movwf   PRODL
-        movf    PRODH,W
-        btfss   STATUS,C                ; Borrow = /CARRY
-        incf    WREG
-        sublw   HIGH(.319)
-        movwf   PRODH
+	movf	PRODL,W					; 16bits 319 - PROD --> PROD
+	sublw	LOW(.319)				; 319-W --> W
+	movwf	PRODL
+	movf	PRODH,W
+	btfss	STATUS,C				; Borrow = /CARRY
+	incf	WREG
+	sublw	HIGH(.319)
+	movwf	PRODH
 
-  	Index_out 0x53				; Window Vertical Start Address
-	rcall   TFT_DataWrite_PROD  ; Output left
-	Index_out 0x21				; Frame Memory Vertical Address
-	rcall   TFT_DataWrite_PROD	; Output left
+	Index_out 0x53					; Window Vertical Start Address
+	rcall	TFT_DataWrite_PROD		; Output left
+	Index_out 0x21					; Frame Memory Vertical Address
+	rcall	TFT_DataWrite_PROD		; Output left
 
-        movf    win_width+0,W           ; 16bits PROD - width --> PROD
-        subwf   PRODL,F                 ; PRODL - WREG --> PRODL
-        movf    win_width+1,W
-        subwfb  PRODH,F
-        infsnz  PRODL                   ; PROD+1 --> PROD
-        incf    PRODH
+	movf	win_width+0,W			; 16bits PROD - width --> PROD
+	subwf	PRODL,F					; PRODL - WREG --> PRODL
+	movf	win_width+1,W
+	subwfb	PRODH,F
+	infsnz	PRODL					; PROD+1 --> PROD
+	incf	PRODH
 
-	Index_out 0x52				; Window Vertical End Address
-	rcall   TFT_DataWrite_PROD
+	Index_out 0x52					; Window Vertical End Address
+	rcall	TFT_DataWrite_PROD
 
 DISP_box_noflip_H:
-    	btfss   flip_screen             ; 180° rotation ?
-    	bra     TFT_box_noflip_V        ; No.
+	btfss	flip_screen				; 180° rotation ?
+	bra		TFT_box_noflip_V		; No.
 
-   ;---- Flipped vertical window -----------------------------------------
-	movff	win_top,PRODH           ; top --> PRODH (first byte)
-	movf    win_height,W
-	addwf   PRODH,W
+	;---- Flipped vertical window -----------------------------------------
+	movff	win_top,PRODH			; top --> PRODH (first byte)
+	movf	win_height,W
+	addwf	PRODH,W
 	decf	WREG
-	movwf	PRODL                   ; top+height-1 --> PRODL (second byte)
+	movwf	PRODL					; top+height-1 --> PRODL (second byte)
 
-	Index_out 0x50				; Window Horizontal Start Address
+	Index_out 0x50					; Window Horizontal Start Address
 	movf	PRODH,W
-	rcall	TFT_DataWrite		; Lower (and tick)
-
-	Index_out 0x51				; Window Horizontal End Address
-	movf	PRODL,W
-	rcall	TFT_DataWrite		; Lower (and tick)
+	rcall	TFT_DataWrite			; Lower (and tick)
 
-	Index_out 0x20				; Frame Memory Horizontal Address
+	Index_out 0x51					; Window Horizontal End Address
+	movf	PRODL,W
+	rcall	TFT_DataWrite			; Lower (and tick)
+
+	Index_out 0x20					; Frame Memory Horizontal Address
 	movf	PRODH,W
-	bra	TFT_DataWrite		; Lower (and tick) and return
-;	return
-
+	bra		TFT_DataWrite			; Lower (and tick) and return
 
 TFT_box_noflip_V:
-        ;---- Normal vertical window ----------------------------------------
-	movff   win_top,PRODL
-	movf    win_height,W
-	addwf   PRODL,W
-	sublw   .240                 ; 240 - top - height
-	movwf   PRODH                ; First byte
+	;---- Normal vertical window ----------------------------------------
+	movff	win_top,PRODL
+	movf	win_height,W
+	addwf	PRODL,W
+	sublw	.240					; 240 - top - height
+	movwf	PRODH					; First byte
 
 	movf	PRODL,W
-	sublw   .239                ; 239-top
-	movwf   PRODL               ; --> second byte.
+	sublw	.239					; 239-top
+	movwf	PRODL					; --> second byte.
 
-	Index_out 0x50				; Window Horizontal Start Address
+	Index_out 0x50					; Window Horizontal Start Address
 	movf	PRODH,W
-	rcall	TFT_DataWrite		; Lower (and tick)
+	rcall	TFT_DataWrite			; Lower (and tick)
 
-	Index_out 0x51				; Window Horizontal End Address
+	Index_out 0x51					; Window Horizontal End Address
 	movf	PRODL,W
-	rcall	TFT_DataWrite		; Lower (and tick)
+	rcall	TFT_DataWrite			; Lower (and tick)
 
-	Index_out 0x20				; Frame Memory Horizontal Address
+	Index_out 0x20					; Frame Memory Horizontal Address
 	movf	PRODL,W
-	bra	TFT_DataWrite		; Lower (and tick)  and return
-;	return
+	bra		TFT_DataWrite			; Lower (and tick) and return
+
 
 ;=============================================================================
 ; TFT_frame : draw a frame around current box with current color.
 ; Inputs:  win_top, win_leftx2, win_height, win_width, win_color1, win_color2
 ; Outputs: (none)
 ; Trashed: WREG, PROD, aa_start:2, aa_end:2
-    global  TFT_frame
-TFT_frame:
-    movff   win_top,save_top            ; Backup everything.
-    movff   win_height,save_height
-    movff   win_leftx2,save_left
-    movff   win_width,save_width
 
-    ;---- TOP line -----------------------------------------------------------
-    movlw   1                           ; row ~ height=1
-    movwf   win_height
-    rcall   TFT_box
+	global	TFT_frame
+TFT_frame:
+	movff	win_top,save_top		; Backup everything.
+	movff	win_height,save_height
+	movff	win_leftx2,save_left
+	movff	win_width,save_width
 
-    ;---- BOTTOM line --------------------------------------------------------
-    movff   save_top,PRODL               ; Get back top,
-    movff   save_height,WREG             ; and height
-    addwf   PRODL,W                      ; top+height
-    decf    WREG                         ; top+height-1
-    movwf   win_top			 ; top+height-1 --> top
-    rcall   TFT_box                        
+	;---- TOP line -----------------------------------------------------------
+	movlw	.1						; row ~ height=1
+	movwf	win_height
+	rcall	TFT_box
 
-    ;---- LEFT column --------------------------------------------------------
-    movff   save_top,win_top             ; Restore top/height.
-    movff   save_height,win_height
-    movlw   1                               ; column ~ width=1
-    movwf   win_width+0
-    rcall   TFT_box
+	;---- BOTTOM line --------------------------------------------------------
+	movff	save_top,PRODL			; Get back top,
+	movff	save_height,WREG		; and height
+	addwf	PRODL,W					; top+height
+	decf	WREG					; top+height-1
+	movwf	win_top					; top+height-1 --> top
+	rcall	TFT_box
 
-    ;---- RIGHT column -------------------------------------------------------
-    movff   save_left,WREG
-    movff   save_width,PRODL
-    addwf   PRODL,W
-    decf    WREG
-    movwf   win_leftx2
-    rcall    TFT_box
-    
-    ;---- Restore everything -------------------------------------------------
-    movff   save_left,win_leftx2
-    movff   save_width,win_width
-    return
+	;---- LEFT column --------------------------------------------------------
+	movff	save_top,win_top		; Restore top/height.
+	movff	save_height,win_height
+	movlw	.1						; column ~ width=1
+	movwf	win_width+0
+	rcall	TFT_box
+
+	;---- RIGHT column -------------------------------------------------------
+	movff	save_left,WREG
+	movff	save_width,PRODL
+	addwf	PRODL,W
+	decf	WREG
+	movwf	win_leftx2
+	rcall	TFT_box
+
+	;---- Restore everything -------------------------------------------------
+	movff	save_left,win_leftx2
+	movff	save_width,win_width
+	return
 
 ;=============================================================================
 ; TFT_box : fills current box with current color.
 ; Inputs:  win_top, win_leftx2, win_height, win_width, win_color1, win_color2
 ; Outputs: (none)
 ; Trashed: WREG, PROD
-    global  TFT_box
 
+	global	TFT_box
 TFT_box:
-    ;---- Define Window ------------------------------------------------------
-    bcf     STATUS,C
-    rlcf    win_width+0,F
-    rlcf    win_width+1,F		    ; x2
-    rcall   TFT_box_write               ; Setup box
+	;---- Define Window ------------------------------------------------------
+	bcf		STATUS,C
+	rlcf	win_width+0,F
+	rlcf	win_width+1,F			; x2
+	rcall	TFT_box_write			; Setup box
 
-    global  TFT_box_16bit_win_left
+	global	TFT_box_16bit_win_left
 TFT_box_16bit_win_left:
-    bcf     STATUS,C
-    rrcf    win_width+1,F               ; width /= 2
-    rrcf    win_width+0,F
+	bcf		STATUS,C
+	rrcf	win_width+1,F			; width /= 2
+	rrcf	win_width+0,F
 
-    ;---- Fill Window --------------------------------------------------------
-    Index_out 0x22						; Frame Memory Data Write start
+	;---- Fill Window --------------------------------------------------------
+	Index_out 0x22					; Frame Memory Data Write start
 
-    clrf	PRODH                       ; Column counter.
-    RS_H				; Data
+	clrf	PRODH					; Column counter.
+	RS_H							; Data
 
-TFT_box2:                              ; Loop height times
+TFT_box2:							; Loop height times
 	movff	win_height,PRODL
 
-TFT_box3:                              ; loop width times
+TFT_box3:							; loop width times
 	bcf	INTCON,GIE
-	movff	win_color1,PORTA			; Upper
-	movff	win_color2,PORTH			; Lower
+	movff	win_color1,PORTA		; Upper
+	movff	win_color2,PORTH		; Lower
 	WR_L
-	WR_H				; Tick
-;
-;	movff	win_color1,PORTA			; Upper
-;	movff	win_color2,PORTH			; Lower
+	WR_H							; Tick
+
+;	movff	win_color1,PORTA		; Upper
+;	movff	win_color2,PORTH		; Lower
 	WR_L
-	WR_H				; Tick
-	bsf	INTCON,GIE
-	decfsz	PRODL,F                     ; row loop finished ?
-	bra	TFT_box3                   ; No: continue.
+	WR_H							; Tick
+	bsf		INTCON,GIE
+	decfsz	PRODL,F					; row loop finished ?
+	bra		TFT_box3				; No: continue.
 
-    incf    PRODH,F                     ; column count ++
+	incf	PRODH,F					; column count ++
 
-    movf    win_bargraph,W             ; current column == bargraph ?
-    cpfseq  PRODH
-    bra     TFT_box4                   ; No: just loop.
-    ; Yes: switch to black
-    clrf    win_color1
-    clrf    win_color2
+	movf	win_bargraph,W			; current column == bargraph ?
+	cpfseq	PRODH
+	bra		TFT_box4				; No: just loop.
+	; Yes: switch to black
+	clrf	win_color1
+	clrf	win_color2
 TFT_box4:
-    movf    win_width+0,W               ; compare ?
-    xorwf   PRODH,W
-    bnz     TFT_box2                    ; Loop not finished.
+	movf	win_width+0,W			; compare ?
+	xorwf	PRODH,W
+	bnz		TFT_box2				; Loop not finished.
 
-    movlw	0x00                        ; NOP, to stop window mode
-    rcall   TFT_CmdWrite
+	movlw	0x00					; NOP, to stop window mode
+	rcall	TFT_CmdWrite
 
-    ; Reset bargraph mode...
-    setf	win_bargraph
-    return
+	; Reset bargraph mode...
+	setf	win_bargraph
+	return
 
 ;=============================================================================
 ;Converts 8Bit RGB b'RRRGGGBB' into 16Bit RGB b'RRRRRGGGGGGBBBBB'
-    global  TFT_set_color
 
+	global	TFT_set_color
 TFT_set_color:
 	movwf	tft_temp1				; Get 8Bit RGB b'RRRGGGBB'
-	movwf   tft_temp2               ; Copy
+	movwf	tft_temp2				; Copy
 
 	; Mask Bit 7,6,5,4,3,2
 	movlw	b'00000011'
@@ -935,7 +923,7 @@
 	movlw	b'11111000'
 	movwf	tft_temp3				; Blue done.
 
-	movff	tft_temp1,	tft_temp2	; Copy
+	movff	tft_temp1,tft_temp2		; Copy
 	; Mask Bit 7,6,5,1,0
 	movlw	b'00011100'
 	andwf	tft_temp2,F
@@ -957,7 +945,7 @@
 	movlw	b'00100000'
 	dcfsnz	tft_temp2,F
 	movlw	b'00111111'
-	movwf	tft_temp4			
+	movwf	tft_temp4
 
 	rrcf	tft_temp4,F
 	rrcf	tft_temp3,F
@@ -966,10 +954,10 @@
 	rrcf	tft_temp3,F
 
 	rrcf	tft_temp4,F
-	rrcf	tft_temp3,W		; tft_temp3 (b'GGGBBBBB') done.
-	movwf	win_color2		; Set Color registers...
+	rrcf	tft_temp3,W				; tft_temp3 (b'GGGBBBBB') done.
+	movwf	win_color2				; Set Color registers...
 
-	movff	tft_temp1,	tft_temp2	; Copy
+	movff	tft_temp1,tft_temp2		; Copy
 	clrf	tft_temp1
 
 	rrcf	tft_temp4,F
@@ -979,7 +967,7 @@
 	rrcf	tft_temp1,F
 
 	rrcf	tft_temp4,F
-	rrcf	tft_temp1,F		; Green done.
+	rrcf	tft_temp1,F				; Green done.
 
 	; Mask Bit 4,3,2,1,0
 	movlw	b'11100000'
@@ -1006,7 +994,7 @@
 	movlw	b'00100000'
 	dcfsnz	tft_temp2,F
 	movlw	b'00111111'
-	movwf	tft_temp4			
+	movwf	tft_temp4
 
 	rrcf	tft_temp4,F
 	rrcf	tft_temp1,F
@@ -1021,88 +1009,88 @@
 	rrcf	tft_temp1,F
 
 	rrcf	tft_temp4,F
-	rrcf	tft_temp1,W		; Red done.
-	movwf	win_color1		; Set Color registers...
+	rrcf	tft_temp1,W				; Red done.
+	movwf	win_color1				; Set Color registers...
 	return
 
 ;=============================================================================
 ; Dump screen contents to the UART
 
-    global  TFT_dump_screen
+	global	TFT_dump_screen
 TFT_dump_screen:
-    bsf         no_sensor_int
-	movlw	    'l'
-	movwf	    TXREG                   ; Send command echo.
-    call		rs232_wait_tx           ; wait for UART
-    ;---- Send DISPLAY box command for the full screen window -------------------
-	Index_out 0x50				; Window Horizontal Start Address
-	Parameter_out 0x00, 0x00	; 0-239
-	Index_out 0x51				; Window Horizontal End Address
-	Parameter_out 0x00, 0xEF	; 0-239
-	Index_out 0x52				; Window Vertical Start Address
-	Parameter_out 0x00, 0x00	; 0-319
-	Index_out 0x53				; Window Vertical End Address
-	Parameter_out 0x01, 0x3F	; 0-319
+	bsf		no_sensor_int
+	movlw	'l'
+	movwf	TXREG					; Send command echo.
+	call	rs232_wait_tx			; wait for UART
+	;---- Send DISPLAY box command for the full screen window -------------------
+	Index_out 0x50					; Window Horizontal Start Address
+	Parameter_out 0x00, 0x00		; 0-239
+	Index_out 0x51					; Window Horizontal End Address
+	Parameter_out 0x00, 0xEF		; 0-239
+	Index_out 0x52					; Window Vertical Start Address
+	Parameter_out 0x00, 0x00		; 0-319
+	Index_out 0x53					; Window Vertical End Address
+	Parameter_out 0x01, 0x3F		; 0-319
 
-    clrf        ds_column
-    rcall       dump_screen_pixel_reset
+	clrf	ds_column
+	rcall	dump_screen_pixel_reset
 dump_screen_1:
-    btg         LEDr                 ; LED activity toggle
-    ; Dump even column
-	movlw	    .240                 ; 240 lines, once.
-	movwf	    ds_line
+	btg		LEDr					; LED activity toggle
+	; Dump even column
+	movlw	.240					; 240 lines, once.
+	movwf	ds_line
 dump_screen_2:
-	Index_out   0x20				; Frame Memory Horizontal Address
-    movff       ds_line,WREG        ; d'0' ... d'239'
-   	mullw       1                   ; Copy row to PRODH:L
-	rcall       TFT_DataWrite_PROD
+	Index_out	0x20				; Frame Memory Horizontal Address
+	movff	ds_line,WREG			; d'0' ... d'239'
+	mullw	.1						; Copy row to PRODH:L
+	rcall	TFT_DataWrite_PROD
 
-    movff       ds_column,WREG     ; Init X position.
-    mullw       2
-    rcall       pixel_write_col320  ; Start Address Vertical (.0 - .319)
+	movff	ds_column,WREG			; Init X position.
+	mullw	2
+	rcall	pixel_write_col320		; Start Address Vertical (.0 - .319)
 
-    rcall       TFT_DataRead_PROD      ; read pixel
-    rcall       dump_screen_pixel
+	rcall	TFT_DataRead_PROD		; read pixel
+	rcall	dump_screen_pixel
 
-    decfsz	    ds_line,F
-    bra		    dump_screen_2
-    rcall       dump_screen_pixel_flush
+	decfsz	ds_line,F
+	bra		dump_screen_2
+	rcall	dump_screen_pixel_flush
 
-    ; Dump odd column
-	movlw	    .240                    ; 240 lines, twice.
-	movwf	    ds_line
+	; Dump odd column
+	movlw	.240					; 240 lines, twice.
+	movwf	ds_line
 dump_screen_3:
-	Index_out   0x20				; Frame Memory Horizontal Address
-    movff   	ds_line,WREG        ; d'0' ... d'239'
-   	mullw       1                   ; Copy row to PRODH:L
-	rcall       TFT_DataWrite_PROD
+	Index_out	0x20				; Frame Memory Horizontal Address
+	movff	ds_line,WREG			; d'0' ... d'239'
+	mullw	1						; Copy row to PRODH:L
+	rcall	TFT_DataWrite_PROD
 
-    movff       ds_column,WREG     ; Init X position.
-    mullw       2
-    movlw       .1
-    addwf       PRODL,F
-    movlw       0
-    addwfc      PRODH,F             ; +1
-    rcall       pixel_write_col320  ; Start Address Vertical (.0 - .319)
+	movff	ds_column,WREG			; Init X position.
+	mullw	2
+	movlw	.1
+	addwf	PRODL,F
+	movlw	0
+	addwfc	PRODH,F					; +1
+	rcall	pixel_write_col320		; Start Address Vertical (.0 - .319)
 
-    rcall       TFT_DataRead_PROD      ; read pixel
-    rcall       dump_screen_pixel
+	rcall	TFT_DataRead_PROD		; read pixel
+	rcall	dump_screen_pixel
 
-    decfsz	    ds_line,F
-    bra		    dump_screen_3
-    rcall       dump_screen_pixel_flush
+	decfsz	ds_line,F
+	bra		dump_screen_3
+	rcall	dump_screen_pixel_flush
 
-    incf        ds_column,F
-    movlw       .160
-    cpfseq      ds_column
-    bra		    dump_screen_1
+	incf	ds_column,F
+	movlw	.160
+	cpfseq	ds_column
+	bra		dump_screen_1
 
-    bcf         no_sensor_int
-    clrf        RCREG1              ; Clear receive buffer
-	bcf         RCSTA1,CREN         ; Clear receiver status
-	bsf         RCSTA1,CREN
-    bsf         enable_screen_dumps ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    return
+	bcf		no_sensor_int
+	clrf	RCREG1					; Clear receive buffer
+	bcf		RCSTA1,CREN				; Clear receiver status
+	bsf		RCSTA1,CREN
+	bsf		enable_screen_dumps		; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	return
 
 
 ;=============================================================================
@@ -1114,81 +1102,81 @@
 ;       0ccccccc    : BLACK pixel, repeated ccccccc+1 times (1..128).
 ;       11cccccc    : WHITE pixel, repeated cccccc+1 times (1..64).
 ;       10cccccc HIGH LOW : color pixel (H:L) repeated ccccc+1 times (1..64).
-;
+
 dump_screen_pixel:
-    movf        PRODH,W                 ; Compare pixel-high
-    xorwf       ds_pixel+1,W
-    bnz         dump_screen_pixel_1     ; Different -> dump.
+	movf	PRODH,W					; Compare pixel-high
+	xorwf	ds_pixel+1,W
+	bnz		dump_screen_pixel_1		; Different -> dump.
 
-    movf        PRODL,W                 ; Compare pixel-low
-    xorwf       ds_pixel+0,W
-    bnz         dump_screen_pixel_1     ; Different -> dump.
+	movf	PRODL,W					; Compare pixel-low
+	xorwf	ds_pixel+0,W
+	bnz		dump_screen_pixel_1		; Different -> dump.
 
-    incf        ds_count,F              ; Same color: just increment.
-    return
+	incf	ds_count,F				; Same color: just increment.
+	return
 
-dump_screen_pixel_1:                    ; Send (pixel,count) tuple
-    movf        ds_count,W              ; Is count zero ?
-    bz          dump_screen_pixel_2     ; Yes: skip sending.
+dump_screen_pixel_1:				; Send (pixel,count) tuple
+	movf	ds_count,W				; Is count zero ?
+	bz		dump_screen_pixel_2		; Yes: skip sending.
 
-    movf        ds_pixel+1,W            ; This is a BLACK pixel ?
-    iorwf       ds_pixel+0,W    
-    bz          dump_screen_pix_black   ; YES.
+	movf	ds_pixel+1,W			; This is a BLACK pixel ?
+	iorwf	ds_pixel+0,W
+	bz		dump_screen_pix_black	; YES.
 
-    movf        ds_pixel+1,W            ; This is a white pixel ?
-    andwf       ds_pixel+0,W
-    incf        WREG
-    bz          dump_screen_pix_white   ; YES.
+	movf	ds_pixel+1,W			; This is a white pixel ?
+	andwf	ds_pixel+0,W
+	incf	WREG
+	bz		dump_screen_pix_white	; YES.
 
-    ; No: write the pixel itself...
-    movlw       .64                     ; Max color pixel on a single byte.
-    cpfsgt      ds_count                ; Skip if count > 64
-    movf        ds_count,W              ; W <- min(64,count)
-    subwf       ds_count,F              ; ds_count <- ds_count-W
-    decf        WREG                    ; Save as 0..63
-    iorlw       b'10000000'             ; MARK as a color pixel.
+	; No: write the pixel itself...
+	movlw	.64						; Max color pixel on a single byte.
+	cpfsgt	ds_count				; Skip if count > 64
+	movf	ds_count,W				; W <- min(64,count)
+	subwf	ds_count,F				; ds_count <- ds_count-W
+	decf	WREG					; Save as 0..63
+	iorlw	b'10000000'				; MARK as a color pixel.
 
-    movwf       TXREG
-    call		rs232_wait_tx           ; wait for UART
-    movff       ds_pixel+1,TXREG
-    call		rs232_wait_tx           ; wait for UART
-    movff       ds_pixel+0,TXREG
-    call		rs232_wait_tx           ; wait for UART
-    bra         dump_screen_pixel_1
+	movwf	TXREG
+	call	rs232_wait_tx			; wait for UART
+	movff	ds_pixel+1,TXREG
+	call	rs232_wait_tx			; wait for UART
+	movff	ds_pixel+0,TXREG
+	call	rs232_wait_tx			; wait for UART
+	bra		dump_screen_pixel_1
 
 dump_screen_pixel_2:
-    movff       PRODH,ds_pixel+1        ; Save new pixel color
-    movff       PRODL,ds_pixel+0
-    movlw       1
-    movwf       ds_count                ; And set count=1.
-    return
+	movff	PRODH,ds_pixel+1		; Save new pixel color
+	movff	PRODL,ds_pixel+0
+	movlw	1
+	movwf	ds_count				; And set count=1.
+	return
 
 dump_screen_pix_black:
-    movlw       .128                    ; Max black pixel on a single byte.
-    cpfsgt      ds_count                ; Skip if count > 128
-    movf        ds_count,W              ; W <- min(128,count)
-    subwf       ds_count,F              ; ds_count <- ds_count-W
-    decf        WREG                    ; Save as 0..127
+	movlw	.128					; Max black pixel on a single byte.
+	cpfsgt	ds_count				; Skip if count > 128
+	movf	ds_count,W				; W <- min(128,count)
+	subwf	ds_count,F				; ds_count <- ds_count-W
+	decf	WREG					; Save as 0..127
 dump_screen_pix_3:
-    movwf       TXREG
-    call        rs232_wait_tx
-    bra         dump_screen_pixel_1     ; More to dump ?
+	movwf	TXREG
+	call	rs232_wait_tx
+	bra		dump_screen_pixel_1		; More to dump ?
 
 dump_screen_pix_white:
-    movlw       .64                     ; Max white pixel on a single byte.
-    cpfsgt      ds_count                ; Skip if count > 64
-    movf        ds_count,W              ; W <- min(64,count)
-    subwf       ds_count,F              ; ds_count <- ds_count-W
-    decf        WREG                    ; Save as 0..63
-    iorlw       b'11000000'             ; MARK as a compressed white.
-    bra         dump_screen_pix_3
+	movlw	.64						; Max white pixel on a single byte.
+	cpfsgt	ds_count				; Skip if count > 64
+	movf	ds_count,W				; W <- min(64,count)
+	subwf	ds_count,F				; ds_count <- ds_count-W
+	decf	WREG					; Save as 0..63
+	iorlw	b'11000000'				; MARK as a compressed white.
+	bra		dump_screen_pix_3
 
 dump_screen_pixel_flush:
-    clrf        PRODH
-    clrf        PRODL
-    rcall       dump_screen_pixel_1     ; Send it
+	clrf	PRODH
+	clrf	PRODL
+	rcall	dump_screen_pixel_1		; Send it
 dump_screen_pixel_reset:
-    clrf        ds_count                ; But clear count.
-    return
+	clrf	ds_count				; But clear count.
+	return
 
-    end
\ No newline at end of file
+	END
--- a/src/tft_outputs.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/tft_outputs.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File tft_outputs.asm							REFACTORED VERSION	V2.95a1
+;   File tft_outputs.asm							REFACTORED VERSION	V2.98
 ;
 ;   Startup subroutines
 ;
@@ -9,134 +9,118 @@
 ; HISTORY
 ;  2011-08-07 : [mH] moving from OSTC code
 
-#include    "hwos.inc"                  ; Mandatory header
-#include    "shared_definitions.h"      ; Mailbox from/to p2_deco.c
-#include    "tft.inc"
-#include    "start.inc"
-#include    "wait.inc"
-#include    "strings.inc"
-#include    "convert.inc"
-#include    "varargs.inc"
-#include    "math.inc"
-#include    "isr.inc"
-#include    "eeprom_rs232.inc"
-#include    "adc_lightsensor.inc"
-#include    "surfmode.inc"
-#include    "divemode.inc"
-#include    "external_flash.inc"
-#include    "ghostwriter.inc"
-#include    "customview.inc"
-#include    "i2c.inc"
-#include    "colorschemes.inc"
-#include    "calibrate.inc"
+#include "hwos.inc"							; Mandatory header
+#include "shared_definitions.h"				; Mailbox from/to p2_deco.c
+#include "tft.inc"
+#include "start.inc"
+#include "wait.inc"
+#include "strings.inc"
+#include "convert.inc"
+#include "varargs.inc"
+#include "math.inc"
+#include "isr.inc"
+#include "eeprom_rs232.inc"
+#include "adc_lightsensor.inc"
+#include "surfmode.inc"
+#include "divemode.inc"
+#include "external_flash.inc"
+#include "ghostwriter.inc"
+#include "customview.inc"
+#include "i2c.inc"
+#include "colorschemes.inc"
+#include "calibrate.inc"
 
 
 	extern	aa_wordprocessor
 
 ;=============================================================================
 
-gui    CODE
+gui		CODE
+
 ;=============================================================================
 
-    global   TFT_divemask_color
+	global	TFT_divemask_color
 TFT_divemask_color:
-    movlw   color_green
-    btfsc   divemode            			; in Divemode?
-    rcall   TFT_divemask_color_dive
+	movlw	color_green
+	btfsc	divemode					; in Divemode?
+	rcall	TFT_divemask_color_dive
 	bra		TFT_standard_color0
 
 TFT_divemask_color_dive:
-    movff   opt_dive_color_scheme,WREG  	; 0-3
-    incf    WREG
+	movff	opt_dive_color_scheme,WREG	; 0-3
+	incf	WREG
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_mask1		;0
+	retlw	color_scheme_divemode_mask1	;0
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_mask2		;1
+	retlw	color_scheme_divemode_mask2	;1
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_mask3		;2
-	retlw   color_scheme_divemode_mask4		;3
-
-
-    global  TFT_attention_color
+	retlw	color_scheme_divemode_mask3	;2
+	retlw	color_scheme_divemode_mask4	;3
+
+
+	global	TFT_attention_color
 TFT_attention_color:
-    movlw   color_yellow					; TODO
+	movlw	color_yellow				; make this configurable?
 	bra		TFT_standard_color0
 TFT_attention_color_dive:
-    retlw   color_yellow					; TODO
-
-    global  TFT_warnings_color
+	retlw	color_yellow				; make this configurable?
+
+
+	global	TFT_warnings_color
 TFT_warnings_color:
-    movlw   color_red						; TODO
+	movlw	color_red					; make this configurable?
 	bra		TFT_standard_color0
 TFT_warnings_color_dive:
-    retlw   color_red						; TODO
-
-    global  TFT_disabled_color
+	retlw	color_red					; make this configurable?
+
+
+	global	TFT_disabled_color
 TFT_disabled_color:
-    ;movlw   color_grey          			; Default to OSTC grey (dark blue)
-    movlw   color_lightblue
-    btfsc   divemode            			; in Divemode?
-    rcall   TFT_disabled_color_dive
-    bra		TFT_standard_color0
+	;movlw	color_grey					; Default to OSTC grey (dark blue)
+	movlw	color_lightblue
+	btfsc	divemode					; in Divemode?
+	rcall	TFT_disabled_color_dive		; YES
+	bra		TFT_standard_color0
+
 TFT_disabled_color_dive:
-    movff   opt_dive_color_scheme,WREG		; 0-3
-    incf    WREG
-	dcfsnz	WREG
-	retlw   color_scheme_divemode_dis1		;0
+	movff	opt_dive_color_scheme,WREG	; 0-3
+	incf	WREG
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_dis2		;1
+	retlw	color_scheme_divemode_dis1	; 0
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_dis3		;2
-	retlw   color_scheme_divemode_dis4		;3
-
-    global  TFT_standard_color
-TFT_standard_color:
-    setf    WREG                			; Default white
-    btfsc   divemode            			; in Divemode?
-    rcall   TFT_standard_color_dive
-TFT_standard_color0:
-	goto	TFT_set_color					; and return...
-TFT_standard_color_dive:
-    movff   opt_dive_color_scheme,WREG		; 0-3
-    incf    WREG
-	dcfsnz	WREG
-	retlw   color_scheme_divemode_std1		;0
+	retlw	color_scheme_divemode_dis2	; 1
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_std2		;1
-	dcfsnz	WREG
-	retlw   color_scheme_divemode_std3		;2
-    retlw   color_scheme_divemode_std4		;3
-
-TFT_color_code macro color_code_temp
-	movlw	color_code_temp
-	call	TFT_color_code1
-	endm
-	
-	global	TFT_color_code1
-TFT_color_code1:						; Color-codes the output, if required
-	dcfsnz	WREG
-	bra		TFT_color_code_depth		; depth_warn_mbar [mbar], 16Bit
-	dcfsnz	WREG
-	bra		TFT_color_code_cns			; color-code CNS values (CNS in hi:lo [%])
+	retlw	color_scheme_divemode_dis3	; 2
+	retlw	color_scheme_divemode_dis4	; 3
+
+
+	global	TFT_standard_color
+TFT_standard_color:
+	setf	WREG						; Default white
+	btfsc	divemode					; in Divemode?
+	rcall	TFT_standard_color_dive
+	;bra	TFT_standard_color0
+
+TFT_standard_color0:
+	goto	TFT_set_color				; and return...
+
+
+TFT_standard_color_dive:
+	movff	opt_dive_color_scheme,WREG	; 0-3
+	incf	WREG
 	dcfsnz	WREG
-	bra		TFT_color_code_gf			; color-code GF value [%]
+	retlw	color_scheme_divemode_std1	;0
 	dcfsnz	WREG
-	bra		TFT_color_code_ppo2         ; Color-code ppO2 values (ppO2 in hi:lo [cbar]) by its warning flags
-	dcfsnz	WREG
-	bra		TFT_color_code_ceiling		; Color-code the ceiling depth
+	retlw	color_scheme_divemode_std2	;1
 	dcfsnz	WREG
-	bra		TFT_color_code_gaslist		; Color-code current row in Gaslist (%O2 in hi) according to current amb_pressure
-    dcfsnz	WREG
-    bra     TFT_color_code_ppo2_hud		; Color-code ppO2 values (ppO2 in --:lo [cbar]) by its value
-    dcfsnz	WREG
-    bra     TFT_color_code_battery		; Color-code the battery display
-	dcfsnz	WREG
-    bra     TFT_color_code_stop			; Color-code the stop depth
-
-
-TFT_color_code_gaslist:					; %O2 in hi
+	retlw	color_scheme_divemode_std3	;2
+	retlw	color_scheme_divemode_std4	;3
+
+
+	global	TFT_color_code_gaslist
+TFT_color_code_gaslist:					; Color-code current row in Gaslist (%O2 in hi) according to current amb_pressure
 ; Check very high ppO2 manually
-    SAFE_2BYTE_COPY amb_pressure,xA
+	SAFE_2BYTE_COPY amb_pressure,xA
 	movlw	d'10'
 	movwf	xB+0
 	clrf	xB+1
@@ -155,54 +139,54 @@
 ; Check for low ppo2
 	movff	xC+0,sub_a+0
 	movff	xC+1,sub_a+1
-    movff	char_I_ppO2_min,WREG
-	mullw	d'100'                  	; char_I_ppO2_min*100
+	movff	char_I_ppO2_min,WREG
+	mullw	d'100'						; char_I_ppO2_min*100
 	movff	PRODL,sub_b+0
 	movff	PRODH,sub_b+1
 	call	subU16
 	btfsc	neg_flag
-    bra		TFT_warnings_color      	; too low -> Warning Color!
+	bra		TFT_warnings_color			; too low -> Warning Color!
 ; Check for high ppo2
-    movff   gaslist_gas_global,WREG		; Read current gas O2 ratio
-	lfsr	FSR1,opt_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
-	movff   PLUSW1,xA+0					; xA+0 used as temp here -> holds type
-	movff   char_I_ppO2_max_deco,xB+1	; xB+1 used as temp here
-	movlw	.3			
-	cpfseq	xA+0						; Deco?
-	movff   char_I_ppO2_max,xB+1		; No, overwrite with travel/bottom max
-	movf	xB+1,W						; Result in WREG
+	movff	char_O_deco_warnings,WREG	; bank-safe copy of deco warnings
+	btfsc	WREG,deco_flag				; are we in deco?
+	bra		TFT_color_code_gaslist_deco	; YES - take deco max
+	movff	char_I_ppO2_max,WREG		; No  - take travel/bottom max
+	bra		TFT_color_code_gaslist_com
+TFT_color_code_gaslist_deco:
+	movff	char_I_ppO2_max_deco,WREG	; ppo2 max for deco
+TFT_color_code_gaslist_com:
 	mullw	d'100'						; char_I_ppO2_max*100
 	movff	PRODL,sub_b+0
 	movff	PRODH,sub_b+1
 	infsnz	sub_a+0,F
 	incf	sub_a+1,F					; add 1mbar to avoid warning on equal
-	call	subU16						; sub_c = sub_a - sub_b	
+	call	subU16						; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	bra	TFT_warnings_color				; too high -> Warning Color!
+	bra		TFT_warnings_color			; too high -> Warning Color!
 	return
 
 
-TFT_color_code_ceiling:
-	btfsc	hi,char_invalid_flag		; is the invalid flag set?  (bit 7 here)
+TFT_color_code_ceiling:					; color-code the ceiling depth
+	btfsc	hi,char_invalid_flag		; is the invalid flag set? (bit 7 here)
 	bra		TFT_color_code_ceiling_1	; YES
 	SAFE_2BYTE_COPY rel_pressure,sub_a	; NO
-    movff   lo,sub_b+0
-    movff   hi,sub_b+1
+	movff	lo,sub_b+0
+	movff	hi,sub_b+1
 	call	subU16						; sub_c = sub_a - sub_b :  sub_c = rel_pressure [cm] - int_O_ceiling [mbar => cm]
-	btfsc 	neg_flag					; is ceiling > current depth?
-	bra		TFT_warnings_color			; YES - set to warning  color and return	
+	btfsc	neg_flag					; is ceiling > current depth?
+	bra		TFT_warnings_color			; YES - set to warning  color and return
 	bra		TFT_standard_color			; NO  - set to standard color and return
 TFT_color_code_ceiling_1:
 	bcf		hi,char_invalid_flag		; clear the invalid flag (bit 7 here)
 	bra		TFT_disabled_color			; set to disabled color and return
 
 
-TFT_color_code_stop:
+TFT_color_code_stop:					; color-code the stop depth
 	movff	char_O_deco_gas+0,WREG		; get flag for invalid deco data
 	btfsc	WREG,char_invalid_flag		; is the invalid flag set?
 	bra		TFT_disabled_color			; set to disabled color and return
-    SAFE_2BYTE_COPY rel_pressure,xA		; get current pressure in mbar = cm
-	movlw	LOW	d'100'
+	SAFE_2BYTE_COPY rel_pressure,xA		; get current pressure in mbar = cm
+	movlw	LOW d'100'
 	movwf	xB+0
 	clrf	xB+1
 	call	div16x16					; xA/xB=xC with xA as remainder: Divide/100 => xC+0 = current depth in meters
@@ -213,16 +197,15 @@
 	bra		TFT_warnings_color			; YES - set to warning  color and return
 
 
-
-TFT_color_code_depth:					; with depth as rel_pressure in [mbar] in hi:lo
+TFT_color_code_depth:					; with actual depth as rel_pressure in [mbar] in hi:lo and threshold depth_warn_mbar [mbar], 16Bit
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-	movlw	LOW	 depth_warn_mbar
+	movlw	LOW  depth_warn_mbar
 	movwf	sub_b+0
 	movlw	HIGH depth_warn_mbar
 	movwf	sub_b+1
 	call	subU16						; sub_c = sub_a - sub_b
-    TSTOSS  opt_modwarning				; 0=standard, 1=blink
+	TSTOSS	opt_modwarning				; 0=standard, 1=blink
 	bra		TFT_color_code_depth_std
 	btfss	neg_flag
 	bra		TFT_color_code_depth_warn	; set to warning color
@@ -232,81 +215,90 @@
 	bra		TFT_warnings_color			; set to warning  color and return
 	bra		TFT_standard_color			; set to standard color and return...
 TFT_color_code_depth_ppO2:
-	movff   opt_dive_mode,WREG			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	movff	opt_dive_mode,WREG			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
 	decfsz	WREG,F						; are we in CCR mode?
 	bra		TFT_color_code_depth_no_ccr	; NO  - continue checking for ppO2
 	btfsc	is_bailout					; YES - check if in bailout
-	bra		TFT_color_code_depth_no_ccr	; 		YES - continue checking for ppO2
-; no warning by depth for all CCR modes	when not in bailout ## V2.94
-	;movff	opt_ccr_mode,WREG					; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-	;decfsz	WREG,F
-	;bra	TFT_color_code_ppo2_depth_no_ccr	; Not Sensor
-	bcf     blinking_depth_warning		; reset warning
+	bra		TFT_color_code_depth_no_ccr	;       YES - continue checking for ppO2
+	bcf		blinking_depth_warning		; reset warning
 	bra		TFT_standard_color			; no color coding, return.
 TFT_color_code_depth_no_ccr:
 	movff	int_O_breathed_ppO2+1,WREG	; get upper byte of currently breathed ppO2
 	btfsc	WREG,int_warning_flag		; is the warning flag set?
 	bra		TFT_color_code_depth_warn	; YES - animate in warning design
-	bcf     blinking_depth_warning		; NO  - reset warning
-	bra 	TFT_standard_color			;		set standard color and return
+	bcf		blinking_depth_warning		; NO  - reset warning
+	bra		TFT_standard_color			;       set standard color and return
 TFT_color_code_depth_warn:
-   	bsf		blinking_depth_warning		; set warning
-    bra     TFT_warnings_color			; set to warning color and return...
-
-
-TFT_color_code_cns:						; with CNS% in hi:lo
+	bsf		blinking_depth_warning		; set warning
+	bra		TFT_warnings_color			; set to warning color and return...
+
+
+	global	TFT_color_code_cns
+TFT_color_code_cns:						; color-code CNS values (CNS in hi:lo [%])
 	btfss	hi,int_invalid_flag			; is the invalid flag set?
 	bra		TFT_color_code_cns_1		; NO
-	bcf		hi,int_invalid_flag			; YES - clear invalid flag							## Todo: use ~bitmask and AND
-	bcf		hi,int_warning_flag			;		clear warning     flag (it may be set)
-	bcf		hi,int_prewarning_flag		; 		clear pre-warning flag (it may be set)
-	bra		TFT_disabled_color			; 		set to disabled color and return
+	bcf		hi,int_invalid_flag			; YES - clear invalid flag
+	bcf		hi,int_warning_flag			;       clear warning	flag (it may be set)
+	bcf		hi,int_attention_flag		;       clear attention flag (it may be set)
+	bra		TFT_disabled_color			;       set to disabled color and return
 TFT_color_code_cns_1
 	btfss	hi,int_warning_flag			; is the warning flag set?
 	bra		TFT_color_code_cns_2		; NO
-	bcf		hi,int_warning_flag			; YES - clear warning								## Todo: use ~bitmask and AND
-	bcf		hi,int_prewarning_flag		; 		clear pre-warning flag (it may be set)
-	bra		TFT_warnings_color			; 		set to warning color and return
+	bcf		hi,int_warning_flag			; YES - clear warning	flag
+	bcf		hi,int_attention_flag		;		clear attention flag (it may be set)
+	bra		TFT_warnings_color			;		set to warning color and return
 TFT_color_code_cns_2:
-	bcf		hi,int_prewarning_flag		; clear pre-warning flag (it may be set)
-	bra		TFT_standard_color			; set to standard color and return
+	btfss	hi,int_attention_flag		; is the attention flag set?
+	bra		TFT_standard_color			; NO  - set to standard color and return
+	bcf		hi,int_attention_flag		; YES - clear attention flag
+	bra		TFT_attention_color			;		set to attention color and return
 
 
 TFT_color_code_gf:
-	btfsc	hi,int_warning_flag			; is the warning flag set?
-	bra		TFT_warnings_color			; YES - set to warning color and return
-	btfsc	hi,int_prewarning_flag		; is the attention flag set?
-	bra		TFT_attention_color			; YES - set to attention color and return
-	bra		TFT_standard_color			; NO  - set to normal  color and return
-
-
-TFT_color_code_ppo2:
+	; with int_O_gradient_factor, the upper byte is solely used for the flags
+	; and not for the value, thus there is no need to clear the flags
+	btfsc	hi,int_invalid_flag			; is the invalid flag set?
+	bra		TFT_disabled_color			; YES - set to disabled color and return
+	btfsc	hi,int_warning_flag			; NO  - is the warning flag set?
+	bra		TFT_warnings_color			;       YES - set to warning color and return
+	btfsc	hi,int_attention_flag		;       NO  - is the attention flag set?
+	bra		TFT_attention_color			;             YES - set to attention color and return
+	bra		TFT_standard_color			;             NO  - set to normal    color and return
+
+
+TFT_color_code_ppo2:					; color-code ppO2 values (ppO2 in hi:lo [cbar]) by its warning flags
 	btfss	hi,int_warning_flag			; is the warning flag set?
 	bra		TFT_color_code_ppo2_1		; NO
-	bcf		hi,int_warning_flag			; YES - clear warning flag							## Todo: use ~bitmask and AND
-	bcf		hi,int_prewarning_flag		;		clear  pre-warning flag (it may be set)
-	bcf		hi,int_high_flag			;		clear high warning flag (it may be set)
-	bcf		hi,int_low_flag				;		clear low  warning flag (it may be set)
-	bra		TFT_warnings_color     		; 		warn in warning color
+	bcf		hi,int_warning_flag			; YES - clear warning flag
+	bcf		hi,int_attention_flag		;       clear attention    flag (it may be set)
+	bcf		hi,int_high_flag			;       clear high warning flag (it may be set)
+	bcf		hi,int_low_flag				;       clear low  warning flag (it may be set)
+	bra		TFT_warnings_color			;       warn in warning color
 TFT_color_code_ppo2_1:
-	bcf		hi,int_prewarning_flag		;		clear  pre-warning flag (it may be set)		## Todo: use ~bitmask and AND
-	bcf		hi,int_high_flag			;		clear high warning flag (it may be set)
-	bcf		hi,int_low_flag				;		clear low  warning flag (it may be set)
+	btfss	hi,int_attention_flag		; is the attention flag set?
+	bra		TFT_color_code_ppo2_2		; NO
+	bcf		hi,int_attention_flag		; YES - clear attention    flag (it may be set)
+	bcf		hi,int_high_flag			;       clear high warning flag (it may be set)
+	bcf		hi,int_low_flag				;       clear low  warning flag (it may be set)
+	bra		TFT_attention_color			;       set to standard color and return
+TFT_color_code_ppo2_2:
+	bcf		hi,int_high_flag			; clear high warning flag (it may be set)
+	bcf		hi,int_low_flag				; clear low  warning flag (it may be set)
 	bra		TFT_standard_color			; set to standard color and return
 
 
-TFT_color_code_ppo2_hud:            	; With ppO2 [cbar] in --:lo
+TFT_color_code_ppo2_hud:				; color-code ppO2 values (ppO2 in --:lo [cbar]) by its value
 	movff	char_O_deco_warnings,WREG	; get the deco warnings vector
 	btfss	WREG,deco_flag				; are we in deco?
 	bra		TFT_color_code_ppo2_hud_a	; NO  - load normal max value as threshold
 	movff	char_I_ppO2_max_deco,WREG	; YES - load deco value as threshold
 	bra		TFT_color_code_ppo2_hud_b
-TFT_color_code_ppo2_hud_a:	
+TFT_color_code_ppo2_hud_a:
 	movff	char_I_ppO2_max,WREG		; ppO2 max while not in deco
-TFT_color_code_ppo2_hud_b:	
-    cpfsgt  lo                      	; lo > threshold?
-    bra     TFT_color_code_ppo2_hud1	; NO  - continue with checking for ppO2 low
-    bra     TFT_warnings_color     		; YES - set warning color and return
+TFT_color_code_ppo2_hud_b:
+	cpfsgt	lo							; lo > threshold?
+	bra		TFT_color_code_ppo2_hud1	; NO  - continue with checking for ppO2 low
+	bra		TFT_warnings_color			; YES - set warning color and return
 TFT_color_code_ppo2_hud1:
 	movff	opt_dive_mode,WREG			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
 	decfsz	WREG,F						; now:  0=CC, 1=Gauge, 2=Apnea, 3=PSCR
@@ -318,309 +310,329 @@
 TFT_color_code_ppo2_hud_nocc:
 	movff	char_I_ppO2_min,WREG		; PPO2 min for all other modes
 TFT_color_code_ppo2_hud_cont:
-    cpfslt  lo                      	; lo < char_I_ppO2_min?
-    bra		TFT_standard_color			; NO  - set standard color and return...
-    bra     TFT_warnings_color     		; Yes - set warning  color and return
-
-
-TFT_color_code_battery:             	; With battery percent in lo
-    movlw   color_code_battery_low		; get warning threshold
-    cpfsgt  lo                      	; is battery percent < threshold?
-    bra     TFT_warnings_color     		; YES - set to warning  color and return
-    bra	    TFT_standard_color	    	; NO  - set to standard color and return
+	cpfslt	lo							; lo < char_I_ppO2_min?
+	bra		TFT_standard_color			; NO  - set standard color and return...
+	bra		TFT_warnings_color			; Yes - set warning  color and return
+
+
+TFT_color_code_battery:					; color-code the battery display, with battery percent in lo
+	movlw	color_code_battery_low		; get warning threshold
+	cpfsgt	lo							; is battery percent < threshold?
+	bra		TFT_warnings_color			; YES - set to warning  color and return
+	bra		TFT_standard_color			; NO  - set to standard color and return
+
+
+	global	TFT_color_code_gas
+TFT_color_code_gas:						; color-code the output according to gas number (1-6) in WREG
+	movwf	up							; copy gas number (1-6) to up
+	movlw	color_white					; Default color
+	dcfsnz	up,F
+	movlw	color_white					; Color for Gas 1
+	dcfsnz	up,F
+	movlw	color_green					; Color for Gas 2
+	dcfsnz	up,F
+	movlw	color_red					; Color for Gas 3
+	dcfsnz	up,F
+	movlw	color_yellow				; Color for Gas 4
+	dcfsnz	up,F
+	movlw	color_cyan					; Color for Gas 5
+	dcfsnz	up,F
+	movlw	color_pink					; Color for Gas 6
+	goto	TFT_set_color				; Set Color...
+
 
 ; ****************************************************************************
 
-    global  TFT_show_OC_startgas_surface
-TFT_show_OC_startgas_surface:           ; Show first gas and "OSTC2-like" active gases
-    ; Show first gas
-    WIN_SMALL surf_decotype_column+.1,surf_decotype_row+.30
-    extern  get_first_gas_to_WREG,gaslist_strcat_gas
-    call    get_first_gas_to_WREG       ; Gets first gas (1-5) into WREG
+	global	TFT_show_OC_startgas_surface
+TFT_show_OC_startgas_surface:			; Show first gas and "OSTC2-like" active gases
+	; Show first gas
+	WIN_SMALL surf_decotype_column+.1,surf_decotype_row+.30
+	extern	get_first_gas_to_WREG,gaslist_strcat_gas
+	call	get_first_gas_to_WREG		; Gets first gas (1-5) into WREG
 	decf	WREG,W						; 1-5 -> 0-4
-    movwf   PRODL
-    call    gaslist_strcat_gas          ; Input: PRODL : gas number (0..4), Output: Text appended into buffer pointed by FSR2.
-    STRCAT_PRINT ""
-    ; Show boxes
-    WIN_TOP		surf_decotype_row+.30+.25
-	WIN_LEFT	surf_decotype_boxes_left1+.1
-    rcall    TFT_disabled_color
-    movff   opt_gas_type+0,hi          ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    tstfsz  hi
-    rcall    TFT_standard_color
-    STRCPY_PRINT    "1"
-    decfsz  hi,F                        ; Type = 1 (First)?
-    bra     DISP_active_gas_surfmode3   ; No, skip box
-	WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left1, surf_decotype_boxes_left1+.8    ;top, bottom, left, right
+	movwf	PRODL
+	call	gaslist_strcat_gas			; Input: PRODL : gas number (0..4), Output: Text appended into buffer pointed by FSR2.
+	STRCAT_PRINT ""
+	; Show boxes
+	WIN_TOP	 surf_decotype_row+.30+.25
+	WIN_LEFT surf_decotype_boxes_left1+.1
+	rcall	TFT_disabled_color
+	movff	opt_gas_type+0,hi			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	tstfsz	hi
+	rcall	TFT_standard_color
+	STRCPY_PRINT "1"
+	decfsz	hi,F						; Type = 1 (First)?
+	bra		DISP_active_gas_surfmode3	; No, skip box
+	WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left1, surf_decotype_boxes_left1+.8	;top, bottom, left, right
 DISP_active_gas_surfmode3:
-    rcall    TFT_disabled_color
-    movff   opt_gas_type+1,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    tstfsz  hi
-    rcall    TFT_standard_color
-	WIN_LEFT	surf_decotype_boxes_left2+.1
-    STRCPY_PRINT    "2"
-    decfsz  hi,F                        ; Type = 1 (First)?
-    bra     DISP_active_gas_surfmode4   ; No, skip box
-	WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left2, surf_decotype_boxes_left2+.8    ;top, bottom, left, right
+	rcall	TFT_disabled_color
+	movff	opt_gas_type+1,hi			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	tstfsz	hi
+	rcall	TFT_standard_color
+	WIN_LEFT surf_decotype_boxes_left2+.1
+	STRCPY_PRINT "2"
+	decfsz	hi,F						; Type = 1 (First)?
+	bra		DISP_active_gas_surfmode4	; No, skip box
+	WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left2, surf_decotype_boxes_left2+.8	;top, bottom, left, right
 DISP_active_gas_surfmode4:
-    rcall    TFT_disabled_color
-    movff   opt_gas_type+2,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    tstfsz  hi
-    rcall    TFT_standard_color
-	WIN_LEFT	surf_decotype_boxes_left3+.1
-    STRCPY_PRINT    "3"
-    decfsz  hi,F                        ; Type = 1 (First)?
-    bra     DISP_active_gas_surfmode5   ; No, skip box
-    WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left3, surf_decotype_boxes_left3+.8    ;top, bottom, left, right
+	rcall	TFT_disabled_color
+	movff	opt_gas_type+2,hi			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	tstfsz	hi
+	rcall	TFT_standard_color
+	WIN_LEFT surf_decotype_boxes_left3+.1
+	STRCPY_PRINT "3"
+	decfsz	hi,F						; Type = 1 (First)?
+	bra		DISP_active_gas_surfmode5	; No, skip box
+	WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left3, surf_decotype_boxes_left3+.8	;top, bottom, left, right
 DISP_active_gas_surfmode5:
-    rcall    TFT_disabled_color
-    movff   opt_gas_type+3,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    tstfsz  hi
-    rcall    TFT_standard_color
-	WIN_LEFT	surf_decotype_boxes_left4+.1
-    STRCPY_PRINT    "4"
-    decfsz  hi,F                        ; Type = 1 (First)?
-    bra     DISP_active_gas_surfmode6   ; No, skip box
-    WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left4, surf_decotype_boxes_left4+.8    ;top, bottom, left, right
+	rcall	TFT_disabled_color
+	movff	opt_gas_type+3,hi			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	tstfsz	hi
+	rcall	TFT_standard_color
+	WIN_LEFT surf_decotype_boxes_left4+.1
+	STRCPY_PRINT "4"
+	decfsz	hi,F						; Type = 1 (First)?
+	bra		DISP_active_gas_surfmode6	; No, skip box
+	WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left4, surf_decotype_boxes_left4+.8	;top, bottom, left, right
 DISP_active_gas_surfmode6:
-    rcall    TFT_disabled_color
-    movff   opt_gas_type+4,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    tstfsz  hi
-    rcall    TFT_standard_color
-	WIN_LEFT	surf_decotype_boxes_left5+.1
-    STRCPY_PRINT    "5"
-    rcall    TFT_standard_color         ; Reset color
-    decfsz  hi,F                        ; Type = 1 (First)?
-    return                              ; no, Done.
-    WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left5, surf_decotype_boxes_left5+.8    ;top, bottom, left, right
-    return                              ; Done.
-
-	
-    global  TFT_show_color_schemes
+	rcall	TFT_disabled_color
+	movff	opt_gas_type+4,hi			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	tstfsz	hi
+	rcall	TFT_standard_color
+	WIN_LEFT surf_decotype_boxes_left5+.1
+	STRCPY_PRINT "5"
+	rcall	TFT_standard_color			; Reset color
+	decfsz	hi,F						; Type = 1 (First)?
+	return								; no, Done.
+	WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left5, surf_decotype_boxes_left5+.8	;top, bottom, left, right
+	return								; Done.
+
+
+	global	TFT_show_color_schemes
 TFT_show_color_schemes:					; update the color schemes
-    bsf     divemode					; put in divemode
-    call    TFT_divemask_color
-    WIN_TINY  .12,.40
-    STRCAT_TEXT_PRINT	tDepth
-    WIN_TINY  .62,.40
-    STRCAT_TEXT_PRINT	tMaxDepth
-    WIN_TINY  .122,.40
-    STRCAT_TEXT_PRINT	tDivetime
-
-    ; Show some demo screen
-
-    ; Depth demo
-    call	TFT_standard_color
+	bsf		divemode					; put in divemode
+	call	TFT_divemask_color
+	WIN_TINY .12,.40
+	STRCAT_TEXT_PRINT tDepth
+	WIN_TINY .62,.40
+	STRCAT_TEXT_PRINT tMaxDepth
+	WIN_TINY .122,.40
+	STRCAT_TEXT_PRINT tDivetime
+
+	; Show some demo screen
+
+	; Depth demo
+	call	TFT_standard_color
 	WIN_MEDIUM	.3,.54
-    movlw   LOW     .5172
-    movwf   lo
-    movlw   HIGH    .5172
-    movwf   hi
+	movlw	LOW  .5172
+	movwf	lo
+	movlw	HIGH .5172
+	movwf	hi
 	bsf		leftbind
 	bsf		ignore_digit4
 	output_16							; Full meters in Big font
 	bcf		leftbind
 	STRCAT_PRINT ""						; Display full meters
-    WIN_SMALL	.25,.66
-    movlw   LOW     .5172
-    movwf   lo
-    movlw   HIGH    .5172
-    movwf   hi
-	PUTC    "."
+	WIN_SMALL	.25,.66
+	movlw	LOW	 .5172
+	movwf	lo
+	movlw	HIGH	.5172
+	movwf	hi
+	PUTC	"."
 	movlw	d'4'
 	movwf	ignore_digits
 	bsf		ignore_digit5
-	output_16dp	d'0'                	; .1m in SMALL font
+	output_16dp	d'0'					; .1m in SMALL font
 	STRCAT_PRINT ""						; Display decimeters
-	WIN_FONT 	FT_SMALL
-
-    ; Max. Depth demo
-    WIN_MEDIUM	.64,.54
-	bsf     ignore_digit4				; no 0.1m
-    bsf     leftbind
-    movlw   LOW     .6349
-    movwf   lo
-    movlw   HIGH    .6349
-    movwf   hi
+	WIN_FONT FT_SMALL
+
+	; Max. Depth demo
+	WIN_MEDIUM	.64,.54
+	bsf		ignore_digit4				; no 0.1m
+	bsf		leftbind
+	movlw	LOW	 .6349
+	movwf	lo
+	movlw	HIGH	.6349
+	movwf	hi
 	output_16
 	STRCAT_PRINT ""						; Display full meters
-    bcf     leftbind
+	bcf		leftbind
 	; .1m in SMALL font
-	WIN_SMALL	.87,.66
-	PUTC    "."
+	WIN_SMALL .87,.66
+	PUTC	"."
 	movlw	d'4'
 	movwf	ignore_digits
 	bsf		ignore_digit5
-    bsf     leftbind
-    movlw   LOW     .6349
-    movwf   lo
-    movlw   HIGH    .6349
-    movwf   hi
+	bsf		leftbind
+	movlw	LOW	 .6349
+	movwf	lo
+	movlw	HIGH	.6349
+	movwf	hi
 	output_16dp	d'0'
 	STRCAT_PRINT ""						; Display decimeters
-    bcf     leftbind
-
-    ; Divetime demo
-    movff   mins,lo
-    clrf    hi
-	WIN_MEDIUM	.103, .54
-	output_16_3                     	; limit to 999 and display only (0-999)
-	STRCAT_PRINT ""                 	; Show minutes in large font
-	WIN_SMALL  .139, .66   				; left position for two sec figures
-	PUTC    ':'
+	bcf		leftbind
+
+	; Divetime demo
+	movff	mins,lo
+	clrf	hi
+	WIN_MEDIUM .103, .54
+	output_16_3							; limit to 999 and display only (0-999)
+	STRCAT_PRINT ""						; Show minutes in large font
+	WIN_SMALL .139, .66					; left position for two sec figures
+	PUTC	':'
 	bsf		leftbind
-	movff   secs,lo
+	movff	secs,lo
 	output_99x
-	bcf     leftbind
-	STRCAT_PRINT ""                 	; Show seconds in small font
-
-    bcf     divemode                	; don't stay in divemode
+	bcf		leftbind
+	STRCAT_PRINT ""						; Show seconds in small font
+
+	bcf		divemode					; don't stay in divemode
 	return
 
 	global	TFT_divemode_mask
 TFT_divemode_mask:						; Displays mask in divemode
-	bcf	    FLAG_TFT_divemode_mask
-	call    TFT_divemask_color
+	bcf		FLAG_TFT_divemode_mask
+	call	TFT_divemask_color
 	WIN_TINY dm_mask_depth_column,dm_mask_depth_row
-	STRCAT_TEXT_PRINT   tDepth
+	STRCAT_TEXT_PRINT tDepth
 	WIN_TINY dm_mask_maxdepth_column,dm_mask_maxdepth_row
-	TSTOSS  opt_vsigraph				; 0=skip, 1=draw
+	TSTOSS	opt_vsigraph				; 0=skip, 1=draw
 	WIN_TINY dm_mask_maxdepth_column_nvsi,dm_mask_maxdepth_row
-	STRCAT_TEXT_PRINT   tMaxDepth
+	STRCAT_TEXT_PRINT tMaxDepth
 	WIN_TINY dm_mask_divetime_column,dm_mask_divetime_row
-	STRCAT_TEXT_PRINT   tDivetime
-	bra		TFT_standard_color 			; and return...
-    
-    global  TFT_divemode_mask_alternative
+	STRCAT_TEXT_PRINT tDivetime
+	bra		TFT_standard_color			; and return...
+
+	global	TFT_divemode_mask_alternative
 TFT_divemode_mask_alternative:			; Alt. mask for divemode
-    bcf	    FLAG_TFT_divemode_mask_alt
-    call    TFT_divemask_color
-    WIN_TINY dm_mask_depth_column,dm_mask_depth_row
-    STRCAT_TEXT_PRINT   tDepth
-    WIN_TINY dm_mask_divetime_column-.30,dm_mask_divetime_row
-    STRCAT_TEXT_PRINT   tDivetime
-    bra		TFT_standard_color 			; and return...
-    
-    global	TFT_draw_gassep_line
+	bcf		FLAG_TFT_divemode_mask_alt
+	call	TFT_divemask_color
+	WIN_TINY dm_mask_depth_column,dm_mask_depth_row
+	STRCAT_TEXT_PRINT tDepth
+	WIN_TINY dm_mask_divetime_column-.30,dm_mask_divetime_row
+	STRCAT_TEXT_PRINT tDivetime
+	bra		TFT_standard_color			; and return...
+
+	global	TFT_draw_gassep_line
 TFT_draw_gassep_line:
-    btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
-    return
-    btfsc   divemode_menu               ; Is the dive mode menu shown?
-    return                              ; Yes, return
-    bra		TFT_standard_color 			; and return...
+	btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
+	return
+	btfsc	divemode_menu				; Is the dive mode menu shown?
+	return								; Yes, return
+	bra		TFT_standard_color			; and return...
 
 ;=========================================================================
 
 	global	TFT_display_velocity
-TFT_display_velocity:						; With divA+0 = m/min, neg_flag_velocity: ascend=1, descend=0
-    bcf     STATUS,C
-    movlw   velocity_display_threshold_1	; lowest threshold for display vertical velocity
-    subwf   divA+0,W
-    btfss   STATUS,C
-    bra	    TFT_velocity_clear              ; lower then threshold. Clear text and graph (If active)
-
-    ; We have something to display
-    bsf	    display_velocity                ; Set flag
-    ; check if descending: no warning color if descending
-    rcall   TFT_standard_color
-    btfsc   neg_flag_velocity               ; Ignore for descent!
-    rcall   TFT_velocity_set_color          ; Set color for text and set threshold for graph
-
-    rcall   TFT_velocity_disp               ; Show the text
-
-    TSTOSS  opt_vsigraph                    ; =1: draw the graphical VSI bar
-    bra     TFT_display_velocity_done       ; No graph
-	
-    btfsc   alternative_divelayout	    ; Alternative layout?
-    bra     TFT_display_velocity_done       ; Yes, no graph! (no room when divetime minutes is three figures)
-
-    btfsc   neg_flag_velocity               ; Ignore for descent!
-    rcall   TFT_velocity_graph              ; Show the graph
-    btfss   neg_flag_velocity               ; Ignore for descent!
-    rcall   TFT_velocity_clear_graph        ; Clear the graph for descent
-
-TFT_display_velocity_done:	
-    bra 	TFT_standard_color              ; and return!
+TFT_display_velocity:					; With divA+0 = m/min, neg_flag_velocity: ascend=1, descend=0
+	bcf		STATUS,C
+	movlw	velocity_display_threshold_1; lowest threshold for display vertical velocity
+	subwf	divA+0,W
+	btfss	STATUS,C
+	bra		TFT_velocity_clear			; lower then threshold. Clear text and graph (If active)
+
+	; We have something to display
+	bsf		display_velocity			; Set flag
+	; check if descending: no warning color if descending
+	rcall	TFT_standard_color
+	btfsc	neg_flag_velocity			; Ignore for descent!
+	rcall	TFT_velocity_set_color		; Set color for text and set threshold for graph
+
+	rcall	TFT_velocity_disp			; Show the text
+
+	TSTOSS	opt_vsigraph				; =1: draw the graphical VSI bar
+	bra		TFT_display_velocity_done	; No graph
+
+	btfsc	alternative_divelayout		; Alternative layout?
+	bra		TFT_display_velocity_done	; Yes, no graph! (no room when divetime minutes is three figures)
+
+	btfsc	neg_flag_velocity			; Ignore for descent!
+	rcall	TFT_velocity_graph			; Show the graph
+	btfss	neg_flag_velocity			; Ignore for descent!
+	rcall	TFT_velocity_clear_graph	; Clear the graph for descent
+
+TFT_display_velocity_done:
+	bra		TFT_standard_color			; and return!
 
 TFT_speed_table:
-    ; use a depth-dependent ascent rate warning
-    ; depth(ft):     <20 >20 >40 >60 >75 >88 >101 >115 >128 >144 >164
-    ; speed(ft/min):  23  26  29  33  36  43   49   56   59   62   66
-    ; depth(m):      <=6  >6 >12 >18 >23 >27  >31  >35  >39  >44  >50
-    ; speed(m/min):    7   8   9  10  11  13   15   17   18   19   20 (warning)
+	; use a depth-dependent ascent rate warning
+	; depth(ft):     <20 >20 >40 >60 >75 >88 >101 >115 >128 >144 >164
+	; speed(ft/min):  23  26  29  33  36  43   49   56   59   62   66
+	; depth(m):      <=6  >6 >12 >18 >23 >27  >31  >35  >39  >44  >50
+	; speed(m/min):    7   8   9  10  11  13   15   17   18   19   20 (warning)
 	; speed(m/min):    5   6   7   8   8  10   12   13   14   15   15 (attention)
 
-    ; <xx m, warning speed, attention speed, unused
-    DB  .6,.7,.5,.0
-    DB  .12,.8,.6,.0
-    DB  .18,.9,.7,.0
-    DB  .23,.10,.8,.0
-    DB  .27,.11,.8,.0
-    DB  .31,.13,.10,.0
-    DB  .35,.15,.12,.0
-    DB  .39,.17,.13,.0
-    DB  .44,.18,.14,.0
-    DB  .50,.19,.15,.0
-    DB  .200,.20,.15,.0
-
-TFT_velocity_set_color:                     ; Set color based on speed table or use static thresholds, with divA+0 = m/min
-    ; check if old/new ascend logic is used
-    TSTOSS  opt_vsitextv2       			; 0=standard, 1=dynamic
-    bra     TFT_velocity_set_color_static   ; static ascend rate limit
-
-    ; get the actual depth in m
-    SAFE_2BYTE_COPY rel_pressure, lo
+	; <xx m, warning speed, attention speed, unused
+	DB  .6,.7,.5,.0
+	DB  .12,.8,.6,.0
+	DB  .18,.9,.7,.0
+	DB  .23,.10,.8,.0
+	DB  .27,.11,.8,.0
+	DB  .31,.13,.10,.0
+	DB  .35,.15,.12,.0
+	DB  .39,.17,.13,.0
+	DB  .44,.18,.14,.0
+	DB  .50,.19,.15,.0
+	DB  .200,.20,.15,.0
+
+TFT_velocity_set_color:						; Set color based on speed table or use static thresholds, with divA+0 = m/min
+	; check if old/new ascend logic is used
+	TSTOSS	opt_vsitextv2					; 0=standard, 1=dynamic
+	bra		TFT_velocity_set_color_static	; static ascend rate limit
+
+	; get the actual depth in m
+	SAFE_2BYTE_COPY rel_pressure, lo
 	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
 	movff	hi,xA+1
 	movff	lo,xA+0
 	movlw	LOW		d'100'
 	movwf	xB+0
-	clrf	xB+1						    ; Devide/100 -> xC+0 = Depth in m
-	call	div16x16					    ; xA/xB=xC with xA as remainder 	
-	;movf	xC+0,W						    ; Depth in m
-    
-    ; point to speed table
-    movlw   LOW     (TFT_speed_table-.3)
-    movwf   TBLPTRL
-    movlw   HIGH    (TFT_speed_table-.3)
-    movwf   TBLPTRH
-    movlw   UPPER   (TFT_speed_table-.3)
-    movwf   TBLPTRU
+	clrf	xB+1							; Devide/100 -> xC+0 = Depth in m
+	call	div16x16						; xA/xB=xC with xA as remainder
+	;movf	xC+0,W							; Depth in m
+
+	; point to speed table
+	movlw	LOW   (TFT_speed_table-.3)
+	movwf	TBLPTRL
+	movlw	HIGH  (TFT_speed_table-.3)
+	movwf	TBLPTRH
+	movlw	UPPER (TFT_speed_table-.3)
+	movwf	TBLPTRU
 
 TFT_velocity_set_color_skip:
-    TBLRD*+                                 ; 3 dummy reads
-    TBLRD*+
-    TBLRD*+
-
-    TBLRD*+                                 ; Get speed threshold
-    movf	xC+0,W						    ; Depth in m
-    cpfsgt  TABLAT                          ; Threshold > current depth ?
-    bra     TFT_velocity_set_color_skip     ; No
-    
-    TBLRD*+                                 ; Get warning speed threshold
-    movf    TABLAT,W
-    movwf   divA+1                          ; Copy for graph routine
-    cpfslt  divA+0                          ; smaller then actual value (in m/min)?
-    bra     TFT_warnings_color              ; Set Warning color (And return)
-    TBLRD*+                                 ; Get attention speed threshold
-    movf    TABLAT,W
-    cpfslt  divA+0                          ; smaller then actual value (in m/min)?
-    bra     TFT_attention_color             ; Set Attention color (And return)
-    bra     TFT_standard_color              ; ...and return
+	TBLRD*+									; 3 dummy reads
+	TBLRD*+
+	TBLRD*+
+
+	TBLRD*+									; Get speed threshold
+	movf	xC+0,W							; Depth in m
+	cpfsgt	TABLAT							; Threshold > current depth ?
+	bra		TFT_velocity_set_color_skip		; No
+
+	TBLRD*+									; Get warning speed threshold
+	movf	TABLAT,W
+	movwf	divA+1							; Copy for graph routine
+	cpfslt	divA+0							; smaller then actual value (in m/min)?
+	bra	 TFT_warnings_color					; Set Warning color (And return)
+	TBLRD*+									; Get attention speed threshold
+	movf	TABLAT,W
+	cpfslt	divA+0							; smaller then actual value (in m/min)?
+	bra		TFT_attention_color				; set attention color (and return)
+	bra		TFT_standard_color				; ...and return
 
 TFT_velocity_set_color_static:
-    movlw   color_code_velocity_warn_high   ; in m/min
-    movwf   divA+1                          ; Copy for graph routine
-    cpfslt  divA+0                          ; smaller then actual value (in m/min)?
-    bra     TFT_warnings_color              ; Set Warning color (And return)
-    movlw   color_code_velocity_attn_high   ; in m/min
-    cpfslt  divA+0                          ; smaller then actual value (in m/min)?
-    bra     TFT_attention_color             ; Set Attention color (And return)
-    bra     TFT_standard_color              ; ...and return
+	movlw	color_code_velocity_warn_high	; in m/min
+	movwf	divA+1							; Copy for graph routine
+	cpfslt	divA+0							; smaller then actual value (in m/min)?
+	bra		TFT_warnings_color				; Set Warning color (And return)
+	movlw	color_code_velocity_attn_high	; in m/min
+	cpfslt	divA+0							; smaller then actual value (in m/min)?
+	bra		TFT_attention_color				; set attention color (and return)
+	bra		TFT_standard_color				; ...and return
 
 TFT_velocity_disp:
-    WIN_SMALL	dm_velocity_text_column, dm_velocity_text_row
-    TSTOSS  opt_units			            ; 0=Meters, 1=Feets
+	WIN_SMALL	dm_velocity_text_column, dm_velocity_text_row
+	TSTOSS	opt_units						; 0=Meters, 1=Feets
 	bra		TFT_velocity_metric
 ;TFT_velocity_imperial:
 	movff	divA+0,WREG						; divA+0 = m/min
@@ -635,8 +647,8 @@
 	bsf		leftbind
 	output_16
 	bcf		leftbind
-	STRCAT_TEXT_PRINT  tVelImperial			; Unit switch
-    return
+	STRCAT_TEXT_PRINT tVelImperial			; Unit switch
+	return
 
 TFT_velocity_metric:
 	movff	divA+0,lo						; divA+0 = m/min
@@ -645,37 +657,37 @@
 	movlw	'+'
 	movwf	POSTINC2
 	output_99
-	STRCAT_TEXT_PRINT  tVelMetric			; Unit switch
-    return
-
-TFT_velocity_graph:                         ; divA+0 = m/min
+	STRCAT_TEXT_PRINT tVelMetric			; Unit switch
+	return
+
+TFT_velocity_graph:							; divA+0 = m/min
 	; divA+0 holding the ascend speed in m/min
-	movff	divA+0,hi	                    ; Copy
-	WIN_BOX_BLACK   dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;top, bottom, left, right -> outer frame
-	rcall   TFT_divemask_color_dive     ; Color -> WREG
-    WIN_FRAME_COLOR   dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;inner frame
-	rcall   TFT_divemask_color_dive     ; Color -> WREG
-	WIN_FRAME_COLOR   dm_velobar_top+.10, dm_velobar_bot-.10, dm_velobar_lft, dm_velobar_rgt ;inner frame
-	rcall   TFT_divemask_color_dive     ; Color -> WREG
-	WIN_FRAME_COLOR   dm_velobar_top+.20, dm_velobar_bot-.20, dm_velobar_lft, dm_velobar_rgt ;inner frame
-	rcall   TFT_divemask_color_dive     ; Color -> WREG
-	WIN_FRAME_COLOR   dm_velobar_top+.30, dm_velobar_bot-.30, dm_velobar_lft, dm_velobar_rgt ;inner frame
+	movff	divA+0,hi						; Copy
+	WIN_BOX_BLACK	dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;top, bottom, left, right -> outer frame
+	rcall	TFT_divemask_color_dive			; Color -> WREG
+	WIN_FRAME_COLOR	dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;inner frame
+	rcall	TFT_divemask_color_dive			; Color -> WREG
+	WIN_FRAME_COLOR	dm_velobar_top+.10, dm_velobar_bot-.10, dm_velobar_lft, dm_velobar_rgt ;inner frame
+	rcall	TFT_divemask_color_dive			; Color -> WREG
+	WIN_FRAME_COLOR	dm_velobar_top+.20, dm_velobar_bot-.20, dm_velobar_lft, dm_velobar_rgt ;inner frame
+	rcall	TFT_divemask_color_dive			; Color -> WREG
+	WIN_FRAME_COLOR	dm_velobar_top+.30, dm_velobar_bot-.30, dm_velobar_lft, dm_velobar_rgt ;inner frame
 	
-    movff   divA+1,xA+0                     ; m/min for warning level (upper two blocks)
+	movff	divA+1,xA+0						; m/min for warning level (upper two blocks)
 	clrf	xA+1
 	movlw	.5
 	movwf	xB+0							; Threshold for color warning (5 color normal + 2 color warning)
 	clrf	xB+1
-	call	div16x16						;xA/xB=xC with xA as remainder 	
-	; xC+0 holds stepsize in m/min (e.g. =3 for 15m/min warning treshold)
+	call	div16x16						;xA/xB=xC with xA as remainder
+	; xC+0 holds step size in m/min (e.g. =3 for 15m/min warning threshold)
 	movff	hi,xA+0							; Velocity in m/min
 	clrf	xA+1
 	movff	xC+0,xB+0						; Step size
 	clrf	xB+1
-	call	div16x16						;xA/xB=xC with xA as remainder 	
+	call	div16x16						;xA/xB=xC with xA as remainder
 	; xC+0 now holds amount of segments to show
 
-	movff	hi,divA+0	                    ; Copy back for numeric output
+	movff	hi,divA+0						; Copy back for numeric output
 	movlw	d'7'
 	cpfslt	xC+0
 	bra		DISP_graph_vel_7
@@ -697,31 +709,31 @@
 	movlw	d'1'
 	cpfslt	xC+0
 	bra		DISP_graph_vel_1
-	bra		DISP_graph_vel_0			; Should not happen...
+	bra		DISP_graph_vel_0				; Should not happen...
 
 DISP_graph_vel_7:
-	rcall   TFT_warnings_color_dive     ; Color -> WREG
-    WIN_BOX_COLOR   dm_velobar_top+.2, dm_velobar_top+.8, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
+	rcall	TFT_warnings_color_dive		; Color -> WREG
+	WIN_BOX_COLOR dm_velobar_top+.2, dm_velobar_top+.8, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_6:
-	rcall   TFT_warnings_color_dive     ; Color -> WREG
-    WIN_BOX_COLOR   dm_velobar_top+.12, dm_velobar_top+.18, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
+	rcall	TFT_warnings_color_dive		; Color -> WREG
+	WIN_BOX_COLOR dm_velobar_top+.12, dm_velobar_top+.18, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_5:
-    rcall   TFT_attention_color_dive     ; Color -> WREG
-    WIN_BOX_COLOR   dm_velobar_top+.22, dm_velobar_top+.28, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
+	rcall	TFT_attention_color_dive	; Color -> WREG
+	WIN_BOX_COLOR dm_velobar_top+.22, dm_velobar_top+.28, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_4:
-    rcall   TFT_standard_color_dive     ; Color -> WREG
-    WIN_BOX_COLOR   dm_velobar_top+.32, dm_velobar_top+.38, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
+	rcall	TFT_standard_color_dive		; Color -> WREG
+	WIN_BOX_COLOR dm_velobar_top+.32, dm_velobar_top+.38, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_3:
-    rcall   TFT_standard_color_dive     ; Color -> WREG
-    WIN_BOX_COLOR   dm_velobar_top+.42, dm_velobar_top+.48, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
+	rcall	TFT_standard_color_dive		; Color -> WREG
+	WIN_BOX_COLOR dm_velobar_top+.42, dm_velobar_top+.48, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_2:
-    rcall   TFT_standard_color_dive     ; Color -> WREG
-    WIN_BOX_COLOR   dm_velobar_top+.52, dm_velobar_top+.58, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
+	rcall	TFT_standard_color_dive		; Color -> WREG
+	WIN_BOX_COLOR dm_velobar_top+.52, dm_velobar_top+.58, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_1:
-    rcall   TFT_standard_color_dive     ; Color -> WREG
-    WIN_BOX_COLOR   dm_velobar_top+.62, dm_velobar_top+.68, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
+	rcall	TFT_standard_color_dive		; Color -> WREG
+	WIN_BOX_COLOR dm_velobar_top+.62, dm_velobar_top+.68, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_0:
-    return                              ; Done.
+	return								; Done.
 
 	global	TFT_velocity_clear
 TFT_velocity_clear:
@@ -729,55 +741,55 @@
 	return
 	bcf		display_velocity			; Velocity was displayed, delete velocity now
 	; Clear Text
-	WIN_BOX_BLACK   dm_velocity_text_row, dm_velocity_text_bot, dm_velocity_text_column, dm_velocity_text_rgt	; top, bottom, left, right
-
-    TSTOSS  opt_vsigraph               ; =1: draw the graphical VSI bar
-    return                             ; No graph to clear         
+	WIN_BOX_BLACK	dm_velocity_text_row, dm_velocity_text_bot, dm_velocity_text_column, dm_velocity_text_rgt ; top, bottom, left, right
+
+	TSTOSS	opt_vsigraph				; =1: draw the graphical VSI bar
+	return								; No graph to clear
 TFT_velocity_clear_graph:
-    ; Clear Graph
-    WIN_BOX_BLACK   dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;top, bottom, left, right
+	; Clear Graph
+	WIN_BOX_BLACK dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;top, bottom, left, right
 	return
 
 ;=========================================================================
 
-    global  TFT_clear_decoarea
+	global	TFT_clear_decoarea
 TFT_clear_decoarea:
-    WIN_BOX_BLACK   dm_decostop_1st_stop_row, .239, dm_decostop_1st_stop_column, .159	; top, bottom, left, right
+	WIN_BOX_BLACK	dm_decostop_1st_stop_row, .239, dm_decostop_1st_stop_column, .159 ; top, bottom, left, right
 	return
 
 
-    global  TFT_clear_divemode_menu
+	global	TFT_clear_divemode_menu
 TFT_clear_divemode_menu:
-    WIN_BOX_BLACK   dm_menu_row,   dm_menu_lower, dm_menu_left,  dm_menu_right	; top, bottom, left, right
+	WIN_BOX_BLACK	dm_menu_row, dm_menu_lower, dm_menu_left, dm_menu_right	; top, bottom, left, right
 	return
 
 
 	global	TFT_display_ndl_mask
 TFT_display_ndl_mask:
-    bcf	    FLAG_TFT_display_ndl_mask
-    btfsc   divemode_menu               ; Is the dive mode menu shown?
-    return                              ; Yes, return
-	call	TFT_clear_decoarea          ; Clear Dekostop and Dekosum
-    call    TFT_divemask_color
-   	WIN_STD dm_ndl_text_column, dm_ndl_text_row
-	STRCPY_TEXT_PRINT  tNDL             ; NDL
-	bra	TFT_standard_color              ; and return...
+	bcf		FLAG_TFT_display_ndl_mask
+	btfsc	divemode_menu				; Is the dive mode menu shown?
+	return								; Yes, return
+	call	TFT_clear_decoarea			; Clear Dekostop and Dekosum
+	call	TFT_divemask_color
+	WIN_STD dm_ndl_text_column, dm_ndl_text_row
+	STRCPY_TEXT_PRINT tNDL				; NDL
+	bra		TFT_standard_color			; and return...
 
 
 	global	TFT_display_tts
 TFT_display_tts:
-    bcf	    FLAG_TFT_display_tts
-    btfsc   divemode_menu               ; Is the dive mode menu shown?
-    return                              ; Yes, return
+	bcf		FLAG_TFT_display_tts
+	btfsc	divemode_menu				; Is the dive mode menu shown?
+	return								; Yes, return
 	call	TFT_standard_color
-	movff	int_O_ascenttime+0,lo       ; TTS
-	movff	int_O_ascenttime+1,hi       ; on 16bits
+	movff	int_O_ascenttime+0,lo		; TTS
+	movff	int_O_ascenttime+1,hi		; on 16bits
 	btfss	hi,int_invalid_flag			; is the invalid flag set?
 	bra		TFT_display_tts_1			; NO
 	bcf		hi,int_invalid_flag			; YES - clear flag
-	call	TFT_disabled_color			; 		switch to disabled color
+	call	TFT_disabled_color			;       switch to disabled color
 TFT_display_tts_1:
-	WIN_MEDIUM  dm_tts_value_column, dm_tts_value_row
+	WIN_MEDIUM dm_tts_value_column, dm_tts_value_row
 	output_16_3							; Displays only 0...999
 	STRCAT_PRINT "'"
 	return
@@ -785,110 +797,110 @@
 
 	global	TFT_display_ndl
 TFT_display_ndl:
-    bcf	    FLAG_TFT_display_ndl
-    btfsc   divemode_menu               ; Is the dive mode menu shown?
-    return                              ; Yes, return
-    WIN_MEDIUM	dm_ndl_value_column, dm_ndl_value_row
-    call	TFT_standard_color
-    movff	char_O_nullzeit,lo			; Get NDL from C-code
-    output_8
-    STRCAT_PRINT "'"
-    return
-
-
-	global	TFT_big_deco_alt	        ; The big deco
+	bcf		FLAG_TFT_display_ndl
+	btfsc	divemode_menu				; Is the dive mode menu shown?
+	return								; Yes, return
+	WIN_MEDIUM	dm_ndl_value_column, dm_ndl_value_row
+	call	TFT_standard_color
+	movff	char_O_nullzeit,lo			; Get NDL from C-code
+	output_8
+	STRCAT_PRINT "'"
+	return
+
+
+	global	TFT_big_deco_alt			; The big deco
 TFT_big_deco_alt:
-    bcf	    FLAG_TFT_big_deco_alt
-    
-    btfss   decostop_active             ; deco?
-    bra	    TFT_big_deco_ndl_alt	    ; NDL
-    
-    ; Deco
-    bcf	    FLAG_TFT_display_deko
-    call    TFT_divemask_color
-    WIN_STD 	.70,.165
-    STRCPY_TEXT_PRINT  tTTS             ; TTS
-    rcall   TFT_standard_color
-    
-    ; TTS
-    WIN_LARGE	.97,.170
-    movff	int_O_ascenttime+0,lo       ; TTS
-    movff	int_O_ascenttime+1,hi       ; on 16bits
-    btfss	hi,int_invalid_flag			; is the invalid flag set?
-    bra		TFT_display_tts_alt_1		; NO
-    bcf		hi,int_invalid_flag			; YES - clear flag
-    call	TFT_disabled_color			; 		switch to disabled color
+	bcf		FLAG_TFT_big_deco_alt
+
+	btfss	decostop_active				; deco?
+	bra		TFT_big_deco_ndl_alt		; NDL
+
+	; Deco
+	bcf		FLAG_TFT_display_deko
+	call	TFT_divemask_color
+	WIN_STD .70,.165
+	STRCPY_TEXT_PRINT tTTS				; TTS
+	rcall	TFT_standard_color
+
+	; TTS
+	WIN_LARGE	.97,.170
+	movff	int_O_ascenttime+0,lo		; TTS
+	movff	int_O_ascenttime+1,hi		; on 16bits
+	btfss	hi,int_invalid_flag			; is the invalid flag set?
+	bra		TFT_display_tts_alt_1		; NO
+	bcf		hi,int_invalid_flag			; YES - clear flag
+	call	TFT_disabled_color			;       switch to disabled color
 TFT_display_tts_alt_1:
-    output_16_3							; Displays only 0...999
-    STRCAT_PRINT ""
-    
-    ; 1st Stop
-    call    TFT_divemask_color
-    WIN_STD .25,dm_customview_row
-    STRCPY_TEXT_PRINT  tDiveSafetyStop  ; "Stop"
-    
-    WIN_LARGE	.60,.95
-    TFT_color_code	warn_stop		    ; Color-code Output
-    movff	char_O_first_deco_depth,lo  ; stop depth in m
-    rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-    STRCAT_PRINT ""
-    
-    ; m or ft after the stop depth
-    WIN_MEDIUM 	.100,.118
-    TSTOSS	opt_units				    ; 0=m, 1=ft
-    bra		TFT_display_tts_alt_1_metric
-    STRCAT_TEXT_PRINT tFeets1
-    bra	    TFT_display_tts_alt_1_com
+	output_16_3							; Displays only 0...999
+	STRCAT_PRINT ""
+
+	; 1st Stop
+	call	TFT_divemask_color
+	WIN_STD .25,dm_customview_row
+	STRCPY_TEXT_PRINT tDiveSafetyStop	; "Stop"
+
+	WIN_LARGE .60,.95
+	call	TFT_color_code_stop			; Color-code Output
+	movff	char_O_first_deco_depth,lo	; stop depth in m
+	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
+	STRCAT_PRINT ""
+
+	; m or ft after the stop depth
+	WIN_MEDIUM .100,.118
+	TSTOSS	opt_units					; 0=m, 1=ft
+	bra		TFT_display_tts_alt_1_metric
+	STRCAT_TEXT_PRINT tFeets1
+	bra		TFT_display_tts_alt_1_com
 TFT_display_tts_alt_1_metric:
-    STRCAT_TEXT_PRINT tMeters
+	STRCAT_TEXT_PRINT tMeters
 TFT_display_tts_alt_1_com:
-    WIN_LARGE	.117,.95
-    movff	char_O_first_deco_time,lo   ; length of first stop in min
-    bcf	    leftbind
-    output_99
-    STRCAT_PRINT ""
-    goto	TFT_standard_color			; and return...
-   
+	WIN_LARGE .117,.95
+	movff	char_O_first_deco_time,lo	; length of first stop in min
+	bcf		leftbind
+	output_99
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
+	
 TFT_big_deco_ndl_alt:
-    ; NDL
-    bcf	    FLAG_TFT_display_ndl
-    bcf	    decostop_active				; clear flag (again)
-    call    TFT_divemask_color
-    WIN_STD .70,.165
-    STRCPY_TEXT_PRINT  tNDL             ; NDL
-    call   TFT_standard_color
-    WIN_LARGE .97,.170
-    call	TFT_standard_color
-    movff	char_O_nullzeit,lo			; Get NDL from C-code
-    output_8
-    STRCAT_PRINT ""
-    
-    btfsc   FLAG_TFT_show_safety_stop
-    bra	    TFT_show_safety_stop_alt	; Show safety stop (And return)
-    ; Clear any safety stop or Decostop
+	; NDL
+	bcf		FLAG_TFT_display_ndl
+	bcf		decostop_active				; clear flag (again)
+	call	TFT_divemask_color
+	WIN_STD .70,.165
+	STRCPY_TEXT_PRINT tNDL				; NDL
+	call	TFT_standard_color
+	WIN_LARGE .97,.170
+	call	TFT_standard_color
+	movff	char_O_nullzeit,lo			; Get NDL from C-code
+	output_8
+	STRCAT_PRINT ""
+
+	btfsc	FLAG_TFT_show_safety_stop
+	bra		TFT_show_safety_stop_alt	; Show safety stop (And return)
+	; Clear any safety stop or Decostop
 TFT_no_more_safety_stop_alt:
-    WIN_BOX_BLACK   dm_customview_row, .150, .0, .159	; top, bottom, left, right
-    WIN_BOX_BLACK   dm_customview_row, .164, .60, .159	; top, bottom, left, right
-    return
+	WIN_BOX_BLACK	dm_customview_row, .150, .0, .159	; top, bottom, left, right
+	WIN_BOX_BLACK	dm_customview_row, .164, .60, .159	; top, bottom, left, right
+	return
 
 TFT_show_safety_stop_alt:
-    bcf	    FLAG_TFT_show_safety_stop
-    tstfsz	safety_stop_countdown		; Countdown at zero?
-    bra		TFT_show_safety_stop_alt2	; No, show stop
-    bcf		show_safety_stop			; Clear flag
-    btfss	safety_stop_active			; Displayed?
-    return								; No
-    bcf		safety_stop_active			; Clear flag
-    bra		TFT_no_more_safety_stop_alt	; Yes, Clear stop ; and return...
+	bcf		FLAG_TFT_show_safety_stop
+	tstfsz	safety_stop_countdown		; Countdown at zero?
+	bra		TFT_show_safety_stop_alt2	; No, show stop
+	bcf		show_safety_stop			; Clear flag
+	btfss	safety_stop_active			; Displayed?
+	return								; No
+	bcf		safety_stop_active			; Clear flag
+	bra		TFT_no_more_safety_stop_alt	; Yes, Clear stop ; and return...
 
 TFT_show_safety_stop_alt2:
-    bsf     safety_stop_active			; Set flag
-    decf    safety_stop_countdown,F		; Reduce countdown
-
-	call    TFT_divemask_color
-	WIN_STD 	.50,dm_customview_row
+	bsf		safety_stop_active			; Set flag
+	decf	safety_stop_countdown,F		; Reduce countdown
+
+	call	TFT_divemask_color
+	WIN_STD	.50,dm_customview_row
 	STRCPY_TEXT_PRINT tDiveSafetyStop
-	call    TFT_attention_color         ; show in yellow
+	call	TFT_attention_color			; show in yellow
 	WIN_LARGE	.90,.95
 	movff	safety_stop_countdown,lo
 	clrf	hi
@@ -896,51 +908,50 @@
 	movf	hi,W
 	movff	lo,hi
 	movwf	lo							; exchange lo and hi
-	bsf     leftbind
+	bsf		leftbind
 	output_8
 	STRCAT_PRINT ""
-	WIN_MEDIUM 	.112,.120
+	WIN_MEDIUM .112,.120
 	STRCAT_PRINT ":"
-	WIN_LARGE	.117,.95
-	bcf     leftbind
+	WIN_LARGE  .117,.95
+	bcf		leftbind
 	movff	hi,lo
 	output_99x
 	STRCAT_PRINT ""
-	WIN_FONT 	FT_SMALL
+	WIN_FONT FT_SMALL
 	goto	TFT_standard_color			; and return...
 
 
 	global	TFT_divemode_warning
 TFT_divemode_warning:
 	bcf		FLAG_TFT_divemode_warning
-	bsf		dive_warning_displayed              ; =1: The warning sign is shown
+	bsf		dive_warning_displayed				; =1: The warning sign is shown
 	WIN_TOP  dm_warning_icon_row
 	WIN_LEFT dm_warning_icon_column
-	TFT_WRITE_PROM_IMAGE dive_warning2_block 	; Show Warning icon
+	TFT_WRITE_PROM_IMAGE dive_warning2_block	; Show Warning icon
 	return
 
 	global	TFT_divemode_warning_clear
 TFT_divemode_warning_clear:
 	bcf		FLAG_TFT_divemode_warning_clear
-	btfss	dive_warning_displayed              ; =1: The warning sign is shown
+	btfss	dive_warning_displayed				; =1: The warning sign is shown
 	return
-	bcf		dive_warning_displayed              ; clear only once
-	WIN_BOX_BLACK dm_warning_icon_row, dm_warning_icon_bot, dm_warning_icon_column, dm_warning_icon_rgt  ; top, bottom, left, right
+	bcf		dive_warning_displayed				; clear only once
+	WIN_BOX_BLACK dm_warning_icon_row, dm_warning_icon_bot, dm_warning_icon_column, dm_warning_icon_rgt ; top, bottom, left, right
 	return
 
-
 	global	TFT_display_deko_mask
 TFT_display_deko_mask:
-    bcf		FLAG_TFT_display_deko_mask
-    btfsc	divemode_menu			; Is the dive mode menu shown? 
-    return							; Yes, return
-    rcall	TFT_clear_decoarea		; Clear Dekostop and Dekosum (and NDL in this case)
-    WIN_STD dm_tts_text_column, dm_tts_text_row
-    call	TFT_divemask_color
-    STRCPY_TEXT_PRINT  tTTS         ; TTS
-    call	TFT_standard_color
-    bcf		show_safety_stop        ; Clear safety stop flag
-    return
+	bcf		FLAG_TFT_display_deko_mask
+	btfsc	divemode_menu			; Is the dive mode menu shown? 
+	return							; Yes, return
+	rcall	TFT_clear_decoarea		; Clear Dekostop and Dekosum (and NDL in this case)
+	WIN_STD dm_tts_text_column, dm_tts_text_row
+	call	TFT_divemask_color
+	STRCPY_TEXT_PRINT tTTS			; TTS
+	call	TFT_standard_color
+	bcf		show_safety_stop		; Clear safety stop flag
+	return
 
 
 TFT_display_deko_output_depth:		; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (for ft)
@@ -954,37 +965,37 @@
 ; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops...
 	movff	lo,xA+0
 	movff	hi,xA+1
-	movlw	LOW 	d'334'          ; 334feet/100m
+	movlw	LOW  d'334'				; 334feet/100m
 	movwf	xB+0
-	movlw	HIGH 	d'334'
+	movlw	HIGH d'334'
 	movwf	xB+1
-	call	mult16x16			    ; xA*xB=xC (lo:hi * 328)
-	movlw	d'50'                   ; round up
+	call	mult16x16				; xA*xB=xC (lo:hi * 328)
+	movlw	d'50'					; round up
 	addwf	xC+0,F
 	movlw	0
 	addwfc	xC+1,F
 	addwfc	xC+2,F
 	addwfc	xC+3,F
-	movlw	d'100'					
+	movlw	d'100'
 	movwf	xB+0
 	clrf	xB+1
-	call	div32x16  			    ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,lo
-	movff	xC+1,hi				    ; restore lo and hi with updated value
+	movff	xC+1,hi					; restore lo and hi with updated value
 	bcf		leftbind
 	btfsc	alternative_divelayout
-	bsf		leftbind		    	; left for alternative layout mode
+	bsf		leftbind				; left for alternative layout mode
 	bsf		ignore_digit4			; Only full feet
 	output_16
 	btfsc	alternative_divelayout
-	return					    	; Not for alternative layout mode
+	return							; Not for alternative layout mode
 	STRCAT_TEXT	tFeets1
 	return
 
 TFT_display_deko_output_metric:
 	output_99
 	btfsc	alternative_divelayout
-	return					    	; Not for alternative layout mode
+	return							; Not for alternative layout mode
 	STRCAT_TEXT	tMeters
 	PUTC	' '
 	return
@@ -992,24 +1003,24 @@
 
 	global	TFT_display_deko
 TFT_display_deko:
-    bcf	    FLAG_TFT_display_deko
-    btfsc   divemode_menu               ; Is the dive mode menu shown?
-    return                              ; Yes, return
+	bcf		FLAG_TFT_display_deko
+	btfsc	divemode_menu				; Is the dive mode menu shown?
+	return								; Yes, return
 	WIN_MEDIUM dm_decostop_1st_stop_column, dm_decostop_1st_stop_row
-	TFT_color_code	warn_stop		    ; Color-code Output
-	movff	char_O_first_deco_depth,lo  ; stop depth in m
+	call	TFT_color_code_stop			; Color-code Output
+	movff	char_O_first_deco_depth,lo	; stop depth in m
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-	movff	char_O_first_deco_time,lo   ; length of first stop in min
+	movff	char_O_first_deco_time,lo	; length of first stop in min
 	output_99
 	STRCAT_PRINT "'"
 	goto	TFT_standard_color			; and return...
 
 
-    global  TFT_decoplan
+	global	TFT_decoplan
 TFT_decoplan:
-    call    TFT_divemask_color
-    WIN_TINY    dm_custom_decoplan_title_column, dm_custom_decoplan_title_row
-    STRCPY_TEXT_PRINT tDiveDecoplan
+	call	TFT_divemask_color
+	WIN_TINY	dm_custom_decoplan_title_column, dm_custom_decoplan_title_row
+	STRCPY_TEXT_PRINT tDiveDecoplan
 	call	TFT_standard_color
 	movff	char_O_deco_depth+1,lo
 	tstfsz	lo							; Show another stop?
@@ -1018,51 +1029,51 @@
 	call	TFT_standard_color
 	WIN_SMALL	dm_cust_dstop_4th_stop_column,dm_cust_dstop_4th_stop_row
 	STRCPY_PRINT "  ---  "
-	WIN_BOX_BLACK   dm_cust_dstop_2nd_stop_row, dm_customview_bot-.2, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
-	WIN_BOX_BLACK   dm_cust_dstop_5th_stop_row, dm_customview_bot, dm_cust_dstop_5th_stop_column, dm_cust_dstop_6th_stop_column	; top, bottom, left, right
-	WIN_BOX_BLACK   dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159	; top, bottom, left, right
+	WIN_BOX_BLACK dm_cust_dstop_2nd_stop_row, dm_customview_bot-.2, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
+	WIN_BOX_BLACK dm_cust_dstop_5th_stop_row, dm_customview_bot, dm_cust_dstop_5th_stop_column, dm_cust_dstop_6th_stop_column	; top, bottom, left, right
+	WIN_BOX_BLACK dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159	; top, bottom, left, right
 	goto	TFT_standard_color			; and return...
-	
+
 TFT_display_deko2:
 	movff	char_O_deco_gas+0,lo		; get flag for invalid deco data
 	btfsc	lo,char_invalid_flag		; is the invalid flag set?
 	call	TFT_disabled_color			; YES - set to disabled color
 	WIN_SMALL	dm_cust_dstop_2nd_stop_column, dm_cust_dstop_2nd_stop_row
-	movff	char_O_deco_depth+1,lo  	; stop in m
-	bcf     lo,7                        ; Clear GAS_SWITCH bit
+	movff	char_O_deco_depth+1,lo		; stop in m
+	bcf		lo,7						; Clear GAS_SWITCH bit
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-	movff	char_O_deco_time+1,lo   	; length of stop in min
+	movff	char_O_deco_time+1,lo		; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
 	movff	char_O_deco_depth+2,lo
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko3			; Yes
 	; No, clear output and return
-	WIN_BOX_BLACK   dm_cust_dstop_3rd_stop_row, dm_customview_bot-.2, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
-	WIN_BOX_BLACK   dm_cust_dstop_4th_stop_row, dm_customview_bot, dm_cust_dstop_4th_stop_column, .159	; top, bottom, left, right
+	WIN_BOX_BLACK	dm_cust_dstop_3rd_stop_row, dm_customview_bot-.2, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
+	WIN_BOX_BLACK	dm_cust_dstop_4th_stop_row, dm_customview_bot, dm_cust_dstop_4th_stop_column, .159	; top, bottom, left, right
 	goto	TFT_standard_color			; and return...
 
 TFT_display_deko3:
 	WIN_SMALL	dm_cust_dstop_3rd_stop_column, dm_cust_dstop_3rd_stop_row
-	movff	char_O_deco_depth+2,lo  	; stop in m
-	bcf     lo,7                        ; Clear GAS_SWITCH bit
+	movff	char_O_deco_depth+2,lo		; stop in m
+	bcf		lo,7						; Clear GAS_SWITCH bit
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-	movff	char_O_deco_time+2,lo   	; length of stop in min
+	movff	char_O_deco_time+2,lo		; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
 	movff	char_O_deco_depth+3,lo
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko4			; Yes
 	; No, clear output and return
-	WIN_BOX_BLACK   dm_cust_dstop_4th_stop_row, dm_customview_bot, dm_cust_dstop_4th_stop_column, .159  ; top, bottom, left, right
+	WIN_BOX_BLACK dm_cust_dstop_4th_stop_row, dm_customview_bot, dm_cust_dstop_4th_stop_column, .159 ; top, bottom, left, right
 	goto	TFT_standard_color			; and return...
 
 TFT_display_deko4:
 	WIN_SMALL	dm_cust_dstop_4th_stop_column, dm_cust_dstop_4th_stop_row
-	movff	char_O_deco_depth+3,lo  	; stop in m
-	bcf     lo,7                        ; Clear GAS_SWITCH bit
+	movff	char_O_deco_depth+3,lo		; stop in m
+	bcf		lo,7						; Clear GAS_SWITCH bit
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-	movff	char_O_deco_time+3,lo   	; length of stop in min
+	movff	char_O_deco_time+3,lo		; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
 
@@ -1070,598 +1081,596 @@
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko5			; Yes
 	; No, clear output and return
-	WIN_BOX_BLACK   dm_cust_dstop_5th_stop_row, dm_customview_bot, dm_cust_dstop_5th_stop_column, dm_cust_dstop_6th_stop_column	; top, bottom, left, right
-	WIN_BOX_BLACK   dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159                     ; top, bottom, left, right
+	WIN_BOX_BLACK	dm_cust_dstop_5th_stop_row, dm_customview_bot, dm_cust_dstop_5th_stop_column, dm_cust_dstop_6th_stop_column	; top, bottom, left, right
+	WIN_BOX_BLACK	dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159					 ; top, bottom, left, right
 	goto	TFT_standard_color			; and return...
 
 TFT_display_deko5:
 	WIN_SMALL	dm_cust_dstop_5th_stop_column, dm_cust_dstop_5th_stop_row
-	movff	char_O_deco_depth+4,lo  	; stop in m
-	bcf     lo,7                        ; Clear GAS_SWITCH bit
+	movff	char_O_deco_depth+4,lo		; stop in m
+	bcf		lo,7						; Clear GAS_SWITCH bit
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-	movff	char_O_deco_time+4,lo   	; length of stop in min
+	movff	char_O_deco_time+4,lo		; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
 	movff	char_O_deco_depth+5,lo
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko6			; Yes
 	; No, clear output and return
-	WIN_BOX_BLACK   dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159        ; top, bottom, left, right
+	WIN_BOX_BLACK	dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159		; top, bottom, left, right
 	goto	TFT_standard_color			; and return...
-	
+
 TFT_display_deko6:
 	WIN_SMALL	dm_cust_dstop_6th_stop_column, dm_cust_dstop_6th_stop_row
-	movff	char_O_deco_depth+5,lo  	; stop in m
-	bcf     lo,7                        ; Clear GAS_SWITCH bit
+	movff	char_O_deco_depth+5,lo		; stop in m
+	bcf		lo,7						; Clear GAS_SWITCH bit
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-	movff	char_O_deco_time+5,lo   	; length of stop in min
+	movff	char_O_deco_time+5,lo		; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
 	movff	char_O_deco_depth+6,lo
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko7			; Yes
 	; No, clear output and return
-	WIN_BOX_BLACK   dm_cust_dstop_7th_stop_row, dm_customview_bot, dm_cust_dstop_7th_stop_column, .159     ; top, bottom, left, right
+	WIN_BOX_BLACK	dm_cust_dstop_7th_stop_row, dm_customview_bot, dm_cust_dstop_7th_stop_column, .159	 ; top, bottom, left, right
 	goto	TFT_standard_color			; and return...
-	
+
 TFT_display_deko7:
 	WIN_SMALL	dm_cust_dstop_7th_stop_column, dm_cust_dstop_7th_stop_row
-	movff	char_O_deco_depth+6,lo  	; stop in m
-	bcf     lo,7                        ; Clear GAS_SWITCH bit
+	movff	char_O_deco_depth+6,lo		; stop in m
+	bcf		lo,7						; Clear GAS_SWITCH bit
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
-	movff	char_O_deco_time+6,lo   	; length of stop in min
+	movff	char_O_deco_time+6,lo		; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
 	goto	TFT_standard_color			; and return...
 
 
-    global  TFT_clear_safety_stop
+	global	TFT_clear_safety_stop
 TFT_clear_safety_stop:
-    bcf	    FLAG_TFT_clear_safety_stop		 ; clear flag
-    WIN_BOX_BLACK   dm_safetystop_row, dm_safetystop_bot, dm_safetystop_text_column, .159	; top, bottom, left, right
-    return
-
-    global  TFT_show_safety_stop
+	bcf		FLAG_TFT_clear_safety_stop		; clear flag
+	WIN_BOX_BLACK	dm_safetystop_row, dm_safetystop_bot, dm_safetystop_text_column, .159	; top, bottom, left, right
+	return
+
+	global	TFT_show_safety_stop
 TFT_show_safety_stop:
-    bcf	    FLAG_TFT_show_safety_stop
+	bcf		FLAG_TFT_show_safety_stop
 	tstfsz	safety_stop_countdown			; Countdown at zero?
 	bra		TFT_show_safety_stop2			; No, show stop
 	bcf		show_safety_stop				; Clear flag
 	btfss	safety_stop_active				; Displayed?
-    return                                  ; No
+	return									; No
 	bcf		safety_stop_active				; Clear flag
-    btfsc   divemode_menu                   ; Is the dive mode menu shown?
-    return                                  ; Yes, return
-    bra		TFT_clear_safety_stop           ; Yes, Clear stop ; and return...
+	btfsc	divemode_menu					; Is the dive mode menu shown?
+	return									; Yes, return
+	bra		TFT_clear_safety_stop			; Yes, Clear stop ; and return...
 TFT_show_safety_stop2:
-    bsf     safety_stop_active				; Set flag
-    decf	safety_stop_countdown,F			; Reduce countdown
-    btfsc   divemode_menu                   ; Is the dive mode menu shown?
-    return                                  ; Yes, return
-    ;btfsc   menuview
-    ;bra     TFT_show_safety_stop3          ; No room when menuview=1...
-    call    TFT_divemask_color
-    WIN_STD  dm_safetystop_text_column, dm_safetystop_text_row
-    STRCPY_TEXT_PRINT tDiveSafetyStop
+	bsf		safety_stop_active				; Set flag
+	decf	safety_stop_countdown,F			; Reduce countdown
+	btfsc	divemode_menu					; Is the dive mode menu shown?
+	return									; Yes, return
+	;btfsc	menuview
+	;bra	 TFT_show_safety_stop3			; No room when menuview=1...
+	call	TFT_divemask_color
+	WIN_STD	 dm_safetystop_text_column, dm_safetystop_text_row
+	STRCPY_TEXT_PRINT tDiveSafetyStop
 TFT_show_safety_stop3:
-	call    TFT_attention_color             ; show in yellow
-    WIN_MEDIUM	dm_safetystop_column, dm_safetystop_row
+	call	TFT_attention_color			 ; show in yellow
+	WIN_MEDIUM	dm_safetystop_column, dm_safetystop_row
 	movff	safety_stop_countdown,lo
 	clrf	hi
 	call	convert_time					; converts hi:lo in seconds to mins (hi) and seconds (lo)
 	movf	hi,W
 	movff	lo,hi
 	movwf	lo								; exchange lo and hi
-    bsf     leftbind
+	bsf		leftbind
 	output_8
-    bcf     leftbind
-	PUTC    ':'
+	bcf		leftbind
+	PUTC	':'
 	movff	hi,lo
 	output_99x
 	STRCAT_PRINT ""
-	WIN_FONT 	FT_SMALL
+	WIN_FONT FT_SMALL
 	goto	TFT_standard_color				; and return...
 
 
-    global  TFT_mask_avr_stopwatch      ; Show mask for average depth and stopwatch
+	global	TFT_mask_avr_stopwatch			; Show mask for average depth and stopwatch
 TFT_mask_avr_stopwatch:
-    ; The mask
-    call    TFT_divemask_color
-    WIN_TINY          dm_custom_avr_stop_title_column1,dm_custom_avr_stop_title_row
-    STRCPY_TEXT_PRINT tDiveTotalAvg
-    WIN_TINY          dm_custom_avr_stop_title_column2,dm_custom_avr_stop_title_row
-    STRCPY_TEXT_PRINT tDiveStopwatch
-    WIN_TINY          dm_custom_avr_stop_title_column3,dm_custom_avr_stop_title_row
-    STRCPY_TEXT_PRINT tDiveStopAvg
-    goto	TFT_standard_color          ; and return...
-
-    global  TFT_update_avr_stopwatch    ; Update average depth and stopwatch
+	; The mask
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_avr_stop_title_column1,dm_custom_avr_stop_title_row
+	STRCPY_TEXT_PRINT tDiveTotalAvg
+	WIN_TINY dm_custom_avr_stop_title_column2,dm_custom_avr_stop_title_row
+	STRCPY_TEXT_PRINT tDiveStopwatch
+	WIN_TINY dm_custom_avr_stop_title_column3,dm_custom_avr_stop_title_row
+	STRCPY_TEXT_PRINT tDiveStopAvg
+	goto	TFT_standard_color				; and return...
+
+	global	TFT_update_avr_stopwatch		; Update average depth and stopwatch
 TFT_update_avr_stopwatch:
-    call    TFT_standard_color
-    SAFE_2BYTE_COPY  average_divesecs,lo
+	call	TFT_standard_color
+	SAFE_2BYTE_COPY	average_divesecs,lo
 	call	convert_time				; lo=secs, hi=mins
-    WIN_MEDIUM  dm_custom_avr_stop_column2,dm_custom_avr_stop_row
-    bsf     leftbind
+	WIN_MEDIUM dm_custom_avr_stop_column2,dm_custom_avr_stop_row
+	bsf		leftbind
 	movf	hi,W
 	movff	lo,hi
 	movwf	lo							; exchange lo and hi
 	output_8
-	PUTC    ':'
+	PUTC	':'
 	movff	hi,lo
 	output_99x
-    movlw   .5
-    call    TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    clrf    WREG
-    movff   WREG,buffer+.5              ; limit to 5 chars
+	movlw	.5
+	call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	clrf	WREG
+	movff	WREG,buffer+.5				; limit to 5 chars
 	STRCAT_PRINT ""
-
-    TSTOSS  opt_units   				; 0=m, 1=ft
+	TSTOSS	opt_units					; 0=m, 1=ft
 	bra		TFT_update_avr_stopwatch_metric
-;TFT_update_avr_stopwatch_imperial
-    movff   avg_rel_pressure_total+0,lo
-    movff   avg_rel_pressure_total+1,hi
-    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-    call	convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
-    WIN_MEDIUM  dm_custom_avr_stop_column1,dm_custom_avr_stop_row
-    bsf     leftbind
-    output_16                       	; yxz
-    STRCAT_PRINT " "
-    ; Stopped average depth
-    movff   avg_rel_pressure+0,lo
-    movff   avg_rel_pressure+1,hi
-    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-    call	convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
-    WIN_MEDIUM  dm_custom_avr_stop_column3,dm_custom_avr_stop_row
-    output_16                       	; yxz
-    bcf     leftbind
-    PUTC    " "
-    clrf    WREG
-    movff   WREG,buffer+.3              ; limit string length to 3
-    STRCAT_PRINT ""
-    return
+	;TFT_update_avr_stopwatch_imperial
+	movff	avg_rel_pressure_total+0,lo
+	movff	avg_rel_pressure_total+1,hi
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	WIN_MEDIUM dm_custom_avr_stop_column1,dm_custom_avr_stop_row
+	bsf		leftbind
+	output_16							; yxz
+	STRCAT_PRINT " "
+	; Stopped average depth
+	movff	avg_rel_pressure+0,lo
+	movff	avg_rel_pressure+1,hi
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	WIN_MEDIUM dm_custom_avr_stop_column3,dm_custom_avr_stop_row
+	output_16							; yxz
+	bcf		leftbind
+	PUTC	" "
+	clrf	WREG
+	movff	WREG,buffer+.3				; limit string length to 3
+	STRCAT_PRINT ""
+	return
 
 TFT_update_avr_stopwatch_metric:
-    ; Non-resettable average depth
-    movff   avg_rel_pressure_total+0,lo
-    movff   avg_rel_pressure_total+1,hi
-    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-    WIN_MEDIUM  dm_custom_avr_stop_column1,dm_custom_avr_stop_row
-    bsf     ignore_digit5         		; no cm
-    output_16dp  .3               		; yxz.a
-    STRCAT_PRINT " "
-    ; Stopped average depth
-    movff   avg_rel_pressure+0,lo
-    movff   avg_rel_pressure+1,hi
-    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-    WIN_MEDIUM  dm_custom_avr_stop_column3,dm_custom_avr_stop_row
-    bsf     ignore_digit5         		; no cm
-    output_16dp  .3               		; yxz.a
-    bcf     leftbind
-    bcf     ignore_digit5
-    clrf    WREG
-    movff   WREG,buffer+.4              ; limit string length to 4
-    STRCAT_PRINT ""
-    return
-
-
-    global  TFT_ceiling_mask            ; The ceiling mask
+	; Non-resettable average depth
+	movff	avg_rel_pressure_total+0,lo
+	movff	avg_rel_pressure_total+1,hi
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	WIN_MEDIUM dm_custom_avr_stop_column1,dm_custom_avr_stop_row
+	bsf		ignore_digit5				; no cm
+	output_16dp .3						; yxz.a
+	STRCAT_PRINT " "
+	; Stopped average depth
+	movff	avg_rel_pressure+0,lo
+	movff	avg_rel_pressure+1,hi
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	WIN_MEDIUM dm_custom_avr_stop_column3,dm_custom_avr_stop_row
+	bsf		ignore_digit5				; no cm
+	output_16dp .3						; yxz.a
+	bcf		leftbind
+	bcf		ignore_digit5
+	clrf	WREG
+	movff	WREG,buffer+.4				; limit string length to 4
+	STRCAT_PRINT ""
+	return
+
+
+	global	TFT_ceiling_mask			; The ceiling mask
 TFT_ceiling_mask:
-    call    TFT_divemask_color
-    WIN_TINY  dm_custom_ceiling_text_column,dm_custom_ceiling_text_row
-    STRCPY_TEXT_PRINT tCeiling
-    goto	TFT_standard_color 			; and return...
-
-    global  TFT_ceiling                 ; Ceiling
+	call	TFT_divemask_color
+	WIN_TINY	dm_custom_ceiling_text_column,dm_custom_ceiling_text_row
+	STRCPY_TEXT_PRINT tCeiling
+	goto	TFT_standard_color			; and return...
+
+	global	TFT_ceiling					; Ceiling
 TFT_ceiling:
-    WIN_MEDIUM  dm_custom_ceiling_value_column,dm_custom_ceiling_value_row
-    movff   int_O_ceiling+0,lo
-    movff   int_O_ceiling+1,hi
-	TFT_color_code	warn_ceiling		; color-code the output
-    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-    bsf     leftbind
-    TSTOSS  opt_units   				; 0=m, 1=ft
+	WIN_MEDIUM dm_custom_ceiling_value_column,dm_custom_ceiling_value_row
+	movff	int_O_ceiling+0,lo
+	movff	int_O_ceiling+1,hi
+	call	TFT_color_code_ceiling		; color-code the output
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	bsf		leftbind
+	TSTOSS	opt_units					; 0=m, 1=ft
 	bra		TFT_ceiling_metric
 ;TFT_ceiling_imperial
-    call	convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
-    output_16                       	; yxz
-    bcf     leftbind
-    STRCAT_PRINT " "
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	output_16							; yxz
+	bcf		leftbind
+	STRCAT_PRINT " "
 	goto	TFT_standard_color
 
 TFT_ceiling_metric:
-    bsf     ignore_digit5         		; no cm
-    output_16dp  .3               		; yxz.a
-    bcf     leftbind
-    bcf     ignore_digit5
-    STRCAT_PRINT " "
+	bsf	 ignore_digit5					; no cm
+	output_16dp .3						; yxz.a
+	bcf		leftbind
+	bcf		ignore_digit5
+	STRCAT_PRINT " "
 	goto	TFT_standard_color
 
 
 	global	TFT_CNS_mask
 TFT_CNS_mask:
-    call    TFT_divemask_color
-    WIN_TINY dm_custom_gf_title_col1, dm_custom_gf_title_row
-    STRCPY_TEXT_PRINT tCNSsurf
-    WIN_TINY dm_custom_gf_title_col2, dm_custom_gf_title_row
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_gf_title_col1, dm_custom_gf_title_row
+	STRCPY_TEXT_PRINT tCNSsurf
+	WIN_TINY dm_custom_gf_title_col2, dm_custom_gf_title_row
 	btfsc	FLAG_ccr_mode						; in CCR mode?
 	bra		TFT_CNS_mask_1						; YES - proceed with checking for bailout
 	btfsc	FLAG_pscr_mode						; NO  -	in pSCR mode?
-	bra		TFT_CNS_mask_1						; 		YES - proceed with checking for bailout
-	bra		TFT_CNS_mask_2						; 		NO  - must be OC then
+	bra		TFT_CNS_mask_1						;       YES - proceed with checking for bailout
+	bra		TFT_CNS_mask_2						;       NO  - must be OC then
 TFT_CNS_mask_1:									; in CCR or pSCR mode
 	btfsc	is_bailout							; in bailout?
 	bra		TFT_CNS_mask_2						; YES - print fTTS label (label will be printed, but a fTTS will actually not be calculated)
 	TSTOSS	opt_calc_asc_gasvolume				; NO  - bailout volume calculation requested?
-	bra		TFT_CNS_mask_2						;		NO  - print fTTS label
-	STRCPY_TEXT_PRINT tCNSBO					; 		YES - print bailout label
+	bra		TFT_CNS_mask_2						;       NO  - print fTTS label
+	STRCPY_TEXT_PRINT tCNSBO					;       YES - print bailout label
 	bra		TFT_CNS_mask_3
 TFT_CNS_mask_2:									; OC or bailout
 	STRCPY_TEXT_PRINT tCNSfTTS					; print fTTS label
 TFT_CNS_mask_3:
-    WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
-    STRCPY_TEXT_PRINT tCNSnow
-    goto	TFT_standard_color					; and return...
-	
+	WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
+	STRCPY_TEXT_PRINT tCNSnow
+	goto	TFT_standard_color					; and return...
+
 	global	TFT_CNS
 TFT_CNS:
 	; CNS at end of normal dive
 	WIN_STD dm_custom_hud_sensor1_column+.5,dm_custom_hud_data_row
-    movff   int_O_normal_CNS_fraction+0,lo
-	movff   int_O_normal_CNS_fraction+1,hi
-	TFT_color_code	warn_cns
-	bsf     leftbind
-    output_16_3									; output as xxx
+	movff	int_O_normal_CNS_fraction+0,lo
+	movff	int_O_normal_CNS_fraction+1,hi
+	call	TFT_color_code_cns
+	bsf		leftbind
+	output_16_3									; output as xxx
 	bcf		leftbind
-    STRCAT_PRINT "% "
+	STRCAT_PRINT "% "
 	; fTTS / Bailout CNS, if enabled
-    WIN_STD dm_custom_hud_sensor2_column+.2,dm_custom_hud_data_row
+	WIN_STD dm_custom_hud_sensor2_column+.2,dm_custom_hud_data_row
 	btfsc	is_bailout							; in bailout?
 	bra		TFT_CNS_3							; YES - show "---"
 	TSTOSS	opt_calc_asc_gasvolume				; NO  - bailout volume calculation requested?
-	bra		TFT_CNS_1							;		NO  - continue checking fTTS extra time
-	btfsc	FLAG_ccr_mode						; 		YES - in CCR mode?
-	bra		TFT_CNS_2							; 			  YES - skip test for fTTS extra time and show CNS%
-	btfsc	FLAG_pscr_mode						; 			  in pSCR mode?
-	bra		TFT_CNS_2							; 			  YES - skip test for fTTS extra time and show CNS%
+	bra		TFT_CNS_1							;       NO  - continue checking fTTS extra time
+	btfsc	FLAG_ccr_mode						;       YES - in CCR mode?
+	bra		TFT_CNS_2							;             YES - skip test for fTTS extra time and show CNS%
+	btfsc	FLAG_pscr_mode						;             in pSCR mode?
+	bra		TFT_CNS_2							;             YES - skip test for fTTS extra time and show CNS%
 TFT_CNS_1:										; not in bailout, no volume calculation
 	TSTOSS	char_I_extra_time					; fTTS extra time fTTS configured?
 	bra		TFT_CNS_3							; NO  - show "---"
 TFT_CNS_2:
-    movff   int_O_alternate_CNS_fraction+0,lo	; YES - show CNS%
-	movff   int_O_alternate_CNS_fraction+1,hi
-	TFT_color_code	warn_cns
-	bsf     leftbind
-    output_16_3	        						; output as xxx
+	movff	int_O_alternate_CNS_fraction+0,lo	; YES - show CNS%
+	movff	int_O_alternate_CNS_fraction+1,hi
+	call	TFT_color_code_cns
+	bsf		leftbind
+	output_16_3									; output as xxx
 	bcf		leftbind
-    STRCAT_PRINT "% "
+	STRCAT_PRINT "% "
 	bra		TFT_CNS_4
 TFT_CNS_3:
 	call	TFT_standard_color
-	STRCPY_PRINT "---  "	
+	STRCPY_PRINT "---  "
 TFT_CNS_4:
 	; current CNS
 	WIN_STD dm_custom_hud_sensor3_column,dm_custom_hud_data_row
-    movff   int_O_CNS_fraction+0,lo
-	movff   int_O_CNS_fraction+1,hi
-	TFT_color_code	warn_cns
-	bsf     leftbind
-    output_16_3	        						; output as xxx
+	movff	int_O_CNS_fraction+0,lo
+	movff	int_O_CNS_fraction+1,hi
+	call	TFT_color_code_cns
+	bsf		leftbind
+	output_16_3									; output as xxx
 	bcf		leftbind
-    STRCAT_PRINT "%"
-	bcf     leftbind
+	STRCAT_PRINT "%"
 	goto	TFT_standard_color					; and return...
-	
-	
-    global  TFT_hud_mask            			; The HUD mask
+
+
+	global	TFT_hud_mask						; The HUD mask
 TFT_hud_mask:
-    call    TFT_divemask_color
-    WIN_TINY dm_custom_hud_column1,dm_custom_hud_row
-    STRCPY_TEXT_PRINT tDiveHudMask1
-    WIN_TINY dm_custom_hud_column2,dm_custom_hud_row
-    STRCPY_TEXT_PRINT tDiveHudMask2
-    WIN_TINY dm_custom_hud_column3,dm_custom_hud_row
-    STRCPY_TEXT_PRINT tDiveHudMask3
-    goto	TFT_standard_color 					; and return...
-
-
-    global  TFT_update_ppo2_sensors         ; Update Sensor data
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_hud_column1,dm_custom_hud_row
+	STRCPY_TEXT_PRINT tDiveHudMask1
+	WIN_TINY dm_custom_hud_column2,dm_custom_hud_row
+	STRCPY_TEXT_PRINT tDiveHudMask2
+	WIN_TINY dm_custom_hud_column3,dm_custom_hud_row
+	STRCPY_TEXT_PRINT tDiveHudMask3
+	goto	TFT_standard_color					; and return...
+
+
+	global	TFT_update_ppo2_sensors				; Update Sensor data
 TFT_update_ppo2_sensors:
 ;
 ; Definition of the output:
 ;
-;  sensorX		 use	 voting			 o2
-; _calibrated    _O2	 _logic        _ppo2        Output        Color
-;   _ok       _sensorX	_sensorX     _sensorX
+;  sensorX       use        voting         o2
+; _calibrated    _O2       _logic        _ppo2          Output           Color
+;    _ok      _sensorX    _sensorX     _sensorX
 ;-----------------------------------------------------------------------------------------------
-;    0  		-/-		  -/-		    -/-         "----"	  	  TFT_standard_color
-;    1			 0	      -/-           = 0	 	 o2_ppo2_sensorX  TFT_attention_color
-;    1			 0    	  -/-           > 0	 	 o2_ppo2_sensorX  TFT_disabled_color
-;    1		 	 1         0            -/-      o2_ppo2_sensorX  TFT_color_code warn_ppo2_hud + win_invert
-;    1    	 	 1         1            -/-      o2_ppo2_sensorX  TFT_color_code warn_ppo2_hud
+;    0          -/-          -/-            -/-         "----"           TFT_standard_color
+;    1           0           -/-            = 0         o2_ppo2_sensorX  TFT_attention_color
+;    1           0           -/-            > 0         o2_ppo2_sensorX  TFT_disabled_color
+;    1           1            0             -/-         o2_ppo2_sensorX  TFT_color_code_ppo2_hud + win_invert
+;    1           1            1             -/-         o2_ppo2_sensorX  TFT_color_code_ppo2_hud
 ;
-    bsf     leftbind
+	bsf		leftbind
 	; sensor 1
-    btfsc   sensor1_calibrated_ok		; valid calibration?
-    bra     TFT_update_hud1b     		; yes
+	btfsc	sensor1_calibrated_ok		; valid calibration?
+	bra	TFT_update_hud1b				; yes
 	; no valid calibration
 	WIN_STD dm_custom_hud_sensor1_column+.7, dm_custom_hud_data_row+.5
 	call	TFT_standard_color
-    STRCPY_PRINT "---"
-    bra     TFT_update_hud2a 			; continue with sensor 2
+	STRCPY_PRINT "---"
+	bra		TFT_update_hud2a			; continue with sensor 2
 TFT_update_hud1b:
 	; sensor has a valid calibration
 	WIN_MEDIUM dm_custom_hud_sensor1_column,dm_custom_hud_data_row
-    movff   o2_ppo2_sensor1,lo			; load ppO2 value into transfer storage for output
-    clrf    hi							; 
+	movff	o2_ppo2_sensor1,lo			; load ppO2 value into transfer storage for output
+	clrf	hi							; 
 	btfsc	use_O2_sensor1				; in use?
 	bra		TFT_update_hud1d			; yes
 	; valid calibration, but not in use
 	tstfsz	o2_ppo2_sensor1				; sensor value = 0?
 	bra		TFT_update_hud1c			; no
 	; valid calibration, not in use and value = 0
-	call    TFT_attention_color          ; output in yellow
+	call	TFT_attention_color			; output in yellow
 	bra		TFT_update_hud1e
 TFT_update_hud1c:
 	; sensor has valid calibration, is not in use and has a value > 0
-	call    TFT_disabled_color			; output in light blue
+	call	TFT_disabled_color			; output in light blue
 	bra		TFT_update_hud1e
 TFT_update_hud1d:
 	; sensor has valid calibration and is in use
-	TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
+	call	TFT_color_code_ppo2_hud		; With ppO2 [cbar] in lo
 	btfsc	voting_logic_sensor1		; sensor value agrees with other sensor's values?
 	bra		TFT_update_hud1e			; yes
 	; valid calibration, in use, but value does not agree with other sensors
-	bsf     win_invert                  ; invert output
-TFT_update_hud1e:						
+	bsf		win_invert					; invert output
+TFT_update_hud1e:
 	; all coloring is set up now, let's write the value to the display!
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
-    bcf		win_invert
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
+	bcf		win_invert
 
 TFT_update_hud2a:						; sensor 2
-    btfsc   sensor2_calibrated_ok		; valid calibration?
-    bra     TFT_update_hud2b     		; yes
+	btfsc	sensor2_calibrated_ok		; valid calibration?
+	bra		TFT_update_hud2b			; yes
 	; no valid calibration
 	WIN_STD dm_custom_hud_sensor2_column+.7, dm_custom_hud_data_row+.5
 	call	TFT_standard_color
-    STRCPY_PRINT "---"
-    bra     TFT_update_hud3a 			; continue with sensor 3
+	STRCPY_PRINT "---"
+	bra		TFT_update_hud3a			; continue with sensor 3
 TFT_update_hud2b:
 	; sensor has a valid calibration
 	WIN_MEDIUM dm_custom_hud_sensor2_column,dm_custom_hud_data_row
-    movff   o2_ppo2_sensor2,lo			; load ppO2 value into transfer storage for output
-    clrf    hi							; 
+	movff	o2_ppo2_sensor2,lo			; load ppO2 value into transfer storage for output
+	clrf	hi							; 
 	btfsc	use_O2_sensor2				; in use?
 	bra		TFT_update_hud2d			; yes
 	; valid calibration, but not in use
 	tstfsz	o2_ppo2_sensor2				; sensor value = 0?
 	bra		TFT_update_hud2c			; no
 	; valid calibration, not in use and value = 0
-	call    TFT_attention_color          ; output in yellow
+	call	TFT_attention_color			; output in yellow
 	bra		TFT_update_hud2e
 TFT_update_hud2c:
 	; sensor has valid calibration, is not in use and has a value > 0
-	call    TFT_disabled_color			; output in light blue
+	call	TFT_disabled_color			; output in light blue
 	bra		TFT_update_hud2e
 TFT_update_hud2d:
 	; sensor has valid calibration and is in use
-	TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
+	call	TFT_color_code_ppo2_hud		; With ppO2 [cbar] in lo
 	btfsc	voting_logic_sensor2		; sensor value agrees with other sensor's vlaues?
 	bra		TFT_update_hud2e			; yes
 	; valid calibration, in use, but value does not agree with other sensors
-	bsf     win_invert                  ; invert output
-TFT_update_hud2e:						
+	bsf		win_invert					; invert output
+TFT_update_hud2e:
 	; all coloring is set up now, let's write the value to the display!
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
-    bcf		win_invert
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
+	bcf		win_invert
 
 TFT_update_hud3a:						; sensor 3
-    btfsc   sensor3_calibrated_ok		; valid calibration?
-    bra     TFT_update_hud3b     		; yes
+	btfsc	sensor3_calibrated_ok		; valid calibration?
+	bra		TFT_update_hud3b			; yes
 	; no valid calibration
-    WIN_STD dm_custom_hud_sensor3_column+.7, dm_custom_hud_data_row+.5
+	WIN_STD dm_custom_hud_sensor3_column+.7, dm_custom_hud_data_row+.5
 	call	TFT_standard_color
-    STRCPY_PRINT "---"
-    bra     TFT_update_hud4 			; done
+	STRCPY_PRINT "---"
+	bra		TFT_update_hud4				; done
 TFT_update_hud3b:
 	; sensor has a valid calibration
 	WIN_MEDIUM dm_custom_hud_sensor3_column,dm_custom_hud_data_row
-    movff   o2_ppo2_sensor3,lo			; load ppO2 value into transfer storage for output
-    clrf    hi							; 
+	movff	o2_ppo2_sensor3,lo			; load ppO2 value into transfer storage for output
+	clrf	hi							; 
 	btfsc	use_O2_sensor3				; in use?
 	bra		TFT_update_hud3d			; yes
 	; valid calibration, but not in use
 	tstfsz	o2_ppo2_sensor3				; sensor value = 0?
 	bra		TFT_update_hud3c			; no
 	; valid calibration, not in use and value = 0
-	call    TFT_attention_color          ; output in yellow
+	call	TFT_attention_color			; output in yellow
 	bra		TFT_update_hud3e
 TFT_update_hud3c:
 	; sensor has valid calibration, is not in use and has a value > 0
-	call    TFT_disabled_color			; output in light blue
+	call	TFT_disabled_color			; output in light blue
 	bra		TFT_update_hud3e
 TFT_update_hud3d:
 	; sensor has valid calibration and is in use
-	TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
+	call	TFT_color_code_ppo2_hud		; With ppO2 [cbar] in lo
 	btfsc	voting_logic_sensor3		; sensor value agrees with other sensor's vlaues?
 	bra		TFT_update_hud3e			; yes
 	; valid calibration, in use, but value does not agree with other sensors
-	bsf     win_invert                  ; invert output
-TFT_update_hud3e:						
+	bsf		win_invert					; invert output
+TFT_update_hud3e:
 	; all coloring is set up now, let's write the value to the display!
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
-    bcf		win_invert	
-	
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
+	bcf		win_invert
+
 TFT_update_hud4:						; closure
-    bcf     leftbind
-    goto	TFT_standard_color  		; and return...
-
-
-    global  TFT_surface_sensor			; Update Sensor data in surface mode
+	bcf		leftbind
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_surface_sensor			; Update Sensor data in surface mode
 TFT_surface_sensor:
-    movf    hardware_flag,W
-    sublw   0x11						; 2 with BLE
-    btfsc   STATUS,Z
-    return								; Ignore for 0x11
-    ; show three sensors
-    bsf     leftbind
-    WIN_SMALL surf_hud_sensor1_column,surf_hud_sensor1_row
+	movf	hardware_flag,W
+	sublw	0x11						; 2 with BLE
+	btfsc	STATUS,Z
+	return								; Ignore for 0x11
+	; show three sensors
+	bsf		leftbind
+	WIN_SMALL surf_hud_sensor1_column,surf_hud_sensor1_row
 	btfsc	sensor1_calibrated_ok
-    bra     TFT_surface_sensor1 		; Yes
-   	call	TFT_standard_color
-    STRCPY_PRINT "--- "
-    bra     TFT_surface_sensor2			; Skip Sensor 1
+	bra		TFT_surface_sensor1			; Yes
+	call	TFT_standard_color
+	STRCPY_PRINT "--- "
+	bra		TFT_surface_sensor2			; Skip Sensor 1
 TFT_surface_sensor1:
-    movff   o2_ppo2_sensor1,lo
-    TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
-    clrf    hi
+	movff	o2_ppo2_sensor1,lo
+	call	TFT_color_code_ppo2_hud		; With ppO2 [cbar] in lo
+	clrf	hi
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
 TFT_surface_sensor2:
-    WIN_SMALL surf_hud_sensor2_column,surf_hud_sensor2_row
+	WIN_SMALL surf_hud_sensor2_column,surf_hud_sensor2_row
 	btfsc	sensor2_calibrated_ok
-    bra     TFT_surface_sensor3			; Yes
-   	call	TFT_standard_color
-    STRCPY_PRINT "--- "
-    bra     TFT_surface_sensor4			; Skip Sensor 2
+	bra		TFT_surface_sensor3			; Yes
+	call	TFT_standard_color
+	STRCPY_PRINT "--- "
+	bra		TFT_surface_sensor4			; Skip Sensor 2
 TFT_surface_sensor3:
-    movff   o2_ppo2_sensor2,lo
-    TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
-    clrf    hi
+	movff	o2_ppo2_sensor2,lo
+	call	TFT_color_code_ppo2_hud		; With ppO2 [cbar] in lo
+	clrf	hi
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
 TFT_surface_sensor4:
-    WIN_SMALL surf_hud_sensor3_column,surf_hud_sensor3_row
+	WIN_SMALL surf_hud_sensor3_column,surf_hud_sensor3_row
 	btfsc	sensor3_calibrated_ok
-    bra     TFT_surface_sensor5 		; Yes
-   	call	TFT_standard_color
-    STRCPY_PRINT "--- "
-    bra     TFT_surface_sensor6 		; Skip Sensor 3
+	bra	TFT_surface_sensor5				; Yes
+	call	TFT_standard_color
+	STRCPY_PRINT "--- "
+	bra		TFT_surface_sensor6			; Skip Sensor 3
 TFT_surface_sensor5:
-    movff   o2_ppo2_sensor3,lo
-    TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
-    clrf    hi
+	movff	o2_ppo2_sensor3,lo
+	call	TFT_color_code_ppo2_hud		; With ppO2 [cbar] in lo
+	clrf	hi
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
 TFT_surface_sensor6:
-    bcf     leftbind
-    goto    TFT_standard_color; and return...
-
-
-    global TFT_sensor_mV 
+	bcf		leftbind
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_sensor_mV 
 TFT_sensor_mV: 
-    call    TFT_standard_color 
-    bsf	    leftbind
-    WIN_SMALL surf_mV_sensor_column,surf_mV_sensor1_row 
-    movff   o2_mv_sensor1+0,lo 			; in 0.1mV steps 
-    movff   o2_mv_sensor1+1,hi 			; in 0.1mV steps 
-    STRCAT  "1: " 
-    output_16dp .4						; xxx.y mV 
-    STRCAT_PRINT "mV "
-    
-    WIN_SMALL surf_mV_sensor_column,surf_mV_sensor2_row 
-    movff   o2_mv_sensor2+0,lo 			; in 0.1mV steps
-    movff   o2_mv_sensor2+1,hi 			; in 0.1mV steps 
-    STRCAT  "2: " 
-    output_16dp .4 						; xxx.y mV 
-    STRCAT_PRINT "mV "
-
-    WIN_SMALL surf_mV_sensor_column,surf_mV_sensor3_row 
-    movff   o2_mv_sensor3+0,lo 			; in 0.1mV steps 
-    movff   o2_mv_sensor3+1,hi 			; in 0.1mV steps 
-    STRCAT "3: " 
-    output_16dp .4 						; xxx.y mV 
-    STRCAT_PRINT "mV "
-    bcf	    leftbind 
-    goto    TFT_standard_color 			; and return...
-
-
-    global TFT_sensor_surface_warning
+	call	TFT_standard_color 
+	bsf		leftbind
+	WIN_SMALL surf_mV_sensor_column,surf_mV_sensor1_row
+	movff	o2_mv_sensor1+0,lo			; in 0.1mV steps
+	movff	o2_mv_sensor1+1,hi			; in 0.1mV steps
+	STRCAT	"1: "
+	output_16dp .4						; xxx.y mV 
+	STRCAT_PRINT "mV "
+	
+	WIN_SMALL surf_mV_sensor_column,surf_mV_sensor2_row
+	movff	o2_mv_sensor2+0,lo			; in 0.1mV steps
+	movff	o2_mv_sensor2+1,hi			; in 0.1mV steps
+	STRCAT	"2: "
+	output_16dp .4						; xxx.y mV 
+	STRCAT_PRINT "mV "
+
+	WIN_SMALL surf_mV_sensor_column,surf_mV_sensor3_row
+	movff	o2_mv_sensor3+0,lo			; in 0.1mV steps
+	movff	o2_mv_sensor3+1,hi			; in 0.1mV steps
+	STRCAT	"3: "
+	output_16dp .4						; xxx.y mV
+	STRCAT_PRINT "mV "
+	bcf		leftbind 
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_sensor_surface_warning
 TFT_sensor_surface_warning: 
-    call    TFT_warnings_color
+	call	TFT_warnings_color
 	btfss	sensor1_calibrated_ok		; do not show end of lifetime arrow if sensor failed calibration at all
 	bra		TFT_sensor_mV2
-    movff   opt_x_s1+1,lo				; into bank1
-    movf    lo,W						; when opt_x_s1 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
-    bz	    TFT_sensor_mV2				; the sensor is not too bad yet for a warning 
-    WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor1_row-.5 
-    STRCPY_PRINT    "\xb8"				; mark sensor as being at end of lifetime 
+	movff	opt_x_s1+1,lo				; into bank1
+	movf	lo,W						; when opt_x_s1 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
+	bz		TFT_sensor_mV2				; the sensor is not too bad yet for a warning 
+	WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor1_row-.5 
+	STRCPY_PRINT "\xb8"					; mark sensor as being at end of lifetime
 TFT_sensor_mV2:
 	btfss	sensor2_calibrated_ok		; do not show end of lifetime arrow if sensor failed calibration at all
 	bra		TFT_sensor_mV3
-    movff   opt_x_s2+1,lo				; into bank1
-    movf    lo,W						; when opt_x_s2 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
-    bz	    TFT_sensor_mV3				; the sensor is not too bad yet for a warning 
-    WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor2_row-.5 
-    STRCPY_PRINT    "\xb8"	 			; mark sensor as being at end of lifetime 
+	movff	opt_x_s2+1,lo				; into bank1
+	movf	lo,W						; when opt_x_s2 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
+	bz		TFT_sensor_mV3				; the sensor is not too bad yet for a warning 
+	WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor2_row-.5 
+	STRCPY_PRINT "\xb8"					; mark sensor as being at end of lifetime 
 TFT_sensor_mV3:
 	btfss	sensor3_calibrated_ok		; do not show end of lifetime arrow if sensor failed calibration at all
 	bra		TFT_sensor_mV4
-    movff   opt_x_s3+1,lo				; into bank1
-    movf    lo,W						; when opt_x_s3 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
-    bz	    TFT_sensor_mV4				; the sensor is not too bad yet for a warning 
-    WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor3_row-.5
-    STRCPY_PRINT    "\xb8"				; mark sensor as beeing at end of lifetime 
+	movff	opt_x_s3+1,lo				; into bank1
+	movf	lo,W						; when opt_x_s3 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
+	bz		TFT_sensor_mV4				; the sensor is not too bad yet for a warning 
+	WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor3_row-.5
+	STRCPY_PRINT "\xb8"					; mark sensor as being at end of lifetime 
 TFT_sensor_mV4:
-    goto    TFT_standard_color 			; ...and return
-
-
-    global  TFT_menu_calibrate
-TFT_menu_calibrate:     				; update mV data in calibration menu
-	btfss   s8_digital					; =1: Digital I/O
-	bra     TFT_menu_calibrate_analog	; use analog
-	btfss   new_s8_data_available       ; New data frame recieved?
-	bra	TFT_menu_calibrate_common   ; No, use old values...
-	; Yes. Update the values
+	goto	TFT_standard_color			; ...and return
+
+
+	global	TFT_menu_calibrate
+TFT_menu_calibrate:						; update mV data in calibration menu
+	btfss	s8_digital					; =1: Digital I/O
+	bra		TFT_menu_calibrate_analog	; use analog
+	btfss	new_s8_data_available		; new data frame received?
+	bra		TFT_menu_calibrate_common	; NO - use old values...
+	; YES - update the values
 	call	compute_mvolts_for_all_sensors
-	bra	TFT_menu_calibrate_common
+	bra		TFT_menu_calibrate_common
 TFT_menu_calibrate_analog:
-	call    get_analog_inputs
+	call	get_analog_inputs
 TFT_menu_calibrate_common:
-    call    TFT_attention_color         ; show in yellow
-    bsf     leftbind
-    WIN_SMALL   surf_menu_sensor1_column,surf_menu2_sensor1_row
-    movff   o2_mv_sensor1+0,lo      	; in 0.1mV steps
-    movff   o2_mv_sensor1+1,hi      	; in 0.1mV steps
-    output_16dp  .4         			; xxx.y mV
-    STRCAT_PRINT "mV  "
-    WIN_SMALL   surf_menu_sensor2_column,surf_menu2_sensor2_row
-    movff   o2_mv_sensor2+0,lo      	; in 0.1mV steps
-    movff   o2_mv_sensor2+1,hi      	; in 0.1mV steps
-    output_16dp  .4         			; xxx.y mV
-    STRCAT_PRINT "mV  "
-    WIN_SMALL   surf_menu_sensor3_column,surf_menu2_sensor3_row
-    movff   o2_mv_sensor3+0,lo      	; in 0.1mV steps
-    movff   o2_mv_sensor3+1,hi      	; in 0.1mV steps
-    output_16dp  .4         			; xxx.y mV
-    STRCAT_PRINT "mV  "
-    bcf	    leftbind
-    goto	TFT_standard_color			; ...and return
-
-
-    global	TFT_clock
+	call	TFT_attention_color			; show in yellow
+	bsf		leftbind
+	WIN_SMALL	surf_menu_sensor1_column,surf_menu2_sensor1_row
+	movff	o2_mv_sensor1+0,lo			; in 0.1mV steps
+	movff	o2_mv_sensor1+1,hi			; in 0.1mV steps
+	output_16dp .4						; xxx.y mV
+	STRCAT_PRINT "mV  "
+	WIN_SMALL	surf_menu_sensor2_column,surf_menu2_sensor2_row
+	movff	o2_mv_sensor2+0,lo			; in 0.1mV steps
+	movff	o2_mv_sensor2+1,hi			; in 0.1mV steps
+	output_16dp .4						; xxx.y mV
+	STRCAT_PRINT "mV  "
+	WIN_SMALL	surf_menu_sensor3_column,surf_menu2_sensor3_row
+	movff	o2_mv_sensor3+0,lo			; in 0.1mV steps
+	movff	o2_mv_sensor3+1,hi			; in 0.1mV steps
+	output_16dp .4						; xxx.y mV
+	STRCAT_PRINT "mV  "
+	bcf		leftbind
+	goto	TFT_standard_color			; ...and return
+
+
+	global	TFT_clock
 TFT_clock:
-	WIN_SMALL  surf_clock_column,surf_clock_row
-TFT_clock2:                         ; called from divemode clock
-   	call	TFT_standard_color
+	WIN_SMALL surf_clock_column,surf_clock_row
+TFT_clock2:								; called from divemode clock
+	call	TFT_standard_color
 	movff	hours,lo
 	output_99
 	movlw	':'
-	btfss	secs,0					; blinking every second
+	btfss	secs,0						; blinking every second
 	movlw	' '
 	movwf	POSTINC2
 	movff	mins,lo
@@ -1671,9 +1680,9 @@
 
 	global	TFT_show_time_date_menu
 TFT_show_time_date_menu:
-    call    speed_fastest
-	WIN_SMALL  .15,.30
-   	call	TFT_standard_color
+	call	speed_fastest
+	WIN_SMALL .15,.30
+	call	TFT_standard_color
 	movff	hours,lo
 	output_99
 	PUTC	':'
@@ -1682,178 +1691,178 @@
 	PUTC	':'
 	movff	secs,lo
 	output_99x
-	STRCAT  " - "
-	movff	month,convert_value_temp+0
-	movff	day,convert_value_temp+1
-	movff	year,convert_value_temp+2
-	call	TFT_convert_date		; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2	
+	STRCAT	" - "
+	movff	day,lo
+	movff	month,hi
+	movff	year,up
+	call	TFT_convert_date			; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
 	STRCAT_PRINT " "
 	return
 
 ;=============================================================================
 
-    global  TFT_surface_decosettings    ; Show all deco settings
+	global	TFT_surface_decosettings	; Show all deco settings
 TFT_surface_decosettings:
 	; Deco Mode
 	call	TFT_standard_color
 	WIN_SMALL surf_gaslist_column,surf_gaslist_row
-	STRCAT_PRINT  "ZH-L16"
-    movff   char_I_deco_model,WREG
-    iorwf   WREG
-    bnz     TFT_surface_decosettings1
+	STRCAT_PRINT "ZH-L16"
+	movff	char_I_deco_model,WREG
+	iorwf	WREG
+	bnz		TFT_surface_decosettings1
 	; Display ZH-L16 sat/desat model
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
-    lfsr    FSR2,buffer
-    movff   char_I_desaturation_multiplier,lo
-    bsf     leftbind
-    output_8
-    STRCAT  "%/"
-    movff   char_I_saturation_multiplier,lo
-    output_8
-    STRCAT_PRINT  "%"
-    bra     TFT_surface_decosettings2
-   ; Display ZH-L16-GF low/high model
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
+	lfsr	FSR2,buffer
+	movff	char_I_desaturation_multiplier,lo
+	bsf		leftbind
+	output_8
+	STRCAT	"%/"
+	movff	char_I_saturation_multiplier,lo
+	output_8
+	STRCAT_PRINT "%"
+	bra		TFT_surface_decosettings2
+	; Display ZH-L16-GF low/high model
 TFT_surface_decosettings1:
-    TEXT_SMALL  surf_gaslist_column+.43,surf_gaslist_row,tZHL16GF
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
-    STRCPY_TEXT tGF  															; GF:
+	TEXT_SMALL surf_gaslist_column+.43,surf_gaslist_row,tZHL16GF
+	WIN_SMALL  surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
+	STRCPY_TEXT	tGF						; GF:
 	movff	opt_GF_low,lo
-    output_99x
-    STRCAT  "/"
+	output_99x
+	STRCAT	"/"
 	movff	opt_GF_high,lo
-    output_99x
-    STRCAT_PRINT  ""
-TFT_surface_decosettings2:														; fTTS
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)
-    STRCPY_TEXT tFTTSMenu
-    movff   char_I_extra_time,lo
-    bsf     leftbind
-    output_8
-    STRCAT_TEXT_PRINT   tMinutes
-    ; Last Stop
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)
-    STRCPY_TEXT tLastDecostop
+	output_99x
+	STRCAT_PRINT ""
+TFT_surface_decosettings2:				; fTTS
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)
+	STRCPY_TEXT tFTTSMenu
+	movff	char_I_extra_time,lo
+	bsf		leftbind
+	output_8
+	STRCAT_TEXT_PRINT tMinutes
+	; Last Stop
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)
+	STRCPY_TEXT tLastDecostop
 	movff	opt_last_stop,lo
-    output_8
-    STRCAT_TEXT_PRINT   tMeters
-    ; Salinity
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4)
-    STRCPY_TEXT tDvSalinity
-    movff   opt_salinity,lo
-    output_8
-    bcf     leftbind
-    STRCAT_TEXT_PRINT   tPercent
-    return
+	output_8
+	STRCAT_TEXT_PRINT tMeters
+	; Salinity
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4)
+	STRCPY_TEXT tDvSalinity
+	movff	opt_salinity,lo
+	output_8
+	bcf		leftbind
+	STRCAT_TEXT_PRINT tPercent
+	return
 
 	global	TFT_debug_output
 TFT_debug_output:
-    return
-    WIN_TINY   .80,.0
-    call	TFT_standard_color
-    lfsr	FSR2,buffer
-    movff   analog_sw1,lo
-    output_8
-    PUTC    ","
-    movff   analog_sw2,lo
-    output_8
-    STRCAT_PRINT ""
-    return
-
-    global  TFT_divetimeout             ; Show timeout counter
+	return
+	WIN_TINY .80,.0
+	call	TFT_standard_color
+	lfsr	FSR2,buffer
+	movff	analog_sw1,lo
+	output_8
+	PUTC	","
+	movff	analog_sw2,lo
+	output_8
+	STRCAT_PRINT ""
+	return
+
+	global	TFT_divetimeout				; Show timeout counter
 TFT_divetimeout:
 	call	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    call	TFT_standard_color
-    STRCPY  0x94                        ; "End of dive" icon
-    movff	opt_diveTimeout,WREG	    ; in [min]
-    mullw	.60
-    movff	PRODL,sub_a+0
-    movff	PRODH,sub_a+1		    	; in [s]
-    movff   timeout_counter,sub_b+0
-    movff   timeout_counter2,sub_b+1
-    call    subU16  					;  sub_c = sub_a - sub_b (with UNSIGNED values)
-	movff	sub_c+0, lo
-	movff	sub_c+1, hi
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
+	call	TFT_standard_color
+	STRCPY	0x94						; "End of dive" icon
+	movff	opt_diveTimeout,WREG		; in [min]
+	mullw	.60
+	movff	PRODL,sub_a+0
+	movff	PRODH,sub_a+1				; in [s]
+	movff	timeout_counter1+0,sub_b+0
+	movff	timeout_counter1+1,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b (with UNSIGNED values)
+	movff	sub_c+0,lo
+	movff	sub_c+1,hi
 	call	convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
 	movf	hi,W
 	movff	lo,hi
 	movwf	lo							; exchange lo and hi
 	output_99x
-	PUTC    ':'
+	PUTC	':'
 	movff	hi,lo
 	output_99x
-    movlw   dm_warning_length         	; Divemode string length
-    call    TFT_fillup_with_spaces     	; Fillup FSR2 with spaces (Total string length in #WREG)
+	movlw	dm_warning_length			; Divemode string length
+	call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
-    bcf     win_invert
+	bcf		win_invert
 	return
 
 	global	TFT_display_ftts
 TFT_display_ftts:
-    movff   char_I_extra_time,lo
-    tstfsz  lo
-    bra     TFT_display_ftts_a
-    return                              	; char_I_extra_time=0, return.
+	movff	char_I_extra_time,lo
+	tstfsz	lo
+	bra		TFT_display_ftts_a
+	return								; char_I_extra_time=0, return.
 TFT_display_ftts_a:
-    movff   int_O_alternate_ascenttime+0,WREG
-    movff   int_O_alternate_ascenttime+1,hi
-    iorwf   hi,W                    		; int_O_alternate_ascenttime:2 == 0 ?
-    bnz     TFT_display_ftts_b
-    return  								; No deco, do nothing
+	movff	int_O_alternate_ascenttime+0,WREG
+	movff	int_O_alternate_ascenttime+1,hi
+	iorwf	hi,W						; int_O_alternate_ascenttime:2 == 0 ?
+	bnz		TFT_display_ftts_b
+	return								; No deco, do nothing
 TFT_display_ftts_b:
-	btfsc	is_bailout						; check if we are in bailout mode
-	return									; YES - in bailout no fTTS will be computed, so nothing to display
-	incf    warning_counter,F				; increase counter
-	call    TFT_warning_set_window			; sets the row and column for the current warning
-	tstfsz  WREG                        	; is there room for the warning?
-	return                              	; NO
- 	btfsc	FLAG_ccr_mode					; in CCR mode?
-	bra		TFT_display_ftts_1				; YES - print fTTS label
-	btfsc	FLAG_pscr_mode					; NO  -	in pSCR mode?
-	bra		TFT_display_ftts_1				; 		YES	- print fTTS label
-	bra		TFT_display_ftts_2				; 		NO  - must be OC then
-TFT_display_ftts_1:							; in CCR or pSCR mode
-	btfsc	is_bailout						; in bailout?
-	bra		TFT_display_ftts_2				; YES - print fTTS label
-	TSTOSS	opt_calc_asc_gasvolume			; NO  - bailout volume calculation requested?
-	bra		TFT_display_ftts_2				;		NO  - print fTTS label
-	STRCPY	"B/O"							; 		YES - print bailout label
+	btfsc	is_bailout					; check if we are in bailout mode
+	return								; YES - in bailout no fTTS will be computed, so nothing to display
+	incf	warning_counter,F			; increase counter
+	call	TFT_warning_set_window		; sets the row and column for the current warning
+	tstfsz	WREG						; is there room for the warning?
+	return								; NO
+	btfsc	FLAG_ccr_mode				; in CCR mode?
+	bra		TFT_display_ftts_1			; YES - print fTTS label
+	btfsc	FLAG_pscr_mode				; NO  - in pSCR mode?
+	bra		TFT_display_ftts_1			;       YES - print fTTS label
+	bra		TFT_display_ftts_2			;       NO  - must be OC then
+TFT_display_ftts_1:						; in CCR or pSCR mode
+	btfsc	is_bailout					; in bailout?
+	bra		TFT_display_ftts_2			; YES - print fTTS label
+	TSTOSS	opt_calc_asc_gasvolume		; NO  - bailout volume calculation requested?
+	bra		TFT_display_ftts_2			;       NO  - print fTTS label
+	STRCPY	"B/O"						;       YES - print bailout label
 	bra		TFT_display_ftts_3
-TFT_display_ftts_2:							; OC or bailout
-	STRCPY	"@+"							; print fTTS label
+TFT_display_ftts_2:						; OC or bailout
+	STRCPY	"@+"						; print fTTS label
 TFT_display_ftts_3:
-	movff   char_I_extra_time,lo
-    bsf     leftbind
-    output_8
-    PUTC    ":"
-	movff   int_O_alternate_ascenttime+0,lo
-	movff   int_O_alternate_ascenttime+1,hi
+	movff	char_I_extra_time,lo
+	bsf		leftbind
+	output_8
+	PUTC	":"
+	movff	int_O_alternate_ascenttime+0,lo
+	movff	int_O_alternate_ascenttime+1,hi
 	btfss	hi,int_invalid_flag				; is the invalid flag set?
 	bra		TFT_display_ftts1				; NO
 	bcf		hi,int_invalid_flag				; YES - clear flag
-	call	TFT_disabled_color				; 		switch to disabled color
+	call	TFT_disabled_color				;       switch to disabled color
 TFT_display_ftts1:
-	movf    lo,W
-	iorwf   hi,W                    		; extra_ascenttime == 0 ?
-	bz      TFT_display_ftts2   			; YES - show dashes
+	movf	lo,W
+	iorwf	hi,W							; extra_ascenttime == 0 ?
+	bz		TFT_display_ftts2				; YES - show dashes
 	btfsc	hi,int_not_yet_computed			; is the not-computed-yet flag set?
 	bra		TFT_display_ftts2				; YES
 	output_16								; NO
 	bcf		leftbind
-    PUTC    "'"
-    movlw   dm_warning_length				; Divemode string length
-    call    TFT_fillup_with_spaces			; Fillup FSR2 with spaces (Total string length in #WREG)
+	PUTC	"'"
+	movlw	dm_warning_length				; Divemode string length
+	call	TFT_fillup_with_spaces			; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
-    bcf     win_invert
+	bcf		win_invert
 	goto	TFT_standard_color				; ...and return
 TFT_display_ftts2:
-    STRCAT  "---"
-	bcf     leftbind
-    movlw   dm_warning_length				; Divemode string length
-    call    TFT_fillup_with_spaces 			; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""
-    bcf     win_invert
+	STRCAT	"---"
+	bcf		leftbind
+	movlw	dm_warning_length				; Divemode string length
+	call	TFT_fillup_with_spaces			; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	bcf		win_invert
 	goto	TFT_standard_color				; ...and return
 
 
@@ -1861,31 +1870,32 @@
 
 	global	TFT_temp_surfmode
 TFT_temp_surfmode:
-    call    TFT_divemask_color
-	WIN_SMALL   surf_temp_column+3*8,surf_temp_row
-    TSTOSS  opt_units   					; 0=°C, 1=°F
+	call	TFT_divemask_color
+	WIN_SMALL surf_temp_column+3*8,surf_temp_row
+	TSTOSS	opt_units						; 0=°C, 1=°F
 	bra		TFT_temp_surfmode_metric
-	STRCAT_TEXT	tLogTunitF					; °F
+	STRCAT_TEXT tLogTunitF					; °F
 	bra		TFT_temp_surfmode_common
 TFT_temp_surfmode_metric:
-	STRCAT_TEXT	tLogTunitC					; °C
+	STRCAT_TEXT tLogTunitC					; °C
 TFT_temp_surfmode_common:
 	STRCAT_PRINT ""
-	WIN_SMALL   surf_temp_column,surf_temp_row
+	WIN_SMALL surf_temp_column,surf_temp_row
 	bra		TFT_temp_common
-	
+
+
 	global	TFT_temp_divemode
 TFT_temp_divemode:
-    bcf	    FLAG_TFT_temp_divemode
-    btfsc   divemode_menu					; Is the dive mode menu shown?
-    return									; Yes, no update of temperature now
+	bcf		FLAG_TFT_temp_divemode
+	btfsc	divemode_menu					; Is the dive mode menu shown?
+	return									; Yes, no update of temperature now
 	btfsc	blinking_better_gas				; blinking better Gas?
 	return									; Yes, no update of temperature now
 	WIN_SMALL	dm_temp_column,dm_temp_row
 TFT_temp_common:
-	call    TFT_standard_color
+	call	TFT_standard_color
 	SAFE_2BYTE_COPY temperature,lo			; get current temperature
-	TSTOSS  opt_units						; 0=°C, 1=°F
+	TSTOSS	opt_units						; 0=°C, 1=°F
 	bra		TFT_temp_common_1
 	call	convert_celsius_to_fahrenheit	; convert value in lo:hi from celsius to fahrenheit
 TFT_temp_common_1:
@@ -1893,7 +1903,7 @@
 	btfsc	neg_flag						; is the temperature negative?
 	bra		TFT_temp_common_2				; YES - the minus sign has already been written
 	; temp is positive, is it less then 10°C? 
-	tstfsz  hi
+	tstfsz	hi
 	bra		TFT_temp_common_1a				; >25.5°C, skip here
 	movlw	.100
 	cpfslt	lo
@@ -1908,8 +1918,8 @@
 	bsf		ignore_digit5					; ignore decimal
 	output_16_3								; output 0-999 without decimal -> writes ' ' - 99
 	bcf		ignore_digit5
-	movff    buffer+2,lo					; get output from unit position
-	movlw    " "							; load code of the space character
+	movff	buffer+2,lo						; get output from unit position
+	movlw	" "								; load code of the space character
 	cpfseq	lo								; is there a space sign on the unit position? (happens between +1 and -1)
 	bra		TFT_temp_common_3				; NO
 	movff	WREG,buffer+0					; YES - replace potential minus sign with a space (temps from -0.9° to -0.1° else would appear as '- 0')
@@ -1923,125 +1933,125 @@
 	STRCAT_TEXT tLogTunitF					; append °F
 	bra		TFT_temp_common_5
 TFT_temp_common_4:
-	STRCAT_TEXT tLogTunitC					; append °C   
+	STRCAT_TEXT tLogTunitC					; append °C
 TFT_temp_common_5:
 	STRCAT_PRINT ""							; output to screen
-	return                
-	
+	return
+
 ;=============================================================================
 
-    global  TFT_divemode_menu_cursor
+	global	TFT_divemode_menu_cursor
 TFT_divemode_menu_cursor:
-    WIN_BOX_BLACK   dm_menu_row+.1, dm_menu_lower-.1, dm_menu_item1_column-.8, dm_menu_item1_column-.1
-    WIN_BOX_BLACK   dm_menu_row+.1, dm_menu_lower-.1, dm_menu_item4_column-.8, dm_menu_item4_column-.1
-    call	TFT_standard_color
-
-    movlw   dm_menu_item1_column-.8
-    btfsc   menupos,2       			; >3?
-    movlw   dm_menu_item4_column-.8  	; Yes
-    movff   WREG,win_leftx2
-    
-    movff   menupos,lo					; Copy menu pos
-    movlw   dm_menu_item6_row
-    dcfsnz  lo,F
-    movlw   dm_menu_item1_row
-    dcfsnz  lo,F
-    movlw   dm_menu_item2_row
-    dcfsnz  lo,F
-    movlw   dm_menu_item3_row
-    dcfsnz  lo,F
-    movlw   dm_menu_item4_row
-    dcfsnz  lo,F
-    movlw   dm_menu_item5_row
-    movff   WREG,win_top
-    movlw   FT_SMALL
-    movff   WREG,win_font
-    STRCPY_PRINT    "\xb7"          	; print cursor
-    return
+	WIN_BOX_BLACK dm_menu_row+.1, dm_menu_lower-.1, dm_menu_item1_column-.8, dm_menu_item1_column-.1
+	WIN_BOX_BLACK dm_menu_row+.1, dm_menu_lower-.1, dm_menu_item4_column-.8, dm_menu_item4_column-.1
+	call	TFT_standard_color
+
+	movlw	dm_menu_item1_column-.8
+	btfsc	menupos1,2					; >3?
+	movlw	dm_menu_item4_column-.8		; Yes
+	movff	WREG,win_leftx2
+
+	movff	menupos1,lo					; Copy menu position
+	movlw	dm_menu_item6_row
+	dcfsnz	lo,F
+	movlw	dm_menu_item1_row
+	dcfsnz	lo,F
+	movlw	dm_menu_item2_row
+	dcfsnz	lo,F
+	movlw	dm_menu_item3_row
+	dcfsnz	lo,F
+	movlw	dm_menu_item4_row
+	dcfsnz	lo,F
+	movlw	dm_menu_item5_row
+	movff	WREG,win_top
+	movlw	FT_SMALL
+	movff	WREG,win_font
+	STRCPY_PRINT "\xb7"					; print cursor
+	return
 
 	global	TFT_active_gas_divemode
 TFT_active_gas_divemode:				; Display gas/Setpoint
-    bcf	    FLAG_TFT_active_gas_divemode
-    btfsc   divemode_menu               ; Is the dive mode menu shown?
-    return                              ; Yes, return
-    btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
-    return
-    btfsc   FLAG_ccr_mode               ; in CCR mode?
-    bra     TFT_active_setpoint         ; Yes, show setpoint and gas mix
-    btfsc   FLAG_pscr_mode				; in PSCR mode?
-    bra		TFT_active_setpoint         ; Yes, show setpoint and gas mix
-	call    TFT_standard_color
-	btfss	better_gas_available        ; check if a better gas is available and a gas change is advised in divemode
+	bcf		FLAG_TFT_active_gas_divemode
+	btfsc	divemode_menu				; Is the dive mode menu shown?
+	return								; Yes, return
+	btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
+	return
+	btfsc	FLAG_ccr_mode				; in CCR mode?
+	bra		TFT_active_setpoint			; Yes, show setpoint and gas mix
+	btfsc	FLAG_pscr_mode				; in PSCR mode?
+	bra		TFT_active_setpoint			; Yes, show setpoint and gas mix
+	call	TFT_standard_color
+	btfss	better_gas_available		; check if a better gas is available and a gas change is advised in divemode
 	bra		TFT_active_gas_divemode2	; NO  - print in normal rendering
-	btg		blinking_better_gas         ; YES - toggle blink bit
-	btfss	blinking_better_gas         ; 		blink now?
-	bra		TFT_active_gas_divemode2	; 		NO  - print in normal rendering
-    call    TFT_attention_color         ; 		YES - blink in yellow
-    bsf     win_invert                  ; 			  set invert flag
+	btg		blinking_better_gas			; YES - toggle blink bit
+	btfss	blinking_better_gas			;       blink now?
+	bra		TFT_active_gas_divemode2	;       NO  - print in normal rendering
+	call	TFT_attention_color			;       YES - blink in yellow
+	bsf		win_invert					;             set invert flag
 TFT_active_gas_divemode2:
-    WIN_STD dm_active_gas_column, dm_active_gas_row
-    movff   char_I_O2_ratio,lo          ; lo now stores O2 in %
-    movff   char_I_He_ratio,hi          ; hi now stores He in %
-    call    customview_show_mix         ; put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	WIN_STD dm_active_gas_column, dm_active_gas_row
+	movff	char_I_O2_ratio,lo			; lo now stores O2 in %
+	movff	char_I_He_ratio,hi			; hi now stores He in %
+	call	customview_show_mix			; put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
 	STRCAT_PRINT ""
-	bcf     win_invert                  ; reset invert flag
+	bcf		win_invert					; reset invert flag
 	goto	TFT_standard_color			; ...and return
 
-TFT_active_setpoint:         			; Show setpoint
-    btfsc   is_bailout                  ; are we in bailout?
-    bra     TFT_active_setpoint_bail    ; YES - show "Bailout" instead of setpoint
+TFT_active_setpoint:					; Show setpoint
+	btfsc	is_bailout					; are we in bailout?
+	bra		TFT_active_setpoint_bail	; YES - show "Bailout" instead of setpoint
 	movff	int_O_breathed_ppO2+0,lo
 	movff	int_O_breathed_ppO2+1,hi
-    TFT_color_code  warn_ppo2			; with ppO2 [cbar] in hi:lo
-    btg	    blinking_setpoint			; toggle blink bit...
-    btfss   blinking_setpoint			; blink now?
-    bra	    TFT_active_setpoint_print	; NO  - print ppO2 with normal rendering
-    btfsc   setpoint_fallback 			; YES - check if we are in fallback condition
-    bra	    TFT_active_setpoint_fallb	; 		YES - process fallback case
-    movff   int_O_breathed_ppO2+1,WREG	;		NO  - get flags again (have been cleared in hi:lo by TFT_color_code meanwhile)
-    btfss	WREG,int_warning_flag		;			  warning flag set?
-    bra	    TFT_active_setpoint_print	; 			  NO  - ppO2 is ok, print ppO2 with normal rendering
-    bra	    TFT_active_setpoint_com		; 			  YES - continue with blinking common part
+	call	TFT_color_code_ppo2			; with ppO2 [cbar] in hi:lo
+	btg		blinking_setpoint			; toggle blink bit...
+	btfss	blinking_setpoint			; blink now?
+	bra		TFT_active_setpoint_print	; NO  - print ppO2 with normal rendering
+	btfsc	setpoint_fallback			; YES - check if we are in fallback condition
+	bra		TFT_active_setpoint_fallb	;       YES - process fallback case
+	movff	int_O_breathed_ppO2+1,WREG	;       NO  - get flags again (have been cleared in hi:lo by TFT_color_code_ppo2 meanwhile)
+	btfss	WREG,int_warning_flag		;             warning flag set?
+	bra		TFT_active_setpoint_print	;             NO  - ppO2 is ok, print ppO2 with normal rendering
+	bra		TFT_active_setpoint_com		;             YES - continue with blinking common part
 TFT_active_setpoint_fallb:				; set up fallback case 
-    movlw   color_yellow				; text in yellow 
-    call    TFT_set_color				; overwrite setting done by TFT_color_code warn_ppo2 
-TFT_active_setpoint_com:				; blinking common part    
-    bsf     win_invert              	; set invert flag
+	movlw	color_yellow				; text in yellow 
+	call	TFT_set_color				; overwrite setting done by TFT_color_code_ppo2 
+TFT_active_setpoint_com:				; blinking common part
+	bsf		win_invert					; set invert flag
 TFT_active_setpoint_print:
 	WIN_STD dm_active_gas_column, dm_active_gas_row
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_TEXT tbar
-    movff   opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1							; opt_ccr_mode = 1 (Sensor)?
-    bnz     TFT_active_setpoint2_a		; NO  - skip
-    PUTC    "*"							; YES - add an astrix
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_TEXT tbar
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensor)?
+	bnz		TFT_active_setpoint2_a		; NO  - skip
+	PUTC	"*"							; YES - add an astrix
 TFT_active_setpoint2_a:
 	STRCAT_PRINT ""
-	bcf     win_invert                  ; reset invert flag
+	bcf		win_invert					; reset invert flag
 	call	TFT_standard_color			; revert to standard color
 	bra		TFT_active_setpoint_diluent ; continue with showing diluent
 TFT_active_setpoint_bail:
 	WIN_SMALL dm_active_gas_column, dm_active_gas_row+.3	; collides with diluent in FT_MEDIUM
 	call	TFT_standard_color
-	STRCPY_TEXT_PRINT tDiveBailout    						; Bailout
+	STRCPY_TEXT_PRINT tDiveBailout		; Bailout
 TFT_active_setpoint_diluent:
- 	btfss	better_gas_available        ; check if a better gas is available and a gas change is advised in divemode
+	btfss	better_gas_available		; check if a better gas is available and a gas change is advised in divemode
 	bra		TFT_active_setpoint_diluent_show	; NO  - print in normal rendering
-	btg		blinking_better_gas         		; YES - toggle blink bit...
-	btfss	blinking_better_gas         		; blink now?
+	btg		blinking_better_gas					; YES - toggle blink bit...
+	btfss	blinking_better_gas					; blink now?
 	bra		TFT_active_setpoint_diluent_show	; NO  - print in normal rendering
-	movlw	color_yellow                		; YES - blink in yellow
-    call	TFT_set_color						;       set text color
-    bsf     win_invert              			; 		set invert flag
+	movlw	color_yellow						; YES - blink in yellow
+	call	TFT_set_color						;       set text color
+	bsf		win_invert							;       set invert flag
 TFT_active_setpoint_diluent_show:
 	WIN_SMALL dm_active_dil_column, dm_active_dil_row
-	movff	char_I_O2_ratio,lo          ; lo now stores O2 in %
-	movff	char_I_He_ratio,hi          ; hi now stores He in %
-	call	customview_show_mix         ; put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	movff	char_I_O2_ratio,lo			; lo now stores O2 in %
+	movff	char_I_He_ratio,hi			; hi now stores He in %
+	call	customview_show_mix			; put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
 	STRCAT_PRINT ""
-	bcf		win_invert                  ; reset invert flag
+	bcf		win_invert					; reset invert flag
 	goto	TFT_standard_color			; ...and return
 
 
@@ -2063,211 +2073,210 @@
 	call	TFT_standard_color			; set standard color
 	STRCPY_TEXT_PRINT tDvPSCR			; print "PSCR"
 	return
-	
+
 
 	global	TFT_display_decotype_surface
 TFT_display_decotype_surface:
-	WIN_STD  surf_decotype_column,surf_decotype_row
-    WIN_COLOR	color_lightblue
-    movff   opt_dive_mode,lo        		; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-    tstfsz  lo
-    bra     TFT_display_decotype_surface2
+	WIN_STD	surf_decotype_column,surf_decotype_row
+	WIN_COLOR color_lightblue
+	movff	opt_dive_mode,lo			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	tstfsz	lo
+	bra		TFT_display_decotype_surface2
 TFT_display_decotype_surface0:
-    STRCAT_TEXT_PRINT	tDvOC				; OC
-    bra     TFT_display_decotype_exit
+	STRCAT_TEXT_PRINT tDvOC				; OC
+	bra		TFT_display_decotype_exit
 TFT_display_decotype_surface2:
-    decfsz  lo,F
-    bra     TFT_display_decotype_surface3
-    STRCAT_TEXT_PRINT   tDvCC				; CC
-    call	TFT_standard_color
+	decfsz	lo,F
+	bra		TFT_display_decotype_surface3
+	STRCAT_TEXT_PRINT tDvCC				; CC
+	call	TFT_standard_color
 	WIN_TINY surf_decotype_column+.18,surf_decotype_row+.12
-    TSTOSS  opt_ccr_mode        			; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    bra     TFT_display_decotype_cc_fixed
-    ; Sensor mode or Auto
-    movff   opt_ccr_mode,WREG
-    sublw   .2
-    bz      TFT_display_decotype_cc_auto
-    STRCPY_TEXT tCCRModeSensor 				; Sensor
-    bra     TFT_display_decotype_cc_common
+	TSTOSS	opt_ccr_mode				; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	bra	 TFT_display_decotype_cc_fixed
+	; Sensor mode or Auto
+	movff	opt_ccr_mode,WREG
+	sublw	.2
+	bz		TFT_display_decotype_cc_auto
+	STRCPY_TEXT tCCRModeSensor				; Sensor
+	bra		TFT_display_decotype_cc_common
 TFT_display_decotype_cc_auto:
-    STRCPY_TEXT tCCRModeAutoSP  			; Auto SP
-    bra     TFT_display_decotype_cc_common
+	STRCPY_TEXT tCCRModeAutoSP				; Auto SP
+	bra		TFT_display_decotype_cc_common
 TFT_display_decotype_cc_fixed:
-    STRCPY_TEXT tCCRModeFixedSP 			; Fixed SP
+	STRCPY_TEXT tCCRModeFixedSP				; Fixed SP
 TFT_display_decotype_cc_common:
-	clrf    WREG
-	movff   WREG,buffer+.8					; limit string length to 8
-    STRCAT_PRINT ""
-    bra     TFT_display_decotype_exit
+	clrf	WREG
+	movff	WREG,buffer+.8					; limit string length to 8
+	STRCAT_PRINT ""
+	bra		TFT_display_decotype_exit
 TFT_display_decotype_surface3:
-    decfsz  lo,F
-    bra     TFT_display_decotype_surface4
+	decfsz	lo,F
+	bra		TFT_display_decotype_surface4
 TFT_display_decotype_surface3_1:
-    STRCAT_TEXT_PRINT	tDvGauge			; Gauge
-    bra     TFT_display_decotype_exit
+	STRCAT_TEXT_PRINT tDvGauge				; Gauge
+	bra		TFT_display_decotype_exit
 TFT_display_decotype_surface4:
-    decfsz  lo,F
-    bra     TFT_display_decotype_surface5
-TFT_display_decotype_surface4_1:    
-    STRCAT_TEXT_PRINT	tDvApnea			; Apnea
-    bra     TFT_display_decotype_exit
+	decfsz	lo,F
+	bra		TFT_display_decotype_surface5
+TFT_display_decotype_surface4_1:
+	STRCAT_TEXT_PRINT tDvApnea				; Apnea
+	bra		TFT_display_decotype_exit
 TFT_display_decotype_surface5:
-    STRCAT_TEXT_PRINT	tDvPSCR	    		; PSCR
+	STRCAT_TEXT_PRINT tDvPSCR				; PSCR
 TFT_display_decotype_exit:
-    goto	TFT_standard_color  			; and return...
-
-
-    global  TFT_display_decotype_surface1   ; Used from logbook!
-TFT_display_decotype_surface1:  			; Used from logbook!
-    tstfsz  lo
-    bra     TFT_display_decotype_surface1_2
-    bra     TFT_display_decotype_surface0   ;OC
+	goto	TFT_standard_color				; and return...
+
+
+	global	TFT_display_decotype_surface1	; Used from logbook!
+TFT_display_decotype_surface1:				; Used from logbook!
+	tstfsz	lo
+	bra		TFT_display_decotype_surface1_2
+	bra		TFT_display_decotype_surface0	;OC
 TFT_display_decotype_surface1_2:
-    decfsz  lo,F
-    bra     TFT_display_decotype_surface1_3
-    STRCAT_TEXT_PRINT   tDvCC               ; CC (w/o Sensor/Fixed Display)
+	decfsz	lo,F
+	bra		TFT_display_decotype_surface1_3
+	STRCAT_TEXT_PRINT	tDvCC				; CC (w/o Sensor/Fixed Display)
 TFT_display_decotype_surface1_3:
-    decfsz  lo,F
-    bra     TFT_display_decotype_surface1_4
-    bra     TFT_display_decotype_surface3_1 ; Gauge
+	decfsz	lo,F
+	bra		TFT_display_decotype_surface1_4
+	bra		TFT_display_decotype_surface3_1 ; Gauge
 TFT_display_decotype_surface1_4:
-    decfsz  lo,F
-    bra     TFT_display_decotype_surface4_1 ; Apnea
-    bra     TFT_display_decotype_surface5   ; PSCR
+	decfsz	lo,F
+	bra		TFT_display_decotype_surface4_1 ; Apnea
+	bra		TFT_display_decotype_surface5	; PSCR
 
 ;=============================================================================
 
-    global  TFT_splist_surfmode     	; Show Setpoint list
-    extern  gaslist_strcat_setpoint
+	global	TFT_splist_surfmode			; Show Setpoint list
+	extern	gaslist_strcat_setpoint
 TFT_splist_surfmode:
-    bsf     short_gas_decriptions   	; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-    ;SP 1
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row
-    clrf    PRODL
-    call    gaslist_strcat_setpoint     ; Show SP#+1 of PRODL#
-    STRCAT_PRINT ""
-    ;SP 2
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
-    movlw   .1
-    movwf   PRODL
-    call    gaslist_strcat_setpoint     ; Show SP#+1 of PRODL#
-    STRCAT_PRINT ""
-    ;SP 3
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)
-    movlw   .2
-    movwf   PRODL
-    call    gaslist_strcat_setpoint     ; Show SP#+1 of PRODL#
-    STRCAT_PRINT ""
-    ;SP 4
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)
-    movlw   .3
-    movwf   PRODL
-    call    gaslist_strcat_setpoint     ; Show SP#+1 of PRODL#
-    STRCAT_PRINT ""
-    ;SP 5
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4)
-    movlw   .4
-    movwf   PRODL
-    call    gaslist_strcat_setpoint     ; Show SP#+1 of PRODL#
-    STRCAT_PRINT ""
-    bcf     leftbind
-    return
+	bsf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	;SP 1
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row
+	clrf	PRODL
+	call	gaslist_strcat_setpoint		; Show SP#+1 of PRODL#
+	STRCAT_PRINT ""
+	;SP 2
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
+	movlw	.1
+	movwf	PRODL
+	call	gaslist_strcat_setpoint		; Show SP#+1 of PRODL#
+	STRCAT_PRINT ""
+	;SP 3
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)
+	movlw	.2
+	movwf	PRODL
+	call	gaslist_strcat_setpoint		; Show SP#+1 of PRODL#
+	STRCAT_PRINT ""
+	;SP 4
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)
+	movlw	.3
+	movwf	PRODL
+	call	gaslist_strcat_setpoint		; Show SP#+1 of PRODL#
+	STRCAT_PRINT ""
+	;SP 5
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4)
+	movlw	.4
+	movwf	PRODL
+	call	gaslist_strcat_setpoint		; Show SP#+1 of PRODL#
+	STRCAT_PRINT ""
+	bcf		leftbind
+	return
 
 	global	TFT_gaslist_surfmode
-TFT_gaslist_surfmode:				; Displays Gas List
-    bsf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-    extern  gaslist_strcat_gas_mod
-    ;Gas 1
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row
-    clrf    PRODL
-    call    gaslist_strcat_gas_mod  ;Append gas description of gas #PRODL (0-4) to current string
-    STRCAT_PRINT ""
-    ;Gas 2
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
-    movlw   .1
-    movwf   PRODL
-    call    gaslist_strcat_gas_mod  ;Append gas description of gas #PRODL (0-4) to current string
-    STRCAT_PRINT ""
-    ;Gas 3
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)
-    movlw   .2
-    movwf   PRODL
-    call    gaslist_strcat_gas_mod  ;Append gas description of gas #PRODL (0-4) to current string
-    STRCAT_PRINT ""
-    ;Gas 4
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)
-    movlw   .3
-    movwf   PRODL
-    call    gaslist_strcat_gas_mod  ;Append gas description of gas #PRODL (0-4) to current string
-    STRCAT_PRINT ""
-    ;Gas 5
-    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4)
-    movlw   .4
-    movwf   PRODL
-    call    gaslist_strcat_gas_mod  ;Append gas description of gas #PRODL (0-4) to current string
-    STRCAT_PRINT ""
-    bcf     leftbind
-    return
+TFT_gaslist_surfmode:					; Displays Gas List
+	bsf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	extern	gaslist_strcat_gas_mod
+	;Gas 1
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row
+	clrf	PRODL
+	call	gaslist_strcat_gas_mod		;Append gas description of gas #PRODL (0-4) to current string
+	STRCAT_PRINT ""
+	;Gas 2
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
+	movlw	.1
+	movwf	PRODL
+	call	gaslist_strcat_gas_mod		;Append gas description of gas #PRODL (0-4) to current string
+	STRCAT_PRINT ""
+	;Gas 3
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)
+	movlw	.2
+	movwf	PRODL
+	call	gaslist_strcat_gas_mod		;Append gas description of gas #PRODL (0-4) to current string
+	STRCAT_PRINT ""
+	;Gas 4
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)
+	movlw	.3
+	movwf	PRODL
+	call	gaslist_strcat_gas_mod		;Append gas description of gas #PRODL (0-4) to current string
+	STRCAT_PRINT ""
+	;Gas 5
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4)
+	movlw	.4
+	movwf	PRODL
+	call	gaslist_strcat_gas_mod		;Append gas description of gas #PRODL (0-4) to current string
+	STRCAT_PRINT ""
+	bcf		leftbind
+	return
 
 	global	TFT_dillist_surfmode
-TFT_dillist_surfmode:				; Displays Diluent List
-    bsf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-    bsf     ccr_diluent_setup       ; Use CCR Diluents...
-    rcall   TFT_gaslist_surfmode    ; Use OC/BAIL routine
-    bcf     ccr_diluent_setup       ; Clear flag
-    return
+TFT_dillist_surfmode:					; Displays Diluent List
+	bsf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	bsf		ccr_diluent_setup			; Use CCR Diluents...
+	rcall	TFT_gaslist_surfmode		; Use OC/BAIL routine
+	bcf		ccr_diluent_setup			; Clear flag
+	return
 
 ;==================================================================
 
 	global	TFT_depth
 TFT_depth:
-    bcf	    FLAG_TFT_depth
-    SAFE_2BYTE_COPY rel_pressure, lo
-    call    adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-
-    TFT_color_code  warn_depth		; Color-code the output
-    rcall 	TFT_depth_blink
-    WIN_LARGE   dm_depth_column, dm_depth_row
-
-    TSTOSS  opt_units   			; 0=m, 1=ft
-    bra     TFT_depth_metric
+	bcf		FLAG_TFT_depth
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	TFT_color_code_depth		; Color-code the output
+	rcall	TFT_depth_blink
+	WIN_LARGE dm_depth_column, dm_depth_row
+
+	TSTOSS	opt_units					; 0=m, 1=ft
+	bra		TFT_depth_metric
 ;TFT_depth_imperial
-    clrf    sub_a+1                 ; Display 0ft if lower then 30cm
+	clrf	sub_a+1						; Display 0ft if lower then 30cm
 	movlw	d'30'
 	movwf	sub_a+0
 	movff	hi,sub_b+1
 	movff	lo,sub_b+0
-	call	subU16					; sub_c = sub_a - sub_b
-	btfss	neg_flag				; Depth lower then 0.4m?
-	bra		depth_less_0.3mtr_feet	; Yes, Show 0ft manually
-
-	call	convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
+	call	subU16						; sub_c = sub_a - sub_b
+	btfss	neg_flag					; Depth lower then 0.4m?
+	bra		depth_less_0.3mtr_feet		; Yes, Show 0ft manually
+
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
 	bsf		leftbind
-	output_16						; feet in Big font
-    bcf		leftbind
-    movlw   .3                      ; limit to three chars
-    call    TFT_fillup_with_spaces  ; Fillup FSR2 with spaces (Total string length in #WREG)
-	STRCAT_PRINT ""					; Display feet
-    bcf     win_invert              ; Reset invert flag
-    return
+	output_16							; feet in Big font
+	bcf		leftbind
+	movlw	.3							; limit to three chars
+	call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""						; Display feet
+	bcf		win_invert					; Reset invert flag
+	return
 
 depth_less_0.3mtr_feet:
-	STRCAT_PRINT "0  "				; manual zero
-    bcf     win_invert              ; Reset invert flag
+	STRCAT_PRINT "0  "					; manual zero
+	bcf		win_invert					; Reset invert flag
 	return
 
 TFT_depth_metric:
 	movlw	.039
 	cpfslt	hi
-    bra		depth_greater_99_84mtr
-
-	btfsc	depth_greater_100m		; Was depth>100m during last call
-	rcall	TFT_clear_depth         ; Yes, clear depth area
-	bcf		depth_greater_100m		; Do this once only...
+	bra		depth_greater_99_84mtr
+
+	btfsc	depth_greater_100m			; Was depth>100m during last call
+	rcall	TFT_clear_depth				; Yes, clear depth area
+	bcf		depth_greater_100m			; Do this once only...
 
 	movlw	.039
 	cpfslt	hi
-    bra		depth_greater_99_84mtr
+	bra		depth_greater_99_84mtr
 
 	movlw	HIGH	d'1000'
 	movwf	sub_a+1
@@ -2279,11 +2288,11 @@
 	movlw	d'0'
 	addwfc	sub_b+1,F				; Add 1mbar offset
 	call	sub16					; sub_c = sub_a - sub_b
-    movlw   ' '
+	movlw	' '
 	btfss	neg_flag				; Depth lower then 10m?
-    movwf   POSTINC2                ; Yes, add extra space
-
-	clrf    sub_a+1
+	movwf	POSTINC2				; Yes, add extra space
+
+	clrf	sub_a+1
 	movlw	d'99'
 	movwf	sub_a+0
 	movff	hi,sub_b+1
@@ -2299,7 +2308,7 @@
 	bra		tft_depth3
 
 tft_depth2:
-	STRCAT	"0"                    ; manual zero
+	STRCAT	"0"						; manual zero
 
 tft_depth3:
 	STRCAT_PRINT ""					; Display full meters
@@ -2308,15 +2317,14 @@
 	WIN_MEDIUM	dm_depth_dm_column, dm_depth_dm_row
 
 	; TODO - check if needed, depth should still be in hi:lo
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar]
-
-	TFT_color_code	warn_depth		; Color-code the output
-	
-	PUTC    "."
-	movlw	HIGH	d'30'			; Display 0.0m if lower then 30cm
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	TFT_color_code_depth	; Color-code the output
+
+	PUTC	"."
+	movlw	HIGH d'30'				; Display 0.0m if lower then 30cm
 	movwf	sub_a+1
-	movlw	LOW		d'30'
+	movlw	LOW  d'30'
 	movwf	sub_a+0
 	movff	hi,sub_b+1
 	movff	lo,sub_b+0
@@ -2329,158 +2337,158 @@
 	bsf		ignore_digit5
 	output_16dp	d'0'
 	STRCAT_PRINT ""					; Display decimeters
-    bcf     win_invert              ; Reset invert flag
-	WIN_FONT 	FT_SMALL
+	bcf		win_invert				; Reset invert flag
+	WIN_FONT FT_SMALL
 	return
 
 depth_less_0.3mtr:
 	STRCAT_PRINT "0"				; Display 0.0m manually
-    bcf     win_invert              ; Reset invert flag
-	WIN_FONT 	FT_SMALL
+	bcf		win_invert				; Reset invert flag
+	WIN_FONT FT_SMALL
 	return
 
 depth_greater_99_84mtr:				; Display only in full meters
 	btfss	depth_greater_100m		; Is depth>100m already?
 	rcall	TFT_clear_depth			; No, clear depth area and set flag
-    TFT_color_code	warn_depth
+	call	TFT_color_code_depth
 	; Depth is already in hi:lo
 	; Show depth in Full meters
 	; That means ignore digit 4 and 5
-	lfsr    FSR2,buffer
+	lfsr	FSR2,buffer
 	bsf		ignore_digit4
 	bsf		leftbind
 	output_16
 	bcf		leftbind
-    STRCAT_PRINT ""					; Display full meters only
-    bcf     win_invert              ; Reset invert flag
-	WIN_FONT 	FT_SMALL
+	STRCAT_PRINT ""					; Display full meters only
+	bcf		win_invert				; Reset invert flag
+	WIN_FONT FT_SMALL
 	return
 
-TFT_clear_depth:            			; No, clear depth area and set flag
-    WIN_BOX_BLACK   dm_depth_row, dm_depth_bot, dm_depth_column, dm_depth_rgt    ;top, bottom, left, right
-	bsf		depth_greater_100m			; Set Flag
+TFT_clear_depth:					; No, clear depth area and set flag
+	WIN_BOX_BLACK dm_depth_row, dm_depth_bot, dm_depth_column, dm_depth_rgt	;top, bottom, left, right
+	bsf		depth_greater_100m		; Set Flag
 	return
 
 TFT_depth_blink:
-    TSTOSS  opt_modwarning				; 0=standard, 1=blink
-    return
-
-    ; check if previous cycle had the blinking warning or not
-    btfsc   blinking_depth_prev         ; did we have warning prev?
-    bra     TFT_depth_blink_prevwarn    ; Yes
-
-    ; No; check if it's set now
-    btfsc   blinking_depth_warning      ; do we have warning set now?
-    bra     TFT_depth_blink_warn        ; Yes  - so we have warning now but not prev
-
-    ; no warning in previous cycle, no warning now, reset all flags
-    bcf     blinking_depth_prev         ; reset prev flag
-    bcf     blinking_depth_toggle       ; reset toggle
-    bcf     win_invert
-    ; all done
-    return
+	TSTOSS	opt_modwarning			; 0=standard, 1=blink
+	return
+
+	; check if previous cycle had the blinking warning or not
+	btfsc	blinking_depth_prev		; did we have warning prev?
+	bra		TFT_depth_blink_prevwarn; Yes
+
+	; No; check if it's set now
+	btfsc	blinking_depth_warning	; do we have warning set now?
+	bra		TFT_depth_blink_warn	; Yes  - so we have warning now but not prev
+
+	; no warning in previous cycle, no warning now, reset all flags
+	bcf		blinking_depth_prev		; reset prev flag
+	bcf		blinking_depth_toggle	; reset toggle
+	bcf		win_invert
+	; all done
+	return
 
 TFT_depth_blink_prevwarn:
-    ; ...we had warning in previous cycle, check if we still have the warning set
-    btfss   blinking_depth_warning              ; do we still have the warning?
-    bra     TFT_depth_blink_prevwarn_nowarn     ; No, clear the depth area
-
-    ; we still have the warning, set previous flag for next cycle...
-    bsf     blinking_depth_prev                 ; set prev flag
-    ; and set toggle and invert if required
-    btfss   blinking_depth_toggle               ; do we have the toggle set?
-    bra		TFT_depth_blink_set                 ; No:  set inverse,   do color_box, set flag
-    bra		TFT_depth_blink_reset               ; Yes: clear inverse, do black box, reset flag
+	; ...we had warning in previous cycle, check if we still have the warning set
+	btfss	blinking_depth_warning			; do we still have the warning?
+	bra		TFT_depth_blink_prevwarn_nowarn	; No, clear the depth area
+
+	; we still have the warning, set previous flag for next cycle...
+	bsf		blinking_depth_prev				; set prev flag
+	; and set toggle and invert if required
+	btfss	blinking_depth_toggle			; do we have the toggle set?
+	bra		TFT_depth_blink_set				; No:  set inverse,	do color_box, set flag
+	bra		TFT_depth_blink_reset			; Yes: clear inverse, do black box, reset flag
 
 TFT_depth_blink_prevwarn_nowarn:
-    ; we had warning, but not now... (e.g. ascended or switched to better gas)
-    ; reset the previous cycle flag for the next cycle...
-    bcf     blinking_depth_prev         		; reset prev flag
-    ; clear it - just in case if we had a blinked before
-    bra    TFT_depth_blink_reset                ; Yes: clear inverse, do black box, reset flag
+	; we had warning, but not now... (e.g. ascended or switched to better gas)
+	; reset the previous cycle flag for the next cycle...
+	bcf		blinking_depth_prev				; reset prev flag
+	; clear it - just in case if we had a blinked before
+	bra		TFT_depth_blink_reset			; Yes: clear inverse, do black box, reset flag
 
 TFT_depth_blink_warn:
-    ; new blinking warning activated (had no warning in previous cycle)
-    bsf     blinking_depth_prev                 ; set prev flag
-    ; set toggle and invert
-    bra    TFT_depth_blink_set
+	; new blinking warning activated (had no warning in previous cycle)
+	bsf		blinking_depth_prev				; set prev flag
+	; set toggle and invert
+	bra		TFT_depth_blink_set
 
 TFT_depth_blink_set:
-    ; clear the area with color
-    movlw   color_red  ; that should not be hardcoded...
-    WIN_BOX_COLOR    dm_depth_row, dm_depth_bot, dm_depth_column, dm_depth_rgt    ;top, bottom, left, right
-    ;set the invert color
-    bsf     win_invert
-    ; set the toggle
-    bsf     blinking_depth_toggle
-    ; all done
-    return
+	; clear the area with color
+	movlw	color_red						; that should not be hardcoded...
+	WIN_BOX_COLOR dm_depth_row, dm_depth_bot, dm_depth_column, dm_depth_rgt	;top, bottom, left, right
+	;set the invert color
+	bsf		win_invert
+	; set the toggle
+	bsf		blinking_depth_toggle
+	; all done
+	return
 
 TFT_depth_blink_reset:
-    ; clear the area with black
-    WIN_BOX_BLACK    dm_depth_row, dm_depth_bot, dm_depth_column, dm_depth_rgt    ;top, bottom, left, right
-    ;reset the invert color
-    bcf     win_invert
-    ; reset the toggle
-    bcf     blinking_depth_toggle
-    ; if it's still warning...
-    btfsc   blinking_depth_warning
-    call    TFT_warnings_color
-    ; all done
-    return
+	; clear the area with black
+	WIN_BOX_BLACK dm_depth_row, dm_depth_bot, dm_depth_column, dm_depth_rgt	;top, bottom, left, right
+	;reset the invert color
+	bcf		win_invert
+	; reset the toggle
+	bcf		blinking_depth_toggle
+	; if it's still warning...
+	btfsc	blinking_depth_warning
+	call	TFT_warnings_color
+	; all done
+	return
 
 ;=============================================================================
 
-    global  TFT_custom_text
-TFT_custom_text:            			; Show the custom text
-    lfsr        FSR0, opt_name          ; Source
-    WIN_SMALL   surf_customtext_column,surf_customtext_row1 ; First row
-    rcall       TFT_custom_text_2       ; Show up to 12 chars and print
-    incfsz      lo,F                    ; Was lo=255?
-    return                              ; No, all done.
-    lfsr        FSR0, opt_name+.12      ; Source
-    WIN_SMALL   surf_customtext_column,surf_customtext_row2 ; Second row
-    rcall       TFT_custom_text_2       ; Show up to 12 chars and print
-    incfsz      lo,F                    ; Was lo=255?
-    return                              ; No, all done.
-    lfsr        FSR0, opt_name+.24      ; Source
-    WIN_SMALL   surf_customtext_column,surf_customtext_row3 ; Third row
-    rcall       TFT_custom_text_2       ; Show up to 12 chars and print
-    incfsz      lo,F                    ; Was lo=255?
-    return                              ; No, all done.
-    lfsr        FSR0, opt_name+.36      ; Source
-    WIN_SMALL   surf_customtext_column,surf_customtext_row4 ; Forth row
-    rcall       TFT_custom_text_2       ; Show up to 12 chars and print
-    incfsz      lo,F                    ; Was lo=255?
-    return                              ; No, all done.
-    lfsr        FSR0, opt_name+.48      ; Source
-    WIN_SMALL   surf_customtext_column,surf_customtext_row5 ; Fifth row
-    bra		TFT_custom_text_2       	; Show up to 12 chars and print ; and return...
+	global	TFT_custom_text
+TFT_custom_text:					; Show the custom text
+	lfsr	FSR0, opt_name			; Source
+	WIN_SMALL surf_customtext_column,surf_customtext_row1 ; First row
+	rcall	TFT_custom_text_2		; Show up to 12 chars and print
+	incfsz	lo,F					; Was lo=255?
+	return							; No, all done.
+	lfsr	FSR0, opt_name+.12		; Source
+	WIN_SMALL surf_customtext_column,surf_customtext_row2 ; Second row
+	rcall	TFT_custom_text_2		; Show up to 12 chars and print
+	incfsz	lo,F					; Was lo=255?
+	return							; No, all done.
+	lfsr	FSR0, opt_name+.24		; Source
+	WIN_SMALL surf_customtext_column,surf_customtext_row3 ; Third row
+	rcall	TFT_custom_text_2		; Show up to 12 chars and print
+	incfsz	lo,F					; Was lo=255?
+	return							; No, all done.
+	lfsr	FSR0, opt_name+.36		; Source
+	WIN_SMALL surf_customtext_column,surf_customtext_row4 ; Forth row
+	rcall	TFT_custom_text_2		; Show up to 12 chars and print
+	incfsz	lo,F					; Was lo=255?
+	return							; No, all done.
+	lfsr	FSR0, opt_name+.48		; Source
+	WIN_SMALL surf_customtext_column,surf_customtext_row5 ; Fifth row
+	bra		TFT_custom_text_2		; Show up to 12 chars and print ; and return...
 
 
 TFT_custom_text_2:
-    lfsr        FSR2, buffer            ; destination
-    movlw       .12
-    movwf       lo                      ; length/line
+	lfsr	FSR2, buffer			; destination
+	movlw	.12
+	movwf	lo						; length/line
 TFT_custom_text_3:
-    movf        POSTINC0,W              ; Get byte
-    bz          TFT_custom_text_4       ; End if NULL
-    movwf       POSTINC2                ; NO: copy
-    decfsz      lo,F                    ; Max len reached ?
-    bra         TFT_custom_text_3       ; NO: loop
-    setf        lo                      ; lo=255 -> more to come
+	movf	POSTINC0,W				; Get byte
+	bz		TFT_custom_text_4		; End if NULL
+	movwf	POSTINC2				; NO: copy
+	decfsz	lo,F					; Max length reached ?
+	bra		TFT_custom_text_3		; NO: loop
+	setf	lo						; lo=255 -> more to come
 TFT_custom_text_4:
-    clrf        POSTINC2                ; Mark end of string
-    goto        aa_wordprocessor        ; print and return
+	clrf	POSTINC2				; Mark end of string
+	goto	aa_wordprocessor		; print and return
 
 
 ;=============================================================================
 
 	global	TFT_update_surf_press
 TFT_update_surf_press:
-    WIN_SMALL   surf_press_column,surf_press_row
+	WIN_SMALL	surf_press_column,surf_press_row
 	call	TFT_standard_color
-    SAFE_2BYTE_COPY amb_pressure, lo
+	SAFE_2BYTE_COPY amb_pressure, lo
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
 	movff	last_surfpressure_30min+0,sub_b+0
@@ -2494,7 +2502,7 @@
 	subwf	sub_c+0,W
 	btfsc	STATUS,C
 	bra		update_surf_press_common			; Yes, display!
-    SAFE_2BYTE_COPY last_surfpressure_30min, lo	; Overwrite with stable value...
+	SAFE_2BYTE_COPY last_surfpressure_30min, lo	; Overwrite with stable value...
 update_surf_press_common:
 	movff	lo,int_I_pres_surface+0				; copy displayed value to C code to have pressure displayed
 	movff	hi,int_I_pres_surface+1				; and pressure used for desaturation & no-fly time in sync
@@ -2506,10 +2514,10 @@
 	movff	buffer+4,buffer+3
 	movlw	0x00
 	movff	WREG,buffer+4
-	STRCAT_PRINT  ""
-    call    TFT_divemask_color
-	WIN_SMALL   surf_press_column+4*8,surf_press_row
-    STRCPY_TEXT_PRINT  tMBAR        			; mbar
+	STRCAT_PRINT ""
+	call	TFT_divemask_color
+	WIN_SMALL	surf_press_column+4*8,surf_press_row
+	STRCPY_TEXT_PRINT tMBAR						; mbar
 	return
 
 update_surf_press2:
@@ -2523,17 +2531,17 @@
 
 	global	TFT_update_batt_voltage
 TFT_update_batt_voltage:
-    movff   batt_percent,lo         ; Get battery percent
-    TFT_color_code warn_battery		; Color-code battery percent
-    ; Setup charge indicator
-    btfsc   cc_active
-    bsf     win_invert
-    btfsc   cc_active
-    movlw   color_yellow
-    btfsc   cv_active
-    movlw   color_green
-    btfsc   cc_active
-    call	TFT_set_color
+	movff	batt_percent,lo			; Get battery percent
+	call	TFT_color_code_battery	; Color-code battery percent
+	; Setup charge indicator
+	btfsc	cc_active
+	bsf		win_invert
+	btfsc	cc_active
+	movlw	color_yellow
+	btfsc	cv_active
+	movlw	color_green
+	btfsc	cc_active
+	call	TFT_set_color
 	WIN_TINY batt_percent_column,batt_percent_row
 	bsf		leftbind
 	output_8
@@ -2541,24 +2549,24 @@
 	STRCAT	"% "
 	movlw	0x00
 	movff	WREG,buffer+4			; Only "xxx%"
-    STRCAT_PRINT	""
-    bcf     win_invert
+	STRCAT_PRINT ""
+	bcf		win_invert
 	call	TFT_standard_color
 	WIN_TINY batt_voltage_column,batt_voltage_row
-    movff   battery_type,lo			; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+	movff	battery_type,lo			; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
 	PUTC	"T"
-	bsf	leftbind
-    output_8
-    PUTC    ":"
+	bsf		leftbind
+	output_8
+	PUTC	":"
 	movff	batt_voltage+0,lo
 	movff	batt_voltage+1,hi
-	output_16dp	.2
+	output_16dp .2
 	bcf		leftbind
 	PUTC	'V'
 	movff	buffer+8,buffer+6
 	movlw	0x00
 	movff	WREG,buffer+7			; Only "x.yV"
-	STRCAT_PRINT	""
+	STRCAT_PRINT ""
 	return
 
 ;update_battery_debug:
@@ -2576,7 +2584,7 @@
 ;	movwf	xB+0
 ;	movlw	HIGH	.152
 ;	movwf	xB+1
-;	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+;	call	div32x16		; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 ;	bsf		leftbind
 ;	movff	xC+0,lo
 ;	movff	xC+1,hi
@@ -2585,104 +2593,89 @@
 ;	WIN_FONT	FT_SMALL
 ;	bcf		leftbind
 ;	return
-		
+
 ;=============================================================================
 
 	global	TFT_convert_signed_16bit
 TFT_convert_signed_16bit:
-	bcf			neg_flag				; Positive temperature
-   	btfss   	hi,7                    ; Negative temperature ?
-    return								; No, return
+	bcf		neg_flag				; Positive temperature
+	btfss	hi,7					; Negative temperature ?
+	return							; No, return
 ; Yes, negative temperature!
-	bsf			neg_flag				; Negative temperature
-	PUTC		'-'                     ; Display "-"
-    comf    	hi                      ; Then, 16bit sign changes.
-    negf    	lo
-    btfsc   	STATUS,C
-    incf    	hi
-	return								; and return
+	bsf		neg_flag				; Negative temperature
+	PUTC	'-'						; Display "-"
+	comf	hi						; Then, 16bit sign changes.
+	negf	lo
+	btfsc	STATUS,C
+	incf	hi
+	return							; and return
 
 ;=============================================================================
 
 	global	TFT_convert_date
-TFT_convert_date:	; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
-	movff	opt_dateformat,WREG		; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
-	movwf	EEDATA					; used as temp here
+TFT_convert_date:						; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	movff	opt_dateformat,WREG			; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
+	movwf	EEDATA						; used as temp here
 	tstfsz	EEDATA
-	bra		TFT_convert_date1
-; EEDATA was 0
-; Use MMDDYY
-	movff	convert_value_temp+0,lo			;month
+	bra		TFT_convert_date_1			; opt_dateformat is 1 or 2
+	; opt_dateformat is 0
+	; use MMDDYY
+	movff	lo,lo_temp					; incoming: lo = day,   hi = month
+	movff	hi,lo						; swap
+	movff	lo_temp,hi					; now:      lo = month, hi = day
+	bra		TFT_convert_date_common
+
+TFT_convert_date_1:
+	decfsz	EEDATA,F
+	bra		TFT_convert_date_2			; opt_dateformat is 2
+	; opt_dateformat is 1
+	; use DDMMYY
+TFT_convert_date_common:
 	bsf		leftbind
+	output_99x							; with lo = month or day   or year
+	PUTC	'.'
+	movff	hi,lo						; now  lo = day   or month or month
 	output_99x
-	PUTC    '.'
-	movff	convert_value_temp+1,lo			;day
-	bra 	TFT_convert_date1_common		;year
-
-TFT_convert_date1:	; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
-	decfsz	EEDATA,F
-	bra		TFT_convert_date2				; EEDATA was 2
-; EEDATA was 1
-; Use DDMMYY
-	movff	convert_value_temp+1,lo			;day
-	bsf		leftbind
-	output_99x
-	PUTC    '.'
-	movff	convert_value_temp+0,lo			;month
-
-TFT_convert_date1_common:
-	bsf		leftbind
-	output_99x
-	PUTC    '.'
-	movff	convert_value_temp+2,lo			;year
+	PUTC	'.'
+	movff	up,lo						; now  lo = year  or year  or day
 	output_99x
 	bcf		leftbind
 	return
 
-TFT_convert_date2:
-; Use YYMMDD
-	movff	convert_value_temp+2,lo			;year
-	bsf		leftbind
-	output_99x
-    PUTC    '.'
-	movff	convert_value_temp+0,lo			;month
-	output_99x
-    PUTC    '.'
-	movff	convert_value_temp+1,lo			;day
-	output_99x
-	bcf		leftbind
-	return
+TFT_convert_date_2:
+	; opt_dateformat is 2
+	; use YYMMDD
+	movff	lo,lo_temp					; incoming: lo = day,  up = year
+	movff	up,lo						; swap
+	movff	lo_temp,up					; now     : lo = year, up = day
+	bra		TFT_convert_date_common
 
 ;=============================================================================
 
 	global	TFT_convert_date_short
-TFT_convert_date_short:	; converts into "DD/MM" or "MM/DD" or "MM/DD" in postinc2
-	movff	opt_dateformat,WREG		; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
-	movwf	EEDATA					; used as temp here
+TFT_convert_date_short:					; converts into "DD/MM" or "MM/DD" or "MM/DD" in postinc2
+	movff	opt_dateformat,WREG			; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
+	movwf	EEDATA						; used as temp here
 	tstfsz	EEDATA
-	bra		TFT_convert_date_short1
-; EEDATA was 0
-; Use MMDDYY
+	bra		TFT_convert_date_short_1
+	; opt_dateformat is 0
+	; Use MMDD(YY)
+TFT_convert_date_short_0:
+	movff	lo,lo_temp					; incoming: lo = day,   hi = month
+	movff	hi,lo						; swap
+	movff	lo_temp,hi					; now:      lo = month, hi = day
+	bra		TFT_convert_date_short_common
+
+TFT_convert_date_short_1:
+	decfsz	EEDATA,F
+	bra		TFT_convert_date_short_0	; opt_dateformat is 2 -> use (YY)MMDD
+	; opt_dateformat is 1
+	; use DDMM(YY)
 TFT_convert_date_short_common:
-	movff	convert_value_temp+0,lo			;month
 	bsf		leftbind
-	output_99x
-    PUTC    '.'
-	movff	convert_value_temp+1,lo			;day
-	output_99x
-	bcf		leftbind
-	return
-
-TFT_convert_date_short1:
-	decfsz	EEDATA,F
-	bra		TFT_convert_date_short_common	; EEDATA was 2 -> Use YYMMDD
-; EEDATA was 1
-; Use DDMMYY
-	movff	convert_value_temp+1,lo			;day
-	bsf		leftbind
-	output_99x
-    PUTC    '.'
-	movff	convert_value_temp+0,lo			;month
+	output_99x							; with lo = month or day
+	PUTC	'.'
+	movff	hi,lo						; now  lo = day   or month
 	output_99x
 	bcf		leftbind
 	return
@@ -2691,11 +2684,11 @@
 
 	global	TFT_date
 TFT_date:
-    WIN_SMALL  surf_date_column,surf_date_row	; Init new Wordprocessor
+	WIN_SMALL	surf_date_column,surf_date_row	; Init new Wordprocessor
 	call	TFT_standard_color
-	movff	month,convert_value_temp+0
-	movff	day,convert_value_temp+1
-	movff	year,convert_value_temp+2
+	movff	day,lo
+	movff	month,hi
+	movff	year,up
 	call	TFT_convert_date					; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2	
 	STRCAT_PRINT ""
 	return
@@ -2703,55 +2696,55 @@
 ;=============================================================================
 
 	global	TFT_max_depth_alternative
-TFT_max_depth_alternative:	
-	bcf	FLAG_TFT_max_depth_alt
+TFT_max_depth_alternative:
+	bcf		FLAG_TFT_max_depth_alt
 	; The "mask"
-	call    TFT_divemask_color
-	WIN_TINY    dm_mask_depth_column, dm_max_alt_row-.14
+	call	TFT_divemask_color
+	WIN_TINY dm_mask_depth_column, dm_max_alt_row-.14
 	STRCPY_TEXT_PRINT tMaxDepth
 
 	; The max. depth
 	SAFE_2BYTE_COPY max_pressure, lo
 	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-	call    TFT_standard_color
-	TSTOSS  opt_units   				; 0=m, 1=ft
-	bra	TFT_max_depth_alt_metric
+	call	TFT_standard_color
+	TSTOSS	opt_units					; 0=m, 1=ft
+	bra		TFT_max_depth_alt_metric
 ;TFT_max_depth_alt_imperial:
 TFT_max_depth_alt_metric:
-	WIN_LARGE	dm_max_alt_column,dm_max_alt_row
-	bsf     ignore_digit4				; no 0.1m
+	WIN_LARGE dm_max_alt_column,dm_max_alt_row
+	bsf		ignore_digit4				; no 0.1m
 	output_16
 	STRCAT_PRINT ""
-	
+
 	WIN_MEDIUM	dm_max_dm_alt_column,dm_max_alt_row+.25
 	SAFE_2BYTE_COPY max_pressure, lo
 	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-	PUTC    "."
+	PUTC	"."
 	movlw	d'4'
 	movwf	ignore_digits
-	bsf	ignore_digit5
-	bsf     leftbind
+	bsf		ignore_digit5
+	bsf		leftbind
 	output_16dp	d'0'
 	STRCAT_PRINT ""						; Display decimeters
-	bcf     leftbind
+	bcf		leftbind
 	return
-   
-	
+
+
 	global	TFT_max_depth
 TFT_max_depth:
 	bcf	FLAG_TFT_max_depth
 	btfsc	FLAG_apnoe_mode				; different display in apnoe mode
-	bra	TFT_max_depth_apnoe
+	bra		TFT_max_depth_apnoe
 TFT_max_depth2:
-    SAFE_2BYTE_COPY max_pressure, lo
+	SAFE_2BYTE_COPY max_pressure, lo
 TFT_max_depth3:
 	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-    TSTOSS  opt_units   				; 0=m, 1=ft
+	TSTOSS	opt_units					; 0=m, 1=ft
 	bra		TFT_max_depth2_metric
 ;TFT_max_depth2_imperial:
-	call	convert_mbar_to_feet        ; convert value in lo:hi from mbar to feet
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
 	WIN_MEDIUM	dm_max_depth_column, dm_max_depth_row
-	TSTOSS  opt_vsigraph				; 0=skip, 1=draw
+	TSTOSS	opt_vsigraph				; 0=skip, 1=draw
 	WIN_MEDIUM	dm_max_depth_column_nvsi, dm_max_depth_row
 	call	TFT_standard_color
 	output_16_3
@@ -2759,14 +2752,14 @@
 	return
 
 TFT_max_depth2_metric:
-	WIN_MEDIUM	dm_max_depth_column, dm_max_depth_row
-	TSTOSS  opt_vsigraph				; 0=skip, 1=draw
-	WIN_MEDIUM	dm_max_depth_column_nvsi, dm_max_depth_row
-    call    TFT_standard_color
+	WIN_MEDIUM dm_max_depth_column, dm_max_depth_row
+	TSTOSS	opt_vsigraph				; 0=skip, 1=draw
+	WIN_MEDIUM dm_max_depth_column_nvsi, dm_max_depth_row
+	call	TFT_standard_color
 
 	movlw	.039
 	cpfslt	hi
-    bra		max_depth_greater_99_84mtr
+	bra		max_depth_greater_99_84mtr
 
 	btfsc	max_depth_greater_100m		; Was depth>100m during last call
 	rcall	TFT_clear_max_depth			; Yes, clear depth area
@@ -2774,7 +2767,7 @@
 
 	movlw	.039
 	cpfslt	hi
-    bra		max_depth_greater_99_84mtr
+	bra		max_depth_greater_99_84mtr
 
 	movlw	HIGH	d'1000'
 	movwf	sub_a+1
@@ -2786,103 +2779,103 @@
 	movlw	d'0'
 	addwfc	sub_b+1,F				; Add 1mbar offset
 	call	sub16					; sub_c = sub_a - sub_b
-    movlw   ' '
+	movlw	' '
 	btfss	neg_flag				; Depth lower then 10m?
-    movwf   POSTINC2                ; Yes, add extra space
-
-	clrf    sub_a+1
+	movwf	POSTINC2				; Yes, add extra space
+
+	clrf	sub_a+1
 	movlw	d'99'
 	movwf	sub_a+0
 	movff	hi,sub_b+1
 	movff	lo,sub_b+0
 	call	subU16					; sub_c = sub_a - sub_b
 	btfss	neg_flag				; Depth lower then 1m?
-	bra		tft_max_depth2          ; Yes, display manual Zero
-
-	bsf     ignore_digit4			; no 0.1m
-    bsf     leftbind
+	bra		tft_max_depth2			; Yes, display manual Zero
+
+	bsf		ignore_digit4			; no 0.1m
+	bsf		leftbind
 	output_16
 	bra		tft_max_depth3
 
 tft_max_depth2:
-	WIN_MEDIUM	dm_max_depth_column, dm_max_depth_row
-	TSTOSS  opt_vsigraph			; 0=skip, 1=draw
-	WIN_MEDIUM	dm_max_depth_column_nvsi, dm_max_depth_row
+	WIN_MEDIUM dm_max_depth_column, dm_max_depth_row
+	TSTOSS	opt_vsigraph			; 0=skip, 1=draw
+	WIN_MEDIUM dm_max_depth_column_nvsi, dm_max_depth_row
 	STRCAT	"0"
 
 tft_max_depth3:
 	call	TFT_standard_color
 	STRCAT_PRINT ""					; Display full meters
-    bcf     leftbind
+	bcf	 leftbind
 
 	; .1m in SMALL font
 	WIN_SMALL	dm_max_depth_dm_column, dm_max_depth_dm_row
-	TSTOSS  opt_vsigraph			; 0=skip, 1=draw
+	TSTOSS	opt_vsigraph			; 0=skip, 1=draw
 	WIN_SMALL	dm_max_depth_dm_column_nvsi, dm_max_depth_dm_row
 
-    SAFE_2BYTE_COPY max_pressure, lo
+	SAFE_2BYTE_COPY max_pressure, lo
 	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 
-	PUTC    "."
+	PUTC	"."
 
 	movlw	d'4'
 	movwf	ignore_digits
 	bsf		ignore_digit5
-    bsf     leftbind
+	bsf		leftbind
 	output_16dp	d'0'
 	STRCAT_PRINT ""						; Display decimeters
-    bcf     leftbind
+	bcf		leftbind
 	return
 
-max_depth_greater_99_84mtr:             ; Display only in full meters
+max_depth_greater_99_84mtr:				; Display only in full meters
 	btfss	max_depth_greater_100m		; Is max depth>100m already?
 	rcall	TFT_clear_max_depth			; No, clear max depth area and set flag
 	; Max. Depth is already in hi:lo
 	; Show max. depth in Full meters
 	; That means ignore figure 4 and 5
-	lfsr    FSR2,buffer
+	lfsr	FSR2,buffer
 	bsf		ignore_digit4
 	bsf		leftbind
 	output_16
 	bcf		leftbind
-    STRCAT_PRINT ""						; Display full meters only
-	WIN_FONT 	FT_SMALL
+	STRCAT_PRINT ""						; Display full meters only
+	WIN_FONT FT_SMALL
 	return
 
-TFT_clear_max_depth:            		; No, clear max. depth area and set flag
-    WIN_BOX_BLACK   dm_max_depth_row, dm_max_depth_bot, dm_max_depth_column, dm_max_depth_rgt    ;top, bottom, left, right
+TFT_clear_max_depth:					; No, clear max. depth area and set flag
+	WIN_BOX_BLACK	dm_max_depth_row, dm_max_depth_bot, dm_max_depth_column, dm_max_depth_rgt	;top, bottom, left, right
 	bsf		max_depth_greater_100m		; Set Flag
 	return
 
 
 TFT_max_depth_apnoe:
-	btfss	FLAG_active_descent			; Are we descending?			
-	bra		TFT_max_depth2			; Yes, show normal max.
+	btfss	FLAG_active_descent			; Are we descending?
+	bra		TFT_max_depth2				; Yes, show normal max.
 	SAFE_2BYTE_COPY apnoe_max_pressure, lo
-	bra		TFT_max_depth3			; Show apnoe_max_pressure as max. depth
+	bra		TFT_max_depth3				; Show apnoe_max_pressure as max. depth
 
 	global	TFT_display_apnoe_last_max
 TFT_display_apnoe_last_max:
-    call    TFT_divemask_color
-    WIN_TINY    dm_apnoe_last_max_depth_text_col, dm_apnoe_last_max_depth_text_row
-    STRCPY_TEXT_PRINT   tApnoeMax
+	call	TFT_divemask_color
+	WIN_TINY dm_apnoe_last_max_depth_text_col, dm_apnoe_last_max_depth_text_row
+	STRCPY_TEXT_PRINT	tApnoeMax
 
 	call	TFT_standard_color
 	SAFE_2BYTE_COPY max_pressure, lo
-    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
-    TSTOSS  opt_units   				; 0=m, 1=ft
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	TSTOSS	opt_units					; 0=m, 1=ft
 	bra		TFT_display_apnoe_last_m_metric
 ;TFT_display_apnoe_last_max_imperial
-	call	convert_mbar_to_feet        ; convert value in lo:hi from mbar to feet
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
 	WIN_MEDIUM	dm_apnoe_last_max_depth_column, dm_apnoe_last_max_depth_row
 	output_16
 	STRCAT_PRINT ""
 	return
 
 TFT_display_apnoe_last_m_metric:
-	WIN_MEDIUM	dm_apnoe_last_max_depth_column, dm_apnoe_last_max_depth_row
-	bsf		ignore_digit5		; do not display 1cm depth
-	output_16dp	d'3'
+	WIN_MEDIUM dm_apnoe_last_max_depth_column, dm_apnoe_last_max_depth_row
+	bsf		ignore_digit5				; do not display 1cm depth
+	output_16dp d'3'
 	STRCAT_PRINT ""
 	return
 
@@ -2890,87 +2883,87 @@
 
 	global	TFT_divemins
 TFT_divemins:
-	bcf	FLAG_TFT_divemins	    	; Clear flag
+	bcf	FLAG_TFT_divemins			; Clear flag
 	movff	divemins+0,lo
 	movff	divemins+1,hi
 
-    ; Already showing divemins > 99min
+	; Already showing divemins > 99min
 	btfsc	no_more_divesecs		; Ignore seconds?
-	bra     TFT_divemins2           ; Show minutes only
-
-	tstfsz	hi                      ; hi = 0?
+	bra		TFT_divemins2			; Show minutes only
+
+	tstfsz	hi						; hi = 0?
 	bra	TFT_divemins_clr			; No, show mins only
 
 	movlw	.99
-	cpfsgt	lo                      ; bigger than 99?
-	bra	TFT_divemins1				; No show mins:secs
+	cpfsgt	lo						; bigger than 99?
+	bra		TFT_divemins1			; No show mins:secs
 
 TFT_divemins_clr:
 	; Yes, remove second display for the rest of the dive and clear seconds
-	bsf		no_more_divesecs        ; Set flag
+	bsf		no_more_divesecs		; Set flag
 	; Clear rest of seconds
-	WIN_BOX_BLACK   dm_divetime_row, dm_divetime_bot, dm_divetime_column, dm_divetime_rgt ;top, bottom, left, right
-	bra     TFT_divemins2           ; Show minutes only
+	WIN_BOX_BLACK dm_divetime_row, dm_divetime_bot, dm_divetime_column, dm_divetime_rgt ;top, bottom, left, right
+	bra		TFT_divemins2			; Show minutes only
 
 TFT_divemins1:
-    ; Print out the minutes, up to 99min, only 2chars !
+	; Print out the minutes, up to 99min, only 2chars !
 	call	TFT_standard_color
-	WIN_MEDIUM	dm_divetime_column, dm_divetime_row
-	output_99                       ; displays only last two figures from a 8Bit value (0-99)
-	STRCAT_PRINT ""                 ; Show minutes in large font
-
-    ; Print out the seconds
-	WIN_SMALL  dm_divetime_secs_column, dm_divetime_secs_row   		; left position for two sec figures
-	PUTC    ':'
+	WIN_MEDIUM dm_divetime_column, dm_divetime_row
+	output_99						; displays only last two figures from a 8Bit value (0-99)
+	STRCAT_PRINT ""					; Show minutes in large font
+
+	; Print out the seconds
+	WIN_SMALL dm_divetime_secs_column, dm_divetime_secs_row			; left position for two sec figures
+	PUTC	':'
 	bsf	leftbind
-	movff   divesecs,lo
+	movff	divesecs,lo
 	output_99x						; displays only last two figures from a 8Bit value with leading zero (00-99) 
-	bcf     leftbind
-	STRCAT_PRINT ""                 ; Show seconds in small font
+	bcf	 leftbind
+	STRCAT_PRINT ""					; Show seconds in small font
 	return
 
 TFT_divemins2:
 	; Full minutes only
 	call	TFT_standard_color
 	WIN_MEDIUM	dm_divetime_minsonly_column, dm_divetime_row
-        bcf		leftbind
-        output_16_4
-        STRCAT_PRINT ""             ; Show minutes in large font
-        return
-	
+	bcf		leftbind
+	output_16_4
+	STRCAT_PRINT ""					; Show minutes in large font
+	return
+
 	global	TFT_divemins_alternative
 TFT_divemins_alternative:
-    bcf	    FLAG_TFT_divemins	    ; Clear flag
-    call    TFT_standard_color
-    ; Print out the minutes (0-999) in large
-    WIN_LARGE	dm_divetime_alt_column, dm_divetime_alt_row
-    movff	divemins+0,lo
-    movff	divemins+1,hi
-    output_16_3                     ; limit to 999 and display only (0-999)
-    STRCAT_PRINT ""                 ; Show minutes
-    ; Print out the seconds in medium
-    WIN_MEDIUM	dm_divetime_alt_column+.60, dm_divetime_alt_row+.25
-    PUTC    ":"
-    bsf	    leftbind
-    movff   divesecs,lo
-    output_99x						; displays only last two figures from a 8Bit value with leading zero (00-99) 
-    bcf     leftbind
-    STRCAT_PRINT ""                 ; Show seconds in small font
-    return
+	bcf		FLAG_TFT_divemins		; Clear flag
+	call	TFT_standard_color
+	; Print out the minutes (0-999) in large
+	WIN_LARGE dm_divetime_alt_column, dm_divetime_alt_row
+	movff	divemins+0,lo
+	movff	divemins+1,hi
+	output_16_3						; limit to 999 and display only (0-999)
+	STRCAT_PRINT ""					; Show minutes
+	; Print out the seconds in medium
+	WIN_MEDIUM	dm_divetime_alt_column+.60, dm_divetime_alt_row+.25
+	PUTC	":"
+	bsf		leftbind
+	movff	divesecs,lo
+	output_99x						; displays only last two figures from a 8Bit value with leading zero (00-99) 
+	bcf		leftbind
+	STRCAT_PRINT ""					; Show seconds in small font
+	return
 
 ;=============================================================================
 
 	global	TFT_display_apnoe_surface
 TFT_display_apnoe_surface:
-    call    TFT_divemask_color
-    WIN_TINY    dm_apnoe_surface_time_text_col,  dm_apnoe_surface_time_text_row
-    STRCPY_TEXT_PRINT   tApnoeSurface
+	call	TFT_divemask_color
+	WIN_TINY dm_apnoe_surface_time_text_col, dm_apnoe_surface_time_text_row
+	STRCPY_TEXT_PRINT tApnoeSurface
 
 	call	TFT_standard_color
-	WIN_MEDIUM	dm_apnoe_surface_time_column, dm_apnoe_surface_time_row
+	WIN_MEDIUM dm_apnoe_surface_time_column, dm_apnoe_surface_time_row
 	movff	apnoe_surface_mins,lo
 	output_8
-    PUTC    ':'
+	PUTC	':'
 	movff	apnoe_surface_secs,lo
 	output_99x
 	STRCAT_PRINT ""
@@ -2979,180 +2972,180 @@
 	global	TFT_apnoe_clear_surface
 TFT_apnoe_clear_surface:
 	; Clear Surface timer....
-	WIN_BOX_BLACK   dm_apnoe_surface_time_text_row, .239, dm_apnoe_surface_time_text_col, .159	;top, bottom, left, right
+	WIN_BOX_BLACK dm_apnoe_surface_time_text_row, .239, dm_apnoe_surface_time_text_col, .159	;top, bottom, left, right
 	return
 
 	global	TFT_display_apnoe_descent
 TFT_display_apnoe_descent:			; Descent divetime
 	movff	apnoe_mins,lo
-    clrf    hi
+	clrf	hi
 	WIN_MEDIUM	dm_divetime_apnoe_column, dm_divetime_apnoe_row
-	output_16_3                     ; displays only last three figures from a 16Bit value (0-999)
+	output_16_3						; displays only last three figures from a 16Bit value (0-999)
 	call	TFT_standard_color
-	STRCAT_PRINT ""                 ; Show minutes in large font
-	WIN_SMALL   dm_divetime_apnoe_secs_column, dm_divetime_apnoe_secs_row	; left position for two sec figures
-	PUTC    ':'
+	STRCAT_PRINT ""					; Show minutes in large font
+	WIN_SMALL	dm_divetime_apnoe_secs_column, dm_divetime_apnoe_secs_row	; left position for two sec figures
+	PUTC	':'
 	bsf		leftbind
 	movff	apnoe_secs,lo
 	output_99x
-	bcf     leftbind
-	STRCAT_PRINT ""                 ; Show seconds in small font
-
-    call    TFT_divemask_color
-    WIN_TINY    dm_total_apnoe_text_column,dm_total_apnoe_text_row
-    STRCPY_TEXT_PRINT   tApnoeTotal
+	bcf		leftbind
+	STRCAT_PRINT ""					; Show seconds in small font
+
+	call	TFT_divemask_color
+	WIN_TINY dm_total_apnoe_text_column,dm_total_apnoe_text_row
+	STRCPY_TEXT_PRINT tApnoeTotal
 	call	TFT_standard_color
 	movff	divemins,lo
-    clrf    hi
-	WIN_MEDIUM	dm_apnoe_total_divetime_column, dm_apnoe_total_divetime_row
-	output_16_3                     ; displays only last three figures from a 16Bit value (0-999)
+	clrf	hi
+	WIN_MEDIUM dm_apnoe_total_divetime_column, dm_apnoe_total_divetime_row
+	output_16_3						; displays only last three figures from a 16Bit value (0-999)
 	call	TFT_standard_color
-	STRCAT_PRINT ""                 ; Show minutes in large font
-	WIN_SMALL   dm_apnoe_total_divetime_secs_col, dm_apnoe_total_divetime_secs_row	; left position for two sec figures
-	PUTC    ':'
+	STRCAT_PRINT ""					; Show minutes in large font
+	WIN_SMALL	dm_apnoe_total_divetime_secs_col, dm_apnoe_total_divetime_secs_row	; left position for two sec figures
+	PUTC	':'
 	bsf		leftbind
 	movff	divesecs,lo
 	output_99x
-	bcf     leftbind
-	STRCAT_PRINT ""                 ; Show seconds in small font
+	bcf		leftbind
+	STRCAT_PRINT ""					; Show seconds in small font
 	return
-	
+
 ;=============================================================================
 ; Writes ostc #Serial and Firmware version in splash screen
 
 	global	TFT_serial
 TFT_serial:		
-    WIN_TINY	.5,.225
-    STRCPY  "OSTC"                  ; Won't translate that...
-
-    movlw   0x0A
-    cpfseq  hardware_flag
-    bra     TFT_serial2
-    STRCAT  "3 #"
-    bra     TFT_serial_common
+	WIN_TINY	.5,.225
+	STRCPY	"OSTC"					; Won't translate that...
+
+	movlw	0x0A
+	cpfseq	hardware_flag
+	bra		TFT_serial2
+	STRCAT	"3 #"
+	bra		TFT_serial_common
 TFT_serial2:
-    movlw   0x05
-    cpfseq  hardware_flag
-    bra     TFT_serial3
-    STRCAT  " cR #"
-    bra     TFT_serial_common
+	movlw	0x05
+	cpfseq	hardware_flag
+	bra		TFT_serial3
+	STRCAT	" cR #"
+	bra	 TFT_serial_common
 TFT_serial3:
-    movlw   0x11
-    cpfseq  hardware_flag
-    bra     TFT_serial4
-    STRCAT  "2 #"
-    bra     TFT_serial_common
+	movlw	0x11
+	cpfseq	hardware_flag
+	bra		TFT_serial4
+	STRCAT	"2 #"
+	bra		TFT_serial_common
 TFT_serial4:
-    movlw   0x1A
-    cpfseq  hardware_flag
-    bra     TFT_serial5
-    STRCAT  "3 #"
-;    bra     TFT_serial_common
+	movlw	0x1A
+	cpfseq	hardware_flag
+	bra		TFT_serial5
+	STRCAT	"3 #"
+;	bra		TFT_serial_common
 TFT_serial5:
 TFT_serial_common:
-    rcall   TFT_cat_serial
-    STRCAT  " v"
-    WIN_COLOR   color_greenish
-    rcall   TFT_cat_firmware
-
-    ifdef __DEBUG
-        movlw   color_grey              ; Write header in blue when
-        call    TFT_set_color           ; compiled in DEBUG mode...
-        STRCAT_PRINT "DEBUG"    
-    else
-        STRCAT_PRINT ""
-        bcf     win_invert              ; Reset invert flag
-        call	TFT_standard_color
-
-        movlw	softwareversion_beta    ; =1: Beta, =0: Release
-        decfsz	WREG,F
-        return                          ; Release version -> Return
-        
-        call	TFT_warnings_color
-        WIN_LEFT    .160-4*9/2          ; Right pad.
-        STRCPY_TEXT_PRINT tBeta
-    endif
-	call    TFT_standard_color
-    bcf	    win_invert
-    return
-	
+	rcall	TFT_cat_serial
+	STRCAT	" v"
+	WIN_COLOR color_greenish
+	rcall	TFT_cat_firmware
+
+	ifdef __DEBUG
+		movlw	color_grey				; Write header in blue when
+		call	TFT_set_color			; compiled in DEBUG mode...
+		STRCAT_PRINT "DEBUG"
+	else
+		STRCAT_PRINT ""
+		bcf		win_invert				; Reset invert flag
+		call	TFT_standard_color
+
+		movlw	softwareversion_beta	; =1: Beta, =0: Release
+		decfsz	WREG,F
+		return							; Release version -> Return
+
+		call	TFT_warnings_color
+		WIN_LEFT .160-4*9/2				; Right pad.
+		STRCPY_TEXT_PRINT tBeta
+	endif
+	call	TFT_standard_color
+	bcf		win_invert
+	return
+
 
 ;=============================================================================
 ; For the Information menu: append firmware x.yy version.
 
-    global info_menu_firmware
-    extern  tFirmware
+	global	info_menu_firmware
+	extern	tFirmware
 info_menu_firmware:
-    lfsr    FSR1,tFirmware
-    call    strcat_text
-    rcall   TFT_cat_firmware
-    ; Show language version
-    IFNDEF	    french_italian
+	lfsr	FSR1,tFirmware
+	call	strcat_text
+	rcall	TFT_cat_firmware
+	; Show language version
+	IFNDEF		french_italian
 	STRCAT	"_en+de"
 	ELSE
 	STRCAT	"_fr+it"
-    ENDIF
-    bcf     win_invert              ; Reset invert flag
-    return
-
-    global  TFT_cat_firmware
+	ENDIF
+	bcf		win_invert				; Reset invert flag
+	return
+
+	global	TFT_cat_firmware
 TFT_cat_firmware:
-    movlw	softwareversion_x
-    movwf	lo
-    bsf		leftbind
-    output_8
-    PUTC    '.'
-    movlw	softwareversion_y
-    movwf	lo
-    output_99x
-    bcf		leftbind
-    ; Check firmware date
-    movlw   firmware_expire_year-.1
-    cpfsgt  year                    ; > threshold?
-    return
-    movlw   firmware_expire_month-.1
-    cpfsgt  month                   ; > threshold?
-    return
-    movlw   firmware_expire_day-.1
-    cpfsgt  day                     ; > threshold?
-    return
-
-    ; Show in "change firmware" style
-    movlw   color_yellow
-    bcf	    win_invert
-    goto    TFT_set_color   ; and return...
+	movlw	softwareversion_x
+	movwf	lo
+	bsf		leftbind
+	output_8
+	PUTC	'.'
+	movlw	softwareversion_y
+	movwf	lo
+	output_99x
+	bcf		leftbind
+	; Check firmware date
+	movlw	firmware_expire_year-.1
+	cpfsgt	year					; > threshold?
+	return
+	movlw	firmware_expire_month-.1
+	cpfsgt	month					; > threshold?
+	return
+	movlw	firmware_expire_day-.1
+	cpfsgt	day					 ; > threshold?
+	return
+
+	; Show in "change firmware" style
+	movlw	color_yellow
+	bcf	win_invert
+	goto	TFT_set_color	; and return...
 
 ;-----------------------------------------------------------------------------
 ; For the Information menu: append serial number 
 
-    global  info_menu_serial
-    extern  tSerial
+	global	info_menu_serial
+	extern	tSerial
 info_menu_serial:
-    lfsr    FSR1,tSerial
-    call    strcat_text
-    global  TFT_cat_serial
+	lfsr	FSR1,tSerial
+	call	strcat_text
+	global	TFT_cat_serial
 TFT_cat_serial:
-    clrf	EEADRH
-    clrf	EEADR                       ; Get Serial number LOW
-    call	read_eeprom                 ; read byte
-    movff	EEDATA,lo
-    incf	EEADR,F                     ; Get Serial number HIGH
-    call	read_eeprom                 ; read byte
-    movff	EEDATA,hi
-
-    bsf		leftbind
-    output_16
-    bcf		leftbind
-    return
+	clrf	EEADRH
+	clrf	EEADR					; Get Serial number LOW
+	call	read_eeprom				; read byte
+	movff	EEDATA,lo
+	incf	EEADR,F					; Get Serial number HIGH
+	call	read_eeprom				; read byte
+	movff	EEDATA,hi
+
+	bsf		leftbind
+	output_16
+	bcf		leftbind
+	return
 
 ;-----------------------------------------------------------------------------
 ; For the Information menu: Append total dives
 
-    global  info_menu_total_dives
-    extern  tTotalDives
+	global	info_menu_total_dives
+	extern	tTotalDives
 info_menu_total_dives:
-    lfsr    FSR1,tTotalDives
-    call    strcat_text
+	lfsr	FSR1,tTotalDives
+	call	strcat_text
 TFT_cat_total_dives:
 	read_int_eeprom	.2
 	movff	EEDATA,lo
@@ -3160,145 +3153,108 @@
 	movff	EEDATA,hi
 	bsf		leftbind
 	output_16
-    bcf		leftbind
-    return
+	bcf		leftbind
+	return
 
 ; For the Information menu: Append battery voltage
-    global  info_menu_battery_volts
-    extern  tBatteryV
+	global	info_menu_battery_volts
+	extern	tBatteryV
 info_menu_battery_volts:
-    lfsr    FSR1,tBatteryV
-    call    strcat_text
-    movff   batt_voltage+1,hi
-    movff   batt_voltage+0,lo
+	lfsr	FSR1,tBatteryV
+	call	strcat_text
+	movff	batt_voltage+1,hi
+	movff	batt_voltage+0,lo
 	bsf		leftbind
-	output_16dp .2      		; x.xxx
-    STRCAT  "V(T"
-    movff   battery_type,lo		; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
-    output_8
-    bcf		leftbind
-    PUTC    ")"
-    return
-
-    ; For the Information menu: Append Uptime
-    global  info_menu_uptime
-    extern  tUptime
+	output_16dp .2				; x.xxx
+	STRCAT	"V(T"
+	movff	battery_type,lo		; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+	output_8
+	bcf		leftbind
+	PUTC	")"
+	return
+
+	; For the Information menu: Append Uptime
+	global	info_menu_uptime
+	extern	tUptime
 info_menu_uptime:
-    lfsr    FSR1,tUptime
-    call    strcat_text
-    movff   uptime+0,xC+0
-    movff   uptime+1,xC+1
-    movff   uptime+2,xC+2
-    movff   uptime+3,xC+3
-    movlw   LOW	    .3600
-    movwf   xB+0
-    movlw   HIGH    .3600
-    movwf   xB+1			; One day = 3600s
-    call    div32x16		; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-    ;xC+0:xC+1 -> Full hours
-    movff   xC+1,xA+1
-    movff   xC+0,xA+0
-    clrf    xB+1
-    movlw   .24
-    movwf   xB+0
-    call    div16x16		; xA/xB=xC with xA+0 as remainder 	
-    movff   xC+0,lo
-    movff   xC+1,hi	; Full days
-    bsf	    leftbind
-    output_16
-    PUTC    "d"
-    movff   xA+0,lo	; Full hours
-    output_8
-    PUTC    "h"
-    bcf	    leftbind
-    return  ; Done.
-    
-    extern  tCalX,tCalY,tCalZ
-    global  menu_cal_x
-menu_cal_x:  
-    lfsr    FSR1,tCalX
-    call    strcat_text
-    movff   compass_CX_f+0,lo
-    movff   compass_CX_f+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    bsf		leftbind
-    output_16
-    bcf		leftbind
-    return
-
-    global  menu_cal_y
-menu_cal_y:  
-    lfsr    FSR1,tCalY
-    call    strcat_text
-    movff   compass_CY_f+0,lo
-    movff   compass_CY_f+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    bsf		leftbind
-    output_16
-    bcf		leftbind
-    return
-    
-    global  menu_cal_z
-menu_cal_z:  
-    lfsr    FSR1,tCalZ
-    call    strcat_text
-    movff   compass_CZ_f+0,lo
-    movff   compass_CZ_f+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    bsf		leftbind
-    output_16
-    bcf		leftbind
-    return
+	lfsr	FSR1,tUptime
+	call	strcat_text
+	movff	uptime+0,xC+0
+	movff	uptime+1,xC+1
+	movff	uptime+2,xC+2
+	movff	uptime+3,xC+3
+	movlw	LOW		.3600
+	movwf	xB+0
+	movlw	HIGH	.3600
+	movwf	xB+1			; One day = 3600s
+	call	div32x16		; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	;xC+0:xC+1 -> Full hours
+	movff	xC+1,xA+1
+	movff	xC+0,xA+0
+	clrf	xB+1
+	movlw	.24
+	movwf	xB+0
+	call	div16x16		; xA/xB=xC with xA+0 as remainder
+	movff	xC+0,lo
+	movff	xC+1,hi			; Full days
+	bsf		leftbind
+	output_16
+	PUTC	"d"
+	movff	xA+0,lo			; Full hours
+	output_8
+	PUTC	"h"
+	bcf		leftbind
+	return					; Done.
+	
+	extern	tCalX,tCalY,tCalZ
+	global	menu_cal_x
+menu_cal_x:
+	lfsr	FSR1,tCalX
+	call	strcat_text
+	movff	compass_CX_f+0,lo
+	movff	compass_CX_f+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	bsf		leftbind
+	output_16
+	bcf		leftbind
+	return
+
+	global	menu_cal_y
+menu_cal_y:
+	lfsr	FSR1,tCalY
+	call	strcat_text
+	movff	compass_CY_f+0,lo
+	movff	compass_CY_f+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	bsf		leftbind
+	output_16
+	bcf		leftbind
+	return
+	
+	global	menu_cal_z
+menu_cal_z:
+	lfsr	FSR1,tCalZ
+	call	strcat_text
+	movff	compass_CZ_f+0,lo
+	movff	compass_CZ_f+1,hi
+	call	TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	bsf		leftbind
+	output_16
+	bcf		leftbind
+	return
 
 
 ;-----------------------------------------------------------------------------
 ; ppO2 menu
 
-	global	divesets_ppo2_max
-    extern  tPPO2Max
-    extern  tbar
-divesets_ppo2_max:
-    lfsr    FSR1,tPPO2Max
-    call    strcat_text
-	movff	char_I_ppO2_max,lo
-    movlw   ppo2_warning_high
-
-divesets_ppo2_common:
-    movwf   up                  	; Save default value
-	clrf	hi
-	bsf		leftbind
-	output_16dp d'3'
-    bcf		leftbind
-    lfsr    FSR1,tbar
-    call    strcat_text
-    movf    up,W                	; Default value
-    cpfseq  lo                  	; Current value
-    bra     divesets_ppo2_common2 	; Not default, add *
-    return                      	; Default, Done.
-divesets_ppo2_common2:
-    PUTC    "*"
-    return                      	; Done.
-
-
 	global	divesets_ppo2_min
-    extern  tPPO2MIN
+	extern	tPPO2MIN
 divesets_ppo2_min:
-    lfsr    FSR1,tPPO2MIN
-    call    strcat_text
+	lfsr	FSR1,tPPO2MIN
+	call	strcat_text
 	movff	char_I_ppO2_min,lo
-    movlw   ppo2_warning_low
-    bra     divesets_ppo2_common
-
-
-	global	divesets_ppo2_max_deco
-    extern  tPPO2DECO
-divesets_ppo2_max_deco:
-    lfsr    FSR1,tPPO2DECO
-    call    strcat_text
-	movff	char_I_ppO2_max_deco,lo
-    movlw   ppo2_warning_high_deco
-    bra     divesets_ppo2_common
-	
+	movlw	ppo2_warning_low_default
+	bra		divesets_ppo2_common
 
 	global	divesets_ppo2_min_cc
 	extern	tPPO2MINCC
@@ -3306,58 +3262,93 @@
 	lfsr	FSR1,tPPO2MINCC
 	call	strcat_text
 	movff	char_I_ppO2_min_loop,lo
-	movlw	ppo2_warning_low_cc
+	movlw	ppo2_warning_loop_default
+	bra		divesets_ppo2_common
+
+	global	divesets_ppo2_max
+	extern	tPPO2Max
+	extern	tbar
+divesets_ppo2_max:
+	lfsr	FSR1,tPPO2Max
+	call	strcat_text
+	movff	char_I_ppO2_max,lo
+	movlw	ppo2_warning_high_default
 	bra		divesets_ppo2_common
-    
-;=============================================================================
-
-    global  TFT_clear_warning_text
-TFT_clear_warning_text:
-    btfss   divemode                            ; in divemode?
-    bra     TFT_clear_warning_text2             ; No, setup for surface mode
-    bcf	    FLAG_TFT_dive_warning_text_clear	; Clear flag
-    btfsc   alternative_divelayout
-    bra	    TFT_clear_warning_text_2nd_row	; In Alt mode, clear only row 2
-    WIN_BOX_BLACK dm_warning_row, dm_warning_bot, dm_warning_column, dm_warning_rgt		; top, bottom, left, right
-    return
-TFT_clear_warning_text2:
-    WIN_BOX_BLACK surf_warning1_row, surf_warning2_row+.24, surf_warning1_column, surf_warning1_column+.76	; top, bottom, left, right
-    return
-
-    global  TFT_clear_warning_text_2nd_row
-TFT_clear_warning_text_2nd_row:
-    btfss   divemode                            ; in divemode?
-    bra     TFT_clear_warning_text_2nd_2        ; No, setup for surface mode
-    bcf	    FLAG_TFT_dive_warning_text_clr2	; Clear flag
-	WIN_BOX_BLACK dm_warning2_row, dm_warning2_bot, dm_warning2_column, dm_warning2_rgt	; top, bottom, left, right
-    return
-TFT_clear_warning_text_2nd_2:
-    WIN_BOX_BLACK surf_warning2_row, surf_warning2_row+.24, surf_warning2_column, surf_warning2_column+.76	; top, bottom, left, right
-    return
-
-    global  TFT_fillup_with_spaces
-TFT_fillup_with_spaces:         	; Fillup FSR2 with spaces (Total string length in #WREG)
-    movwf   lo                  	; save max. string length into lo
-    movf    FSR2L,W             	; Get current string length
-    subwf   lo,F                	; lo-WREG
-    btfsc   STATUS,N            	; longer then #lo already?
-    return                      	; Yes, done.
-    tstfsz  lo                 	    ; Zero?
-    bra     TFT_fillup_with_spaces2 ; No.
-    return                      	; Yes, done.
-TFT_fillup_with_spaces2:
-    PUTC    " "                 	; Add one space
-    decfsz  lo,F                	; All done?
-    bra     TFT_fillup_with_spaces2 ; No, loop
-    return                      	; Done.
+
+	global	divesets_ppo2_max_deco
+	extern	tPPO2DECO
+divesets_ppo2_max_deco:
+	lfsr	FSR1,tPPO2DECO
+	call	strcat_text
+	movff	char_I_ppO2_max_deco,lo
+	movlw	ppo2_warning_deco_default
+	;bra	divesets_ppo2_common
+
+divesets_ppo2_common:
+	movwf	up						; Save default value
+	clrf	hi
+	bsf		leftbind
+	output_16dp d'3'
+	bcf		leftbind
+	lfsr	FSR1,tbar
+	call	strcat_text
+	movf	up,W					; Default value
+	cpfseq	lo						; Current value
+	bra		divesets_ppo2_common2	; Not default, add *
+	return							; Default, Done.
+divesets_ppo2_common2:
+	PUTC	"*"
+	return							; Done.
 
 ;=============================================================================
-	
+
+	global	TFT_clear_warning_text
+TFT_clear_warning_text:
+	btfss	divemode							; in divemode?
+	bra		TFT_clear_warning_text2				; No, setup for surface mode
+	bcf		FLAG_TFT_dive_warning_text_clear	; Clear flag
+	btfsc	alternative_divelayout
+	bra		TFT_clear_warning_text_2nd_row		; In Alt mode, clear only row 2
+	WIN_BOX_BLACK dm_warning_row, dm_warning_bot, dm_warning_column, dm_warning_rgt		; top, bottom, left, right
+	return
+TFT_clear_warning_text2:
+	WIN_BOX_BLACK surf_warning1_row, surf_warning2_row+.24, surf_warning1_column, surf_warning1_column+.76	; top, bottom, left, right
+	return
+
+	global	TFT_clear_warning_text_2nd_row
+TFT_clear_warning_text_2nd_row:
+	btfss	divemode							; in divemode?
+	bra		TFT_clear_warning_text_2nd_2		; No, setup for surface mode
+	bcf		FLAG_TFT_dive_warning_text_clr2		; Clear flag
+	WIN_BOX_BLACK dm_warning2_row, dm_warning2_bot, dm_warning2_column, dm_warning2_rgt	; top, bottom, left, right
+	return
+TFT_clear_warning_text_2nd_2:
+	WIN_BOX_BLACK surf_warning2_row, surf_warning2_row+.24, surf_warning2_column, surf_warning2_column+.76	; top, bottom, left, right
+	return
+
+	global	TFT_fillup_with_spaces
+TFT_fillup_with_spaces:					; Fillup FSR2 with spaces (Total string length in #WREG)
+	movwf	lo							; save max. string length into lo
+	movf	FSR2L,W						; Get current string length
+	subwf	lo,F						; lo-WREG
+	btfsc	STATUS,N					; longer then #lo already?
+	return								; Yes, done.
+	tstfsz	lo							; Zero?
+	bra		TFT_fillup_with_spaces2		; No.
+	return								; Yes, done.
+TFT_fillup_with_spaces2:
+	PUTC	" "							; Add one space
+	decfsz	lo,F						; All done?
+	bra		TFT_fillup_with_spaces2		; No, loop
+	return								; Done.
+
+;=============================================================================
+
 	global	TFT_desaturation_time
 TFT_desaturation_time:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	STRCPY	"Desat:"
 	movff	int_O_desaturation_time+0,lo
 	movff	int_O_desaturation_time+1,hi
@@ -3371,20 +3362,20 @@
 	movff	hi,lo						; Minutes
 	output_99x
 	bcf		leftbind
-    movlw   surf_warning_length         ; Only use surface string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    movlw   .0							; TODO - needed?
-    movff   WREG,buffer+11				; TODO - needed?
+	movlw	surf_warning_length			; Only use surface string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	movlw	.0							; TODO - needed?
+	movff	WREG,buffer+11				; TODO - needed?
 	STRCAT_PRINT ""
-    bcf     win_invert
+	bcf		win_invert
 	return
 
 
 	global	TFT_nofly_time
 TFT_nofly_time:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	movff	char_I_altitude_wait,WREG
 	tstfsz	WREG
 	bra		TFT_nofly_time_1
@@ -3395,123 +3386,123 @@
 TFT_nofly_time_2:
 	movff	int_O_nofly_time+0,lo
 	movff	int_O_nofly_time+1,hi
-	call	convert_time			; converts hi:lo in minutes to hours (hi) and minutes (lo)
+	call	convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
 	bsf		leftbind
 	movf	lo,W
 	movff	hi,lo
-	movwf	hi						; exchange lo and hi...
-	output_8						; Hours
+	movwf	hi							; exchange lo and hi...
+	output_8							; Hours
 	PUTC	':'
-	movff	hi,lo					; Minutes
+	movff	hi,lo						; Minutes
 	output_99x
 	bcf		leftbind
-    movlw   surf_warning_length		; Only use surface string length
-    rcall   TFT_fillup_with_spaces 	; Fillup FSR2 with spaces (Total string length in #WREG)
-    movlw   .0						; TODO - needed?
-    movff   WREG,buffer+11			; TODO - needed?
-	STRCAT_PRINT	""
-    bcf     win_invert
+	movlw	surf_warning_length			; Only use surface string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	movlw	.0							; TODO - needed?
+	movff	WREG,buffer+11				; TODO - needed?
+	STRCAT_PRINT ""
+	bcf		win_invert
 	return
 
 ;=============================================================================
 
-    global  TFT_warning_agf
+	global	TFT_warning_agf
 TFT_warning_agf:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    call	TFT_warnings_color
-	STRCPY_TEXT tDiveaGF_active         ; "aGF!"
-    movlw   dm_warning_length           ; Divemode string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""
-    ;bcf     win_invert
-    ;return
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
+	call	TFT_attention_color
+	STRCPY_TEXT tDiveaGF_active			; "aGF!"
+	movlw	dm_warning_length			; Divemode string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	;bcf	 win_invert
+	;return
 	goto	TFT_standard_color
 
-    global  TFT_warning_fallback
+	global	TFT_warning_fallback
 TFT_warning_fallback:					; Show fallback warning
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG						; Is there room for the warning?
-    return                              ; No
-    call	TFT_warnings_color
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
+	call	TFT_warnings_color
 	STRCPY_TEXT tDiveFallback			; "Fallback!"
-    movlw   dm_warning_length			; Divemode string length
-    rcall   TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""
-    goto	TFT_standard_color			; and return...
+	movlw	dm_warning_length			; Divemode string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
 
 
 	global	TFT_info_deco
-TFT_info_deco							; show info when in decompression
+TFT_info_deco:							; show info when in decompression
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG						; Is there room for the warning?
-    return                              ; NO  - return
+	tstfsz	WREG						; Is there room for the warning?
+	return								; NO  - return
 	movlw	color_green					; YES - select green text color
-	call	TFT_set_color				;		set color
-	STRCPY_TEXT tDecoInfo				; 		write "Deco Zone"
-    movlw   dm_warning_length			; 		select Divemode string length
-    rcall   TFT_fillup_with_spaces		; 		Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""						;		print buffer
-    goto	TFT_standard_color			; 		and return...
-
-
-    global  TFT_warning_gf
-TFT_warning_gf:                         ; GF
+	call	TFT_set_color				;       set color
+	STRCPY_TEXT tDecoInfo				;       write "Deco Zone"
+	movlw	dm_warning_length			;       select Divemode string length
+	rcall	TFT_fillup_with_spaces		;       Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""						;       print buffer
+	goto	TFT_standard_color			;       and return...
+
+
+	global	TFT_warning_gf
+TFT_warning_gf:							; GF
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	movff	int_O_gradient_factor+0,lo	; bank-safe copy gradient factor
 	movff	int_O_gradient_factor+1,hi	;
-	TFT_color_code warn_gf				; Color-code Output
-	STRCPY  "GF:  "						; the two spaces are on purpose to align the output with other warnings' outputs
-    bsf     leftbind
+	call	TFT_color_code_gf			; Color-code Output
+	STRCPY	"GF:  "						; the two spaces are on purpose to align the output with other warnings' outputs
+	bsf		leftbind
 	output_8							; print value of lo only, int_O_gradient_factor is limited to 255
-    PUTC    "%"
-    movlw   dm_warning_length			; Divemode string length
-    btfss   divemode					; In Divemode?
-    movlw   surf_warning_length			; No, use surface string length
-    rcall   TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT  ""
-    bcf     leftbind
-    bcf	    win_invert
-    goto    TFT_standard_color			; and return...
+	PUTC	"%"
+	movlw	dm_warning_length			; Divemode string length
+	btfss	divemode					; In Divemode?
+	movlw	surf_warning_length			; No, use surface string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	bcf		leftbind
+	bcf		win_invert
+	goto	TFT_standard_color			; and return...
 
 
 	global	TFT_warning_mbubbles
 TFT_warning_mbubbles:
 	rcall	TFT_warning_set_window		; sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; NO
+	tstfsz	WREG						; Is there room for the warning?
+	return								; NO
 	call	TFT_attention_color			; set attention color as default
 	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
 	btfsc	WREG,mbubble_warning		; are we in the microbubbles zone right now?
 	call	TFT_warnings_color			; YES - reconfigure to warning color
 	STRCPY_TEXT tMicroBubbles
-    movlw   dm_warning_length			; divemode string length
-    btfss   divemode					; in Divemode?
-    movlw   surf_warning_length			; NO  - use surface string length
-    rcall   TFT_fillup_with_spaces		; fillup FSR2 with spaces (total string length in #WREG)
-    STRCAT_PRINT  ""	
-    goto    TFT_standard_color			; and return...
+	movlw	dm_warning_length			; divemode string length
+	btfss	divemode					; in Divemode?
+	movlw	surf_warning_length			; NO  - use surface string length
+	rcall	TFT_fillup_with_spaces		; fillup FSR2 with spaces (total string length in #WREG)
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
 
 
 	global	TFT_warning_outside
 TFT_warning_outside:
 	rcall	TFT_warning_set_window		; sets the row and column for the current warning
-    tstfsz  WREG                        ; is there room for the warning?
-    return                              ; NO
+	tstfsz	WREG						; is there room for the warning?
+	return								; NO
 	call	TFT_attention_color
 	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
 	btfsc	WREG,outside_warning		; are we outside the ZH-L16 model right now?
 	call	TFT_warnings_color			; YES - reconfigure to warning color
-	STRCPY  "X-ZHL16-X"
-    movlw   dm_warning_length			; divemode string length
-    btfss   divemode					; in Divemode?
-    movlw   surf_warning_length			; NO  - use surface string length
-    rcall   TFT_fillup_with_spaces		; fillup FSR2 with spaces (total string length in #WREG)
-    STRCAT_PRINT  ""	
-    goto    TFT_standard_color			; and return...
+	STRCPY	"X-ZHL16-X"
+	movlw	dm_warning_length			; divemode string length
+	btfss	divemode					; in Divemode?
+	movlw	surf_warning_length			; NO  - use surface string length
+	rcall	TFT_fillup_with_spaces		; fillup FSR2 with spaces (total string length in #WREG)
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
 
 
 	global	TFT_warning_gas_needs_warn
@@ -3519,22 +3510,22 @@
 TFT_warning_gas_needs_warn:
 	rcall	TFT_warning_gas_needs_war_helper
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	call	TFT_warnings_color
 	bra		TFT_warning_gas_needs_com
 TFT_warning_gas_needs_att:
 	rcall	TFT_warning_gas_needs_att_helper
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	call	TFT_attention_color
 TFT_warning_gas_needs_com:
 	STRCPY_TEXT tGasNeedsWarn			; "Gas Needs"
-    movlw   dm_warning_length           ; Divemode string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""	
-	goto	TFT_standard_color  		; and return...
+	movlw	dm_warning_length			; Divemode string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
 
 TFT_warning_gas_needs_war_helper:
 	incf	warning_counter,F			; increase counter
@@ -3551,34 +3542,34 @@
 	movlw	.12							; customview number one below gas needs view
 	movwf	menupos3					; set fake current view number
 	bsf		toggle_customview			; initiate toggle of customview -> gas needs view will be shown
-	return	
+	return
 
 
 	global	TFT_warning_IBCD
 TFT_warning_IBCD:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	call	TFT_attention_color			; select attention color as default
 	STRCPY_TEXT tIBCD					; "IBCD N2He"
-	movlw   dm_warning_length           ; Divemode string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""
-	goto	TFT_standard_color  		; and return...
-
-	
-    global  TFT_warning_sensor_disagree
-TFT_warning_sensor_disagree:            ; Show sensor disagree warning
+	movlw	dm_warning_length			; Divemode string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_warning_sensor_disagree
+TFT_warning_sensor_disagree:			; Show sensor disagree warning
 	rcall	TFT_warning_sensor_dis_helper
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    call	TFT_warnings_color
-	STRCPY_TEXT tSensorDisagree         ; "Sensors<>"
-    movlw   dm_warning_length           ; Divemode string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""
-    goto	TFT_standard_color  		; and return...
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
+	call	TFT_warnings_color
+	STRCPY_TEXT tSensorDisagree			; "Sensors<>"
+	movlw	dm_warning_length			; Divemode string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
 
 TFT_warning_sensor_dis_helper:
 	btfsc	sensor_warning				; is it a new warning?
@@ -3587,252 +3578,252 @@
 	clrf	menupos3					; set fake current view number
 	bsf		toggle_customview			; initiate toggle of customview -> sensor view will be shown
 	return
-	
+
 ;=============================================================================
-	
-TFT_warning_set_window:                 ; Sets the row and column for the current warning
-    ; ignore warning (now)?
-    decf    warning_counter,W           ; -1
-    bcf     STATUS,C
-    btfss   alternative_divelayout		; In alt mode, do not divide...
-    rrcf    WREG,W                      ; (warning_counter-1)/2
-    cpfseq  warning_page
-    retlw   .255                        ; WREG <> 0 -> Warning window not defined
-    call	TFT_standard_color
-    btfss   divemode                    ; in divemode?
-    bra     TFT_warning_set_window3     ; No, setup for surface mode
-    btfss   alternative_divelayout
-    bra	    TFT_warning_set_window3a	; standard layout
-    bra	    TFT_warning_set_window2a	; alternative layout (Only lower row used)
-TFT_warning_set_window3a:    
-    btfss   warning_counter,0           ; Toggle with each warning
-    bra		TFT_warning_set_window2
-    WIN_SMALL	dm_warning1_column, dm_warning1_row
-    bcf     second_row_warning          ; =1: The second row contains a warning
-    retlw   .0                          ; WREG=0 -> Warning window defined
+
+TFT_warning_set_window:					; Sets the row and column for the current warning
+	; ignore warning (now)?
+	decf	warning_counter,W			; -1
+	bcf		STATUS,C
+	btfss	alternative_divelayout		; In alt mode, do not divide...
+	rrcf	WREG,W						; (warning_counter-1)/2
+	cpfseq	warning_page
+	retlw	.255						; WREG <> 0 -> Warning window not defined
+	call	TFT_standard_color
+	btfss	divemode					; in divemode?
+	bra		TFT_warning_set_window3		; No, setup for surface mode
+	btfss	alternative_divelayout
+	bra		TFT_warning_set_window3a	; standard layout
+	bra		TFT_warning_set_window2a	; alternative layout (Only lower row used)
+TFT_warning_set_window3a:	
+	btfss	warning_counter,0			; Toggle with each warning
+	bra		TFT_warning_set_window2
+	WIN_SMALL dm_warning1_column, dm_warning1_row
+	bcf		second_row_warning			; =1: The second row contains a warning
+	retlw	.0							; WREG=0 -> Warning window defined
 TFT_warning_set_window2:
-    bsf     second_row_warning          ; =1: The second row contains a warning
-TFT_warning_set_window2a:    
-    WIN_SMALL	dm_warning2_column, dm_warning2_row
-    retlw   .0                          ; WREG=0 -> Warning window defined
+	bsf		second_row_warning			; =1: The second row contains a warning
+TFT_warning_set_window2a:	
+	WIN_SMALL dm_warning2_column, dm_warning2_row
+	retlw	.0							; WREG=0 -> Warning window defined
 TFT_warning_set_window3:
-    btfss   warning_counter,0           ; Toggle with each warning
-    bra	    TFT_warning_set_window4
-    WIN_SMALL	surf_warning1_column,surf_warning1_row
-    bcf     second_row_warning          ; =1: The second row contains a warning
-    retlw   .0                          ; WREG=0 -> Warning window defined
+	btfss	warning_counter,0			; Toggle with each warning
+	bra		TFT_warning_set_window4
+	WIN_SMALL surf_warning1_column,surf_warning1_row
+	bcf		second_row_warning			; =1: The second row contains a warning
+	retlw	.0							; WREG=0 -> Warning window defined
 TFT_warning_set_window4:
-    WIN_SMALL	surf_warning2_column,surf_warning2_row
-    bsf     second_row_warning          ; =1: The second row contains a warning
-    retlw   .0                          ; WREG=0 -> Warning window defined
+	WIN_SMALL surf_warning2_column,surf_warning2_row
+	bsf		second_row_warning			; =1: The second row contains a warning
+	retlw	.0							; WREG=0 -> Warning window defined
 
 
 	global	TFT_update_batt_percent_divemode
 TFT_update_batt_percent_divemode:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    movff   batt_percent,lo         	; Get battery percent
-    TFT_color_code	warn_battery		; Color-code battery percent
-    STRCPY  "Batt:"
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
+	movff	batt_percent,lo				; Get battery percent
+	call	TFT_color_code_battery		; Color-code battery percent
+	STRCPY	"Batt:"
 	bsf		leftbind
 	output_8
 	bcf		leftbind
-    PUTC    "%"
-    movlw   dm_warning_length           ; Divemode string length
-    btfss   divemode                    ; In Divemode?
-    movlw   surf_warning_length         ; No, use surface string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-	STRCAT_PRINT	""
-	bcf	win_invert
+	PUTC	"%"
+	movlw	dm_warning_length			; Divemode string length
+	btfss	divemode					; In Divemode?
+	movlw	surf_warning_length			; No, use surface string length
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	bcf		win_invert
 	goto	TFT_standard_color			; and return...
 
 
-    global  TFT_gf_mask					; Setup Mask
+	global	TFT_gf_mask					; Setup Mask
 TFT_gf_mask:
-    ; The mask
-    call    TFT_divemask_color
-    WIN_TINY          dm_custom_gf_title_col1, dm_custom_gf_title_row
-    STRCPY_TEXT_PRINT tGFactors
-    WIN_TINY          dm_custom_gf_title_col2, dm_custom_gf_title_row
-    STRCPY_TEXT_PRINT taGFactors
-    WIN_TINY          dm_custom_gf_title_col3, dm_custom_gf_title_row
-    STRCPY_TEXT_PRINT tGFInfo
-    ; Show GF (Static)
-    call    TFT_disabled_color
-    btfss   use_agf
-    call	TFT_standard_color
-    WIN_STD   dm_custom_gf_column, dm_custom_gf_row
-    bsf     leftbind
-    movff   opt_GF_low,lo
-    output_8
-    PUTC    "/"
-    movff   opt_GF_high,lo
-    output_8
-    STRCAT_PRINT   ""
-    ; Show aGF (Static)
-    call	TFT_standard_color
-    TSTOSS  opt_enable_aGF              ; =1: aGF can be selected underwater
-    bra     TFT_gf_mask2                ; Show "---" instead
-    btfss   use_agf
-    call    TFT_disabled_color
-    WIN_STD   dm_custom_agf_column, dm_custom_agf_row
-    movff   opt_aGF_low,lo
-    output_8
-    PUTC    "/"
-    movff   opt_aGF_high,lo
-    output_8
-    STRCAT_PRINT   ""
-    bcf     leftbind
-    goto	TFT_standard_color  ; and return...
+	; The mask
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_gf_title_col1, dm_custom_gf_title_row
+	STRCPY_TEXT_PRINT tGFactors
+	WIN_TINY dm_custom_gf_title_col2, dm_custom_gf_title_row
+	STRCPY_TEXT_PRINT taGFactors
+	WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
+	STRCPY_TEXT_PRINT tGFInfo
+	; Show GF (Static)
+	call	TFT_disabled_color
+	btfss	use_agf
+	call	TFT_standard_color
+	WIN_STD	dm_custom_gf_column, dm_custom_gf_row
+	bsf		leftbind
+	movff	opt_GF_low,lo
+	output_8
+	PUTC	"/"
+	movff	opt_GF_high,lo
+	output_8
+	STRCAT_PRINT ""
+	; Show aGF (Static)
+	call	TFT_standard_color
+	TSTOSS	opt_enable_aGF				; =1: aGF can be selected underwater
+	bra	 TFT_gf_mask2					; Show "---" instead
+	btfss	use_agf
+	call	TFT_disabled_color
+	WIN_STD	dm_custom_agf_column, dm_custom_agf_row
+	movff	opt_aGF_low,lo
+	output_8
+	PUTC	"/"
+	movff	opt_aGF_high,lo
+	output_8
+	STRCAT_PRINT ""
+	bcf		leftbind
+	goto	TFT_standard_color			; and return...
 
 TFT_gf_mask2:
-    WIN_STD   dm_custom_agf_column+.10, dm_custom_agf_row
-    STRCPY_PRINT   "---"
-    bcf     leftbind
-    return
-
-
-    global  TFT_gf_mask_cGF                     ; Setup Mask
+	WIN_STD	dm_custom_agf_column+.10, dm_custom_agf_row
+	STRCPY_PRINT "---"
+	bcf		leftbind
+	return
+
+
+	global	TFT_gf_mask_cGF				; Setup Mask
 TFT_gf_mask_cGF:
-    ; The mask
-    call	TFT_divemask_color
-    WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
-    STRCPY_TEXT_PRINT tGFInfo
-    goto	TFT_standard_color; and return...
-
-    global  TFT_gf_info                         ; Show GF informations
+	; The mask
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
+	STRCPY_TEXT_PRINT tGFInfo
+	goto	TFT_standard_color			; and return...
+
+	global	TFT_gf_info					; Show GF informations
 TFT_gf_info:
-    WIN_STD   dm_custom_currentgf_column, dm_custom_currentgf_row
-	movff	int_O_gradient_factor+0,lo			; gradient factor absolute (Non-GF model)
+	WIN_STD	dm_custom_currentgf_column, dm_custom_currentgf_row
+	movff	int_O_gradient_factor+0,lo	; gradient factor absolute (Non-GF model)
 	movff	int_O_gradient_factor+1,hi
-    TFT_color_code warn_gf						; Color-code Output
-    output_8									; print lo only, int_O_gradient_factor is limited to 255
-    STRCAT_PRINT   "%"
-    return
-
-
-    global  TFT_battinfo_tissues_clock_mask      ; Setup Mask
+	call	TFT_color_code_gf			; Color-code Output
+	output_8							; print lo only, int_O_gradient_factor is limited to 255
+	STRCAT_PRINT "%"
+	return
+
+
+	global	TFT_battinfo_tissues_clock_mask		; Setup Mask
 TFT_battinfo_tissues_clock_mask:
-    ; The mask
-    ; Put three columns at HUD positions
-    call    TFT_divemask_color
-    btfsc   FLAG_apnoe_mode						; In Apnoe mode?
-    bra	    TFT_battinfo_tissues_clock_mask2 	; Yes
-    btfsc   FLAG_gauge_mode						; In Gauge mode?
-    bra	    TFT_battinfo_tissues_clock_mask2 	; Yes
-    WIN_TINY dm_custom_tissue_title_column,  dm_custom_tissue_title_row
-    STRCPY_TEXT_PRINT tDiveTissues
-TFT_battinfo_tissues_clock_mask2:           	; Show only clock
-    WIN_TINY dm_custom_ead_column,     dm_custom_eadend_title_row
-    STRCPY_TEXT_PRINT tBatteryV	    			; "Battery: "
-    WIN_TINY dm_custom_clock_column,  dm_custom_clock_title_row
-    STRCPY_TEXT_PRINT tDiveClock
-    goto	TFT_standard_color					; and return...
-
-    global  TFT_battinfo_tissues_clock      	; Show EAD/END, Tissues and clock
+	; The mask
+	; Put three columns at HUD positions
+	call	TFT_divemask_color
+	btfsc	FLAG_apnoe_mode						; In Apnoe mode?
+	bra		TFT_battinfo_tissues_clock_mask2	; Yes
+	btfsc	FLAG_gauge_mode						; In Gauge mode?
+	bra		TFT_battinfo_tissues_clock_mask2	; Yes
+	WIN_TINY dm_custom_tissue_title_column, dm_custom_tissue_title_row
+	STRCPY_TEXT_PRINT tDiveTissues
+TFT_battinfo_tissues_clock_mask2:				; Show only clock
+	WIN_TINY dm_custom_ead_column, dm_custom_eadend_title_row
+	STRCPY_TEXT_PRINT tBatteryV					; "Battery: "
+	WIN_TINY dm_custom_clock_column, dm_custom_clock_title_row
+	STRCPY_TEXT_PRINT tDiveClock
+	goto	TFT_standard_color					; and return...
+
+	global	TFT_battinfo_tissues_clock	; Show EAD/END, Tissues and clock
 TFT_battinfo_tissues_clock:
-    ; Update clock and date
-    WIN_SMALL   dm_custom_clock_column, dm_custom_clock_row
-    call    TFT_clock2                      	; print clock
-
-    ; Show Battery info
-    WIN_SMALL   dm_custom_ead_column, dm_custom_ead_row
-    movff   batt_percent,lo         			; Get battery percent
-    TFT_color_code	warn_battery				; Color-code battery percent
-    bsf		leftbind
-    output_8
-    bcf		leftbind
-    STRCAT	"% "
-    movlw	0x00
-    movff	WREG,buffer+4						; Only "xxx%"
-    STRCAT_PRINT	""
-    bcf     win_invert
-    call	TFT_standard_color
-    WIN_SMALL   dm_custom_end_column, dm_custom_end_row
-    movff	batt_voltage+0,lo
-    movff	batt_voltage+1,hi
-    bsf		leftbind
-    output_16dp	.2
-    bcf		leftbind
-    PUTC	'V'
-    movff	buffer+5,buffer+4
-    movlw	0x00
-    movff	WREG,buffer+5						; Only "x.yzV"
-    STRCAT_PRINT	""
-
-    btfsc	FLAG_apnoe_mode						; In Apnoe mode?
-    return                                  	; Yes, done.
-    btfsc	FLAG_gauge_mode						; In Gauge mode?
-    return                                  	; Yes, done.
-    
-    ; Show tissue diagram
-    call    TFT_divemask_color
-    WIN_TINY dm_custom_tissue_N2_column, dm_custom_tissue_N2_row
-    STRCPY_TEXT_PRINT   tN2
-    WIN_TINY dm_custom_tissue_He_column, dm_custom_tissue_He_row
-    STRCPY_TEXT_PRINT   tHe
-    bra   DISP_tissue_saturation_graph      ; Show char_O_tissue_N2_saturation and char_O_tissue_He_saturation and return...
-
-    
-    global  TFT_pscr_info_mask
-TFT_pscr_info_mask:		    				; Show pSCR-ppO2, drop and lung ratio mask    
-    rcall   TFT_mask_ppo2
-    call    TFT_divemask_color
-    WIN_TINY dm_custom_pscr_text_drop_column, dm_custom_pscr_text_row
-    STRCPY_TEXT_PRINT tPSCR_O2_drop
-    WIN_TINY dm_custom_pscr_text_ratio_column, dm_custom_pscr_text_row
-    STRCPY_TEXT_PRINT tPSCR_lungratio
-    goto	TFT_standard_color				; and return...
-    
-    global	TFT_pscr_info					; Show pSCR-ppO2, drop and lung ratio
+	; Update clock and date
+	WIN_SMALL dm_custom_clock_column, dm_custom_clock_row
+	call	TFT_clock2					; print clock
+
+	; Show Battery info
+	WIN_SMALL	dm_custom_ead_column, dm_custom_ead_row
+	movff	batt_percent,lo				; Get battery percent
+	call	TFT_color_code_battery		; Color-code battery percent
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	STRCAT	"% "
+	movlw	0x00
+	movff	WREG,buffer+4				; Only "xxx%"
+	STRCAT_PRINT ""
+	bcf		win_invert
+	call	TFT_standard_color
+	WIN_SMALL dm_custom_end_column, dm_custom_end_row
+	movff	batt_voltage+0,lo
+	movff	batt_voltage+1,hi
+	bsf		leftbind
+	output_16dp	.2
+	bcf		leftbind
+	PUTC	'V'
+	movff	buffer+5,buffer+4
+	movlw	0x00
+	movff	WREG,buffer+5				; Only "x.yzV"
+	STRCAT_PRINT ""
+
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	return								; Yes, done.
+	btfsc	FLAG_gauge_mode				; In Gauge mode?
+	return								; Yes, done.
+
+	; Show tissue diagram
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_tissue_N2_column, dm_custom_tissue_N2_row
+	STRCPY_TEXT_PRINT tN2
+	WIN_TINY dm_custom_tissue_He_column, dm_custom_tissue_He_row
+	STRCPY_TEXT_PRINT tHe
+	bra	DISP_tissue_saturation_graph	; Show char_O_tissue_N2_saturation and char_O_tissue_He_saturation and return...
+
+
+	global	TFT_pscr_info_mask
+TFT_pscr_info_mask:						; Show pSCR-ppO2, drop and lung ratio mask	
+	rcall	TFT_mask_ppo2
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_pscr_text_drop_column, dm_custom_pscr_text_row
+	STRCPY_TEXT_PRINT tPSCR_O2_drop
+	WIN_TINY dm_custom_pscr_text_ratio_column, dm_custom_pscr_text_row
+	STRCPY_TEXT_PRINT tPSCR_lungratio
+	goto	TFT_standard_color			; and return...
+
+	global	TFT_pscr_info				; Show pSCR-ppO2, drop and lung ratio
 TFT_pscr_info:
-    ;show ppO2
-	WIN_MEDIUM  dm_custom_ceiling_ppo2_val_col, dm_custom_ceiling_value_row
+	;show ppO2
+	WIN_MEDIUM dm_custom_ceiling_ppo2_val_col, dm_custom_ceiling_value_row
 	movff	int_O_pSCR_ppO2+0,lo			; copy pSCR ppO2 to hi:lo
 	movff	int_O_pSCR_ppO2+1,hi
-	TFT_color_code warn_ppo2				; color-code output
+	call	TFT_color_code_ppo2				; color-code output
 	bsf		leftbind
-	output_16dp  .3         				; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT   ""
-    ; Show Drop
-    WIN_STD dm_custom_pscr_drop_column,dm_custom_pscr_drop_row
+	output_16dp .3							; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
+	; Show Drop
+	WIN_STD dm_custom_pscr_drop_column,dm_custom_pscr_drop_row
 	call	TFT_standard_color
 	movff	char_I_PSCR_drop,lo
-    bsf	    leftbind
-    output_8
-    STRCAT_PRINT "%"
-    ; Show lung ratio
-    WIN_STD dm_custom_pscr_ratio_column,dm_custom_pscr_ratio_row
-    movff   char_I_PSCR_lungratio,lo
-    bsf	    leftbind
-    STRCPY  "1/"
-    output_8
-    STRCAT_PRINT   ""
-    bcf	    leftbind
-    return
+	bsf		leftbind
+	output_8
+	STRCAT_PRINT "%"
+	; Show lung ratio
+	WIN_STD dm_custom_pscr_ratio_column,dm_custom_pscr_ratio_row
+	movff	char_I_PSCR_lungratio,lo
+	bsf		leftbind
+	STRCPY	"1/"
+	output_8
+	STRCAT_PRINT ""
+	bcf		leftbind
+	return
 
 
 	global	TFT_gas_needs_mask
 TFT_gas_needs_mask:
-    call	TFT_divemask_color
-    WIN_TINY dm_custom_dyn_gas_mask_column-.10,dm_custom_dyn_gas_mask_row
-    STRCPY_TEXT_PRINT	tGasNeedsBar	; "Gas Needs (bar)"
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_dyn_gas_mask_column-.10,dm_custom_dyn_gas_mask_row
+	STRCPY_TEXT_PRINT	tGasNeedsBar	; "Gas Needs (bar)"
 	goto	TFT_standard_color			; and return...
 
 	global	TFT_gas_needs
-TFT_gas_needs:							; LIMITATION: 	there is only space for 4 gases on the screen - if 5 gases
-	bsf     leftbind					;				have a pres_need > 0, then only the first 4 will be shown!
+TFT_gas_needs:							; LIMITATION: there is only space for 4 gases on the screen - if 5 gases
+	bsf		leftbind					;             have a pres_need > 0, then only the first 4 will be shown!
 	clrf	up
-	WIN_SMALL   dm_custom_dyn_gas_column1+.5,dm_custom_dyn_gas_row1
+	WIN_SMALL dm_custom_dyn_gas_column1+.5,dm_custom_dyn_gas_row1
 	call	TFT_gas_needs_helper
-    WIN_SMALL   dm_custom_dyn_gas_column1+.5,dm_custom_dyn_gas_row2
-	call 	TFT_gas_needs_helper
-	WIN_SMALL   dm_custom_dyn_gas_column2+.5,dm_custom_dyn_gas_row1
+	WIN_SMALL dm_custom_dyn_gas_column1+.5,dm_custom_dyn_gas_row2
 	call	TFT_gas_needs_helper
-    WIN_SMALL   dm_custom_dyn_gas_column2+.5,dm_custom_dyn_gas_row2
- 	call	TFT_gas_needs_helper
+	WIN_SMALL dm_custom_dyn_gas_column2+.5,dm_custom_dyn_gas_row1
+	call	TFT_gas_needs_helper
+	WIN_SMALL dm_custom_dyn_gas_column2+.5,dm_custom_dyn_gas_row2
+	call	TFT_gas_needs_helper
 	bcf		leftbind
 	return
 
@@ -3841,453 +3832,453 @@
 	movlw	.5							; number of gases
 	cpfslt	up							; check if all gases have been processed
 	bra		TFT_gas_needs_helper_1		; yes -> clear display area
-    movf    up,W						; no  -> get gas number	and check if need of that gas is > 0
+	movf	up,W						; no  -> get gas number	and check if need of that gas is > 0
 	rlncf	WREG,W						; multipy by 2
-    lfsr    FSR1,int_O_tank_pres_need+1 ; read HIGH(int_O_tank_pres_need[up])
-	movff   PLUSW1,hi					; copy to temp storage hi
+	lfsr	FSR1,int_O_tank_pres_need+1 ; read HIGH(int_O_tank_pres_need[up])
+	movff	PLUSW1,hi					; copy to temp storage hi
 	btfss	hi,int_is_zero				; check flag for pres_need == 0
 	bra		TFT_gas_needs_helper_2		; no  -> print gas type and pressure needed
 	incf	up,F						; yes -> increment to next gas...
 	bra		TFT_gas_needs_helper		; ...and try the next gas
 TFT_gas_needs_helper_1:					; no gases to show anymore, clear display area from potential remains of last invocation
-    STRCAT_PRINT "  ----   "			; overwrite outdated stuff if screen position is not needed
+	STRCAT_PRINT "  ----   "			; overwrite outdated stuff if screen position is not needed
 	return
 TFT_gas_needs_helper_2:					; output gas type and pressure needed
-	movf    up,W						; get gas number (0-4) to WREG
-	lfsr    FSR1,opt_gas_O2_ratio		; read opt_gas_O2_ratio[WREG]
-    movff   PLUSW1,lo					; copy result to lo
-    movf    up,W						; get gas number (0-4) to WREG ; SHOULD NOT BE NEEDED AS movff SHOULD NOT ALTER wreg
-    lfsr    FSR1,opt_gas_He_ratio		; read opt_gas_He_ratio[WREG]
-    movff   PLUSW1,hi					; copy result to hi
-	call    customview_show_mix			; print "Air", "O2", "21/35", etc.
+	movf	up,W						; get gas number (0-4) to WREG
+	lfsr	FSR1,opt_gas_O2_ratio		; read opt_gas_O2_ratio[WREG]
+	movff	PLUSW1,lo					; copy result to lo
+	movf	up,W						; get gas number (0-4) to WREG ; SHOULD NOT BE NEEDED AS movff SHOULD NOT ALTER wreg
+	lfsr	FSR1,opt_gas_He_ratio		; read opt_gas_He_ratio[WREG]
+	movff	PLUSW1,hi					; copy result to hi
+	call	customview_show_mix			; print "Air", "O2", "21/35", etc.
 	STRCAT	":"
-	movf    up,W						; get gas number (0-4) to WREG
+	movf	up,W						; get gas number (0-4) to WREG
 	rlncf	WREG,W						; multipy by 2
-    lfsr    FSR1,int_O_tank_pres_need+0	; read lower part of integer
-    movff   PLUSW1,lo
-    movf    up,W						; get gas number (0-4) to WREG ; SHOULD NOT BE NEEDED AS movff SHOULD NOT ALTER wreg
+	lfsr	FSR1,int_O_tank_pres_need+0	; read lower part of integer
+	movff	PLUSW1,lo
+	movf	up,W						; get gas number (0-4) to WREG ; SHOULD NOT BE NEEDED AS movff SHOULD NOT ALTER wreg
 	rlncf	WREG,W						; multipy by 2
-    lfsr    FSR1,int_O_tank_pres_need+1 ; read upper part of integer
-	movff   PLUSW1,hi
-	btfsc	hi,int_prewarning_flag		; check if pre-warning flag is set (pres_need > pres_fill * threshold)
+	lfsr	FSR1,int_O_tank_pres_need+1 ; read upper part of integer
+	movff	PLUSW1,hi
+	btfsc	hi,int_attention_flag		; check if attention flag is set (pres_need > pres_fill * threshold)
 	call	TFT_attention_color			; yes, print gas need in yellow
-	btfsc	hi,int_warning_flag			; check if warning flag is set   (pres_need > pres_fill)
-	call    TFT_warnings_color			; yes, print gas need in red
+	btfsc	hi,int_warning_flag			; check if warning flag is set	(pres_need > pres_fill)
+	call	TFT_warnings_color			; yes, print gas need in red
 	movff	int_O_tank_pres_need+1,WREG	; get HIGH(int_O_tank_pres_need[0]) which hold flag for invalid data
 	btfsc	WREG,int_invalid_flag		; check if invalid data flag is set
 	call	TFT_disabled_color			; yes, print gas need in disabled color
-	bcf		hi,int_prewarning_flag		; clear pre-warning flag for attention color
-	bcf		hi,int_warning_flag			; clear     warning flag for warning   color
+	bcf		hi,int_attention_flag		; clear attention flag for attention color
+	bcf		hi,int_warning_flag			; clear warning	flag for warning	color
 	bcf		hi,int_invalid_flag			; clear flag for invalid data (will actually only be set with 1st gas)	
-    output_16_3 						; limit to 999 and display only (0-999)
+	output_16_3							; limit to 999 and display only (0-999)
 	STRCAT_PRINT " "					; adds a space to overwrite any potential remains of earlier outputs
 	incf	up,F						; increment to next gas
-	goto	TFT_standard_color  		; and return...
-
-	
-	global  TFT_mask_ppo2				; helper function for several custom views
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_mask_ppo2				; helper function for several custom views
 TFT_mask_ppo2:
-    call    TFT_divemask_color
-    btfss   FLAG_ccr_mode 				; in CCR mode?
-    bra	    TFT_mask_ppo2a				; NO  - continue checking for pSCR and OC
-    btfsc   is_bailout					; in bailout?
-    bra	    TFT_mask_ppo2b				; YES
-    WIN_TINY dm_custom_ceiling_ppo2_col_dil,dm_custom_ceiling_text_row	; tuned position for longer text
-    STRCPY_TEXT_PRINT tppO2Dil			; print "ppO2(Dil)"
-    goto    TFT_standard_color			; and return...
+	call	TFT_divemask_color
+	btfss	FLAG_ccr_mode				; in CCR mode?
+	bra		TFT_mask_ppo2a				; NO  - continue checking for pSCR and OC
+	btfsc	is_bailout					; in bailout?
+	bra		TFT_mask_ppo2b				; YES
+	WIN_TINY dm_custom_ceiling_ppo2_col_dil,dm_custom_ceiling_text_row	; tuned position for longer text
+	STRCPY_TEXT_PRINT tppO2Dil			; print "ppO2(Dil)"
+	goto	TFT_standard_color			; and return...
 TFT_mask_ppo2a:
-    btfss   FLAG_pscr_mode 				; in pSCR mode?
-    bra	    TFT_mask_ppo2b				; NO  - continue with OC mode (or bailout)
-    btfsc   is_bailout					; in bailout?
-    bra	    TFT_mask_ppo2b				; YES
-    WIN_TINY dm_custom_ceiling_ppo2_col_dil,dm_custom_ceiling_text_row	; tuned position for longer text
-    STRCPY_TEXT_PRINT tppO2Mix			; print "ppO2(Mix)"
-    goto    TFT_standard_color			; and return... 
+	btfss	FLAG_pscr_mode				; in pSCR mode?
+	bra		TFT_mask_ppo2b				; NO  - continue with OC mode (or bailout)
+	btfsc	is_bailout					; in bailout?
+	bra		TFT_mask_ppo2b				; YES
+	WIN_TINY dm_custom_ceiling_ppo2_col_dil,dm_custom_ceiling_text_row	; tuned position for longer text
+	STRCPY_TEXT_PRINT tppO2Mix			; print "ppO2(Mix)"
+	goto	TFT_standard_color			; and return... 
 TFT_mask_ppo2b:							; OC mode or bailout
-    WIN_TINY  dm_custom_ceiling_ppo2_column, dm_custom_ceiling_text_row	; normal position
-    STRCPY_TEXT_PRINT tppO2				; in all other modes
-    goto    TFT_standard_color			; and return...
-	
+	WIN_TINY dm_custom_ceiling_ppo2_column, dm_custom_ceiling_text_row	; normal position
+	STRCPY_TEXT_PRINT tppO2				; in all other modes
+	goto	TFT_standard_color			; and return...
+
+
 	global	TFT_display_pure_ppo2		; show ppO2 of the pure gas - helper function for several custom views
 TFT_display_pure_ppo2:
-	WIN_MEDIUM  dm_custom_ceiling_ppo2_val_col, dm_custom_ceiling_value_row
+	WIN_MEDIUM dm_custom_ceiling_ppo2_val_col, dm_custom_ceiling_value_row
 	movff	int_O_pure_ppO2+0,lo		; copy ppO2 of the pure gas to hi:lo
 	movff	int_O_pure_ppO2+1,hi
-	TFT_color_code warn_ppo2			; color-code output
+	call	TFT_color_code_ppo2			; color-code output
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
 	goto	TFT_standard_color			; and return...
-	
-    
-    global  TFT_ppo2_ead_end_cns_mask			; Show ppO2, END/EAD and CNS mask
+
+
+	global TFT_ppo2_ead_end_cns_mask	; Show ppO2, END/EAD and CNS mask
 TFT_ppo2_ead_end_cns_mask:
-    rcall	TFT_mask_ppo2
-    call	TFT_divemask_color
-    WIN_TINY dm_custom_ead_column, dm_custom_eadend_title_row
-    STRCPY_TEXT_PRINT tDiveEAD_END
-    WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
-    STRCPY_TEXT_PRINT tCNS2
-    goto	TFT_standard_color					; and return...
-    
-    global  TFT_ppo2_ead_end_cns				; Show ppO2, END/EAD and CNS
+	rcall	TFT_mask_ppo2
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_ead_column, dm_custom_eadend_title_row
+	STRCPY_TEXT_PRINT tDiveEAD_END
+	WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
+	STRCPY_TEXT_PRINT tCNS2
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_ppo2_ead_end_cns		; Show ppO2, END/EAD and CNS
 TFT_ppo2_ead_end_cns:
-    ;show ppO2
-	rcall	TFT_display_pure_ppo2				; show ppO2 of the pure gas
-    ; Show END/EAD
-    WIN_SMALL   dm_custom_ead_column, dm_custom_ead_row
-    STRCPY_TEXT tEAD                            ; EAD:
-    movff   char_O_EAD,lo
-    rcall   TFT_end_ead_common                  ; print "lo m" (or ft) and limit to 8 chars
-    WIN_SMALL dm_custom_end_column, dm_custom_end_row
-    STRCPY_TEXT tEND                            ; END:
-    movff   char_O_END,lo
-    rcall   TFT_end_ead_common                  ; print "lo m" (or ft) and limit to 8 chars
-    ; Show CNS
-    WIN_STD   dm_custom_currentgf_column, dm_custom_currentgf_row
-    movff	int_O_CNS_fraction+0,lo
-    movff	int_O_CNS_fraction+1,hi
-	TFT_color_code	warn_cns					; Color-code CNS output
-    bsf		leftbind
-    output_16_3									; Displays only 0...999
-    bcf		leftbind
-    STRCAT_PRINT "%"
-    goto	TFT_standard_color					; and return...
-    
-TFT_end_ead_common:           					; print "lo m" (or ft) and limit to 8 chars
-    bsf     leftbind
-    TSTOSS  opt_units							; 0=Meters, 1=Feets
+	;show ppO2
+	rcall	TFT_display_pure_ppo2		; show ppO2 of the pure gas
+	; Show END/EAD
+	WIN_SMALL	dm_custom_ead_column, dm_custom_ead_row
+	STRCPY_TEXT tEAD					; EAD:
+	movff	char_O_EAD,lo
+	rcall	TFT_end_ead_common			; print "lo m" (or ft) and limit to 8 chars
+	WIN_SMALL dm_custom_end_column, dm_custom_end_row
+	STRCPY_TEXT tEND					; END:
+	movff	char_O_END,lo
+	rcall	TFT_end_ead_common			; print "lo m" (or ft) and limit to 8 chars
+	; Show CNS
+	WIN_STD	dm_custom_currentgf_column, dm_custom_currentgf_row
+	movff	int_O_CNS_fraction+0,lo
+	movff	int_O_CNS_fraction+1,hi
+	call	TFT_color_code_cns			; Color-code CNS output
+	bsf		leftbind
+	output_16_3							; Displays only 0...999
+	bcf		leftbind
+	STRCAT_PRINT "%"
+	goto	TFT_standard_color			; and return...
+
+TFT_end_ead_common:						; print "lo m" (or ft) and limit to 8 chars
+	bsf		leftbind
+	TSTOSS	opt_units					; 0=Meters, 1=Feets
 	bra		TFT_end_ead_common_metric
 ;TFT_end_ead_common_imperial:
-    movf    lo,W								; With lo in m
-	mullw	.100								; PRODL:PRODH = mbar/min
+	movf	lo,W						; With lo in m
+	mullw	.100						; PRODL:PRODH = mbar/min
 	movff	PRODL,lo
 	movff	PRODH,hi
-	call	convert_mbar_to_feet				; convert value in lo:hi from mbar to feet
-    output_16_3
-    STRCAT_TEXT     tFeets
-    clrf    WREG
-    movff   WREG,buffer+.8                  	; limit string length to 8
-    bra     TFT_end_ead_common_exit
+	call	convert_mbar_to_feet		; convert value in lo:hi from mbar to feet
+	output_16_3
+	STRCAT_TEXT tFeets
+	clrf	WREG
+	movff	WREG,buffer+.8				; limit string length to 8
+	bra	 TFT_end_ead_common_exit
 TFT_end_ead_common_metric:
-    output_8
-    STRCAT_TEXT     tMeters
+	output_8
+	STRCAT_TEXT tMeters
 TFT_end_ead_common_exit:
-    bcf     leftbind
-    movlw   .8
-    rcall   TFT_fillup_with_spaces          	; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""
-    return
-
-
-    global  TFT_sensor_check_mask		; show ppO2 of O2 and Diluent mask
+	bcf		leftbind
+	movlw	.8
+	rcall	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	return
+
+
+	global	TFT_sensor_check_mask		; show ppO2 of O2 and Diluent mask
 TFT_sensor_check_mask:
-    call    TFT_divemask_color
-    WIN_TINY dm_custom_s_check_text_column, dm_custom_s_check_text_row
-    STRCPY_TEXT_PRINT   tSensorCheck
-    WIN_TINY dm_custom_ppO2_text_column, dm_custom_s_check_text_row
-    STRCPY_TEXT_PRINT tppO2O2
-    WIN_TINY dm_custom_ppDil_text_column, dm_custom_s_check_text_row
-    STRCPY_TEXT_PRINT tppO2Dil
-    goto	TFT_standard_color			; and return...
-
-    global  TFT_sensor_check			; show ppO2 of O2 and Diluent
+	call	TFT_divemask_color
+	WIN_TINY dm_custom_s_check_text_column, dm_custom_s_check_text_row
+	STRCPY_TEXT_PRINT tSensorCheck
+	WIN_TINY dm_custom_ppO2_text_column, dm_custom_s_check_text_row
+	STRCPY_TEXT_PRINT tppO2O2
+	WIN_TINY dm_custom_ppDil_text_column, dm_custom_s_check_text_row
+	STRCPY_TEXT_PRINT tppO2Dil
+	goto	TFT_standard_color			; and return...
+
+	global	TFT_sensor_check			; show ppO2 of O2 and Diluent
 TFT_sensor_check:
-    ; Show ppO2 of O2 in this depth
-    WIN_MEDIUM dm_custom_s_check_ppo2_o2_column, dm_custom_s_check_value_row
+	; Show ppO2 of O2 in this depth
+	WIN_MEDIUM dm_custom_s_check_ppo2_o2_column, dm_custom_s_check_value_row
 	movff	int_O_O2_ppO2+0,lo			; copy ppO2 of pure O2 to hi:lo
 	movff	int_O_O2_ppO2+1,hi
-	TFT_color_code warn_ppo2			; color-code output
+	call	TFT_color_code_ppo2			; color-code output
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
-    ; Show ppO2 of the diluent in this depth
-    WIN_MEDIUM   dm_custom_s_check_ppo2_dil_col, dm_custom_s_check_value_row
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
+	; Show ppO2 of the diluent in this depth
+	WIN_MEDIUM	dm_custom_s_check_ppo2_dil_col, dm_custom_s_check_value_row
 	movff	int_O_pure_ppO2+0,lo		; copy ppO2 of pure gas to hi:lo
 	movff	int_O_pure_ppO2+1,hi
-	TFT_color_code warn_ppo2			; color-code output
+	call	TFT_color_code_ppo2			; color-code output
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-    STRCAT_PRINT ""
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	STRCAT_PRINT ""
 	goto	TFT_standard_color			; and return...
 
 ;=============================================================================
 
-    global  TFT_surface_lastdive
+	global	TFT_surface_lastdive
 TFT_surface_lastdive:
-    call    TFT_divemask_color
-    WIN_TINY    surf_gaslist_column,surf_gaslist_row+.5
-    STRCAT_TEXT_PRINT   tLastDive		    ; Last Dive:
-    WIN_TINY    surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)+.5
-    STRCAT_TEXT_PRINT   tDivetime		    ; Divetime
-    WIN_TINY    surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)+.5
-    STRCAT_TEXT_PRINT   tMaxDepth		    ; Max. Depth
-    call	TFT_standard_color
-    WIN_SMALL    surf_gaslist_column+.48,surf_gaslist_row
-	
+	call	TFT_divemask_color
+	WIN_TINY surf_gaslist_column,surf_gaslist_row+.5
+	STRCAT_TEXT_PRINT	tLastDive			; Last Dive:
+	WIN_TINY surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)+.5
+	STRCAT_TEXT_PRINT	tDivetime			; Divetime
+	WIN_TINY surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)+.5
+	STRCAT_TEXT_PRINT	tMaxDepth			; Max. Depth
+	call	TFT_standard_color
+	WIN_SMALL surf_gaslist_column+.48,surf_gaslist_row
+
 	movff	int_O_desaturation_time+0,lo	; bank-safe copies
 	movff	int_O_desaturation_time+1,WREG
 	iorwf	lo,W							; check if desaturation time is zero
-    bz		TFT_surface_lastdive_1			; YES - show last dive time
+	bz		TFT_surface_lastdive_1			; YES - show last dive time
 	movff	surface_interval+0,lo			; NO  - show dive interval
 	movff	surface_interval+1,hi
-	call	convert_time				; lo=mins, hi=hours
+	call	convert_time					; lo=mins, hi=hours
 	movf	hi,W
 	movff	lo,hi
-	movwf	lo							; exchange lo and hi
-	bsf	    leftbind
+	movwf	lo								; exchange lo and hi
+	bsf		leftbind
 	output_99x
-	PUTC    'h'
+	PUTC	'h'
 	movff	hi,lo
 	output_99x
 	STRCAT_PRINT "m "
 	bra		TFT_surface_lastdive_2
 TFT_surface_lastdive_1:
-    movff   lastdive_time+0,xC+0
-    movff   lastdive_time+1,xC+1
-    movff   lastdive_time+2,xC+2
-    movff   lastdive_time+3,xC+3
-    movlw   LOW	    .3600
-    movwf   xB+0
-    movlw   HIGH    .3600
-    movwf   xB+1						; One day = 3600s
-    call    div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-    ;xC+0:xC+1 -> Full hours
-    movff   xC+1,xA+1
-    movff   xC+0,xA+0
-    clrf    xB+1
-    movlw   .24
-    movwf   xB+0
-    call    div16x16					;xA/xB=xC with xA+0 as remainder 	
-    movff   xC+0,lo
-    movff   xC+1,hi						; Full days
-    bsf	    leftbind
-    output_16
-    PUTC    "d"
-    movff   xA+0,lo						; Full hours
-    output_8
+	movff	lastdive_time+0,xC+0
+	movff	lastdive_time+1,xC+1
+	movff	lastdive_time+2,xC+2
+	movff	lastdive_time+3,xC+3
+	movlw	LOW  .3600
+	movwf	xB+0
+	movlw	HIGH .3600
+	movwf	xB+1							; One day = 3600s
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	;xC+0:xC+1 -> Full hours
+	movff	xC+1,xA+1
+	movff	xC+0,xA+0
+	clrf	xB+1
+	movlw	.24
+	movwf	xB+0
+	call	div16x16						;xA/xB=xC with xA+0 as remainder
+	movff	xC+0,lo
+	movff	xC+1,hi							; Full days
+	bsf		leftbind
+	output_16
+	PUTC	"d"
+	movff	xA+0,lo							; Full hours
+	output_8
 	STRCAT_PRINT "h "
 TFT_surface_lastdive_2:
-    WIN_SMALL    surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.1)
-    movff   lastdive_duration+0,lo
-    movff   lastdive_duration+1,hi
-    output_16							; divetime minutes
-    PUTC    ":"
-    movff   lastdive_duration+2,lo
-    output_99x							; divetime seconds
-    STRCAT_PRINT    ""
-    WIN_SMALL    surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.2)
-    movff   lastdive_maxdepth+0,lo
-    movff   lastdive_maxdepth+1,hi
-    TSTOSS  opt_units					; 0=Meters, 1=Feets
-    bra	    TFT_surface_lastdive_metric
+	WIN_SMALL surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.1)
+	movff	lastdive_duration+0,lo
+	movff	lastdive_duration+1,hi
+	output_16								; divetime minutes
+	PUTC	":"
+	movff	lastdive_duration+2,lo
+	output_99x								; divetime seconds
+	STRCAT_PRINT ""
+	WIN_SMALL	surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.2)
+	movff	lastdive_maxdepth+0,lo
+	movff	lastdive_maxdepth+1,hi
+	TSTOSS	opt_units						; 0=Meters, 1=Feets
+	bra		TFT_surface_lastdive_metric
 	;imperial
-    rcall   convert_mbar_to_feet    	; convert value in lo:hi from mbar to feet
-    output_16_3                         ; limit to 999 and display only (0-999)
-    STRCAT_TEXT tFeets1
-    bra	    TFT_surface_lastdive2
+	rcall	convert_mbar_to_feet			; convert value in lo:hi from mbar to feet
+	output_16_3								; limit to 999 and display only (0-999)
+	STRCAT_TEXT tFeets1
+	bra		TFT_surface_lastdive2
 
 TFT_surface_lastdive_metric:
-    bsf     ignore_digit5               ; no cm...
-    movlw   d'1'						; +1
-    movff   WREG,ignore_digits			; no 1000m
-    output_16dp .3  					; xxx.y
-    STRCAT_TEXT tMeters
+	bsf		ignore_digit5					; no cm...
+	movlw	d'1'							; +1
+	movff	WREG,ignore_digits				; no 1000m
+	output_16dp .3							; xxx.y
+	STRCAT_TEXT tMeters
 TFT_surface_lastdive2:
-    STRCAT_PRINT    ""
-    bcf	    leftbind
-    return  							; Done.
+	STRCAT_PRINT ""
+	bcf		leftbind
+	return									; Done.
 
 ;=============================================================================
-	
-    global  TFT_surface_tissues
-TFT_surface_tissues:             		; Show Tissue diagram in surface mode
-    WIN_SMALL    surf_tissue_N2_column,surf_tissue_N2_row
-    STRCPY_TEXT_PRINT   tN2
-    WIN_SMALL    surf_tissue_He_column,surf_tissue_He_row
-    STRCPY_TEXT_PRINT   tHe
-
-    movlw	color_deepblue
-	call	TFT_set_color				; Make this configurable?
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.29,.29
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.37,.37
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.45,.45
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.53,.53
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.61,.61
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.69,.69
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.77,.77
-    WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.85,.85
-    WIN_FRAME_STD	  surf_tissue_diagram_top, surf_tissue_diagram_bottom, surf_tissue_diagram_left, surf_tissue_diagram_right    ; outer frame
+
+	global	TFT_surface_tissues
+TFT_surface_tissues:						; Show Tissue diagram in surface mode
+	WIN_SMALL surf_tissue_N2_column,surf_tissue_N2_row
+	STRCPY_TEXT_PRINT tN2
+	WIN_SMALL surf_tissue_He_column,surf_tissue_He_row
+	STRCPY_TEXT_PRINT tHe
+
+	movlw	color_deepblue
+	call	TFT_set_color					; Make this configurable?
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.29,.29
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.37,.37
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.45,.45
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.53,.53
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.61,.61
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.69,.69
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.77,.77
+	WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.85,.85
+	WIN_FRAME_STD     surf_tissue_diagram_top, surf_tissue_diagram_bottom, surf_tissue_diagram_left, surf_tissue_diagram_right	; outer frame
 
 	movlw	.1
-	movff	WREG,win_height             								; row bottom (0-239)
-	
-    ;---- Draw N2 Tissues ----------------------------------------------------	
-
-    movlw   surf_tissue_diagram_left+.4 								; start position for N2 bars
-	movff	WREG,win_leftx2             								; column left (0-159)
+	movff	WREG,win_height												; row bottom (0-239)
+
+	;---- Draw N2 Tissues ----------------------------------------------------
+
+	movlw	surf_tissue_diagram_left+.4									; start position for N2 bars
+	movff	WREG,win_leftx2												; column left (0-159)
 	movlw	surf_tissue_diagram_right - surf_tissue_diagram_left - .4	; max width for N2 bars
-	movff   WREG,win_width
+	movff	WREG,win_width
 
 	lfsr	FSR2, char_O_tissue_N2_saturation
 	movlw	d'16'
-	movwf	wait_temp                   		; 16 tissues
-	clrf	waitms_temp                 		; row offset
+	movwf	lo															; 16 tissues
+	clrf	hi															; row offset
 surf_tissue_saturation_graph_N2:
-    movlw   surf_tissue_diagram_top+.23 		; surface mode
-	addwf	waitms_temp,W
-	movff	WREG,win_top                		; row top (0-239)
-    rcall   surf_tissue_saturation_loop 		; show one tissue
-	decfsz	wait_temp,F
+	movlw	surf_tissue_diagram_top+.23									; surface mode
+	addwf	hi,W
+	movff	WREG,win_top												; row top (0-239)
+	rcall	surf_tissue_saturation_loop									; show one tissue
+	decfsz	lo,F
 	bra		surf_tissue_saturation_graph_N2
 
-    ;---- Draw He Tissues ----------------------------------------------------
-	
+	;---- Draw He Tissues ----------------------------------------------------
+
 	movlw	surf_tissue_diagram_left + .24								; start position for He bars (.15 without x2)
-	movff	WREG,win_leftx2 											; column left (0-159)
+	movff	WREG,win_leftx2												; column left (0-159)
 	movlw	surf_tissue_diagram_right - surf_tissue_diagram_left - .24	; max width for He bars
-	movff 	WREG,win_width
-	
+	movff	WREG,win_width
+
 	lfsr	FSR2, char_O_tissue_He_saturation
 	movlw	d'16'
-	movwf	wait_temp                   		; 16 tissues
-	clrf	waitms_temp                 		; row offset
+	movwf	lo															; 16 tissues
+	clrf	hi													; row offset
 surf_tissue_saturation_graph_He:
-    movlw   surf_tissue_diagram_top+.23+.57    	; surface mode
-	addwf	waitms_temp,W
-	movff	WREG,win_top                		; row top (0-239)
-    rcall   surf_tissue_saturation_loop    		; show one tissue
-	decfsz	wait_temp,F
+	movlw	surf_tissue_diagram_top+.23+.57								; surface mode
+	addwf	hi,W
+	movff	WREG,win_top												; row top (0-239)
+	rcall	surf_tissue_saturation_loop									; show one tissue
+	decfsz	lo,F
 	bra		surf_tissue_saturation_graph_He
-	
-	WIN_SMALL surf_tissue_He_column+.22,surf_tissue_He_row	; position in-between tissue bars
+
+	WIN_SMALL surf_tissue_He_column+.22,surf_tissue_He_row				; position in-between tissue bars
 	movff	int_O_CNS_fraction+0,lo
 	movff	int_O_CNS_fraction+1,hi
-	TFT_color_code	warn_cns
-	STRCPY_TEXT tCNS2							; CNS:
+	call	TFT_color_code_cns
+	STRCPY_TEXT tCNS2													; CNS:
 	bsf		leftbind
-	output_16_3									; Displays only 0...999
+	output_16_3															; Displays only 0...999
 	bcf		leftbind
 	STRCAT_PRINT "%"
-	goto	TFT_standard_color					; and return...
+	goto	TFT_standard_color											; and return...
 
 surf_tissue_saturation_loop:
-    call	TFT_standard_color
-    movlw   .2                          ; row spacing
-	addwf   waitms_temp,F
-	movf	POSTINC2,W                  ; get tissue load
+	call	TFT_standard_color
+	movlw	.2							; row spacing
+	addwf	hi,F
+	movf	POSTINC2,W					; get tissue load
 	bcf		WREG,7						; clear flag bit for sat/desat info (not used in surface mode)
 	rlncf	WREG,W						; multiply with 2 (previously cleared bit 7 will be rotated to bit 0)
 	incf	WREG,W						; add 1 for a minimum visible bar (He-bars could be invisible else-wise)
-	movwf   temp1
-    movff   win_width+0,WREG			; get max window width (win_width)
-    cpfslt	temp1						; skip if WREG < win_width
-    movwf	temp1						; crop length to win_width
+	movwf	up
+	movff	win_width+0,WREG			; get max window width (win_width)
+	cpfslt	up							; skip if WREG < win_width
+	movwf	up							; crop length to win_width
 										; no need to be able to draw longer bars –
 										; we are at the surface and if bars would
 										; even touch the max length possible here,
 										; the diver would be in severe decompression
 										; issues if not dead already...
-    movff   temp1,win_bargraph
-    clrf    win_width+1
-    goto	TFT_box						; and return...
+	movff	up,win_bargraph
+	clrf	win_width+1
+	goto	TFT_box						; and return...
 
 ;=============================================================================
 ; Draw saturation graph in dive mode.
 
 DISP_tissue_saturation_graph:
-    ;---- Draw Frame
-    call	TFT_standard_color
-    WIN_FRAME_COLOR16   dm_custom_tissue_diagram_top, dm_custom_tissue_diagram_bottom, dm_custom_tissue_diagram_left, .159    ; outer frame
+	;---- Draw Frame
+	call	TFT_standard_color
+	WIN_FRAME_COLOR16 dm_custom_tissue_diagram_top, dm_custom_tissue_diagram_bottom, dm_custom_tissue_diagram_left, .159	; outer frame
 
 	movlw	.1
-	movff	WREG,win_height             				; row bottom (0-239)
-	
-    ;---- Draw N2 Tissues ----------------------------------------------------	
-	
-    movlw   dm_custom_tissue_diagram_left+.3      		; divemode
-	movff	WREG,win_leftx2             				; column left (0-159)
-	movlw	.159-dm_custom_tissue_diagram_left-.4  		; width
-	movff   WREG,win_width
+	movff	WREG,win_height							; row bottom (0-239)
+
+	;---- Draw N2 Tissues ----------------------------------------------------
+
+	movlw	dm_custom_tissue_diagram_left+.3		; divemode
+	movff	WREG,win_leftx2							; column left (0-159)
+	movlw	.159-dm_custom_tissue_diagram_left-.4	; width
+	movff	WREG,win_width
 
 	lfsr	FSR2, char_O_tissue_N2_saturation
 	movlw	d'16'
-	movwf	wait_temp                   				; 16 tissues
-	clrf	waitms_temp                 				; row offset
+	movwf	lo											; 16 tissues
+	clrf	hi											; row offset
 tissue_saturation_graph_N2:
-    movlw   dm_custom_tissue_diagram_top+.3        		; divemode
-    rcall   tissue_saturation_graph_loop    			; show one tissue
-	decfsz	wait_temp,F
+	movlw	dm_custom_tissue_diagram_top+.3				; divemode
+	rcall	tissue_saturation_graph_loop				; show one tissue
+	decfsz	lo,F
 	bra		tissue_saturation_graph_N2
 
-    ;---- Draw He Tissues ----------------------------------------------------
-	
+	;---- Draw He Tissues ----------------------------------------------------
+
 	movlw	dm_custom_tissue_diagram_left + .8			; divemode
 	movff	WREG,win_leftx2								; column left (0-159)
 	movlw	.159 - dm_custom_tissue_diagram_left - .14	; width
 	movff	WREG,win_width
-		
+
 	lfsr	FSR2, char_O_tissue_He_saturation
 	movlw	d'16'
-	movwf	wait_temp									; 16 tissues
-	clrf	waitms_temp									; row offset
+	movwf	lo											; 16 tissues
+	clrf	hi											; row offset
 tissue_saturation_graph_He:
-    movlw   dm_custom_tissue_diagram_top+.3+.22			; divemode
-    rcall   tissue_saturation_graph_loop    			; show one tissue
-	decfsz	wait_temp,F
+	movlw	dm_custom_tissue_diagram_top+.3+.22			; divemode
+	rcall	tissue_saturation_graph_loop				; show one tissue
+	decfsz	lo,F
 	bra		tissue_saturation_graph_He
 	goto	TFT_standard_color							; and return...
 
 tissue_saturation_graph_loop:
-    addwf	waitms_temp,W
-	movff	WREG,win_top                				; row top (0-239)
-	movlw   color_cyan									; preset color for tissues with decreasing pressure
-    call	TFT_set_color
-	incf	waitms_temp,F
+	addwf	hi,W
+	movff	WREG,win_top								; row top (0-239)
+	movlw	color_cyan									; preset color for tissues with decreasing pressure
+	call	TFT_set_color
+	incf	hi,F
 	movf	POSTINC2,W
 	btfss	WREG,7										; check fs flag for increasing tissue pressure set
 	bra		tissue_saturation_graph_loop_1				; NO  - keep color
-	movwf	temp1										; YES - buffer WREG
-	movlw   color_orange								; 		select color for tissues with increasing pressure
-    call	TFT_set_color								;		change color
-	movf	temp1,W										;		restore WREG
+	movwf	up											; YES - buffer WREG
+	movlw	color_orange								;       select color for tissues with increasing pressure
+	call	TFT_set_color								;       change color
+	movf	up,W										;       restore WREG
 tissue_saturation_graph_loop_1:
 	bcf		WREG,7										; clear flag bit
-    bcf		STATUS,C
-	rrcf	WREG                        				; divide by 2
+	bcf		STATUS,C
+	rrcf	WREG										; divide by 2
 	incf	WREG,W										; add a bit for a minimum visible bar
-	movwf   temp1
-	;movlw	.1
-    ;addwf	temp1,F                     				; add a bit for a minimum visible bar (old version)
-	movf	win_width,W                					; get max window width (win_width)
-	cpfslt	temp1                       				; skip if WREG < win_width
-	movwf	temp1
-	movff   temp1,win_bargraph
-    clrf    win_width+1
-    goto    TFT_box	    								; and return...
+	movwf	up
+	movf	win_width,W									; get max window width (win_width)
+	cpfslt	up											; skip if WREG < win_width
+	movwf	up
+	movff	up,win_bargraph
+	clrf	win_width+1
+	goto	TFT_box										; and return...
 
 ;=============================================================================
 
 	global	TFT_display_cns
 TFT_display_cns:
 	call	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG						; Is there room for the warning?
-    return								; No
-    STRCPY_TEXT tCNS					; CNS:
-    movff	int_O_CNS_fraction+0,lo
-    movff	int_O_CNS_fraction+1,hi
-    TFT_color_code	warn_cns			; Color-code CNS output
-    bsf		leftbind
-    output_16_3							; Displays only 0...999
-    bcf		leftbind
-    PUTC    "%"
-    movlw   dm_warning_length			; Divemode string length
-    btfss   divemode					; In Divemode?
-    movlw   surf_warning_length			; No, use surface string length
-    call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
+	STRCPY_TEXT tCNS					; CNS:
+	movff	int_O_CNS_fraction+0,lo
+	movff	int_O_CNS_fraction+1,hi
+	call	TFT_color_code_cns			; Color-code CNS output
+	bsf		leftbind
+	output_16_3							; Displays only 0...999
+	bcf		leftbind
+	PUTC	"%"
+	movlw	dm_warning_length			; Divemode string length
+	btfss	divemode					; In Divemode?
+	movlw	surf_warning_length			; No, use surface string length
+	call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
 	bcf		win_invert
 	goto	TFT_standard_color			; and return...
@@ -4296,50 +4287,50 @@
 	global	TFT_display_eod_cns
 TFT_display_eod_cns:
 	call	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG						; Is there room for the warning?
-    return								; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	call	TFT_warnings_color			; switch to warnings (red) text color
 	STRCPY_TEXT tCNSeod					; end-of-dive CNS warning text
-    movlw   dm_warning_length			; Divemode string length
-    call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	movlw	dm_warning_length			; Divemode string length
+	call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
 	goto	TFT_standard_color			; and return...
 
 
-	global	TFT_display_ppo2	
+	global	TFT_display_ppo2
 TFT_display_ppo2:
 	call	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG						; Is there room for the warning?
-    return								; No
+	tstfsz	WREG						; Is there room for the warning?
+	return								; No
 	movff	int_O_pure_ppO2+0,lo		; copy ppO2 of the pure gas (OC: = breathed gas, loop: = diluent/premix) to hi:lo
 	movff	int_O_pure_ppO2+1,hi
-	TFT_color_code warn_ppo2			; Color-code output
-    btfss   FLAG_ccr_mode 				; in CCR mode?
-    bra	    TFT_display_diluent_1		; NO  - continue with pSCR or OC 
-    btfsc   is_bailout 					; YES - in bailout?
-    bra	    TFT_display_diluent_2		; 		YES - continue with OC 
-    STRCPY_TEXT tdil					; 		NO  - print "Dil:"
-    bra	    TFT_display_diluent_3
+	call	TFT_color_code_ppo2			; Color-code output
+	btfss	FLAG_ccr_mode				; in CCR mode?
+	bra		TFT_display_diluent_1		; NO  - continue with pSCR or OC 
+	btfsc	is_bailout					; YES - in bailout?
+	bra		TFT_display_diluent_2		;       YES - continue with OC 
+	STRCPY_TEXT tdil					;       NO  - print "Dil:"
+	bra		TFT_display_diluent_3
 TFT_display_diluent_1:
-	btfss   FLAG_pscr_mode 				; in pSCR mode?
-    bra	    TFT_display_diluent_2		; NO  - continue with pSCR or OC 
-    btfsc   is_bailout 					; YES - in bailout?
-    bra	    TFT_display_diluent_2		; 		YES - continue with OC 
-    STRCPY_TEXT tmix					; 		NO  - print "Mix:"
-    bra	    TFT_display_diluent_3
+	btfss	FLAG_pscr_mode				; in pSCR mode?
+	bra		TFT_display_diluent_2		; NO  - continue with pSCR or OC 
+	btfsc	is_bailout					; YES - in bailout?
+	bra		TFT_display_diluent_2		;       YES - continue with OC 
+	STRCPY_TEXT tmix					;       NO  - print "Mix:"
+	bra		TFT_display_diluent_3
 TFT_display_diluent_2:
-    STRCPY_TEXT tppO2                   ; OC mode or bailout, print "ppO2:"
+	STRCPY_TEXT tppO2					; OC mode or bailout, print "ppO2:"
 TFT_display_diluent_3:
 	bsf		leftbind
-	output_16dp  .3         			; x.xx bar
-    bcf		leftbind
-	movlw   dm_warning_length			; Divemode string length
-    call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	output_16dp .3						; x.xx bar
+	bcf		leftbind
+	movlw	dm_warning_length			; Divemode string length
+	call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
 	goto	TFT_standard_color			; and return...
-	
+
 ;=============================================================================
-	
+
 	global	TFT_LogOffset_Logtitle
 TFT_LogOffset_Logtitle:
 	STRCPY_TEXT tLogOffset
@@ -4349,25 +4340,25 @@
 	output_16_4
 	bcf		leftbind
 	PUTC	" "
-	return							; No "_PRINT" here...
-	
+	return								; No "_PRINT" here...
+
 ;=============================================================================
-	
+
 	global	adjust_depth_with_salinity
-	global  adjust_depth_with_salinity_log
+	global	adjust_depth_with_salinity_log
 adjust_depth_with_salinity:			; computes salinity setting into lo:hi [mbar]
-	btfsc	simulatormode_active	; Do not apply salinity in Simulatormode
+	btfsc	simulatormode_active	; Do not apply salinity in simulator mode
 	return
-    movff   opt_salinity,WREG       ; 0-5%
+	movff	opt_salinity,WREG		; 0-5%
 adjust_depth_with_salinity_log:		; computes salinity setting (FROM WREG!) into lo:hi [mbar]
-	addlw	d'100'                  ; 1.00kg/l
-	movwf	wait_temp
-	
+	addlw	d'100'					; 1.00kg/l
+	movwf	up
+
 	movlw	d'105'					; 105% ?
-	cpfslt	wait_temp				; Salinity higher limit
+	cpfslt	up						; Salinity higher limit
 	return							; Out of limit, do not adjust lo:hi
 	movlw	d'99'					; 99% ?
-	cpfsgt	wait_temp				; Salinity lower limit
+	cpfsgt	up						; Salinity lower limit
 	return							; Out of limit, do not adjust lo:hi
 
 	movff	lo,xA+0
@@ -4377,77 +4368,77 @@
 	movwf	xB+0
 	clrf	xB+1
 	call	mult16x16				; xA*xB=xC (lo:hi * 100)
-	movff	wait_temp,xB+0			; Salinity
+	movff	up,xB+0					; Salinity
 	clrf	xB+1
-	call	div32x16  				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,lo
 	movff	xC+1,hi					; restore lo and hi with updated value
 	return
 
 ;=============================================================================
-	
-	global	convert_mbar_to_feet   	; convert value in lo:hi from mbar to feet
-convert_mbar_to_feet:              	; convert value in lo:hi from mbar to feet
+
+	global	convert_mbar_to_feet	; convert value in lo:hi from mbar to feet
+convert_mbar_to_feet:				; convert value in lo:hi from mbar to feet
 	movff	lo,xA+0
 	movff	hi,xA+1
 
-	movlw	LOW 	d'328'          ; 328feet/100m
+	movlw	LOW  d'328'				; 328feet/100m
 	movwf	xB+0
-	movlw	HIGH 	d'328'
+	movlw	HIGH d'328'
 	movwf	xB+1
 
-	call	mult16x16			    ; xA*xB=xC (lo:hi * 328)
-
-	movlw	d'50'                   ; round up
+	call	mult16x16				; xA*xB=xC (lo:hi * 328)
+
+	movlw	d'50'					; round up
 	addwf	xC+0,F
 	movlw	0
 	addwfc	xC+1,F
 	addwfc	xC+2,F
 	addwfc	xC+3,F
 
-    movlw   LOW  .10000
-    movwf   xB+0
-    movlw   HIGH .10000
-    movwf   xB+1
-
-	call	div32x16  			    ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movlw	LOW  .10000
+	movwf	xB+0
+	movlw	HIGH .10000
+	movwf	xB+1
+
+	call	div32x16				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 
 	movff	xC+0,lo
-	movff	xC+1,hi				    ; restore lo and hi with updated value
+	movff	xC+1,hi					; restore lo and hi with updated value
 	return
 
 ;=============================================================================	
 
-    global    convert_celsius_to_fahrenheit    ; convert value in lo:hi from celsius to fahrenheit
-convert_celsius_to_fahrenheit:      ; convert value in lo:hi from celsius to fahrenheit
-    movff   lo,xA+0                 ; temperature in 1/10 of °C
-    movff   hi,xA+1
-   
-    movlw   LOW  d'1000'            ; offset °C value by 1000 to get out of any negative numbers
-    addwf   xA+0,F
-    movlw   HIGH d'1000'
-    addwfc  xA+1,F
-
-    movlw   d'18'                   ; adjust scaling: 1°C = 1.8°F
-    movwf   xB+0
-    clrf    xB+1
-
-    call    mult16x16               ; xA*xB=xC (lo:hi * 18)
-
-    movlw   d'10'
-    movwf   xB+0
-    clrf    xB+1
-
-    call    div32x16                ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-
-    movlw   LOW  d'1480'            ; adjust offset: subtract above offset of 1000 * 1.8 = 1800 now and add 320 => subtract 1480
-    subwf   xC+0,F
-    movlw   HIGH d'1480'
-    subwfb  xC+1,F
-   
-    movff   xC+0,lo
-    movff   xC+1,hi                 ; restore lo and hi with updated value
-    return
+	global	convert_celsius_to_fahrenheit	; convert value in lo:hi from celsius to fahrenheit
+convert_celsius_to_fahrenheit:		; convert value in lo:hi from celsius to fahrenheit
+	movff	lo,xA+0					; temperature in 1/10 of °C
+	movff	hi,xA+1
+	
+	movlw	LOW  d'1000'			; offset °C value by 1000 to get out of any negative numbers
+	addwf	xA+0,F
+	movlw	HIGH d'1000'
+	addwfc	xA+1,F
+
+	movlw	d'18'					; adjust scaling: 1°C = 1.8°F
+	movwf	xB+0
+	clrf	xB+1
+
+	call	mult16x16				; xA*xB=xC (lo:hi * 18)
+
+	movlw	d'10'
+	movwf	xB+0
+	clrf	xB+1
+
+	call	div32x16				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+
+	movlw	LOW  d'1480'			; adjust offset: subtract above offset of 1000 * 1.8 = 1800 now and add 320 => subtract 1480
+	subwf	xC+0,F
+	movlw	HIGH d'1480'
+	subwfb	xC+1,F
+
+	movff	xC+0,lo
+	movff	xC+1,hi					; restore lo and hi with updated value
+	return
 
 ;=============================================================================
 
--- a/src/tft_outputs.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/tft_outputs.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File tft_outputs.inc							REFACTORED VERSION	V2.94
+;   File tft_outputs.inc							REFACTORED VERSION	V2.97
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -8,41 +8,34 @@
 ; HISTORY
 ;  2011-08-07 : [mH] moving from OSTC code
 
-; Macros
-	extern	TFT_color_code1
-TFT_color_code macro color_code_temp
-	movlw	color_code_temp
-	call	TFT_color_code1
-	endm
-
 ; Surface mode
 	extern	TFT_surface_lastdive
-    extern  TFT_show_OC_startgas_surface   		; Show first gas and "OSTC2-like" active gases
+	extern	TFT_show_OC_startgas_surface		; Show first gas and "OSTC2-like" active gases
 	extern	TFT_serial
 	extern	TFT_clock
 	extern	TFT_date
 	extern	TFT_desaturation_time
 	extern	TFT_nofly_time
 	extern	TFT_gaslist_surfmode
-    extern  TFT_dillist_surfmode
-    extern  TFT_splist_surfmode             	; Show Setpoint list
+	extern	TFT_dillist_surfmode
+	extern	TFT_splist_surfmode					; Show Setpoint list
 	extern	TFT_temp_surfmode
 	extern	TFT_update_batt_voltage
 	extern	TFT_display_decotype_surface
-    extern  TFT_display_decotype_surface1   	; Used from logbook!
+	extern	TFT_display_decotype_surface1		; Used from logbook!
 	extern	TFT_update_surf_press
-    extern  TFT_surface_sensor             		; Update HUD data in surface mode
-    extern  TFT_sensor_surface_warning
-    extern  TFT_menu_calibrate               	; Update mV data in menu
-    extern  TFT_custom_text             		; The custom text
-    extern  TFT_surface_tissues         		; Show Tissue diagram in surface mode
-    extern  TFT_surface_decosettings    		; Show all deco settings
-    extern  TFT_cat_serial              		; Add serial to current string
-    extern  TFT_cat_firmware            		; Add firmware version to current string
+	extern	TFT_surface_sensor					; Update HUD data in surface mode
+	extern	TFT_sensor_surface_warning
+	extern	TFT_menu_calibrate					; Update mV data in menu
+	extern	TFT_custom_text						; The custom text
+	extern	TFT_surface_tissues					; Show Tissue diagram in surface mode
+	extern	TFT_surface_decosettings			; Show all deco settings
+	extern	TFT_cat_serial						; Add serial to current string
+	extern	TFT_cat_firmware					; Add firmware version to current string
 
 ; Menu
 	extern	TFT_LogOffset_Logtitle
-    extern  TFT_show_color_schemes      		; Yes, update the color schemes
+	extern	TFT_show_color_schemes				; Yes, update the color schemes
 
 ; Dive mode
 	extern	TFT_display_cns
@@ -69,36 +62,36 @@
 	extern	TFT_display_apnoe_surface
 	extern	TFT_display_apnoe_last_max
 	extern	TFT_display_ftts
-    extern  TFT_clear_warning_text
-    extern  TFT_clear_warning_text_2nd_row
-    extern  TFT_warning_gf
-    extern  TFT_update_ppo2_sensors             ; Update Sensor data
-    extern  TFT_hud_mask                        ; The HUD mask
-    extern  TFT_mask_avr_stopwatch              ; Show mask for average depth and stopwatch
-    extern  TFT_update_avr_stopwatch            ; Update average depth and stopwatch
-    extern  TFT_decoplan                        ; Decoplan
-    extern  TFT_clear_divemode_menu             ; Clear the divemode menu
-    extern  TFT_draw_gassep_line                ; Draw the gas separator grid line in spec mode only
-    extern  TFT_divemode_menu_cursor            ; the divemode cursor
-    extern  TFT_battinfo_tissues_clock_mask     ; Setup Mask
-    extern  TFT_battinfo_tissues_clock          ; Show EAD/END, Tissues and clock
-    extern  TFT_gf_mask                         ; Setup Mask
-    extern  TFT_gf_mask_cGF                     ; Setup Mask - current GF only
-    extern  TFT_gf_info                         ; Show GF informations
-    extern  TFT_warning_agf                     ; Show a warning if aGF is selected
-    extern  TFT_divetimeout                     ; Show timeout counter
-    extern  TFT_show_safety_stop                ; Show the safety stop
-    extern  TFT_clear_decoarea                  ; Cleanup deco area on screen
-    extern  TFT_ceiling_mask                    ; The ceiling mask
-    extern  TFT_ceiling                         ; Ceiling
-    extern  TFT_clear_safety_stop               ; Clear safety stop
-    extern  TFT_warning_fallback                ; Show fallback warning
-    extern  TFT_sensor_check_mask               ; Show ppO2 of O2 and Diluent mask
-    extern  TFT_sensor_check                    ; Show ppO2 of O2 and Diluent
-    extern  TFT_ppo2_ead_end_cns_mask			; Show ppO2, END/EAD and CNS mask
-    extern  TFT_ppo2_ead_end_cns				; Show ppO2, END/EAD and CNS
-    extern  TFT_pscr_info_mask					; Show ppO2, drop and lung ratio mask
-    extern  TFT_pscr_info						; Show ppO2, drop and lung ratio
+	extern	TFT_clear_warning_text
+	extern	TFT_clear_warning_text_2nd_row
+	extern	TFT_warning_gf
+	extern	TFT_update_ppo2_sensors				; Update Sensor data
+	extern	TFT_hud_mask						; The HUD mask
+	extern	TFT_mask_avr_stopwatch				; Show mask for average depth and stopwatch
+	extern	TFT_update_avr_stopwatch			; Update average depth and stopwatch
+	extern	TFT_decoplan						; Decoplan
+	extern	TFT_clear_divemode_menu				; Clear the divemode menu
+	extern	TFT_draw_gassep_line				; Draw the gas separator grid line in spec mode only
+	extern	TFT_divemode_menu_cursor			; the divemode cursor
+	extern	TFT_battinfo_tissues_clock_mask		; Setup Mask
+	extern	TFT_battinfo_tissues_clock			; Show EAD/END, Tissues and clock
+	extern	TFT_gf_mask							; Setup Mask
+	extern	TFT_gf_mask_cGF						; Setup Mask - current GF only
+	extern	TFT_gf_info							; Show GF informations
+	extern	TFT_warning_agf						; Show a warning if aGF is selected
+	extern	TFT_divetimeout						; Show timeout counter
+	extern	TFT_show_safety_stop				; Show the safety stop
+	extern	TFT_clear_decoarea					; Cleanup deco area on screen
+	extern	TFT_ceiling_mask					; The ceiling mask
+	extern	TFT_ceiling							; Ceiling
+	extern	TFT_clear_safety_stop				; Clear safety stop
+	extern	TFT_warning_fallback				; Show fallback warning
+	extern	TFT_sensor_check_mask				; Show ppO2 of O2 and Diluent mask
+	extern	TFT_sensor_check					; Show ppO2 of O2 and Diluent
+	extern	TFT_ppo2_ead_end_cns_mask			; Show ppO2, END/EAD and CNS mask
+	extern	TFT_ppo2_ead_end_cns				; Show ppO2, END/EAD and CNS
+	extern	TFT_pscr_info_mask					; Show ppO2, drop and lung ratio mask
+	extern	TFT_pscr_info						; Show ppO2, drop and lung ratio
 	extern	TFT_gas_needs_mask
 	extern	TFT_gas_needs
 	extern	TFT_warning_gas_needs_warn
@@ -115,23 +108,26 @@
 	extern	TFT_show_mode_divemode
 
 ; Misc
-    extern	TFT_standard_color
-    extern	TFT_disabled_color
-    extern	TFT_attention_color
-    extern	TFT_warnings_color
-    extern  TFT_divemask_color
-    extern	adjust_depth_with_salinity          ; computes salinity setting into lo:hi [mbar]
-    extern	adjust_depth_with_salinity_log      ; computes salinity setting (FROM WREG!) into lo:hi [mbar]
-    extern	TFT_convert_date_short
-    extern	TFT_convert_signed_16bit
-    extern	TFT_convert_date
-    extern	TFT_debug_output
-    extern	TFT_show_time_date_menu
-    extern	convert_mbar_to_feet   				; convert value in lo:hi from mbar to feet
-    extern	convert_celsius_to_fahrenheit		; convert value in lo:hi from celsius to fahrenheit
-    
+	extern	TFT_standard_color
+	extern	TFT_disabled_color
+	extern	TFT_attention_color
+	extern	TFT_warnings_color
+	extern	TFT_divemask_color
+	extern	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+	extern	adjust_depth_with_salinity_log		; computes salinity setting (FROM WREG!) into lo:hi [mbar]
+	extern	TFT_convert_date_short
+	extern	TFT_convert_signed_16bit
+	extern	TFT_convert_date
+	extern	TFT_debug_output
+	extern	TFT_show_time_date_menu
+	extern	convert_mbar_to_feet				; convert value in lo:hi from mbar to feet
+	extern	convert_celsius_to_fahrenheit		; convert value in lo:hi from celsius to fahrenheit
+	extern	TFT_color_code_gas
+	extern	TFT_color_code_gaslist
+	extern	TFT_color_code_cns
+
 ; Alt dive mode (aka Blind mode)
-    extern	TFT_divemins_alternative
-    extern	TFT_divemode_mask_alternative
-    extern	TFT_max_depth_alternative
-    extern	TFT_big_deco_alt	    			; The big deco
\ No newline at end of file
+	extern	TFT_divemins_alternative
+	extern	TFT_divemode_mask_alternative
+	extern	TFT_max_depth_alternative
+	extern	TFT_big_deco_alt					; The big deco
--- a/src/wait.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/wait.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,8 +1,8 @@
 ;=============================================================================
 ;
-;   File wait.asm
+;   File wait.asm														V2.98
 ;
-;  Wait routines
+;   Wait routines
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
@@ -10,28 +10,30 @@
 ;   2004-01-31 : [chsw] Initial version.
 ;   2007-05-11 : Updated (OSTC code).
 ;   2011-10-18 : [mH] Timings tested with oscilloscope
-	
+
 #include "hwos.inc"
 
-basic       CODE
+basic	CODE
 
-; ==========================================================
-; 	WAIT 1 MILLISECOND   (Not exact: 1,008ms +/- 30,5µs + worst case ISR latency)
-; ==========================================================
+; =============================================================================
+; WAIT 1 MILLISECOND   (Not exact: 1,008ms +/- 30,5µs + worst case ISR latency)
+; =============================================================================
 
-            global  WAITMSX
-WAITMSX		movwf	waitms_temp
-			
-WAITMSX2	setf	TMR5H
-			movlw	.255-.32 			;32 x 31,5µs = 1,008ms
-			movwf	TMR5L
-			bcf		PIR5,TMR5IF			; Clear flag
-WAITMSX3	btfss	PIR5,TMR5IF
-			bra		WAITMSX3			; Wait loop
-			decfsz	waitms_temp,F
-			bra		WAITMSX2
-			return
+	global	WAITMSX
+WAITMSX:
+	movwf	wait_counter
+WAITMSX2:
+	setf	TMR5H
+	movlw	.255-.32 			;32 x 31,5µs = 1,008ms
+	movwf	TMR5L
+	bcf		PIR5,TMR5IF			; Clear flag
+WAITMSX3:
+	btfss	PIR5,TMR5IF
+	bra		WAITMSX3			; Wait loop
+	decfsz	wait_counter,F
+	bra		WAITMSX2
+	return
 
 ;=============================================================================
 
-            END
\ No newline at end of file
+	END
\ No newline at end of file
--- a/src/wait.inc	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/wait.inc	Mon Feb 26 16:40:28 2018 +0100
@@ -1,8 +1,8 @@
 ;=============================================================================
 ;
-;   File wait.asm
+;   File wait.asm														V2.98
 ;
-;  Wait routines
+;   Wait routines
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
@@ -10,14 +10,15 @@
 ;   2004-01-31 : [chsw] Initial version.
 ;   2007-05-11 : Updated (OSTC code).
 ;   2011-06-24 : [MH]  Added clock speeds.
-	
+
 ;=============================================================================
 
-WAITMS		macro	waitms_temp
-			movlw	waitms_temp
-			call    WAITMSX
-			endm
-            extern  WAITMSX
+WAITMS	macro	ms_to_wait
+	movlw	ms_to_wait
+	extern	WAITMSX
+	call	WAITMSX
+	endm
+
 
 ; asm routines in hwos.asm
 	extern	speed_eco			; SPEED_ECO: 4MHz
--- a/tools/dev_ostc3_firmware.hex	Sun Feb 25 18:25:38 2018 +0100
+++ b/tools/dev_ostc3_firmware.hex	Mon Feb 26 16:40:28 2018 +0100
@@ -1,7682 +1,7682 @@
-:00000062010c9e4ef660df4437252402045235
-:000010419b7942f47a8642b72fda4f5c26f255
-:000020c9fac14114f5dc9a03ecdd04eb85e6f1
-:000030bb0c5bef0b968a173939fc317d9c3bdc
-:000040d7ba6f3c9874a4cab6946df4c998374b
-:00005019e8232df02d2af9e1a53bf6288af588
-:0000608848e7260c7a4f0df40197b4b47ee04d
-:00007079f5867c3dfdd3bd439e33ef4d7790f2
-:000080658355b300f9e395a0f457d684412153
-:0000904a968660145089d7f2f0f4c5fa53b371
-:0000a0a50a62cb0ddca611b08e740865d33478
-:0000b01b9827a605250b702adfcd1b355ca5e4
-:0000c0ffb76b1b5c0cc3fc72e8be5b33841c7e
-:0000d0acbc542fa087c80de564292b2d4dd493
-:0000e07ddb3fa705d2e855eaf0fba50c4f2eb6
-:0000f001112e6b3fb11af85cdfc677da158f5c
-:000100fcdb60941ccdd2654ea6f9cf8e51fc21
-:00011063cd6babda18dd075838be285cbcdfe2
-:00012015f8038c8782ea20c83f8718fd67713a
-:0001301ab36abb30eddede7d5d9ef35aefebc2
-:0001407e4ce26263426dbabe64134b69abea10
-:000150ad32e3d7963edacf123921d66ac48f51
-:000160e7d351978a6cc48973e81e7646ccf3ef
-:00017031df28fa94d5a43438591fdd4b1483b8
-:00018031bef074a41a25f272825df4bb48a415
-:0001904fc80a617faf7f0834d1d67537e2c93c
-:0001a0903320757a92e3311dee1ef0f3995801
-:0001b0ace8f65a51f958e192858a957bdba87f
-:0001c0d65e8425a3d6ebdcc7131928a1451561
-:0001d041f77e2bd08825ffcab397417b5dcb8c
-:0001e0257227ea0a1bbe3a3056bca396fda458
-:0001f0fb225002b7a141ffd6a9504ecbe5544c
-:000200a73752fdaf24e624e40b1ee6788c0d4c
-:00021053ced0930cfd42c902f75f1752f042fe
-:00022053760bc41abdbe20699747a5739daa87
-:00023096c790846639a631368f057d2352b458
-:000240a5f29ed1c0208649b1d44e5ae83de345
-:000250de0e02d5ba21b3ca4292cb3e8d52afc6
-:000260ed99efd75e0f0601c7d7e15d77c6c179
-:0002706a1eb76f058ad3939fd15a0a5c319ca8
-:000280d73d48161faa922d73c327a69f586046
-:000290c7450abe0e593fcf6bcb5748306b971c
-:0002a0e11a81879abbf225364ea2aacdd26837
-:0002b08e00c556052b1700402ddde4856d7516
-:0002c0e3f0796f751b3535130b860141f9b246
-:0002d06db94ce0b379d0cc928ef812c73ef49e
-:0002e0eb74b6f11cd1844b0a0282d8088485a3
-:0002f0e4cab8cb05ae1bad9639efb0462eb39d
-:0003002904b5149d644f42f319127c2d20dd9b
-:000310b7043c79e7f68e3506993ca3e247f0af
-:00032009b92c189565591a883be0709c28b16a
-:000330a6b03612a0f1b04e3fceebbca6f6d426
-:0003403f618976e8587fc7e0d24a0ed1c5d06b
-:00035016aa1e4d75fb1384422dfd96e08d81db
-:000360cb6505083188a9d73995a466a30aedbe
-:000370a71eafc47d564de582f24d6d6df1d9bc
-:0003807ccd6bfa7e7406fe5ea6b3a3df335833
-:000390733d6d8996734eddee8b70a4dee6f621
-:0003a09a721a89f330500c6f1298eb78694d4d
-:0003b091d9e6f108ccdf2ecbdd80fcbc304e8d
-:0003c099d75fc38c8fa39664805d2469a8f8ce
-:0003d0fbd2f943b80b1ce9ad67b09a51f3d3af
-:0003e0751da4cf0092e758f21706ab6a7fbb44
-:0003f04797f272df23c2628bdaa54e59fa54df
-:0004002adc3f42dece98baeb4703f496284478
-:0004109f407d528c0ba3dfbdafd7c617516fd7
-:000420c5308d7f00f8b1f685d7c3068c20cee9
-:000430fd622bef007722f56f312f253a41aa45
-:00044089c5d0405fb5286b66f1c69eaac71f60
-:000450585aed887bb03151d62d5f239aef95b3
-:0004605afc0d5b6c85980fdf112706fb2edc49
-:000470adf2c3a3a107b2da3ef272155fa0c9a4
-:0004809455bf1252b0f46c1b58104d99516d72
-:000490d04d6dfc3eff9bdb12d5a461a723ad6f
-:0004a01307ff35f3a568dba9982c63eef3751e
-:0004b067487e902ce144b8de0b0ba5fee7c0ed
-:0004c081ca30b4d2317da167ec406ecd5ab554
-:0004d0094657b09a08623031bc64991505d8a7
-:0004e0b53c7580aacb2ee4cd7b49d2b3f70030
-:0004f09d5ace41f1423bb7ceb03c8f53d17164
-:000500bb5054e72196c2a0c6393b678fd8fdcd
-:000510292a570461d2deeb8641370a1e6bee5a
-:0005204a5a502185dc34ad3377c1a3ea9e47cf
-:000530735c2edc1053bc89536d9882f4685063
-:00054080f37c417716cacc5ed8cbb1da7b25a4
-:00055066d13c8e526346a81f4b5d5f24c02880
-:000560e958cff789d4c17aa0204c00bbe100e7
-:000570d36acb7773f18e3cfb12f1a83788f3e1
-:00058066cef2d284cddde666b74bbdcd3b6472
-:0005908ac0aca5c6a169b84d361b72d5ea1cf7
-:0005a0c77c4ca19c8896d5270a9e6d49fb8883
-:0005b0b577764cff9e4853976fa2613ba7d53e
-:0005c044439b78884330586c1bbfafe88b5da7
-:0005d0b167c6efb43b03c3b95648f5731f4396
-:0005e00c632165d598e33395818cd25ebe0f3d
-:0005f02367b5971f15ad21f97cfcceed02045f
-:0006002071f3f914895d5d25343b56ee23c958
-:0006100d48f228751dbeb923e0de3148bc3651
-:0006205920af3495750b8d38974c13923df936
-:0006305aa2c068ee6d3bfb1c7eac872a036aeb
-:0006404075aef80fc913f7acfcf08b755cd806
-:000650330614ad0d5c4c240cacb068bc14817b
-:000660fa7f989f6f4db57edf38c26deb81e877
-:00067099d9914eb23d5757ecc62ad70d34be76
-:000680f290e334cba6480c9e2f0b1f1f9a7959
-:000690f91e9d11491c7c553fbf0e3b5cce14ea
-:0006a0be140ec9fbb2e7fab6682cc07685bc22
-:0006b073133f56bbd065bb9c8d1b96eb80e7ac
-:0006c007be851137711bdcb3a631483c84b910
-:0006d089c8684ad48c5122160f4794514ce621
-:0006e0ca8d7a8ff9b872afbc589941f08d4785
-:0006f0f6a3b3c04fc10888c0a39597f2f7cdb9
-:000700cf1d61e808af8ff809dd50ce3a71d4dc
-:0007104a047f122253286354da947c25c84861
-:000720bc37640a3493879e4d7af2492564cc72
-:0007304657a4f7c3a108baef68b8594fc3977f
-:000740a6329469b6c5741ea13dc8357ebc20d3
-:0007505777ea0a4ca69c6d94a6bce6480c9754
-:000760a7d6a92f96ee0459d38bf310e37bcc06
-:0007706083203a47f2fd426614787921461e0f
-:000780a1e06796b76192d2ab22a8f45d97aff4
-:00079028b6619d06302fe314f457c8b9dfe242
-:0007a0a329c0cc534c19ea24e13928e452ea91
-:0007b0f1132bdb6ea0f9906c36d7b136811b21
-:0007c06b25ea98e0fed0b823227dc45b25adb7
-:0007d088ffe4007420f8608116841617328d7f
-:0007e0c8df14c60073db7a8b6111fe9a4c6514
-:0007f0115ad5ec3b7f09ea259bcac0e81f187c
-:000800cbe4c16ec5938fbccb272afbed17046e
-:0008107dd0156c5d3abc1fd022ac1412f6bb2e
-:0008203dfdb8e071364eedad0d7243a6798aea
-:0008302c80a46534860ae20fe0f72d123b3cc3
-:000840af412d972638f9555b3e0bb200e5ec90
-:000850201597d872e16131c7beb69b334cf227
-:0008607b8ef12b5477be376f68163ff60b0961
-:00087027965bddd025c2d47eb65e5186b8a3ae
-:00088080f830805d1cef4ba5bb5c99cb00fe5c
-:0008901cc770d4818f24c71fb43d299ea85cc3
-:0008a05136032668d66bf41695a42022f9efbb
-:0008b05a9103f0afc8e1171fbe648bbb4c9c63
-:0008c0365f1217112f3d0be81b9b981373a0ad
-:0008d0a3c7127b711f49bfa14f131718a4e15e
-:0008e095cf9ede9e53a5af99a06ce47986a290
-:0008f0d4aa334ec1922814cab004868a97187d
-:000900edc2c0b1e8955aa002a8be7b7c44406e
-:000910cf6a247d59bd8b56380372e24f663572
-:000920d2b7637f3e44c5a3637a5dd90e5b0708
-:000930e02834470d47ba5218f5d08c32307ac4
-:000940192fd52b34452104c5fe6c40eaf388e9
-:000950eb8ff0e5bad965c3e5ad4cc32db0400d
-:000960f24ffe0640a0d1be4a2c37f20c00a957
-:000970f9ae982d0c5c2865e7ba8a629d804158
-:000980c7da7bbe7947d5f38b122e4d06ad2930
-:0009907a2233eb0a9a50f63bde83a122967349
-:0009a0e08259f9be09b5e927fbf879baea8e9d
-:0009b00459fb6b2473906a82e53a77dff3d258
-:0009c0a84ea2007ddbc9104036dc92cb0885fa
-:0009d02853de4f4dacafa77619152058b0f927
-:0009e0631cab0dfbad4d5b6a2f409bb3651273
-:0009f0b7b2478388f432377a1fac9e017642ea
-:000a00b29b38c96521e3eaa979b24bbbe8465e
-:000a10b008e42d5bd39581dd6aa60d564f35ea
-:000a20563f902ad0058084127e1ed01cf62b2c
-:000a3062c6e4347036628cdafac95bca4044f9
-:000a40e47cc58d313946e7f601bcd5b9d5ec92
-:000a508a9bda32a58f500953e67511bd601939
-:000a606df6c609c9626ef3d07483f68ef616e8
-:000a709ecfc2034e932a7e0fea95204dda97b3
-:000a8055c00fbd5e2d0dc2894aa752eaf36a4d
-:000a90e45017337d6e26fdcf02de7f3327aac9
-:000aa038703805eeeb2333ad451aabd1458773
-:000ab0b22db7f631fa0b25d1bbe9e40a77a721
-:000ac0b580dbc43c1643cf0e61e594d9f6b688
-:000ad0f9adb7638b84d34e201b26fe75786ece
-:000ae062bead7de811678dd6f792c66f75595d
-:000af0dd466e6380da156e0c9e7b9de533fe13
-:000b0065f5ecbca5bc3285940fae8298e0bbe5
-:000b109fd84af951ebcd295ed6f361287a9c57
-:000b208133cf126014af33ede7e85b5bc3a187
-:000b3028dbe45ea8c76271636bf3168e335490
-:000b40067aa6eec68f87b0d02e096e5b8ae975
-:000b50c517c22aee90a7f714b227a841e03236
-:000b609e82cd8fc972082ff06c8524b72d6f1a
-:000b70ea32745b63d0580be0c5dca34917af22
-:000b803c76da1f2e9a527052d27c6329a31259
-:000b9062f84a6b0f5b1950941cb51cf1f628d9
-:000ba0e313137f0d1e3f2eef8103bac2ab9be2
-:000bb0ade1ccf2559ebda31ff4fa0764d58ff0
-:000bc09be0143a68c9f2e681490cecbd20bbf7
-:000bd0543d10d3d55eb21db44030cf06f929e8
-:000be0e25c498a769f8bbd13c6c24108dc0be2
-:000bf0bdbb07c3abc93bf203c88ed111c0fe32
-:000c00cb4139796c66a8eee70c3d9f36767db0
-:000c1029911b59e4bb5eb6c9bee34b0638d2b4
-:000c203b62ad7052b988f78fd45ee9e3bc1caf
-:000c305024281b12a5865038da509e85b03d50
-:000c40e304eda996d2dfd9eae2ada20e43eb02
-:000c50f41c68a9eb774ef354d2b4fa44700127
-:000c60b1dfbc3404085dea47a72c8e206217d7
-:000c70932d7df4daccdd55a5bca22ab106c7b9
-:000c8040c32be69bc0e46c92c5836ee9281305
-:000c901a660d67e97d179706d0ae6639c8d437
-:000ca00926a629e4ee48aebc3ac02785b25d32
-:000cb0772f2ae71df4af48460c45367ecd00f0
-:000cc06176ef1d663c8416afae1e48c85e4430
-:000cd0a86fe60fe80a62c743ab93eb33cb7484
-:000ce0f1f47f485951ac4d08a8363350c9130d
-:000cf0052ecc5d3d24f827d5b5c8749f551ccf
-:000d00e4821f316c533001a23b0faf113dd2d4
-:000d1004b59cafb99123e13bc56d28d68ee5bb
-:000d20cafe97bd925e5dc340c3ece80cabb935
-:000d30031b54d3ee5a50421b24fbc7c9df3ddf
-:000d40cd04fc2d6ddfbe258ba34df02c6cd8ca
-:000d50853ee5ebae58c4c6b49a64246da2aa9a
-:000d600cfb35f90b25e20645cec43daecc3b70
-:000d7051c1cd2744b6d678a46647a430861270
-:000d8002cd93ddc8d5c6d4cf096af1c2fa5199
-:000d90817590aee82151fe3a4212e164b041ff
-:000da07d87614840ddfa7ff69aeb5ed928c9a7
-:000db0af91a53df55dc232febbda11ac9a5ef1
-:000dc0c76a5f7ab45929d4168bd750416d7aba
-:000dd040c9e262c910a3d17e418e96e40146f9
-:000de00c2af8f9f11eaf1acedd1b875209bdcf
-:000df0779831eb990cd6b4c8910a8f21ad5be8
-:000e009db01f56e8372e6b472c19cc83b70432
-:000e10f3661ab9a15d003db2df9ab2e0846dac
-:000e20ca8a977d354cf26bc4e6f6371740c5a3
-:000e30f2962b10974e73cfb327e07630893bc3
-:000e40ee26b234edb8dcd6ca046f0989223e01
-:000e506098416186348da7d59e8e5241d19241
-:000e60485bfc8d1c98a8960b866f72c08d167e
-:000e70352e2100af68862dc90166f1e5827900
-:000e80134d2ff806ed4679a120f22eec3c9fb7
-:000e902eac21c41c63919d0adcb89e708d52e9
-:000ea029aa3a24cb4833f4eb1227d3d4292452
-:000eb03e564d2d3cf3c16e0ff14f3081a787ed
-:000ec089343f7ba9e7315835512f92c2148ae7
-:000ed03166497f699c8bfb41bab073d896039d
-:000ee02c6c8b1d28090fea800af947103028a4
-:000ef04131e51e83d0a74565ef3ce3bed3c0d2
-:000f00e8d62ae90b13197df2cc927161498458
-:000f1019f9bb17fdd02855bbec15067bb8e55f
-:000f2085e29b8ac0fad9cf155544732f5f4b92
-:000f307fd2265fe78425cd0b4beb7e9bc4f4d0
-:000f401077470ddb69a80dc33e979586c30a11
-:000f50551162a775513ff25eacd227689c6a8f
-:000f606cd62eb971b4e9e3ad1c1fee90a60a12
-:000f702b48046ca603cf0fb773913ceadaeace
-:000f804baebe1bcf54d930babb4af60f7ce538
-:000f90f6cbd079905969f477fe961ef3e8481f
-:000fa0f4b796556945d2123ce4396eacac84e1
-:000fb0aa905a83dd92f0443f9a803f49cbb47d
-:000fc035342306c123e5b1c9291e79da3e98bf
-:000fd05bc657082a623dd4ef2b4a0b6b8524f5
-:000fe09716d1c3e5122f29d81a233c7364c77f
-:000ff0dd58207603819072ae5718da94a5223d
-:0010005434994a78cbc825b9c348bfecb75bed
-:001010c487b4c57923c9c17b78ab0e9614d589
-:001020b30308ede848ea231175feed171568cd
-:001030f7a00ea36731a494041123b645e1c491
-:00104007c9350591a64791e6a9bc0ae7e48586
-:001050d06d7c364a03b823eaa1cb50c835b041
-:001060e237c84d02b97b419cb872128efa887d
-:001070d6fcf9453aac2da3b76479bee2d6efb9
-:00108031706dbd81c324edbfe9c77df6619bcc
-:00109072b6141c0f53f196e319eb5e28beb6b7
-:0010a09e577216953d01f090be4c132e230bfc
-:0010b0dad0f215152d8ceb205fe5fb3e3b6ec7
-:0010c0f8c1e4dc6109f886610a568c2b657901
-:0010d074b3fd72419fac3ee8d4b2ecd004609b
-:0010e0962e4acbd8fe20a131291ee690863a86
-:0010f07f36c017a5320f61cd2f743554d8fb94
-:001100eeabe2fc78dbc91193740476f68a2be6
-:001110c6eeff89087c7ce98ade6090f9238a36
-:001120c6e9719481186fb910ffb3a8c40dde68
-:001130f3a8270a263ec4c0789b4c3f703f3de0
-:0011407a3e6e37d0bcc7af6fb073fb7ca49c03
-:00115093e74dcfed9fb53b657e8190b2451b5f
-:001160f1e47ea21f8ab9237a07ef0439e28a4a
-:0011706ea71b2e39a2296594f455eafb17a8f1
-:001180e7e7b3f7cb6af863e72a6d4428cafe1a
-:001190f5c2290d2ff72271d46d8c92181e3014
-:0011a05e2710bbe04b89d979a791858b16f9ba
-:0011b093621a4faa1ee698fb5c87e49f39fc58
-:0011c060bc445c7ee3a7f7570b40ff80d746c7
-:0011d0c52c27c15711ec6f4e74c73ff529ed93
-:0011e0d36c89e49007d9feb9929ae37f753f42
-:0011f09f4c724ec9c63d7a944aa9a66b477380
-:0012008a4b4e430018a5204e77e6f8a011f4c5
-:0012101d2c52fc565bb6a8b405b3291632f7d7
-:0012207967d68596ff435c26d8f9cc4c185921
-:0012302300b644cee20217528c42c939f9bc13
-:001240ec91316ba0f2299fa2247628b4355145
-:001250c981e686e192e3092c0e570a7c2f21bf
-:00126051db0c70714366335793a25a6c428643
-:00127025be6896353178db165c077b760da75d
-:0012800181c367e91da944b9882a3a3863da57
-:0012909997b04317cfc7c6d84c9cec2c3e07c6
-:0012a0cfc811df4d536e0dd24d53b42e6463bc
-:0012b00608933ecf7aeb11a32b43b77a313bc5
-:0012c04460a687282ef2e817d6afd162ca22bb
-:0012d0c9581a6b4f72d7c93aba392ec2ac7141
-:0012e0f2db11eb8999521aa5f14fe62605b604
-:0012f04593eb607d2c2eeb61c03d0141489ff7
-:001300c5202053faf6c971de5bbcc4f1254d1d
-:00131067b6333798236fe497e432bb4ac57531
-:001320001e4792dcec321733e52ad4c5bc3812
-:00133013c6c120b4a030a77cca90e2af228468
-:0013403a0910ae844ecd976c971a69a9ac314b
-:0013502ea247c511d9814d4e5bb74063bb82da
-:001360f2f57207cb48d89a1924f568b5c689bf
-:0013705252925cab5c31faf3de8f6177022984
-:001380d950aac0b02d4aac329b0bff96f213d4
-:001390c242e195849e133576955c969da5f68d
-:0013a072bd7561ec4dd403ac4770971f2c4fd1
-:0013b08cb8adfcd027d16850416a3364973276
-:0013c0843501524aaaf0aecd160113d3591ddb
-:0013d0679558f2a6f6197b566fbb07ffb6122c
-:0013e0c5988a560a5684d7e77bfc4db36db8e3
-:0013f022a55c3235c6ecb2a883ed435ebd835c
-:001400c7f632c32f7edc8bdf2f461774816149
-:001410cfcc7c348109d82901632195173633ed
-:001420496422f5ea881e73e7914b9021eeb8b9
-:00143082be945955dd59d4b23a759a7ba227df
-:0014403a62a88f29f8e821f763956d55c6f40f
-:001450eb7e2c41b49f9b26b63baa14e3d7584b
-:001460444c587b27298b0e1412da5773ec8b08
-:001470eb24590596802ccb743851410b659a4c
-:001480f2988a066aa1f8efcb9294d4f97ee7e7
-:00149029b867083c01cc482c58653195a7d15b
-:0014a06dade3042738bc1fc07d171ac5cc07d4
-:0014b0ffbc256c4877b5ded8c1a279de57cfe3
-:0014c02894661935272745384c206f15e86704
-:0014d0ffbc3ade20deb5eeb74dcc9621cf0ae5
-:0014e0f0f5d8714b7f99267de127a7e66a7a45
-:0014f0f5ab2c0e9b031e7606545b4e6c54ab73
-:0015007f6fcd30504e4b12c4080b7ac21ae648
-:001510020cac4d25ce84430ec9be595ba36545
-:0015203757603223aafb168a47dc6bfb8da735
-:0015309bbe97805e6990fd90820f01f0e25481
-:001540fc168bdf4058a90a4f37a40ccccad529
-:001550af88e49420d7ee9c183cc7852a438097
-:0015607089bd5380197596754ce3aa850b21a3
-:001570d00ec871fcbe87359cb0dec630ed2e9f
-:0015809c1c3416263b8b9a4f47073771fc53d2
-:00159005f56eeb064312aa4ec72c5e29b6aed8
-:0015a04fdd8bb3cf6dbbb83a800b01aeea7e22
-:0015b0ff337d06d95ee6c83bf96417350b1d63
-:0015c0e79d6ca79df58fa5fce785e2f11a01a0
-:0015d020cf77270eacb81ffcf6efcb0745bfc9
-:0015e0c5082040e16c8039818e5a9e786330cb
-:0015f06d99ffa84994cdb2082ed195fedeafff
-:0016008bcfecef65078d9b8f92253742263cdd
-:001610bf19ecd80f1472b79be4e2debdac1621
-:0016202d1fa8962ee34463a0990fa9a92ff921
-:00163013828f8deae09836f358e71f6870a835
-:0016406e7228932549c498ecb8732b02fd6008
-:0016509b6aab6fd7259bf84628adb478048efd
-:0016601ccbcc9f05484667605d3d32dcc1c6be
-:001670f7854055823dad7aef08d752654f7dac
-:0016807d8e897214fabb5a467ef67af30b26b2
-:001690065cc120b96fa655fa07b4e10ea9266b
-:0016a0c3a8315985bdc24cc5f4e5cfdf4a94aa
-:0016b08581aa953ccdbb9bfcaab76f68595963
-:0016c0a7704eaf14f8569c5f4860ca39bd56d7
-:0016d005360fa85bfb34d3163926502eedb8c9
-:0016e0bd6e5999880eb2714aad23b87cb9115d
-:0016f01d56ee0cfe5d5496b38ab27a35af66ba
-:00170099c215f5e8c9dd85f7d568278e965dc3
-:001710ab5dbaf957c9a40cf3ca68b5f12a2dbf
-:00172090fcbc11d83d11ff3c54062b0376ea21
-:0017302fe1f580b58283902adb3144001d1383
-:001740843649f344d0f04e875cff3da21c7fbd
-:0017506fcd0012cb5e61540366381a4e8bc603
-:00176037e70ff20f623a0b32b129afbead9cd8
-:001770e2a56228a5bb177c9c06380a1fe03220
-:0017802b408778811833851671712867a21928
-:001790a773ee6d75f37b2a2eb9ddd98ded87d9
-:0017a0a08afe01d3ba09a52733cebd2b1c0d42
-:0017b019bd5c74020335ea72c8154c1c82f764
-:0017c0f69183aa51e4258e1c912048258052f9
-:0017d0b99243fd37974adb453cc9a3c8a4f9c7
-:0017e089268317eeaab9cfbee5a4f5df202bd8
-:0017f03287ccf776d165ec67a6f2a9ee741a21
-:001800226f1627d091f33130157fded6693c06
-:00181084c9ff930718841a7c93e947026afc6c
-:001820209e36e37b629d320a8f2e6906d20987
-:001830e48bd9172262a9a6f40a97518887f12f
-:001840a281be04db2e3a6951dd89756fe40e4e
-:001850d122d1622e584218d30f7e16711f2e3f
-:001860de8d24e1176c2cdca9ce71b825e5f8f2
-:001870f6c6e6eb1acdd3b66d02eff7c96a210f
-:0018809b285d0ff73bbb27607fbe25fb98d1d9
-:001890b746b3d7853564cb61e2107799bbbe13
-:0018a08ea761863e73cffaf0a52f1feb666879
-:0018b013ad42511bdb5eb457b527734af7f0e2
-:0018c068e587600cf67f70e75a789245a60862
-:0018d0a11cf2924f96df168091e7820bc67fa0
-:0018e0035bca07fe97da1351cf0bab2cdc97b7
-:0018f05c3a6607c0f85249be9fb4885820ec54
-:00190080109bf67ab4233c6338e2f6b716f226
-:001910732dc3c441e8f5648dbf132814c3db30
-:001920f25a8f02e68ac60aa9fea825ec3c4cfb
-:00193058911b8480294aee325d100e0bfa8132
-:001940f1b7845dbcc2bb02f9367a0050f8f261
-:001950f66cbf058706223cba75d573b23a0040
-:0019607b0bafee98d941990275e404397860e0
-:001970b12d40e590ba477299767912ac6b9f44
-:001980c9dfa5d04d7b2deaf5edb0ee66ee1793
-:001990cd781e185a7773351db8167e50036d39
-:0019a0ea2c32c2214c52ebadfc9094b65cb038
-:0019b08d1c2e82d3d445d35d3df691420f22af
-:0019c0f54c6a1c56c12619def131917fca0f91
-:0019d0aeb02b1d4671af60fe0d4543819a1efa
-:0019e02d9b93f305026ffc75c8a9b5238ece1d
-:0019f0df96b3254dce53a76cab7008ae4dd94a
-:001a008fe7ed93c4916ebb848c20d8e342c3a7
-:001a10f777821b3a2643fa48992d9001e6a554
-:001a20fec53cd19c30c2bb89a1576ed1e000d7
-:001a3098ab86214fab6d576f817a07ebc0a5f8
-:001a40a105659a7565cf2fc2e9a358a28d8f2c
-:001a502e4df8b9b4fd15c12fb2ea32d4e7fb12
-:001a6015debdf5f40f2f8598f21f4a8ef0e57b
-:001a70a356ed89c4cb89a77abb8d00073be4a0
-:001a80bbd4fcc657f0f4d60e89548c5c024e3f
-:001a90b2ea3d5d3da012429851afa5add14491
-:001aa035397b38e7e65708883f0d0803dfc6b4
-:001ab0d5450821d5043c8eee69d9019ba404ed
-:001ac09090b1324a5b8d9e0bbf59703a7647f7
-:001ad0194ac3f5e1c1e665da9c517211ac9743
-:001ae07df7f3c596a831584a475f9f8cd2032b
-:001af005ee5bb6f955e2c0ed60eee292a87c94
-:001b0057e516dab2f0177480673e58528ba486
-:001b104a9a56260c2f577c0cf744ca978069df
-:001b20a7791a2cf63013ccd0dbfcff4c46f3d4
-:001b30238e18b6870e594bae017177e83afe4f
-:001b407e7ca92722f01fc9d34f50369ea85a80
-:001b50e1dca4472ec5aacf2ea83c94fde9cef1
-:001b608c3f6e63d962e43ea602004c700f28d9
-:001b708960afc46fc46aa6ac192f80c8f014eb
-:001b807bc6a38890969cc3427724b1079b97ba
-:001b90e29749024ce195fd87d52be71e73e485
-:001ba0ea88f3578d5dd09787dcffdcfe3d11e4
-:001bb0e8a3ba2db5770b82e4d6f52028ddaf8b
-:001bc0fc74162920c50f906a3cffac4a88a74e
-:001bd0c55a78b8097029c946393c3d5734e11f
-:001be090235b1a44b56985b0365a723e9f4619
-:001bf0430c15a2766d4bf01966ba475983be51
-:001c00549e7e1787da497247d6ed5c457ad3dc
-:001c101cf0b0e899077302ee54317121048190
-:001c202503df54b51cf9bd132ca29bff6f4eed
-:001c305703f639b871af6a18b9e93f04fd6252
-:001c40b0c3bf875a0908ca7a9c6f86b281c770
-:001c50fa09cd3b452f0acf622385330f9867f3
-:001c6015a48277b5f20875a7692d29b31935d9
-:001c7091c783f6a3ead80e4c5ea5457e4575f3
-:001c8027030914c16c189954e6ebf81afbd72a
-:001c9016eabdd2c4e2b2d0c39da28656d1324f
-:001ca04290d179327e9472e7fb80e527369a44
-:001cb01556f6dd71e3a269adb0ac9de04ae601
-:001cc0fd8504ce4a2d5f66930ac77078345fcc
-:001cd030299b3648ecf618765bfbe0398c37d2
-:001ce0f101f4ad4e73013b3237549bd73b8df6
-:001cf0752ac45ea38e95bf4893ff78950562fc
-:001d008d46c082ed8826ced75f54167f3c00df
-:001d1017f0fa17e72e4f49279c568beb8af466
-:001d20cd704dde4aa594ffa330087daa8d4b1e
-:001d30652490ee8ce9c0a9d7c15d8115a1dfed
-:001d402b13c6d6cac9cb9a557677e11d3a4dfe
-:001d5060e25c6a31ffd3ceea3b9c3ed060ed90
-:001d60fe0a9b0dc2e20023a7f24adee857e0ab
-:001d7008a97b04ba49cfcc58ce8103dc0a5afd
-:001d80a34ba747513a72ef919b1bad6a4c5d43
-:001d902a2c46b51c8e8ba9bd19b2a876054e46
-:001da0651f3d63672148a5cbfceb743c5ae319
-:001db0e7a1e83be197a99907cf20125bd16a47
-:001dc0b767af9e22ad1e7792ea87419abbd8a7
-:001dd067e6013b95e52d4b794be6edfa497560
-:001de0088bb78dbdb9da1584b0180fb36f5f0d
-:001df0c8376d38a2ebdcd92f6be088fa55eb20
-:001e00cc11cef8d8adbeb6fed9767e1172718e
-:001e10a02238fd721f3516d22ca38d7f200af9
-:001e20d739644b6742eaf047cb0ec851639e90
-:001e3038c13cb4a2138f0ec5d73cc7d41f3694
-:001e407ef5a6c7f14c6e810026bb3226265814
-:001e509e0e7a7e2e8b015f084d89a7f2584a57
-:001e601fdb30e19064a1ada7d4d616fd9e9aad
-:001e7044e0b1938d9f0247bc1b4d3e47534c82
-:001e801c2c813fa6cd4210cacc539483f1152b
-:001e90f8aee5a955da1097808b15103be7a8d0
-:001ea09504c2c1d30127a0c6f1d269a705d396
-:001eb04ae03fb2663e1e56e1dbd29db48c74ad
-:001ec0a18f83a4bb126204e98d9b9f6de9e684
-:001ed05145b386a51d4ba4d16e9da07e76ee80
-:001ee050042c74906d9f29b93d509ad5762bed
-:001ef049be88a43fe04b6a5fa0a5540c8f0636
-:001f003c9a762294281207127c48fe90191c62
-:001f1067039d690d9d00487ece670910fee838
-:001f20e8d77b39918a16d3c3016d02f6f5d56b
-:001f300ed70b12b68f60ac3c7ec9ae2c9a6b9e
-:001f409f8eaa4573dc0ec86625a8709659cbf8
-:001f50a5ed66d8e7256f64bb846b6175f7ef2a
-:001f6076e785b1839c4cb0bb7f4b57012e0edc
-:001f7044f773cdbd24e7ff99c343f771c97b25
-:001f8017242d3de4dab5d60c3fe591f3db4fd9
-:001f900d942b86963e19d5349d0f34618edada
-:001fa044041ced7df3255afae18690d61a8ef9
-:001fb0567713551a00a058fe1d21dbd5b92218
-:001fc0be989fc9d87d199142aba7326b38f8de
-:001fd00a68527259bfbbedd3e0a144dc3aa2f7
-:001fe09cb75eeb09f17f0d60f9db1c2bbf8535
-:001ff01ad4032a10636ce135e8338945b5ddfa
-:002000b73470c629bb0002f15326d9af3b245c
-:002010f6d28335f5bad5cf44c68964b32c3b73
-:00202081361fb2fde4f429c6b207321e18f639
-:002030d9a8bc0f6d4ca9861189c1a8afbd997e
-:002040917fd2d69d2badd460f428d789691ee3
-:0020508b2cd86f1814176db5b5099fe7d7bb01
-:00206027a114f53527b7fd1477cfb630fa4b04
-:0020707b4db35ffef8933e6a3f371a7cefb730
-:002080424e4bbddc8450d36e6b2f5d34847ba0
-:00209068b16d1fac4faa209547340ca69a687f
-:0020a0d4ab99a8bf57f878b36d5bb0c3503542
-:0020b0f213922d2132790b75d85802bf5b37cf
-:0020c02572230fd22151e5ee1f30a7ea484cb8
-:0020d07b644ee2a856b69c6004f2a81c1430e1
-:0020e0a7d6e5c7468f8832c58022733492ed57
-:0020f0b8e7ff1a85a53bc156b1b2ed07655150
-:0021007b060b6e5ad0289545ed9168fc7c8a7b
-:002110ae2067cb06119b25fa3b4708046343e3
-:00212022153d09973ed50dd2f992fb940f3c10
-:002130f5a69eb66c10a7e12b9135dd4e89860f
-:00214055e1a8331dcdca097ec6b31d0d7b55be
-:0021500b033633b71cb2b571ff57de03c830fa
-:002160aa41bedbe55c30e5614ba221ff1cef3d
-:002170c38dfea95cb2d08ca52f51e264b5ec3d
-:0021803cfccba31ee65d76177a484b337cae24
-:0021909d860792b1d9520a0748aa9f3da69602
-:0021a0de1964ccf7cd2338fa91ddbf9c6aaf96
-:0021b08f1429ac20cebc8ffdc68b37c89b76c4
-:0021c0fe423138b885a4cc34508a1558c964b8
-:0021d0da4592a86ea238174cdc35a61a5e43fb
-:0021e02037bfca4565814ded64420ff16bc811
-:0021f0e350f9f80111d96a05937f75621034f4
-:00220073d594e1f8536fb91ad19480004403e2
-:002210e3ecbac78ccba895468dce00a953037e
-:0022206fa71b119761ddfe690fab072575dc00
-:002230b0ac7db8e1efbb36fbf9bdc20b5de05c
-:0022401dc65233ad585fc881b48acaae8cefd0
-:002250b16461cd4a76c800d628df2f5ebf0a9a
-:00226034b950c6cfe4aba44505ab5851daafff
-:002270f53a3778b0b2f291deff1d6917ea0efc
-:00228047ada29687d1ac00f3d4f45de74770cd
-:002290420de6db6470ae4360740aece5732527
-:0022a01f7669d53ba2a20531e8390059323e0a
-:0022b05fefee17c4bcd10fe316dd8a01d7db7b
-:0022c0439f2dcbfc7d1f15e905674d9781bf13
-:0022d036f36646afef1a581b878280eb0b47f9
-:0022e08e10a584b2adfd858e5fc1086c99cfce
-:0022f077313487a28fa91a37605c52a8ab95ef
-:0023002b0b435ea019aa16e31e3e09978c7025
-:0023106c76217bd746a91a5a772d872e986a66
-:0023200e60b36fe07c355e49fa715109c0733e
-:002330dd255924a1108bab151b1faddf4b9180
-:002340c34e61848d51e56f499a47080b45766a
-:00235086830ce5c3f5993d384c05a664777402
-:002360e436b9b355d125c58941f58ecbcecfc2
-:0023706560b027f83c666d3694302e741301d2
-:00238066572024c09b4ccccc021d0a1f1650ef
-:002390c76ad6ce7d87c815f7187e4d2b656a74
-:0023a099688a9d62971e303f042b40c2843c32
-:0023b0425492162ce628240d6acdbef60e1a81
-:0023c020ea7577cc88c4c3ca8712e7fa6bb36c
-:0023d01effe09bb804cbe7f92764dfe15fc3d8
-:0023e0e1b869ba71a0bb08d8c1a30b2da6cff3
-:0023f0ee9b081d886a02a61b4f608f9f01ad6c
-:002400af238facea6f1bd6e8cadd3f8364a5a9
-:002410f64583d6752ffec9a141ded117bee4ee
-:002420bde601f1b09e6a68ddfa462dc77400a2
-:002430a2c94b14455d4edf90390c16dedeb579
-:00244035cf52587825713caf0121cd0ebdd88d
-:00245018d7dabab942449726148a6703ccd699
-:002460bdfde8953725351668abf72a14afbbba
-:002470c722a22c7850e5e4335c3554b7c8d00f
-:002480ea5fbfce8908effb54c5cbc84b65f5da
-:00249015ff6fcdeaebc4667912a787bd3508fb
-:0024a05de7e92471c8d4f0bde66b32031d9c1a
-:0024b00b2988644fe8bb50977f9dd41e1acee1
-:0024c06274f9307fc81a726928a8dee45a0e56
-:0024d07cbc4d1fa78276323f3301a232471871
-:0024e0a916fd9663ba0d80d2d4de603ae71307
-:0024f08a6894ab56db449a08a78fbf0913f66e
-:0025006937fac7814903d95979c52604dfc29e
-:002510243e91cc4e6f5232f46381a9d0c89c29
-:002520842747b6f252605338b35014e549ff81
-:00253092a42b91a46bed56ae20a7d6970ecb36
-:002540d85f8283639e5cb000c81690aae05e55
-:002550baaba66c2b53468509c5ec99ad6b09d2
-:00256086ecebd69a43d930c82def26225f8b0b
-:002570470f91c7b08c1e075e0506d67c002562
-:002580fde2ffab866a0e502118ada9403a958c
-:002590bd0e3771ef1387692351b54c1030626a
-:0025a06b15ef9d097960bd895ead8b7b4eb70b
-:0025b001cf1c9f459d60faea4b87051560d800
-:0025c0b97698de59e52a54ef7e53fd50baefb7
-:0025d0da79260cf71e5f7a5a487c9e4515d03a
-:0025e05832a7d2d6c69254bdef7cdcaddf32eb
-:0025f057353347a273de71208f6a4b16895b0b
-:0026004f1b78f687abf355fa820b864511aab0
-:002610a08ac867fefd2884a2ce4272a09fc41b
-:002620f08c1722edae50d09d81a46621c71bd1
-:0026306219911e187574a19fc4cc08d76b8a3b
-:0026406f5d7ff1dd7a52087bf97ced5ea0dfbc
-:002650caba1e8d55db4b5d9f755d8273760ee3
-:002660716e0c71062166085b33b1d45e322cd7
-:002670a35900119d3a2fa3a0952b50833e52fc
-:0026804a7e16ca37cdc4bb852beca178d8a54f
-:00269048793d236a28348d42db703dbe50c328
-:0026a048dcfbf000f5b687b2d288a442a318f5
-:0026b0de028bba4b27cc1b471b56e8e4620ba9
-:0026c0cd10d7c35729220865c74c95e4d4e81e
-:0026d0547ae099898b307f63af95a93191d651
-:0026e0a6eed3fb0b75c5c7dc27809e48377bd1
-:0026f07725f8eab532c90602fde8bf9d8984ae
-:0027009cf13773503a4df33637537bc91649a2
-:0027109ffa80d77d86394f0bf8f09bdd960553
-:002720ef6fb588775a26dfab5bcfd0661c5b21
-:0027305073cf51a7ad89e5b36bea3980964297
-:0027407260e4dcdd8b3c8d7edea21002679ebf
-:002750604713d9411435a14a325b8e7a53dd15
-:0027602277e12585dea6d8d65ee770faf4573f
-:0027700076f7ce327d8b4c075f7eab99ce9134
-:0027805fcb32eed774c511355576f5cb000bf3
-:0027908b97ecbc6d36340b41438c7feccd2db2
-:0027a083fe694b4cdc494426f373fc4261c399
-:0027b025ae15412b75ad34b7d1e001d2ee7ea6
-:0027c0821ee96d61d91cd33c0206da60431bc8
-:0027d086ad92147c4991e703c857f54d570d47
-:0027e034f5921562484136bb15ad7fbf471de6
-:0027f0264caa8409c06b754b1d159828c8d6bf
-:002800dc5bf1e914661bb9972232fe1855c94b
-:002810905a0b0ed8e9965c5e61039a09716b35
-:002820ca362003f0b9aaa1ad3fb7ac44273de9
-:002830cfdff77b507a67119163e3d2f25354f6
-:002840f3f0358d0253aa8c376542ef0e24610e
-:002850f4e0de8c0b2c4863f10df4e34708ae8f
-:0028609c75b42a81d74b6673d4b81d53fd41cc
-:002870f603bda6d38f0602e96a4ebf45f8bf57
-:002880829affecbb00ee0aa161307af6964fa7
-:0028907a1381553254a08422335a47b38f8e06
-:0028a0f0e18e82e0e308e746e555ad4dfd07a6
-:0028b0b025467617481ef67cc814e58c6bb308
-:0028c08f84be9dd26e76462f3214e626a6cc67
-:0028d02df6e0b66d896e4e21bce67334e23ea9
-:0028e0aaf62848de48a65e2c0efcff28c8403f
-:0028f017e109215ca7465544debcfc153475ae
-:00290075c63a43fce6ada688bd58079c813d14
-:00291032b81a2e16491153986b2a21f200b8c8
-:0029209c240a17b86dc7bee8822a340045e87a
-:00293045e850e5c8a92a3812bf9b364bafd2b2
-:002940e0b5efb2474f98ab475e272108ec1286
-:002950b8e8e69d09d04c5bfb200b7a7a99cc27
-:002960f25b4aa50884544786a7994eae18b9e6
-:002970cc38c7e16d8dde79d5a90e95373eae39
-:002980de2bba43f1fe142ff0e767e52a87ed09
-:002990d197c1121236213668401f2fb2834dbe
-:0029a0c17a539ff6da1a33faca6f30bfdcfc86
-:0029b07cde3e6c91b80c3429a7743d220c8512
-:0029c0c3dc2934103c2cd17666860085c6af90
-:0029d0be018748b209382a4afd3d01054b8e17
-:0029e0b224e26ba6a0cab520a612bddc3cb17c
-:0029f0d5c707745538af7c37335b049b562b8d
-:002a00ab8a58e3b7bd03c97b63e9437178fe92
-:002a10d08a5a4ddb059144ad14159b9edee408
-:002a2031ea3ccd97659b9e9b5afb559ac8d22d
-:002a30fbeab4643920c4fd60d6e1b360fb6ee5
-:002a4003ed3634f309495ce60abee0f37de6c0
-:002a5024968772a1feb2589cb1c8afa2f77d4b
-:002a60aff883f226bb4dbcdc6c51ea053e42b9
-:002a709a7d6086c64ea830b4d74faf7dde0f4b
-:002a80fa92a8e774e87e9a6777d331dc1888e5
-:002a90b5392f08eb722c3a1cef155747f5cbaa
-:002aa04012cbda54cd015b991096ddeccb582d
-:002ab07d923c4c687f70dd77e953b7978328c1
-:002ac0503512bda28d8d284a64ef6b5fa09989
-:002ad009c7d2191ebd0fccd6c950ce7d818985
-:002ae000192134121db9bc7d3483162a11c7e1
-:002af068fdb40ea131a70aa0d97abca80f7145
-:002b009e3f5b263e279d26d2064bddff780803
-:002b1050c5280c84c44b2cc1eeca60dbf2f64d
-:002b20afce04990a6dbf4c2512ce151ad29a2e
-:002b3076cfd3239c5fc1e0738f565c11ab759c
-:002b40535edd20b55bc6b525a952ed430662a3
-:002b503860853999a56c5f4ca29a4344e6e38a
-:002b6015a329c99dbcaf8f2c9f245032363b02
-:002b707e8a07302b1a9b3d561d9d5b9f20869c
-:002b80ea8846afdcffeea6dbee69801b02e723
-:002b903e0e77e407a6da1d0c7af238b4513404
-:002ba08b6398be5a913be20cc8407561cd6909
-:002bb03e56b0f6ec372a7904aff23a60f6dc68
-:002bc05ae76d5e34d0e386a05e198292f4e4e8
-:002bd07d8e0141b61270e82ad0b0e9390689dc
-:002be07e34354b5eacc6c624fa0d9a1e9f8ba2
-:002bf034e9059294e78bd011f77d8777841e70
-:002c0047faf09e2b4fe1fcafe7829ef3b2fef5
-:002c101d302c393053b66c8b20a28261a4eba9
-:002c20204f7228518b1698db3db349b5b40f0a
-:002c3093cbc59c9dfb66019045f5099b5dca69
-:002c40b62976f7b2857f8e8c09c82bd439c8b4
-:002c501029f376a6acf487ec342a13b6786eaa
-:002c60efab0a3fa9f31f280a80da8588cf1f37
-:002c7034c3d2d24ea08c9f3699d52831ef4dda
-:002c802507824337a58e4949bf1dc2ba83a102
-:002c90b14a42d99ea029496a5f9ad143b9b7db
-:002ca0a0202e4b94d9089ccefbcb747d6efbe3
-:002cb0378445f8f643e7e78f932de5a0ed28b0
-:002cc0a12663c6d6ee1dda1151aabefb56a96a
-:002cd08e9e85c418ee1d840dfdb91580170f06
-:002ce07d82cc1eaa5ddbdd3058fc22e68dd243
-:002cf07dea9f7628f601b4b61b7fb092ba2c6b
-:002d002be98bd5c7a34c50f32ebf64f9bea550
-:002d10556abe2919f9563bdee2829772d9bed4
-:002d20709f3a22a15e51240ca5887d3433a0bb
-:002d303dccf998cc61e7b8467d467f85788289
-:002d40b924fd28186d7463a31e59b05acc277b
-:002d506766943daed6afc06f46d909462032d9
-:002d600493d24aedee3e4350e98146fb0442e8
-:002d70679870b4d423613ff29b3842a613e698
-:002d80a4dd02aebbe71a150a43a01a905ee9be
-:002d90e828aa687b7b950a53a18cb0b78e1de1
-:002da08d689d47f4e7de8bf0148c7a2e89491c
-:002db064601c3b1eb9fb2dc8885577361d3d17
-:002dc06463bd5ca8beaa0a95ceffd587132aed
-:002dd0babc4dcaa36ff3829d719895a277e4cd
-:002de0b77d4ee7a670d35abec1b6a39547ede7
-:002df0ce2e423cba50f8e8054114dc507c4601
-:002e0020f207b3d84bec31bd08a8215ed40a24
-:002e10f009abd1266bc16b87beced51d57b2cf
-:002e20ac482813469e8ddad0d8b13b13ae5aaa
-:002e30355932333a79b929f8566b9ba4d1d9f7
-:002e4059d9e4bd9c572c078049f187457f5725
-:002e50e6dae8dde43486beb352f6de808a98df
-:002e60a1256e44b9f1cbdff9e5de08fd13360c
-:002e70d769d72d4b7cbd3889169d8898fc8fe5
-:002e801119e0976d217700b4191903a9f84b4e
-:002e904b29262cc764e5d0d7b86cbb9f11e5ea
-:002ea03182f757a9f328dcbbb18f29b2e3bf4b
-:002eb0ef1419d2ea1a18017d6b8482b8b3545b
-:002ec0c94524334db785b31eb269a1ad2e4fdc
-:002ed0903fc182d0ce01af225e2b36d9842056
-:002ee00b70db22a9369d5de18b59cc4843a25e
-:002ef034f6662a0825fc88452d869a76a98425
-:002f00ce8ab3e68f85baf51875a63c4f00e219
-:002f10fcc5ab4be08dbbd35becf7c92238941f
-:002f2026467411e96b3322cd25ef65c7956a3d
-:002f306f15a4d96d2aaba14108a49824e5a86c
-:002f40163bbb17ffa542c8ad7ddd2c86e8ad83
-:002f501de731e9b409fdf9d43f44b14a2804b0
-:002f60b5054265209af7931fcfd3f7dc236ae7
-:002f705b58f7e567afb9ab86b842dcff4e624f
-:002f80499ae3399a6d12de74ecdb471f7a7109
-:002f9009e983914942cec48db19fa6a5c21b6d
-:002fa0e11fab7f254e34187cf7c7909f87a8b7
-:002fb0ce1111943e7e181802b5d863a7327190
-:002fc037acdd9c85f22dac81c840b68fae5525
-:002fd0c1006b40d7e2896543ff9e95fb5cd6af
-:002fe061513f8205af35b01ef1fa6794b5346f
-:002ff0409b0d0533f89536d0f351309cd84cd6
-:003000ea39da35467f69720b49b4b862b5d321
-:00301037764e8a0a55311687877e95d0216a86
-:003020cdb8ca8a2ecf0c6aa1d6f360958d7516
-:003030e54ea10437e52ba8e727fea05aa02593
-:00304069a6be3103b2c877f9e1fa97a7d48aaa
-:0030506e16646381cbd36e10cf528b5c32bd7f
-:003060125b911fd06f761669713d6d4324a917
-:003070699aaee810c2933affb4cd75e3cb74f2
-:00308077c07c08ab79cf63df157eb372d32ea3
-:00309083ece5352dae27ae76d6b299241598ce
-:0030a04e6981f67e548de064682c0e76dc17f2
-:0030b01e96f2a9e80297273907c57b706db856
-:0030c015aabd2b336db9e1f10cd18618cf0bbf
-:0030d0d80721b39d22edd3466751799088e53c
-:0030e0eb0ed9ce2ccca55a22df3cb0b50be15e
-:0030f0ec3be394adcd9a28f8e3a91c4105181c
-:003100dc548190e5f25868e0f3421807b2f167
-:003110c8e5fc2711a1f7803f02eef3cca155d2
-:0031200a0cef32fd55845bb7c43edc22529ea0
-:003130d21b361c1882948c146657d9438dad00
-:00314053f9e6f0f6f797a36026de9288680e32
-:0031507800d273cea3d0787ef87eb8b6affbbd
-:0031605f009f1c1fc53f1da37ef81f3e114f12
-:003170d9f085edd1ce59b2e0fefbbfae4e11e7
-:0031807435a3b9db4b19e7dc0373b06e2ec182
-:003190c7548b81e5cd36203d7168df1c8d6107
-:0031a0c809759ae45b29e1d376b99803593b16
-:0031b09cfbf4de8a4efd1ec7f4cef3390c1ec4
-:0031c009087207348ff70e59125d4ee3b601a6
-:0031d023ea90be7194e21b3d50bdaa6138702a
-:0031e077c122e8d2e4b7870d78e55f5367ba38
-:0031f0af337c98367b1524aeca7ae43a5d253f
-:00320093c7130faafd7f586145cfa4d30d1457
-:0032100e2996bab598a18457a523309174dc63
-:00322066354c478263c346f8b994df6360beeb
-:003230c96321eff58baa0e05a6bccb292877b3
-:003240fa0e07beba3762af7f7635036f9a1940
-:003250243a06a0af0d20ed4fd9ac107cce391f
-:003260ce4084bcaa6cade55642866b4e0f7627
-:0032708aab262bfa8ab08a79cb054ec86f524a
-:00328021d10f0b52174b8a0237058d8cd6753b
-:0032908e3c9a2a0512536dc4fcca91b3a159ff
-:0032a0175f4f819166b382246fa4c592a0ad2c
-:0032b012a1918e4d64fd0776f3f5765da1cfa6
-:0032c0dbf726e1e02143b2b8b9c54f0680ac4d
-:0032d0f33375ed1b1111e2fb7b4b8be9e7e176
-:0032e0acd2fbc86bd13009d321a5c5f3932a2d
-:0032f0d58041efe906fb71eab613dbcbeb0a0b
-:003300b589115541cedb016b4685cadd11cf15
-:003310e450809db6e1fab99bf05064d7232b60
-:003320b69724f5f7f31c20eac922063fbf0b09
-:003330d915c87726385dc8e11af726ff6c7a65
-:003340873ed9344e65f81e5fde3d9de4b7188a
-:0033504d798f4d21f358a82d3d456bf7735072
-:0033603cc5ab9cee5c1018394e5ad65cd76781
-:003370c1f88799556b50af7a00e7d2b3019b7a
-:003380d3611c51d3f3e1c1be0cb8099dacbf31
-:0033905f35e37d18d6da0382048c529305946e
-:0033a01709f1d1a8f9881ab56f01b7732fd8fd
-:0033b02aa9de09a6ba91a0db9eacd5c4c6f85c
-:0033c09a7c2a1e18431bd5bd768478a7110fd7
-:0033d0cf6d53523ad3a129f97f652a139afa90
-:0033e0288f83f4756de49d39c9121dc3ed71a8
-:0033f0401932be63869a9bffb6ae409db12483
-:0034000fb1daca90491351c531d2cd15b505a9
-:003410fea89782c4bba236323b2e34d380f505
-:00342039be64649b912eb467352e38df476270
-:003430d01d23eee643ad49889ac6a909050f25
-:00344044a2d80723afb59fb9d14acfe0e2fce3
-:00345066ca7323ce2baa9882f49b0a56865d38
-:003460f01035c26f8e3187b300ee357919ba5b
-:003470f4f16f34f7e8817a9939a0092def6f08
-:00348086d4aac58e2069c8ce8be9dade42ac59
-:00349097c63a936d1fba12194291773bf52294
-:0034a0304523deee53ed0d921a385baf54e4f8
-:0034b0932ad47fae708a9f7d2ae89d728dbd1e
-:0034c0c1d3be14d677f6343b3b9e92c446d129
-:0034d0ef7c0aa128f1c5528455b1da84da715f
-:0034e03db58fe8dae405d37aae2c60ac3c1b86
-:0034f096286b843bd5c0860007e6004fe568f5
-:0035003acf56fde6a9b28a046d4506a882529c
-:0035100dabd31a5b60f1acb951f06ae97ff41c
-:003520b32242d3933535c5aeb428ae12a6b448
-:003530d96940580cba97caaf7ed54025763c3c
-:003540cad734a78364a074d48160a1adc8a96a
-:003550c021154daaf170151c75232d3cebb3ee
-:003560797730103879ae463dfc954f8e416f9a
-:003570d781ae4dcc0d72b83b6487346b09190d
-:003580ae426e324b3e6704be714e1a8f1e0efd
-:00359026a3182ea2e4e4b070e41e97cc76a951
-:0035a0b0ec041d02650c5580ace127e7028492
-:0035b009a855e9dae8e5efc3534f8a59a9b994
-:0035c00b48dd4ed170746cdc19ca2c4b9f3dd3
-:0035d01ea00324dd3f604ee2eb0994c5f55e13
-:0035e0cfea897ccebcaeaa144ab221200eabfd
-:0035f0a9aaef05bb424becf00d8d2d9452ea5b
-:00360064d140be730ccdb6fb6e52a258236c46
-:00361055b224b945df77f2acb70053dc615178
-:003620af480e28d8c67bc4c8ee5948aefc32e9
-:003630f230eb54d2bd758aeee8859ec27053d9
-:00364060e8585d44e290785e730ed09cd0595e
-:003650c62a9e798b4ff838cda94a933c3e3352
-:0036602951f28e6f1c9061c823a5e117de12d7
-:0036702482e4e2e05a0a1a4038814209cc0329
-:00368024bb5399a416653cbe59c34459004772
-:003690acfb0b8c7cd9262dbe84deb799e2f9a2
-:0036a01e2bc0fc70bc9754d03f83732e6a26e3
-:0036b02895209aba209101d63a9a9b82e7e8d9
-:0036c08aba151de8a52d947f7adb91b641a4dd
-:0036d04cd359da356edad4c71a00af7a291e97
-:0036e03eef6f7ff5daabbf105b670b5eecf343
-:0036f0fe574c2027243717e3f067b8ba5d7fb7
-:00370069739480b0570237502dadf7d41a033f
-:0037109c8f38ad43153100993a22e9a1a4b60f
-:0037200f6db2a9ff32d19b13c6c7162622cdb3
-:0037304515b898d406d02fcd6306fd8d10146c
-:0037402059efffe5903e70d720c76ae8a05111
-:003750d2b3035583ad7b4021f98526878134d8
-:00376039322b21b4f7c80470aa57b25839369c
-:00377061385b975fdf4ccf5b6098f852c030ec
-:003780c9047aae2f6a2c132ef479a1304e7486
-:003790cd2bd912333b042eddab76f2f960b98d
-:0037a0e7c7d5f80874e13d14df05b23d4fcfa5
-:0037b05089da5d640b545cde2b95b420ab22c7
-:0037c0932949e65ea9c185ff006175fc8f765e
-:0037d0416a12fa84d3dfef3f025ff02747adce
-:0037e041a7dcbf3935eeb092bc938cf341212f
-:0037f0cdd8818407fbd28095cd1f1d40c0e5d2
-:00380060db24a8322c22cc798e9221bd5c71f6
-:003810005fee824dc7793c4552554fa6c1282e
-:003820b1722a25ddcb6afa09ef50447aefac5e
-:003830305f52d77031e7472590c1d2d417b8f6
-:003840cf3256a55a69112e29e9b8c6dbadcfd2
-:0038503025181c1212970c57db1e2e21ef0d20
-:003860789e32dc70bf441335f90b3e7a038788
-:0038702e3e59910dfb1e93856b5acb29c6a395
-:003880d31de725b4ea81a4490ecc5b523d0504
-:003890d939333650d2215d2070fd0705ff9451
-:0038a0a62312eb3ff1abb51e819d5dbd6937c5
-:0038b02d44294ab3c917aff2c49ce62dd027d1
-:0038c080dfab250570283dd69c61d7c47094ff
-:0038d0c26603b0f807bc0d0b8cfc8103391653
-:0038e0d85777c41eb6b3ff7349d35b21cd2ad7
-:0038f0f43fcfa89bbdfe63d79fb35e7cfb0bee
-:00390057d9dd8406d0ef6fdae4b4834c411fd6
-:003910ca5956ed0ef7347322ab30bf10331bdc
-:003920797f4856326bfc7b796fe4ca9bbfc590
-:0039306bb678dcb33e24a28136ec852459a9e1
-:0039409eac6453942279e69263c0b0836430b6
-:0039505d614ab5158ea2f2c25bf157944e432e
-:0039600bc1a9ff08182e287cd5f0be4e0ee428
-:003970d07d22254fb1715304d43843c93687c9
-:00398012ad2fe9d687626294baf4d53573a0d3
-:00399013ba46ada6528a92527b1d332e306b1c
-:0039a0f57dc607715d2dc414bc68581e027280
-:0039b0d12723877b2c7ab574ac1e62f60d5871
-:0039c03aa0e9896b796301c949d69acc7b2f85
-:0039d0e8600e7d82d033120b0b797b64a30205
-:0039e02de67239c5379fd218d46d3f423f752a
-:0039f09fcd6608022572522b4f02f430cab22a
-:003a001ba0503422ea20019062825f0ec16848
-:003a1011f63bbdf930d12c58c6f9232c590d52
-:003a20080152eba69f7a96c70b66d53498e245
-:003a30be3782e5984b3eb615853e795ab4fb5a
-:003a402d8bd00bd25ade6b1f7bb93d472b4284
-:003a50859b2ba7f13d994dd8f403c292541107
-:003a60aeddd7ff7dd155fdfe8e5d50afd869e5
-:003a70d0b2483c60eb8490f942541d52bdf8bc
-:003a804ceb35e75d9c23e6b17d4da1628dde93
-:003a90d42952b50d80fb1121378603e8b61db9
-:003aa087f3625a9f1956b5ea2198d894bb4028
-:003ab0020c9d55a54d8714356e316ec371be50
-:003ac06c4d8b95ebadc440d9741d112ddda0b4
-:003ad05c47ffe0ed100a917d6a358d63f1b0fe
-:003ae06d5a94c42896ec1813d0fbbc3cf85475
-:003af0796aa1a9f79fbe2f198a8721d6aca22f
-:003b00f5d0499551c50957db2eb25550d01846
-:003b102c076d04dc553ac57bfe635b65e068a2
-:003b20ab088646d8852b685f0e27ab231c15f7
-:003b3003c650ccb55c080434e4049afa40ba9c
-:003b407bb49fb0bbe6ab8fb5aa2ab87a8a5c76
-:003b50524ffb6ed3e84401781c1261f3f87a7f
-:003b609100c0e9920f1b2b352b23f6187985d8
-:003b706e207aed56a08c5293d0acd47b6aa462
-:003b80463938e5b528f15f231556ec5511759b
-:003b90cd0f74cdafb18f9ac48c0f535a42df71
-:003ba09762cdde8f89abf53738a8e347b54976
-:003bb0304b3c4fb9d76914811f049b242deed7
-:003bc03d4fd8a223014caa22ea082ee0346519
-:003bd0b34773671b6755a4838b64288020d3a1
-:003be0474252d5659e4504a7de30ccea42d63e
-:003bf060d61a926ed17e2414cdb2c565937ea2
-:003c00f69449351caef8fef85ba8891b8eba60
-:003c1069426f8c450e9016455e691f123ad78d
-:003c2042f4fdbb53162d3349a9014a228dae7d
-:003c308496f109ddf112103f9282b1b2dae71e
-:003c40942efa0ad88317dfd88b8d7997a01112
-:003c508184b1ec077f56ee0670651858b44aed
-:003c60a2e460050e78a01bf7295671a4f44d6a
-:003c7007e7fec0bf6a9af674d669c877f222c6
-:003c80dab12c3de5c715b33b0c52f5f6b03252
-:003c90990f81a18f8b98c4cfa043c2a29d69f6
-:003ca0c86817457f8b55b6086668e8121b3759
-:003cb020b21c6a2c86ba0716f6d8ba89d3816a
-:003cc00ddc7b45b2f13ad2eb4a93bbb77b8304
-:003cd00c7d7918024c9729e85b6e0376886d42
-:003ce03a852a720b532dd4abba749ea73a3a5a
-:003cf0356bab62eff3b00716163f2ef8fcac9f
-:003d00aef36b7d3c69e8c06983fe8c81e4dd87
-:003d1067dcc415693cb0d4debfb3e61c677a1d
-:003d208f9359d1d78a7a5459cc7aacc111a1b3
-:003d304a7b7b4218ca4c866631c17a44034cff
-:003d40174ed24af7d95008afc9336b3672c4d6
-:003d50a965e76cb7c33d02c87b53a74970b745
-:003d60937879982cf10140f041548a1a633f83
-:003d70f7c0766a1fa8965c0b90e748142174b8
-:003d8077b43cb979688b2c528adf1426e976ac
-:003d90c4e81fe62faabb097abcbef76c2ca5ca
-:003da06f35bc873be497b092d62c3be6e5faa0
-:003db007c0eeaab925c39de6d6de01384d099d
-:003dc0747a615309ed42b651ea80e4198c8793
-:003dd09d477b70403fcb4fcf3575dca791d1b6
-:003de0a849a4ede88d67fe6f926645c9a41bc3
-:003df0454e2e1a7ca597e43f9dd15406fe81db
-:003e003a08a332f4be66faa0015f095fbe07f3
-:003e101c9f644db22ec411b86dda09d3f00fb0
-:003e20dcd28535142fd5cf3e2d4e7979fffbcd
-:003e306b1eb446dcd6d3fafbb6b134f36cc9ec
-:003e408c7d3a5a62d28046c599b90d82c5e4c3
-:003e50c994d76fafb4a61f1f0dfd7f33d278a7
-:003e6066152cd40acf08de27e26afd2439bf91
-:003e707390f0f78f4c60909c4c56176eb841e2
-:003e80cd8aec2558db3a1ba34e9132ceba3407
-:003e90568315977cd092b7666ab508c7632be9
-:003ea069d122612bffd402f2d8576eea6ae287
-:003eb0991450ae56f62d710a0b66fef49c234a
-:003ec0bd090f40101e4d7083c8c47eb4f2b8fa
-:003ed0d48164135e917436985c95a4fce2d067
-:003ee07cf8ddf3ab0cd250753cbfa0c3fbecbf
-:003ef0fef8902290d50516fc26da1f8e630197
-:003f00abd7db47b50f84346a0c175563eb6a14
-:003f1075a13d38594f2adc1d5296a598b48cd3
-:003f20564a39936c2c4514721f1aaee59e8912
-:003f304b897032387bd2782e7f1f0f685d9a04
-:003f4036e40e077e743628df1dea800b6d3b18
-:003f5081f63997a24751f479ce5388a53f6319
-:003f6061568cf314b37e2250e9a26a71b3f821
-:003f7012fe79239cbc1556ca96a5a5a816e758
-:003f80569dda4327670f30335bca38401317e3
-:003f90d47e2f28b01e6db38f34fd8fe0c4733e
-:003fa011f4af388a82b5e58bc231b285a29f92
-:003fb0de5dd7860f7111d71cd90b36e1b777e9
-:003fc0dc03236c281b0dc10e710872e224c7ec
-:003fd0d615e16d87d827ffec661b76c757bd5e
-:003fe08b5783964745c49be5633a920b393d7d
-:003ff02fb86232cf7bd64d75deb0515592ccbb
-:004000a405a76c06b345538f1cd85abad0015c
-:004010c69ca4780ae8e4aa2ebc4e438d62f320
-:0040201c04c3faa8d6b227cba8cb3242406d77
-:00403037ec86616afc909fc56b11e8f27c086f
-:0040406f4cf6fd76e87810fa310c2fb483f733
-:0040505e06f6b4a7c1b4ab1617fe9dd734acc6
-:004060573eed0f28f442379e7a6bae41d1fa20
-:0040702475d151ac96f44b1e2795ae72795d37
-:00408045c1eeba9f52692a61cc8cbdadcec03b
-:004090193b34bdfd625e39f59900cc290c508c
-:0040a0840813e0c5df56950658e9ff44b387bd
-:0040b0f938689231fb2d46b706077ea40da37c
-:0040c0eebd7ce10c96c2feb013277c0c70d728
-:0040d00f674bdbadbf498a286288a4db4f2cb2
-:0040e0f3bc9b99a089907cf9021fdeced83474
-:0040f0db29cf0409bcfc839d56df50ebcef64f
-:004100f5b1debcc4e51b37702c3fe473671ae2
-:0041105d7dd450b675a2a884d2bdbe510fb438
-:0041205aee3806c3c2deea0fe4059de8f0795e
-:00413090168e25edb75099284472849612bcf9
-:00414043cc1c06d9ab7ccd04cac0df30347548
-:004150aa8cfbfc7b3f54a75eeea1c4c421ece8
-:004160c54803b3903c593cb33872754139caae
-:0041703cb266772c16575d1e58dcc9bfee59c2
-:00418019fe50cf8887ed6fd5f3c010b6f638db
-:0041907edf566818a39bd543f5dcff6c1e3f4d
-:0041a0554304097415f4d00f7c76d49859f8d8
-:0041b0f304feea41a6afb7e34fa558152fd5a8
-:0041c09d087fca6b2c1b43cd40e3f2ec486ab6
-:0041d0d4883cb86b922aa22d08846fcf4a17e9
-:0041e00010800d8749d415127c6c4635ca7326
-:0041f03ca746113c4d8518cf55262d1d80e594
-:004200cd1333ea14ced69a6ac6c6258de2816b
-:004210cecfdac416d17c94806eb9a067270efb
-:0042203a9b192914e1d2087cfac27367776a20
-:0042300c19a2b8aba5d822014dcab8d18d461e
-:004240e83f8f718e8b6a16c4cd1ce1c555db64
-:0042505bd2137b244286e0b5c451277e9364b0
-:00426050b73f570940d8d6ac709fc03cc20bc3
-:0042708a6bdaba61ee6856c9b7ef34ad113670
-:00428008f457bebfab531f2352fbb9ad9415cd
-:004290e647002261023867e65b37d757f8261a
-:0042a0a59de4430496312a81e2caebe923a20e
-:0042b0cfb53163e01cdf5bd5bb8faaadfccafc
-:0042c0b55d6604f3ae5ec0b180a6a316246821
-:0042d06dcfbc6c5eb1b8b4e5e104692e82c654
-:0042e0f39dda2ec814322a8de50589ec912365
-:0042f0ee2dec12300feabb719f3af3a83ee28a
-:004300a6d431f4d551cfd3307afd325d6294a4
-:00431085779f0abd63e39979409a2864d1d79a
-:00432060cd7200706473bc687bfac8777348dd
-:0043302ac5bccadcda2bc5f2bebeb45db2b28e
-:00434005a34ba4b8c12f511f095fe22832f147
-:004350a16aaf0c0a0d6cede91ee9a3fa626a5a
-:00436056adfc02020f39dc6e3dee172ac44371
-:00437061b886c4a793e4706945c447923f1588
-:004380a8a7cce7199c4c48b28a46c52abc660f
-:004390bb93cbb76f71bdb8d48c014fe496a2d8
-:0043a0d9e76c72610a18934245509255ec4ce0
-:0043b051e63a1ccbc4b16077324e5921bac46c
-:0043c0d32fb3f4cb39199d125c5354106db3c4
-:0043d0d2ceebae4d87c18d7debb7d7dd400178
-:0043e0ded153a83318a07524f2c6978d4caebe
-:0043f097efd788b35faf546094d81eab7b3c99
-:004400bb1d9b979635b289b9c7243516428e46
-:0044105477aa6a19fe174ef6e38e3dede68f58
-:0044204b490de63578e854e4ee270f7fc22c91
-:00443025e0662556c63272d79cd2450f84f694
-:0044407e1ece6ffe57cd8e363accd0448f6acd
-:00445089a26408c329371127a33eb34a35260e
-:004460e2ba5b16d991df79b40acee7b6227b74
-:004470047f31f734a1969ebb8b27cee2799244
-:0044803a469d6728d3c7f4b2e12c236740ca59
-:0044905d278b80c72299de316efbe49a974644
-:0044a05b890310c6bbf61d726dd11541cef09b
-:0044b0e67fdc0931c49a0bc02c31f767105889
-:0044c04b7d7caea41738d3cf3b8c844e16642e
-:0044d0f20e970bb0e85acd60dd4fdb28e9849c
-:0044e02f905b577b0cf244ea45980f94271269
-:0044f051bce166e92a995004bc19520b09b94d
-:004500c1b3eb4e07fec3eb663cc16b3c5a2395
-:0045102103c8c2b521643c7f5ed89ca2d1fed8
-:004520e9d1e513670c0db4b70f0dc28cfce23d
-:004530c292242b287583023e86437ea0d8a526
-:0045406ee244531505c248e86dc17c16eb9a6f
-:004550d61063bf377cfd253ada9b1ed5c212c3
-:004560519a6c1d92615b33b6320644304b26b2
-:00457007e4d902ffc801fdee74f474d412eb3c
-:004580bea390134f3afff05fd189a6a0aac6e8
-:004590a38694847d3a26947df86d8e7891c79e
-:0045a02817bc30f2e040e2363f86c27f383e8b
-:0045b0df9bc388ba94a1d525d93768f93138b9
-:0045c0e95d006fcc5ec86db0535fbd5c458e95
-:0045d0fdd52ca8fc753971079afa62af8fe1a7
-:0045e0f9157d4d49fbfe69d21a92f97b6d6d43
-:0045f077aa8c8afcb3577b0ed2bf1468860b24
-:0046009fbfad7695c943e95aa8b748ad9829b7
-:004610b4d1fb8b86a143d220865aae3dddd311
-:004620ee19fafc70ed8fe5f0ee77c9e0448c5a
-:0046300fb0688fde67218a977719e7b5d82852
-:004640c511bdc1d936a19fddf6348fd354d1c6
-:004650f7e7c0a268dc4d5067e5c4b9c4b2e936
-:004660887543dedaf8c51f2b9049297dec7f6a
-:004670bf3179ccfd6367c54d88b910c4792f5e
-:00468046da6b0882d9924b6ce9fbb5f25e4bf3
-:00469022fd9ecb0c02bba8a400c1c06d9dbc51
-:0046a0f319cdfff60a48c23053cfdd932c04ba
-:0046b04d632aa0cf28628346c6e4b6832b436a
-:0046c06cd42650416e7823a2911d0a0f8f9207
-:0046d08ca83f524c6659bcc3c3e9029a44399c
-:0046e01b4feafae1ca539cfc5b8e2fe0933f06
-:0046f04e6a9e9a14b7866eed3c403fe82fd580
-:004700cb59b33888a53edd6a258bbf70357bfb
-:004710a2dab5790d243a3bbd394ac546648ecf
-:004720a08c974e70cf40a686d863c83b234149
-:004730240098b9a54942531ea380342a0d1002
-:0047400ded80df6eadbc0f5a591a3a632fe8e9
-:004750c088de76f46cbb8950cef70a82862ec6
-:0047608aa3db905abe83b6076070cf6195c6b3
-:004770cb304d532374f77c468f71b2ea116113
-:00478048baa33fa4a86dc11af377465daaae8d
-:0047900a45ac8b6bcf380fd9f49f666498df28
-:0047a0491e68bb8e74c07ee92cff711f51ad97
-:0047b082f5847bc1ef72d62cf436731d323577
-:0047c061cb7ca2857aa620b74543fee12933fe
-:0047d084895a014baaff2d9260c44960eca84d
-:0047e0d1cf7646ca548113ca832d2d16a6dd55
-:0047f0a3b0dc89c8c700ff157b8f7cdb460b44
-:0048004322a11645a020c03c0fb549d89681d6
-:004810d6071181225da0a7b1ec9449fcb0bfa9
-:004820e5d2653569cccd5b797afd6c60c165f6
-:0048305571cbe212a8fc4735a13253d8bdd143
-:00484017aa53174f5cdd93da98930f776b4126
-:0048507986699c7d7b684bd70b318e1516f267
-:00486082c303a449376b4c5553cd5c38b90f6e
-:0048701baef54728c37ef51f1a482b57426c36
-:0048801917500ccf20acb80c59171dcda9ef4f
-:00489008e304a1743440e528214492ccbc1ed2
-:0048a0f50a9fcca64f92d674ed7a4f53187367
-:0048b02c3c874a27068fc8993df09d65cc51a7
-:0048c0c61137d7f4a098bcbe59f73617437b97
-:0048d0e4f28096d50e94e494b30cc69eeb66c8
-:0048e0e0f8d8dc8ec177a6312ac646e7b095fe
-:0048f0ac1c74e0140912775bffcfc04b4e4dab
-:004900e1d34929bc2589a2218cef54a8e7b94b
-:00491021fb626289ba91fa30d1a0fba5cab613
-:00492074f738e17da5cb5b9e8766771f8c0232
-:004930a4590fe4cc3b4350571f1f53916bb89a
-:0049404a55cd49b1343874e8a78162b28a3f83
-:0049501638869cd58d193ad09d71fe1321f895
-:00496070cc97f14a781638d943b5a3260a56bb
-:004970303ce7e946f52d4740c41f506880ec4a
-:0049804abfb47fa49384f0bd940514b01ec567
-:0049906f7d8795d4289d4c04493bd33a343b6b
-:0049a00d07e2d1ce9557d95e3d2586df8e1c17
-:0049b054670a2679d57593192b75614ea93f45
-:0049c015e8f580e8015ebc8fe94552afe2a3ef
-:0049d0a0c63e27f780f69b41054dd543c4e73c
-:0049e0228fb9dd7e6c563ea0501add032cf739
-:0049f0bc68887a283a08a383b0a5a7d299b35f
-:004a006d8fac3aada9aadb5e53f120a81f576e
-:004a105139d703d451a199fb2be8044ae12004
-:004a2028ce18fb3aa6935b6719bd18c8e3667a
-:004a304ec13cd8cc5c48958667b98a7514c1d8
-:004a4049ef563313a88cb2804dc61192755b67
-:004a500482c24412124e97d1630bd92c70f4f2
-:004a6062b9cf47e093752166138b164965c029
-:004a707fc0b4318da6fdb88379650b2ab10540
-:004a80e34a946bceee1493aea084e1d64504fc
-:004a90f8e13bf16dda42f30c30126e1e7641b0
-:004aa05f44169f89ae216fd496f18835d71980
-:004ab043499297d2ddc91a2d78517ef874661a
-:004ac0fa734e29f015deac778a54c51b103847
-:004ad080a70f6cfefc179179704150c84e2f58
-:004ae0bd19d6ddd700dc1d60013af92f04c5ce
-:004af01dc7de6059d88f6be694da3754798614
-:004b00b609f805500f126df16487375c5013d2
-:004b10de5002ecdce89be69e9d5322fda78c30
-:004b208e3e4ec0e798a0e8351b58e29fe3e288
-:004b30d2e58c86f2d08bc4b3806ed0d427d4d3
-:004b405f5bd581e2a8aeefcf81fddfc9f76675
-:004b5026a30f1f6c77d9907a484bbbefe8fabe
-:004b606e0b27d132cb20c49af310fcbb716b9c
-:004b70ec2dcfc3cd34fb10fc4d370d3c86f4fe
-:004b8067433be1a0825afaeb411db0e71d9a13
-:004b90c83c6078bbde21f33e3fed5dd75ac074
-:004ba0a225e9161762bc27a27998bf4336185e
-:004bb0ada02ff1041305ce7a9d84c48cfe7f05
-:004bc00e4ea47ea4d042093157b578d1a1800a
-:004bd01992cbf43ee1a14862b15e8692e02aa1
-:004be0d0bbd75c9c7c765d5706d12066a29589
-:004bf0450d45a3299b3a9bbaffb3ceaae0ab72
-:004c000862d083194d8d0cda5adc9f985677a3
-:004c102efbbda4832c53319431ad4db42bbf5b
-:004c20c22a0af88ef30fdfc6a7913e7854b9a1
-:004c30d2745f2427bc61b97429bd8a924dadcc
-:004c40c6c16eb79c16dfdcf388ac548a7d71b7
-:004c500012fb39b97a8d881dd61b72e2fdc584
-:004c60389eadb9fae52e0dd697e661b891c609
-:004c70e02c4a1e3a0956cd121a2de8cf49db29
-:004c805348227c78f3d9271c2d80093e38093a
-:004c90b98055fac44952714e91bf923213e480
-:004ca08e138553a4a714621aec74e8a9986853
-:004cb03af6e246b488232fd3279f27d7ecde3c
-:004cc07e8f9d33b215478379f29bd3bdec3ff9
-:004cd03ef452b3c2d70f66c9296a3a50736004
-:004ce01c31b1dc45e12f4246561d30cb86d357
-:004cf007fd3d54b409db3e98ee7d5a12d8bef3
-:004d003ce01c6daeb8bb076b3591405376faab
-:004d108c33a666e333f190dd3f4f0dee67b387
-:004d2089a245fdf5cb319fe9b5b88ad0b78461
-:004d305c0f7905240069d7f094c126869eed8c
-:004d40245c344a3f0a58e5e942402b7be30f32
-:004d50dfb54ec0d54f5a2cb9312b68cb43bb24
-:004d60266198887d35f6d01ea1688fe0fcaa5a
-:004d7064def2e8df2f608ac6c5446f0463ce21
-:004d806eea1a4c9b4b82692c45993a76e5a18d
-:004d90f362a29388c0b5cf6f0d90ff9052b71e
-:004da0fca0a9ea0eadc92021218e0780aaa6b6
-:004db00625e19c84beb39d535c2b422d1ef9d9
-:004dc010726476550028148ad804cb3c61486c
-:004dd04532c9b0f7f670bd7778fd3f2075c7ae
-:004de005d4a8987da4a3bf0817b9a8efb52ee0
-:004df0c35ddaf4f883c9343378b6d127645d95
-:004e000ba0a1b2b252ce6cf868e98e5fcf930c
-:004e10d8b3605c5b49beb8e3fc5500e3a939c0
-:004e20f760c46e32157c3ba1815e265388f1f9
-:004e306381ec9271bda86085068fed21f21fd2
-:004e402946faee68ce0704255798892e55f059
-:004e50fc7306370258a9659e7693baee9499d6
-:004e601d943920d4a0f4af98dd0696ad8ec9a8
-:004e70e90b1faef2b7594b936d4164ea018f67
-:004e8022ed98c941971715a29d6d6190e2c475
-:004e908230b6c46abedb421c66f2263b91e5c6
-:004ea0096a676b4e4f5bfb1fbe99d8f215dbeb
-:004eb06f1f26449f6e98232905b69b7c9e25aa
-:004ec0be8091daabf7ffdef7305ce1d2a51c5b
-:004ed0b16012c051881800c2df4f3bcb38d308
-:004ee060d26083ab322ade5c602df54023ed31
-:004ef099a84f657df6c0b142a63d80c8cbaf38
-:004f0009aa00dd68ec9d86541ae5aa2fa19c9f
-:004f10ce1030977feb416939822c855da691ff
-:004f20490a80eeb923a34a161c866844635dd7
-:004f3099305f3d953b0429840f92bee4b6fcdb
-:004f4013233a61b950aab1c9f1ced1964bd48d
-:004f502fca56d79976344ac804558729b9fd6f
-:004f6032e39bd23dc2db01e115674991fa9e8e
-:004f70e7b83e823bce5f2938bc541f89f8a743
-:004f80e80d783ae08cd3e9cce33fd06db92ba3
-:004f90f399ab21c55fead96daee5c45015a622
-:004fa0faef26909f4299cb8cbd652db1bf5cb1
-:004fb01b0678fff3d6409bab66d4c92a477a05
-:004fc01c9649f512b4a7656b64a2f67553bfaf
-:004fd0303536c6026a462a6dc4a46cf0304b35
-:004fe03d88ca415c8f561b31fc1c1ea1990a8b
-:004ff05b0287d7af6aa446a4b48b48a51fb5f8
-:005000962e528b3a22f65f77cf7ec5894af973
-:0050106b9ab06be96cda19e888668d20bb927a
-:0050206af7f8d28d1fff0ab071f86792d7d4ad
-:00503057ccdcf1a6201274250a22835caec8dd
-:005040500caf936df8048292be6e2ed1f94db5
-:00505024bf2173c104658249a01675f9776113
-:00506003d4b6bd0839947cc39025a03ba098a2
-:00507002607d278cc34ad2afbfb0bdff9cbe80
-:005080d37ea385bf82401b85444091f2c6fa45
-:0050907e1c4a0a4e93d29da29ecb37c137da2c
-:0050a01a4a92d550dedabbd49a9a99444161a5
-:0050b0c65631b20dbaa5cfcad35ae503c323b9
-:0050c00bb1339d176b764753922b73d3bab979
-:0050d0458f0d333785ee06f6fe0aabd16d37b6
-:0050e0a7d194937d37aebb877f91f1aefd3134
-:0050f0b6579544674afd360ebcc413ccc18476
-:005100c4eef1b4a630796ece86e679ef603969
-:00511039dbd42c27d086cb13648a3d5d95691d
-:005120f3e23f506bd099cd31fa1abb19bab32c
-:005130fa6f67878ee9da7b4fc8b7a262b3fe69
-:005140934864e230e7db2ac36f3de19e5d81fa
-:005150c3e0f66f92efda030434c32f7d17755d
-:0051607ca52fbaaa3556db2917fcc5601e6e08
-:0051700ca7b16cdb74a3a285fdb7652be1962b
-:005180a66e3bf44f64c10450802c0045060135
-:00519056985c393424b2b7fb6d557417693033
-:0051a023cccb5817555d291fbc53a69f107211
-:0051b0e4335ead815ffd093d3d72406118b7d2
-:0051c08cf6dcdf54fcbe94e9dba38adaddc060
-:0051d0d6b616206c0c03f5da8c6ca51961a1d0
-:0051e0be9506c95abefd33da5411dd5707a247
-:0051f05b6d53cc91a346d2d7687f52abbb7552
-:005200ef009f662794f768025a685c79563ed8
-:005210157f74193c86341e894cd38fdae2c89d
-:005220ba419acb35ec158a21b041724ac2cc45
-:00523070386e9f8b54e897938db572210e4781
-:005240e4aff425afbeef28f06e5ec62f23a896
-:005250817ae0b372cd13f469bd1a9bee54e0e9
-:0052603c197900b0cc9472473d6d7a32f8aca0
-:005270fd622ea252e3a957a561019158ab4507
-:00528066e0562a923c38658b60246e0fdc4174
-:0052904bebb89967cda1ca54a209dc902c369d
-:0052a0e14f36e102ebe2e3239a08a44b4728c4
-:0052b0675e4d0491cf328a3187dd3c7e4d11f2
-:0052c0e4d7331669fa50d06e4383956b7c5b4c
-:0052d05c8abed513b45b01f74293c9edc8b2b8
-:0052e06e3ea59eb735703dac85ddde4580c1a2
-:0052f07f6794fc8cf3641952ad270520903d9d
-:0053003f33917adbaf8ace1761448947efff7c
-:005310969ec1c89e14f8e400c6046b4400ba07
-:005320c82ea9b669ff849837a9905c17259bc5
-:005330b1fb9d967fb7320043d3eab3b9795bc0
-:00534020b8a9b32c236633ecd7daee879bd2da
-:0053504be4d132df05b0348f7da4d610007117
-:0053602562cfd3aff5e6701767b9d2558dc362
-:005370556eec0dd5f99b309ea3169c82c9899e
-:00538087173ee36413641074494286234673fb
-:005390215c5b07acabcb85b5bf2222dcd414cf
-:0053a07d73c9470e8eb549c2d7604fcb61c1db
-:0053b09ca42dac86e13be137580bd3e11329b9
-:0053c02bff8f9234db8c4c5c1dc8d45dd5ad06
-:0053d05b78566a1b0f64141b63684ac41a37c1
-:0053e0f16d7cea08bc53c3cc663b3e6fa53f1a
-:0053f00c189aa3894c820e9b186a3cd979555c
-:005400e2f09a69450b44f39c4db19d66c3a19f
-:005410455831d5b8b326a9a441ed1e1e46f584
-:005420f7308610643dc1a48c3acf9243f8465d
-:0054307146817f88401b4c6a9e6155efbb79a7
-:0054404c057fa779fc92692c41e95d2ea453a2
-:00545060779e9549b39b9ebd5aeae06e580cb8
-:005460b6733d290fcc2691eff8b23b3bebdf75
-:0054704e6768be5a48f5f5dacf5429962bf30b
-:0054805b168ec5de9b36713a4f26e9b8b5fbfb
-:0054900116daaee535c6e8361753062503922b
-:0054a0d203d8ab1cb4017c5a3d720e1fae85c6
-:0054b080bf8135cd408cd27389947d3c28a521
-:0054c0938dd8416b372aa9504da3b4e4ef610a
-:0054d0bf73df694792f8c7edf9875ab83da7ff
-:0054e0d2afaa6bdd03eae77104760e90cfeb36
-:0054f056f013f50bf2e7aa6a2280b8fef84dd5
-:005500f0f2ba8ae0cd9ce5e3c74fa5de92b49e
-:0055100fe1e01289a6df47bdeb5264258462e5
-:005520836f9aad8e363d889538e4fe07040b22
-:005530cb1ecab889b89c1502aeb9e8a9c92128
-:0055402c1f8b6e7055bcfe66d1750641ce6dc7
-:0055509884d19197d6c0d06951a89ec349594d
-:00556076321a32cd7aa94fc1f62f880a906fe7
-:00557086d4747a12ea521e86e9319b8474ea8a
-:00558042f1f6b0ae90997b70323ed85a698feb
-:0055906897da62b38c908d4ce09f18f09f8c2b
-:0055a03c29b559738fe55dbb1b359acc8613ca
-:0055b09eb10976b2490f3d6bc4dceee7267f68
-:0055c02336654ff96c903220fa0376b1949e0a
-:0055d05ea6e8e1dc04d365f4d18619e94e78fc
-:0055e05680d110f4cc1a3cea95e5e7a5544d4d
-:0055f07783db943721af23732b4debc20a167a
-:005600503591d892cceccb263585c1a0fcaf5c
-:005610da367d52412c5142f4afd0e626b465d1
-:005620c3c2c339aa104482fd661a7a935b763e
-:005630dbeda7054c8ce38e9ebc5a4865a33757
-:00564094ca9b3f4201a575937624e31c89a228
-:0056504a6f2a3c45a3a7c5e075609fcd609390
-:0056608e9c41e3f7565004f7f641bb2d612d37
-:005670c07535b235c236150a4f86e5c2e20029
-:0056800a0811f7f922b82eab63077920012aed
-:005690428c40046307a85346f4cb5f2aa77e27
-:0056a0066bf07471af9b931763036c956a7bfe
-:0056b0ccf6ece897813320491aa12321fd64d1
-:0056c0892b69f728dfa2141baa861fa86a6a70
-:0056d04ab74fb1a79c7b087c4bf7e7f754786b
-:0056e08731f255942ce4a33c0d86f6c7636f92
-:0056f05cf31b2a67f3d2a58d496ee7551e08a0
-:005700890236636541fdbc72456395827eb49f
-:0057106528d5859e33d870d37a801fd1dfe1f1
-:00572075d1adcb67a2cf70e45f26b9cb500f30
-:005730168a961885ceac3ccc74b24ea94227dc
-:005740de35d6200aed9224f411ce7e3c9e9f4c
-:005750c5811bb94eb3b2d1c61509ef86311645
-:0057608dfcc1de0e6a2b8a8d8e3ae0b9608f92
-:00577042aff7c175f3c56cb4561b01eb832fdf
-:005780250195cff532ac46a35104f59ec9f86d
-:00579014a4257d84ad84d305c8712a38324e5f
-:0057a0b061aef0bfefcc68225d965083d26de6
-:0057b0a36184b1568768b79514cf0da4423da6
-:0057c00a0c6aaa2753641345038aff11e59d0b
-:0057d0805c911b4587d201e4d594c2ce0ee5e8
-:0057e041598dde6a53b08b8f9a23fba1e219d2
-:0057f01398d821464a8e75aff8aebc9e4c3e7b
-:005800d1948d05d739645c23bf516f72df0ae0
-:005810276826d5dc8df67b1c4db92f2a01b59c
-:00582055e205f25246c5408bcdf890c28e09ed
-:005830420b0bff2e3283770bdc63554fbc89b3
-:0058402f1b01cd0e864d87b1f893660b802b6b
-:0058501fc2b012b6f5dcbadb60a9a5fef59c96
-:0058601b1906d262870c42e8f26da56ba7e56b
-:005870677b2934c7b11a88eb1dfdd664fea612
-:005880f975b2a0951de15155f4be2b3cce3e2f
-:0058903ac3e4f5958d461d7f059128ca031f27
-:0058a001ffcd631b7433923dbaf2e438553dea
-:0058b0eb43c7442ac8948afba64ad88f33c5a6
-:0058c0271756989b9a26f7cab5dc29f63acb55
-:0058d07dee7484f8d9eebc455db75850873270
-:0058e06a50c2ff1f259988b1496ea66bec74fe
-:0058f029bde3d6e72e524cb9007f5073c5093c
-:005900bd4f2eb7348b16af7e6e6137db26e5e1
-:0059109743cfe329aea7bb6b8732fc250872bd
-:0059203d9b7ee679bae9127cc5ffe6a7dfd845
-:0059305ae2d16f212c9ddde084debdeb5adfb6
-:005940eb3b21df7e21087f8176367025d2c792
-:00595050164a4ac8a20815108149ea08d1484b
-:00596047b278376678dc5cad13508344320b62
-:005970a1ade899e7b6dd8e72ee1b605a58b4bd
-:005980de40d0f85172042c9123d9b9f622f63d
-:0059905a109b95fd6577107df28288e73e5ecd
-:0059a03dc63ee3967f9147a50c3d278a32973c
-:0059b0a58de11eeb84f48dd3fad767b6a511c8
-:0059c098574a13aec088af8bd56ddfe0d1834e
-:0059d01148e57e83ca6d218110689a1788b48a
-:0059e0403c24739016fa20b7557e4222ffd77e
-:0059f034664bd35c6adcf2f3727d675d5b8de3
-:005a00ec96e3d7b4920f138888f9362d381749
-:005a10972ebd25dfd0235ba98efdc3235b5050
-:005a20e941be5751673618d1f44b7439f3568e
-:005a302f0d2e6df96158152c5c8c4f83c5ad34
-:005a405e1711c9cf5c5fdb06daf7c6b43c0e0c
-:005a5085169b876de2c3dbea6e5f05a83fb8e3
-:005a605f2040ace9999dd8d50168ca9a6dc709
-:005a709d8a18c19083efb8fbb394950a1a0618
-:005a80aefc6d89d00940a12a461e0489a713ee
-:005a9041188eb7a14c7ff511249fd1212bcf65
-:005aa0f70c1349a1a4c0ea41ecae11db34d9c1
-:005ab0edc7b7a237d7ad62013a86f56979799c
-:005ac0e4010e1a06a91a971a6f1d16f55dbb46
-:005ad03469e96665e698fc7f9d0b0e60c67f24
-:005ae0cf89e8f9bd76cab6de0de884a4ea9e91
-:005af07a0348c79bfe6d598978f13640f063b4
-:005b0058346430e7fe5bf37f3385932944d361
-:005b104244d3f261fab7803f14de96f0ff0682
-:005b202bf1714f24385373683cafe6da724d87
-:005b3045da2b99cd8da5c829bf5422eddf169c
-:005b4021bc96723eb7f361f8b15be5ec92f142
-:005b50fae411689d7790fa4c9cc4ed7a18bcc3
-:005b60507d7a0ab7a06c4963a8adc8efd1b121
-:005b70f33a432a6834d30dee30ee5aeebd88b5
-:005b8019e0a439c74816b88febc318691b9105
-:005b900bb9b51635b7d792abe5ff512af9b45d
-:005ba0126f57c2f144d43ea9b21e9dd50b0ebe
-:005bb0f7414fe837b11d07c3543c10be87a32a
-:005bc083bd2b6135e0650473522c52a2da8ce5
-:005bd0f7ba74bf9aba1e4ad394d4762d98ad10
-:005be00f7416d838f22f4d6a502133f4c3f9b4
-:005bf05c6a88c40b03bbeef43f772e5ea0112b
-:005c0008500a72262ea42d2801f6de28c7dac8
-:005c106fcaa27c52c9758d0d35aa36269c0995
-:005c2063d9a4abe6b18ce712d62f45bca10e21
-:005c303d2a8897975679581b81808b3e21ebae
-:005c40e0c4ef145d54b7939943d3d325873bf7
-:005c50eaaeb9bed9db34c40ee4467890d3497a
-:005c6022585e01d98b062dbc46d434e99f7e76
-:005c703ef19249470f5aad82858e4d4485e095
-:005c80ab48e5f1bbeb436eafabb869deac920b
-:005c909f5097acec6c09a6a4c2835426dd7161
-:005ca045c8eb652cb78c5ef0c9cf7b10f73f13
-:005cb0265acae440573a61448b1c0cc89a6f6e
-:005cc068832b1359736daf2c4da0529034ca2a
-:005cd0e24089fc42446702fecf7e5acce9641f
-:005ce04358214be1aab7769a2163f1d946e8f2
-:005cf0d7e6de5a56adf5797c9036f5b2760dce
-:005d004d9ace979382962721624a8763b30314
-:005d105a093b00dd65dbbac47d4266164a76e3
-:005d20377b6e916f011bc35885299c714505b3
-:005d30ff82664e2213a242d1dbcb5927b5cb82
-:005d40b31caad1240fd56debd037f9e676da44
-:005d502786c9e06a1af761ebc08ca591a966de
-:005d60b0b28653c7dfcb2bceb01a4129a66cb2
-:005d702b742c6420040b9bf50c2b70f977ecda
-:005d80d67c72567107088b347748aecb8e4ebd
-:005d908846e611251c3e3dc680ad108d73903b
-:005da0ef58bdb0c002a2012d28126ab5ac4463
-:005db070e2925bce5c466f1a168e38c67088af
-:005dc05092db274282029a7c1f46e423dbc501
-:005dd0cbf752878d4ac08d401f918baeede47e
-:005de0819c9555330cd5aabe85f142ce2bd500
-:005df06258447b535002d35631210189ffee34
-:005e00ece692df31717c383ee0a04ec78db75c
-:005e10085598b6c1cd513511c4430c85ec0e0b
-:005e206d3c864a542b0caace8a37876152b4f8
-:005e30bde499790826fbbe7e33f7103455f3bb
-:005e40080c64799a65b5b241d57fe824ba6eea
-:005e503c342dcc11d72f49d9e3c0e1966d1062
-:005e60d886782d10d9075e59edac52dbdefdbf
-:005e704a290b4c59ac43c2ca278a8ff16576de
-:005e807c462e685d926a6a41ea2863f5c10d5a
-:005e9097e0a8a4f6c52d6acb4033c2c1c6764f
-:005ea04691baf92924bbe556f2e357be9943f9
-:005eb09e2034eae8c99483fe2098647487107c
-:005ec01f8842e21214ae99823d3f792766a6b9
-:005ed08885046583630106f9bc7be03f0dcec7
-:005ee06cd3341afc156f03be38452a3af750ef
-:005ef01588620919059657822b1b5caa875b96
-:005f001e8802b67b89c345f37b23d5859cc920
-:005f101faa21d76b083ff643a42d279b4cb0ed
-:005f203e5e46a6e24f44b29825aa46cbbeb555
-:005f3071dafa683e84cd64490a321fc8b24835
-:005f402d3d61992e36413df92232cea3fc15db
-:005f50cc493f178038a9b069dbc575adf21bcb
-:005f60b90b7d07b5020f9304abb6c80a0a417d
-:005f702569cf727f37354c872a35bb0439bee3
-:005f80dde2dbc60e83255e82bdb370d6f10231
-:005f901413157bfa4534a69ee954ca475e8be1
-:005fa0abaa3db4bbeb40057a9676fa5ded00e1
-:005fb0e51c50fa7e8f87f3f116ee97d93a69da
-:005fc0b4585364d4715a3d778132bc56ca478c
-:005fd05c32506f86712e6d18d34c6419d10d88
-:005fe09957ceec9d3a5b7d0335b84b38e8703d
-:005ff0b28420faac76d262f8dd96857784d0ea
-:006000297a33d01ea1bbde2caa8791366bd3c0
-:006010b39ace6904ee988234a4ffed0ccb65a0
-:00602094c2a60944dbc8a7a7a4ef250e2cf4d5
-:006030e3a7a326b1c55013ae233194e849f403
-:0060405f90632117ab23b91c2618b88afa4993
-:006050a69a1afbcc4bbce3951e296c207a8cfb
-:0060606f599d699dbf2c998907680c6c230862
-:006070315c34ef962552fd9b2f654f71116c49
-:006080683255f799d7437700e728be02fdfcb8
-:0060904fd28430d893c50af31b08f7300951c4
-:0060a027c6aee8f9db388f404efea55377c225
-:0060b008b0d80156f1b4902c0d85965c97a4e9
-:0060c09ab5ba3ffe7bf6722c04bfbc9834f39a
-:0060d0d0c1f4635e219b564ce5bb923ebcdb50
-:0060e0b588c37e81a1670af5feb402a9af8009
-:0060f061721a18eedc04b92cbec3f3e809552f
-:006100a94546f73541c680c701c1e0f49c4028
-:0061105007204751b57a8cb8cfc98c1bbba45e
-:006120e03c80659d600e2e88852fb43106c580
-:00613062665658d81c4bfc2636e40f7f19c3d1
-:006140578eb9c5f6f90d65bc3dcffd9f9173f2
-:00615069a458c679d0ec2528f1f717dca6a148
-:00616009e1831773d06e5bb6bc5ac29133b12b
-:00617056cfb3f30b95572a277b1d87b2f60902
-:006180c79d4bbf0d72f3d7841c1ca1f5f5be59
-:00619048d316704929d7d8e69f441beeb70fbe
-:0061a037405a199d5b884eb4932bf676ccdeb5
-:0061b03dee67946d1268d9aa6acb2d8c1124ef
-:0061c04cc542cc768f3fddb026ee6daa2a1e2d
-:0061d0576ee56bb5ffde47f4982939ad4d4114
-:0061e06f765c59a432aa35a061d5a89bfb037a
-:0061f04bff6f23745b9a4be57688e52718079d
-:0062008b8474b5009b1828c4f4a36820cca44d
-:006210099ca11c3f5a7b019dfa7c7503f689b1
-:0062200bf6657c15c4e5d9ee31a035a80baa83
-:0062304163384b7c6c31417753ed08f254326f
-:00624003389553e6a77d1892939ae834778c7c
-:006250119504c556f83576d305cb3852d1dffb
-:006260cf7f9562035447b6118419ebd07395a1
-:00627027a4259578a654fc419085375bf0f8df
-:0062804c7e798af59773c5786edc0904865501
-:006290eaae17ac922d1fe2d33a889c28298f70
-:0062a0c931da8f05653bec879d08d14cc2c271
-:0062b0382a9505936ca256d4ddeb9fa310c002
-:0062c0b74695f11e4dd51a1c52523de5c39726
-:0062d0b2bb29e4b336ec32d4b21c8608a89d94
-:0062e04822e4c74b3eae7e72ab248a254267b5
-:0062f0e8594850c9a461210100f20a793ca4b6
-:00630018ab1303026dad41e7356aab1b04bfa6
-:006310d53f62ddcb057947a7471e71d1cd1a67
-:00632070a345601dd58dfa26e7a3af6be9a2c6
-:006330cbdd608df1f7f77acf11a5bb556573b4
-:00634077e93a9182b234cb09779acded016dc3
-:006350abcd89bb81fbaa9934992e30999a19bf
-:00636002b62f6d5376d2bc71082e24e19599d1
-:00637067b8c6c3a95de6c07cfad38e4e5e7508
-:006380a753e64db9392e7098655404d482697e
-:006390d540bcb9b04a8e540a1fe788b5651bc9
-:0063a0f3bb1220dd856719962cd337bd6f583d
-:0063b0af370439e277e297e9d07a0d389810e1
-:0063c0b92777ec79594c2f657a3db912c660f8
-:0063d0709e878de90e1da54f6311362e024f92
-:0063e0a336ce05004d20d26ba4ba32e2dd5d50
-:0063f09451f04574e8a97d809911da1088c7eb
-:0064006ef19231ded6cb0f3744b137158025a4
-:0064101a44d127cc0472d49c8b29ccccdfbe1a
-:006420d1ff4edee6197f1bc8cb81dee02f7348
-:00643074735d7397423a010c144e13700a71f2
-:0064404e866904e4a2aa0d45477ae68b6ee5d3
-:0064500bd8c888b798a5067c96cde270ba5906
-:006460682a7911d9078a48b2e73aa445a0b4f0
-:006470815ead848d9072af6522d62ab9431500
-:00648012fd87aaa85aeebb39b1b6b1a8c3e717
-:006490412771dce679daa75c82b0b730e293fd
-:0064a01b17f938e915a70a9eb2009f4ea6d176
-:0064b0f211d262da1fece285b4782ce0caaea2
-:0064c01cd666d14a01a91dbb4ae1eb685e8263
-:0064d0ce5b9c3883d4c13b46061f1647ea8de4
-:0064e0b8fcf7f563570014dfed02b6232875a1
-:0064f0f1fe995a6c349ce845ff69dfa0bf2ec7
-:0065006c0ccba92a2f56269d029a8b78bcaa15
-:00651069405b327ce739f22e0430a23a375f89
-:0065200a1e774bfd0b414d83e6fc68419a6b76
-:006530a0a857a72d3b6a09d4d693ccea1cdf14
-:0065400209aa8f160474d8c60cae105da2360d
-:006550f1b9963645ef695d0806173efa7e3fca
-:0065604035ea53462bb2d8968d356be2858eba
-:006570a365f42654f2636db2715bf746e50fec
-:00658076c25cf0a4c1e9decb70d998ea1595b1
-:0065908543886cf1dee0f8ce6a91f08984b3dd
-:0065a0a590b7105a456f1df31c233b14cc2fd6
-:0065b0695a64872e8cce624ead1285c5f7d60f
-:0065c03cb4111eb337a773c1af8be8042e7427
-:0065d0f2cd728eb2d62f5805825ce18c05c3ea
-:0065e00b001fd558eca401e591234dc179ed39
-:0065f0fd0fb3344a26da0ed1983e6834736f32
-:006600c66a56857d2f6493b1d996166e2e9317
-:00661082b91364ae23142383775d51eca69655
-:00662070a2c28c3d8737e16603df541b008e0d
-:0066303ebb21968cab95c7998b23019d5d0afa
-:0066400b17e45d4e4a531e2124c30dd386f397
-:0066509750c00281b7b88669548a5c7312fa45
-:00666009545edfc5997e0fedcaffdad286e435
-:0066704a72f8a1e6fcdc49a3cf88794580fc8c
-:006680718bf069837cbb7ad46c7825f5abdcb3
-:006690824797c257e16382f7f6d38930165b73
-:0066a0eeb74b56ab6f2a75687647eb503308e2
-:0066b0de06dfa00c131c6abd5ffd3bb7e45554
-:0066c070cb61b005f71cb0cc207853ba9386cc
-:0066d0b28b8f50ae0d87de57e102525c6fba5f
-:0066e008c42ebf8c27e40980f49e4dc9524814
-:0066f0973d211c2fc948c7f15439408c70b5b1
-:0067008dc7d5c7d0a43eacf2b969575db1e291
-:006710f3deb911c91893cd1cf2ef7d56098848
-:006720971065cd052b34cba3901d570a663112
-:006730ba198c64d68a59aac97ddead96652949
-:006740bfffd99f35d78b177da48ae8fd97ce35
-:006750ad1d012fa1c6325fe2001994bb4bd29a
-:006760ca7b74baae679fd35205e8c50782e714
-:00677005d25d2da26b75da230d049aeec9dc3d
-:006780a5e56a8d1c8c195fa571b2af7cbee8c5
-:006790b083aae889435822b9a6c037040e4eed
-:0067a06beb3fd8a9c5eaa9e75e528232acb964
-:0067b09033018a3a535fac62845826c1dd95f5
-:0067c06c4e310583fc4cdc86135982d9463169
-:0067d021c83309c98ac21a6317e10813a9d2b6
-:0067e0b83f13391d91440dff039a7e86cf5633
-:0067f0b7501483bae54af4b85b9c00a8999431
-:00680015a8015c026ab4c35db9b51396b179ef
-:0068106ef431e6ada746ba72c4ac010a257e47
-:006820590369f0d329cde2efbfbca25a542010
-:00683048b6afef7f037e0c830070ebb825df9f
-:006840fa57b0f5155b45ceeca4bd0aaa9561c2
-:006850429b9547ae851b0b43d638951a0ef0cb
-:006860871d6cb9f6ce0a7563d07371b507379d
-:00687027e99b78440aeb2ef5aae8d4679c6169
-:006880bf29b4e9f61313fa68607048200ed663
-:006890979a398a546be407790cb29b1465ee8a
-:0068a0e7c3f42b03ade1744a80ada7a1fcef68
-:0068b0e3208f8b198b5b6db93e82f9065bd12c
-:0068c0f667dac99915c33a378957d9c038d7bd
-:0068d0a60c26dafa5162a165704ac38d763fd7
-:0068e0a4f180fd75ac3fe7787c47b9c07c002e
-:0068f05d940c45b3bb1cd912289c314bffb356
-:0069009dde2066a7931e06bedc1b4a231bfd82
-:0069104871cbbc2db88ec4ac2eab89ac5a28cc
-:0069208e4b7c6cdeb2905ed622fd336ef8b100
-:0069309d17c611430ad76692b13a56a1f6bff5
-:0069408d63a4204fc62e273557fab716d3db1c
-:0069501ec2efa8ddf4a15ae7024c62adc94293
-:0069601dd1aee66ac72e275592051c12517635
-:006970eb26a2a33fa3cab7e3073eedbffab4b2
-:0069805b54e0bd093c46e16ce8cdc545dc1ca3
-:006990a6f549adee272b363af9b9710d91d52c
-:0069a05ec59c2a8d9421f5636a9ee048e604d4
-:0069b0ccc8504d73ef68da45d48d9e52d59727
-:0069c0229d9f0ec946f77693604eab8abeb63f
-:0069d0d430aab856e82ffa6491f2497253cdd8
-:0069e0dfea02cde6495ec3078234f876214d7b
-:0069f0b8b19447ddebd5862ff49fb6822da6f5
-:006a00de93a06aa88f2ebfc6d0c1a134f76e96
-:006a1095d9ca3e9231036caf8af1217825b6d3
-:006a207aca52e19b8509bf35bf5040bf5a848b
-:006a30c22e1f60663061f7f7af59d5ea4bdbb4
-:006a404ab28862a657abda85708c0046df09bc
-:006a50e32020943704bafbed5c0103b24379c0
-:006a606a62e71edcd4af94c6635c9a41e96290
-:006a70c3c5063dfed3c71784e3aecaad4d0c29
-:006a803bb0787a8fc9ab3382dc8f4844432e17
-:006a9055e6b5e1d2ec53478ede17c8d7efbbb0
-:006aa065882aca3c3970faf7841bada7a57bde
-:006ab0a84302b07450a4bdd75e588d599dacde
-:006ac020d7e99488b8e623775af8b635d74aff
-:006ad0c58e3929b8d37eab7791f9c58a7f1984
-:006ae006b84e7cee699345bdec07690befe5d4
-:006af09323b856b242feff1f0387bbd5f5a038
-:006b000582ba2e0a4640b83b025bf672818862
-:006b10f876b721e6eb49ee531eda82bda218a7
-:006b20d746721dac028f73e0f15eee1b97fec5
-:006b30c071f20fc71b833bbd0013171d1d1b2f
-:006b400796733ba66e76548c40e6db08a20fa2
-:006b50b6b21cd5fd960a8b1aebe56d5e58119c
-:006b608243f2ba80801864dcc2af784971b8ac
-:006b70691a9671f33a5f4ee202ee85aecc0d87
-:006b80d82b770cd1b63a5e200fc09628b671fb
-:006b90221fee795bb641de85bd5f9d0481c319
-:006ba09161950e878a5e659ceeb6a6e66e7245
-:006bb0d932c605e723a88bb2ed7c235ee44977
-:006bc02a2a8716a395cf35c62d47c36cf09ff1
-:006bd01fe92fabe67a33bf79b49b6031bada07
-:006be0f67a1968d879b4664896b4f01d2e7f17
-:006bf0e7569f3f3fe054713aa0a608e4de756d
-:006c00430f2510c2bf7a1188c2fcaa72ea20c2
-:006c102786b3b03b92d702af8fc08daa52ec09
-:006c206a052e94ddf8198e2789ba93da62d290
-:006c307cbaa4bda88278bb59956e7881cef9fe
-:006c40c611e3dfb31c15c992b5699882549ea3
-:006c5070e4291c3e540ea242dd612b7e8aac21
-:006c6010b0dd39421e7606298f113cb6713f49
-:006c709a51f529bcb1e191c7b7d3cc44c95990
-:006c8092f923d3d9ddffe4f739a927b359551e
-:006c90225a9b498fe21c117aae361b6138bac2
-:006ca0a4e59b22bb4d89895a2ea839cb201c89
-:006cb001a7e2afc5dc992df6753078eb4631c3
-:006cc063419e8e1bc14d253396b73f214f58ab
-:006cd0a673bf672b936c5c2ed3a0d960a1c0ff
-:006ce07d6b9a0d242a0c1378713fe95d1631ab
-:006cf099ee472f119f56c5deec2f291636bd1a
-:006d00a0f6d6da225ab9a48fda10b59bd1dacb
-:006d109cb7c311c8b6b2dd70c33de36209c648
-:006d20bb694b6640960cdf6bb5e9d2b9ff9d94
-:006d305c14ac30bbb5de293992a0d883ac9110
-:006d40febe5eb2a5a03bb18fdb194dec21e41b
-:006d50930fbb59c1a193f41d0457a8a556f99c
-:006d60d9b79e3331093e7f4ee7e64a03fbac19
-:006d7031b78659b092f15bda06311e7a30ae3c
-:006d80ef45dafc5b29ce141556f621571e8a30
-:006d909dca3da60fb3bc0f326b8b608596b72a
-:006da047960fa46cab56f1453b79aacc915d6a
-:006db03282885a1429e22d63bb4a286ca66939
-:006dc087c0750df54b5ecb816ebccd3a7075f6
-:006dd0da7a43a756ec4f8b3e174fcb33b91090
-:006de0eb0fd9ad4b751eb4ce87052b7ff7f83f
-:006df04866a7ec8aafbb863b4981b0fcd5c442
-:006e00f7329a3fcedc1f8e60ff94c2a53cdb14
-:006e10dff63f45a67cd6e7b13d0d490c68a175
-:006e206b22366f30d42256dd4b91b6405f3a1a
-:006e30731a4c91e25a3efe3bf70d0d1466859b
-:006e40afefcc699f54db38702b787f23b7ceb6
-:006e50c7c5b7535752f0bfbe8c6aee94334cd0
-:006e604d570c33dafaa67aa4e72a81bf3088f7
-:006e7079481f68d713f7c7a1613113efd381d8
-:006e80886958365e9cebb04cd4384cd94bee60
-:006e902b5a1894dec3db662e9e2d07be4233c4
-:006ea08507c4b90ba1de2ac5b6a03bc8d77774
-:006eb02a793a71c076a615d6afb4d09930e34e
-:006ec04866fde06f9ffc681ba2ddd3ede3d35c
-:006ed0d0da8911d25251779485218910dc245d
-:006ee043649bdbdc0c1d309ead73d2a3cff30f
-:006ef0da770d709b01e8fc4af35d8aa1d37461
-:006f00e8a4e956649e831cc64ea6ef79e67c1a
-:006f1083fba4407be41dcf0ed363a11b659c73
-:006f202ab6a92c4ef65b5ac44961d94f5590c5
-:006f3077a74f6ee059af8a3226d1cdfcda04e9
-:006f40d421c9f1fe6f0f7ef52e2000ae0a15db
-:006f50b80ccbe2071c3a52133fa96d8cce5180
-:006f60dd0829ffe176aba8b5421814f5f525c2
-:006f707b687991c490d97126f663a727f7acc3
-:006f80e5745eedef400a634a56d173355efde3
-:006f90d0e5b8e643f80caa8b7b5cc8c0ee88a2
-:006fa028516e3991175fd107efb2c9b7499354
-:006fb0ac8ea63397bfd416d78f5cd0aa1beda4
-:006fc0e0f88e1b75aaaaab45431bec2e4ba891
-:006fd0be39972250ecb29660368d9aa3a52f84
-:006fe0e2243df4ae132b7c4d5de7bcb1e01a58
-:006ff0b0080b10e4d0c292dc8916b099de515d
-:0070001c436b3be39957173cc5658a24e76958
-:0070100f1048bd0ba7372125dfdd645a3c9ad2
-:007020f29619d91185c83d88c1ffe8fdf7db4b
-:007030e2722ef9070ed303e21dcfb59ecf7541
-:007040c54fb2baf4a546d109f321f3c5c8361d
-:00705022f454a371403fc2ed3b8dc26694f305
-:0070607aa4289a4ed56580ebd913b41a0a90e2
-:0070703bf614318adbcf8fb5b10473b1129740
-:0070800c84eed16786fad24a20ecd1471b295c
-:007090cee5b2da5416b7145935199839503e9e
-:0070a03a915c3419793a79daf7e33b56c40203
-:0070b0723f721f653a3bb0dd5682f251c64b91
-:0070c0fb018c8643500c4a1f24571ce446ea07
-:0070d0eb6fff89af21b045e29cb6317ee9ed16
-:0070e0a073fc94f7cd55c3bc8ca79201e11110
-:0070f0fa01b02ae6f7a0cefa8a0d863c7480f9
-:0071002534ba77ffa5879919ac406ad6af1d57
-:00711007f9049602fed182e8a001a5674e2bcc
-:007120dcdb05c39e1cbf97019f959f16c57937
-:007130118faf39cf4b443d3fdc48eca26e7707
-:007140f59bf1b22c2aefc38591c058b1ad2d27
-:0071501b741b09c568d4ea27a97a952bc348e2
-:00716015dc110225850c18cc579d1c462d2d0d
-:007170ed37f2b4ee542887df7a09524a8e6c46
-:0071806deab8810ade70085126c38641ba861b
-:0071906950f0a606a6f12072ccd5f19380c16e
-:0071a099d347ee05c5f756f8c8b6538250d48b
-:0071b0305c42544677fbe82db2e22285cf7d00
-:0071c02df908f1977a1b4cfe4f6a706b47f5be
-:0071d0c5d6ea0d6b6e69b675685c8e9967cb2c
-:0071e02bb4f0eb480a52e5f9d2c3cd1ef5bc52
-:0071f0abacda53b25fb64803bd9ce5bd1518c1
-:007200b4bd4c68534132c25e277ece8a46e6b6
-:007210bfb4f38e3d3919eca833a5aa55ef3359
-:0072204d31c3827d42d9135e8a8a4e2db7c85a
-:00723052f18f290d276cb1e6f18b5af77276d9
-:0072402216bc0d36b9162c8b2827a19152ca08
-:007250aeee271efff17dff2d086dfab766ca2f
-:0072609ece7543cd74f33f4e660aa0955b896f
-:0072704b25092eeaee4133b62d55c1edf6c2d7
-:007280d115e938e485c12c30ebd1a6fe2b8151
-:007290d4821b6776e45fd4c1bfb8336aaf3cab
-:0072a08079555f23b917dc1714668e7e849db0
-:0072b04d3e9abbb37413526c4229a076482e1e
-:0072c06dee6ac708151136d2be894f8727338a
-:0072d00f6ade09a098aeb2c23e1b8a42698441
-:0072e07fa88c130265c55f3f30ccf667ab2ba0
-:0072f0ed9f7b2a884edeb16020c8641f416ad1
-:00730013f54419a388e8599ec918429a946e1b
-:007310de2f62077681dbfab495c2d9e3c2d339
-:007320b09711927075ca93ae969b27cfbcbfdf
-:007330ca2798780013805da94b6eecfb7026c5
-:00734071b6cbbf7beb48c7a3c4efbc8f849f5c
-:007350be1488667fd3189eedee77eacb3463e1
-:0073608645b6d5e3e9c83637a9ac6f93b31152
-:0073700d7d37de20461936f0c85cadf6cdc210
-:0073808645bcb964cae5e1aa1d5dd34a934dac
-:0073906909d5e8b9aaa9e2bf8423922e6b421b
-:0073a0a2ff72bb33255a8e148863123ade05df
-:0073b00d4b0af1e16bd6faa3aacfab6768e6b5
-:0073c0b225408ab5fcb18505eca6712c20c99a
-:0073d0ccac64942e5d0951e92eaf0117c848ff
-:0073e027bde4c7c849fb1841abc0506d831010
-:0073f07092c932350da3ddf190ca2a2b6c328b
-:007400fc3aa58e5bbcaa3fc8f4bd4b0fea24b8
-:0074101c1e53b07d54e8271af0bef83faf03e3
-:007420ad0a9b81797f90a17f14211d2179f196
-:007430705e243e7b354345b5e593ae78a10c14
-:0074400117913b3f1913f32152c5538b1a5df3
-:00745029da0eb9d7b6f31bbc6b492d79be181d
-:0074606dad615b5f18d0bd2629ff4b2574e004
-:0074701341cee61dfcc41c3a306f0993c3b44a
-:0074802861dcb9a3bd47ceffc0a5699777ae88
-:0074908e71f7bb1955821c89101af946b72846
-:0074a05a27760369f320e85df36537c89e014e
-:0074b0f7ab38ad837e8a24cbc55ac000ea38b2
-:0074c07c7507ab9f25c9189162a3f5b2fba74d
-:0074d026357914d910313baa1b781b2bb32d1e
-:0074e0cf1542d3ee772cc93dcddd67e5035f7c
-:0074f0d4da5f796f4fad55c5cddf43ebb08cee
-:0075009a8d81e43c6b0174e0ec21e5cbf16e24
-:00751037977c988862f6adeabe57474199308d
-:00752094002c15cd6d3783c2e2b76da7a0da94
-:0075306357650e3d896f4dd8acd8795b8db8ec
-:007540d02e33c16d752e4e90578372e208acdd
-:00755026754b7082d11aa10f7293daf7eb5216
-:007560a75049608e519bca8a99ca7337d95a9f
-:007570bc887ef464f3888161f70ea27f60ae0e
-:0075805d899119ae0e33b5d406de838a9bf9d9
-:007590f28f4b9d85fc2d7ab8d42c68f5fc2779
-:0075a06eab26df0c6f94fb4496f386d254c360
-:0075b026ad5b2e988fe91f2f46a0a788c25454
-:0075c083b33ea360f78d41107b4e02c62f9db4
-:0075d0812f9ee5a1f0d869528482458ea1ab3d
-:0075e089e25812f515fc262e20e154aee276c3
-:0075f0007dc8d91fb14f570c847d2c38989393
-:00760043f23bb05500be681362c9d954b78450
-:0076108c93e7578ce3a36739285bc966f720e6
-:007620eda4ef6c90be325d326f817882e4085a
-:007630a8db1ca3ac0db0d6c785972a530ed491
-:0076405180bc61c84de99bc010845b4ad964fd
-:00765063bebe1d0c90f34b1dc4b9a34f1f28a4
-:0076603ff0c93722f77640a7dc18be968adc57
-:0076702d3e794cc0223ebc78cfc83f3d494eb7
-:00768076c3da69b86bf0428e29de6866d2666a
-:007690e907eec0cd79170d37920d69cf0f0f9b
-:0076a0825c5ff5943717ad6c656d9883726d61
-:0076b0beaa274eae6f398c838e72dca905ef95
-:0076c09708fa66b9a9f9d21eafc781a92fbd30
-:0076d0e1d5c8cd4cac40cb67e78824846d910a
-:0076e0664f00b766181ece2bddd47295dd92d4
-:0076f028aa1d0363fc7b0166c15effc94faa14
-:0077003960c6a14e9b96fc336e97a4dad49032
-:0077101a70cc7160026339760d8bc8d13187d2
-:0077204f2cef530d43de52c6a617577ce5d4a3
-:0077304965d0fd23a9f53c0b61383aea37f277
-:00774036cb1ff8e60df83e83cd794cfafac65e
-:00775069b8e89ef1296bcca7794aa864f3e430
-:0077607c56a2ddb20b5e9743aaa9dee4a38d19
-:0077701c05a846bc4423883ae903ccf97d3caf
-:00778069b94a67e4823d290ff7aed2c034c990
-:007790b6e26a97c17e176bd56e343ce76e9be6
-:0077a068b8d02d5c79d8fcb1337b0a4e75e553
-:0077b03b8fd70b0acb3fd4af80d295b163d494
-:0077c09b916b50f84fdf3754c95a09a4f8d803
-:0077d030ee0a1b5120ad0799d0c2892f0156e1
-:0077e0e991720185e9b14f98e7d6b13caf8aec
-:0077f079759a2bbf28d7d0eb31fdfe99dddbbc
-:00780083f21112fa6d9dc205021ef2f300e4f3
-:007810c5653b39a25dd7ab533981b182fc52c0
-:00782025776378739106d39d84665cbce50b10
-:007830265b86d633bc1132442eac990cd5501e
-:00784005e739bf4896d9165c680ffb6a1d2093
-:0078506673c0bc175302937cfd850cbe035714
-:007860336ee49bcf604c755c1c481b07685bc2
-:0078701b934e5902dc43cacbfb3a4fdb477763
-:007880672498185cd493a3669ad6fddb6da788
-:00789089483729a98dd19811310fc78a8e233b
-:0078a05c59750ceb2ea3ebb46c50303ecb7da2
-:0078b0a66c5145d1d15a2f29435438463286ef
-:0078c070303d4054a513b3256d5058753e218e
-:0078d00631ff35fc7e59430cc9aed5835ddf02
-:0078e071561146af65d8e9b16d01209483fb15
-:0078f0f131025dc86476c3cc8713f3e7c9b772
-:007900c67702bec49fbae12454986575f885b9
-:007910a89953917b5c3539267f7d6059ce847e
-:00792085667d91d50125c74d71bac24cd2b343
-:0079307c47fd1e21b76ce37636ec80455fc310
-:0079405f30f662d9c34770b4c16777b9d74e8e
-:00795062cf3b7e1555b8845de3d29c087200cc
-:007960da59530157a1af83c395b25aa9fbc4f0
-:007970e6836683f04f545b525b93841254cec6
-:00798092faa7a4fdd3dd74f310f563a0a81f88
-:007990833a8954846aeca65cb5854407368347
-:0079a0752057609d1f0a54144453ce1e2cbf4c
-:0079b0483ad9d25aae01d2a2e4a250b1311dc9
-:0079c0516791701ff181fcc550cd48d29f28ef
-:0079d0579272c1a53af00449e1c4b4109634cd
-:0079e01acd4682cbc291935354c1eacdf38d32
-:0079f05178047ac0aadf00c2dafd2cb582aa0b
-:007a00a22cfd7f42c3abd0594c5d0e8b07bb11
-:007a10fcce126f99a4dd9c1ff69f7782e36ea5
-:007a20489ade6ddecbbee79838338e433edf9e
-:007a302cbba958776dc6a2b386361f67f00b3b
-:007a4036b16c88d9e19322ee7ea66bc0228d99
-:007a501ad2575da40437ae09949b9b083803fc
-:007a60dcf520fdb8018dd348a38067140d68b6
-:007a70f2bb392c55147f4b49c7b52ffaf8a717
-:007a80c5c8c6a89d4df02288ebba44d28fa63a
-:007a90d2e1d150267acc8af47347a62bdba7d3
-:007aa0534ba877c1d342fd792a83085dd2aa79
-:007ab063a0aaa5758cdfbfe76a9749bb1659f0
-:007ac0edb6584bed0f6058599c9d186c2a3c29
-:007ad02f53da5b1e74c645963f0ece0321c084
-:007ae09fadf975c8a53e8aacc86067d57c4fbd
-:007af02abee498afe7f1254e0607ce9ea999a6
-:007b00db2f73551e7242b208af3374861881cc
-:007b1082f5fe57f87af704525d570538969de8
-:007b202163dc6ebe6e6a4aaddae9fad3cd34cb
-:007b3064edbba6e8ccfee4b849ad563eb2db30
-:007b40a7f83ad8dbb6f52628d8d9c29edb99d5
-:007b503f15e10c018b72ca35d448e05dd15fb2
-:007b60423700604bdf1fecc1a275b4d2b4ed79
-:007b7030efb169e076ecdc1d4e010a7f295541
-:007b80493edfe94a3223e11d6239215024ec3f
-:007b90d1698446d1a3b93cd2c51025f28fc65a
-:007ba0dcfda7df0b9d47a634e07d08d10f2e83
-:007bb05378b98f9d4c6b3ebfd3b9b5f3bd6ec1
-:007bc074e27400915ef74518e8b5fb254c0356
-:007bd0c059159e18c92ae8acbfce9ab074fe13
-:007be08fe33f449cfef6af02e9e613ffbe87a4
-:007bf0462f19af8ecf81eb4f1fdab0eb00b861
-:007c001b78460d9993a8ec081ffada50d78d65
-:007c100a727aca70664f7833ec2aed1256cf60
-:007c203f65367bfe1f6708bcbbe265c5d5fe46
-:007c308de69dd602d44cd6dc30d0c390cfe259
-:007c403d340079e035e4a441e5e5c47520fdb8
-:007c5008ffcf3af522f94e103843d7b5d4ac64
-:007c60a34c0a78a13311c4b95974a19b3c85c9
-:007c7044f065591d279ba4c67b33eea4cb5698
-:007c80000733e26a03e2429ff84296a0a3ef90
-:007c90f5a96c73286efcf39509774b947dc9a4
-:007ca0e735022107f31fc93629a4a5c2714e60
-:007cb01614e4fd0cda12d762d06d7ade5b5206
-:007cc0eeac99b56ed6507cc3399d531d363957
-:007cd0f79b9f1e7b778fad9eed64d89a8ef009
-:007ce0f1e6d7da97f0ef60df6c327c7779c657
-:007cf0f2323ebe30417f5894d8476d20ca9bec
-:007d001c84338d9868e0ffe66fab3d4f493fdf
-:007d100bf4c6302682f5af91e752755cfb896f
-:007d2008efbd61e886fc5c8b3c6f2aab777580
-:007d308ebeb259d24fe30e0d5fd7a9db18197b
-:007d40d58dfe518c724fa55f3b213e6269df76
-:007d50e23e2e4d0e8c09cc91098fee00b91291
-:007d607726370e24aa4b8ee411d0fe112e772c
-:007d70bacab0996a5c3172efc5baebd3672729
-:007d805917cdeb20e27f9b3c564877aa9accaf
-:007d90e7635c77655d3a9ba829a8046972b6b6
-:007da055e09011997093ffa763217b2b34e2b0
-:007db0e4188bc7d545464da86bf3b87095bb4d
-:007dc06be590b24e18a6a422ca3734b6eabdb9
-:007dd05d9dc2a992edfce3cb3128eb65a35841
-:007de0b8a9296e4c47f1607f69e269615036b0
-:007df0e6a5379f3f64c8dc8869c8108b4af184
-:007e001ade4d69bb8c8b3b7f05c42f67ceb687
-:007e102d8caedce0ccc625d7fad1ea42d05afb
-:007e20ea61679e3dd2bd896776f0b893a521b4
-:007e305cd5dcff18f1ba5e1c8df00a79b987af
-:007e40371caba60485c7de0d7d484ebdde2a7b
-:007e50372977bd35873652962dcf06aced3a81
-:007e60ad797fa3f0f77a3d1e533ea6a0fc4206
-:007e70c007c6efe01531753ca29c3334147a9b
-:007e802da789157d0b3d238cf21d26e323836b
-:007e904b36150051082dde0c5cb81002f7ebc2
-:007ea049338d5b6a4704248397ef032def4da7
-:007eb01372670f36b262abd8680f8a50ee5d94
-:007ec0b2d0a6872e070f4bd3bd64262451efc8
-:007ed0a45d4423f451836d2ba0b7fbc837bc2c
-:007ee06e4062cd9db2e52717231a0cb70bdfd7
-:007ef045ade3fed1f839b43d9ef39e13525937
-:007f00bed293f6393d4530ff39df820598229c
-:007f10d6d6b8578eeb18d698006b7ae4d5f1a6
-:007f20b9f88665a938614030dfb85c57aee265
-:007f30ffe15093be9db785b8976e7752c2a234
-:007f4011f6f7f431702264bb5f52ffe7c2fce2
-:007f509a11af61853c18ce8c6bd3ea22d5c8aa
-:007f6075b7e76d1fe94c5c56f7ee4cfc45856c
-:007f70df2c33889a6e54ae788f8aaae258b662
-:007f80d1f907c1760d11c0d6cf57023e63de43
-:007f90a5b235c97c5ff6a89b4927deb74211e8
-:007fa0dd85dbc6407b5ba6829e55cdb38b14d9
-:007fb070c12d1a83ed01d65c97b9c2f4a513e0
-:007fc0e18828613056bcd09d156b7d635704a7
-:007fd0ee3fd5f35354e9d0ee008901d9523266
-:007fe0b2dda57ae49b3ff5eff4c64fc64f9663
-:007ff029a697168c63173aaf802eb76fba42ce
-:00800019d09225694b34a57e158eb9b8670f7a
-:008010ca2102587fef76a65a7a28bc90140f65
-:008020c33f930479e64df77d979e148a006d3d
-:008030e902638aab284fa7b975db41713c23c1
-:0080408fc20b3c9b5ba05699b6b162c6b7c484
-:008050fc069ce1b4688465077400e1a41888f8
-:008060c156bf4c837767bbee744e84fc799851
-:008070c513f4d13cb2969e56bbd37425cb79fa
-:00808094472b3beb307bfa338ee4576dd7153f
-:008090914495c28e4c269c56c5488d1e73051f
-:0080a0529996585e1aa44af74d887143590f98
-:0080b0e4b1a60a9eaf5a95bfd054c8e27657e6
-:0080c0a76f1aec1fd528d70abaccca8367d8d8
-:0080d040304c217d829c15a7b8c7973f0f2993
-:0080e0d6c6a2c61349d708d4b3ef604ff281c3
-:0080f012ca6b0d9b18993d5d74a8ac1050a103
-:008100f57e807ce6b9e90793b4d952c837d166
-:0081106edb680b0cea820fd2180f2b16d85a75
-:008120144f975b248c717d358104d2424fbf1a
-:0081304993fcf8593f63a29beecacc17974e08
-:00814027275ba6a72646b3ca7e9d0775dbecf7
-:008150c80055dc66ca104be4a295e6a75369cc
-:0081607e4367c3067e4e2596174941f56ef3ca
-:008170d0761329b658739e87dea167498843fa
-:008180c808a553f79bdcdac3d66dac9d251ae4
-:008190cfec8bc9d8b3239dffff5f207f5f1d87
-:0081a0d66f68e2709e68db22e49e3daf0a63e8
-:0081b0e4397b07ee6afee5efc2484d7ceff47b
-:0081c0fe43761832705a4f24e2d73073165b98
-:0081d0cce396e4bf45c4eb32f50150ccf83415
-:0081e07a8d237a0285ae9255a4a38975767323
-:0081f0363e7788c5ad1e29a482af408ac30dc2
-:008200d660eb26507c31a72323e2227a4d8304
-:008210b49825845cf77429ef0aa02fa204d885
-:0082201afbfce0aa7ee967af1ef7b15e7005c3
-:00823030b10710f9fb2c4e1f9f826c6bcb09fb
-:008240052617740ca1d3964322e328c911115f
-:008250a52e0e27c4aeeac07f82d6db5e67c14f
-:008260471384b1b1c4c062b00bc859e5bf95ba
-:008270f0396f147ba49d4316668b9a6cff573f
-:0082805c828594cd6a26fd41ded878c3d05134
-:0082903c3450f9d9a2d99ed2d91a5185f91f13
-:0082a0b1e23adde39f8e91cb00fd31fb821af4
-:0082b00c1a9af83fffb1a209547c3ab13d6ac0
-:0082c0815c37e38f1e9822ddb60af45c391e5f
-:0082d0d123a23b1547df7f817c5666132f08e5
-:0082e0991902d04cc35ee549a120c086dfe482
-:0082f03087e0282642879174e31753fe4df21b
-:0083003da6ecd84c0cc77ea23450743deef354
-:0083102cd810e4269fab9d0ef99f477380db9c
-:0083203255d83692d423db9100b66fd8a092f9
-:0083306160c67909be9093998fba284fda73ca
-:0083404d996e1fdf4525cc49f4d9f090a59058
-:00835090c93181c04ba95da10761413ad0897f
-:00836087685014296bdda70f154442a11d9146
-:008370ad41d368a216d341283eb755f0182127
-:008380bf6c40bb19ed1ca61ebe209a1bb4d350
-:008390007c874a72f3e87152bbca0298ea3727
-:0083a05b2b66cec9df227f69a4cbbfd92cf4c5
-:0083b0dc318cf1be43fe3d47190d84edd4898d
-:0083c029c4dac2c77151f54dd6674bba20831a
-:0083d0410cb37f912a8f23aa5b47fd549b2f5c
-:0083e099f4b12ffb438795c740d8fae25043ce
-:0083f072b82bde07344013718e921ccf29c2e6
-:008400b9862b61f4b942a316c4bced54019ff4
-:00841083cc51f3655d7ff14d326dbeb93689e3
-:008420b14d4098d2d08936faf277b1df68aea7
-:00843070bda8677bcbb3a324562e125fdc3c35
-:008440dbeb2515b05874d288e5886453625575
-:0084509f391fae7b5bb64793acc315cce3a26b
-:0084608a2b5f6d005ec170a1c27c69d8bb3227
-:008470165960ad75947fc74ee05ee5b0e1f281
-:008480aafe874f1a09816cb86f19040ced3717
-:008490db8ccf359da4d3f6a48a33c9aec816c7
-:0084a09cf5ef43fc020ff8532c1ec2e04d69ad
-:0084b0ca43189f9f6d944f84f721aa0d5208ee
-:0084c0ee3fde443dcce62a27b88d585c7a7a13
-:0084d0d9604939c57cd210ec39fab7de1726d6
-:0084e0e050af28c0a6e24fd149fa77d1b9b1dd
-:0084f04e0fe28fcf37dd2ec662e346626f1dd8
-:0085009f63daa00e4d731a795df93e294f9059
-:008510711a54ad3583711071319327c9ea500e
-:008520d2c22ac5bcb3a88fef001d90b53d67bd
-:008530d9bde552522d05fcc88be42c2c6917b2
-:008540fc7543639815e75c7ee69845d241d95f
-:008550cb3a7a19708cd8b576e0d3f0b2488c5f
-:0085601353b652ec415d4e1f2e2ec3e87be762
-:0085702dda9f13c69b29843fe6b179e8be67f4
-:0085805f009e380cdf31fe628f3fc951af792e
-:0085907882a6eb63bbec2d049984c67570c262
-:0085a035f30973ff0413ffea6257f3cfee73e4
-:0085b047e1d3cf8ba1b59b00987b613b519b52
-:0085c0ca7cbe9828cef5e99c17f4e44a0c547c
-:0085d02987171ba871ebc8b860517ad088014c
-:0085e05709b44e16b1109a058e8c24843b1201
-:0085f0609b2942c10451ee45ba3bd7523260d9
-:00860086b0f043f9673139aae817623c3f24d6
-:008610bbf46cf0f4578e160786deca22b88320
-:008620a76efb2fec54ec59b8eab99aae205fad
-:0086309b60fcb8897a3721382e986774c8e5c9
-:0086406ef3d4296f3083aca16a11a10fb041b3
-:00865054cc01339706a50dfe564f255f4e5685
-:00866038b5437f06a4747da2914058f2bec01d
-:008670eb570967a045dfc5e72badfe7f95ffc2
-:00868029112184c88082f6036c0daf026879b0
-:008690520e715eee10e71b44cc8b94f7e6d36f
-:0086a014ba2836f286e8c15ea22b64d154fdcc
-:0086b051696a1a2daf8e7fba6eda17e51ca203
-:0086c08eb1e524aff227db5c04852b703fd1a6
-:0086d07c76be21d4c494c502e7eda1158da741
-:0086e0ed2c666496969e5d997c99823b450ee0
-:0086f09c76545354de824b346cab72dcb303bd
-:0087008f664b85fc53da3a0d32f8a8c6bb9205
-:008710d23e64b7fcfd6b05cc536cf873962c28
-:008720ff449ebf62642452f56271af98b1917f
-:0087308af6f9f3c0005649e35db6c3c3b79bcb
-:008740d246fbcd50c247ec4b3f309531779ae7
-:0087502ad56987a52ac3824aea424a49512256
-:008760f7b9f4fc505b8286c8814af970628071
-:00877010e6b96825b4cc8eb890756d1adf7423
-:008780838c30520097ce981596d4228ff0edda
-:00879094457b8d65b0d1596c67ee33fcd5357b
-:0087a035ccd36664434a6efb490f59efbf9e14
-:0087b0adea77074b7688b855ea25be54a47713
-:0087c0e1fc331494414ffe36069dc0859bd832
-:0087d01833f2dda3c37817d86c107fff35f9a6
-:0087e0b2119c5c243ee42007c57fbfed40ad87
-:0087f0966daaec273b152a34f5dc72497067be
-:0088005174e6444c574529058ae1064a8b281a
-:008810eb148ed71f3dc8280d92d282922b7c90
-:008820cf5d2b809e6b66c4c90d8f721e622f39
-:0088301b9170ecb51d2f6a0003027a2bab774b
-:0088406a461a8ba60253faeecfe325547a1632
-:008850fdc73c421599e75d2f5a6802dc200dbe
-:008860216916d3d37a9bb68f43fad7e128ac30
-:0088706d19e472d284b553dfd8f435b7a9a745
-:008880f2e07b83b28b009c22c1886198a1caae
-:0088904522a748cbc546364144212cdd17f22c
-:0088a05a3e96ff53ecf25cee732648493475dd
-:0088b0774ce9c4c8f3dc7c47c16d4d42589b11
-:0088c0f91902913db1cc712dc7119a9da7ac43
-:0088d0f66c321b7275e9713e678ccbb6129f68
-:0088e0f8486e8fb913d329277e373f8b6f2e7f
-:0088f0842c99b3fe7552da3bf569a7969287ac
-:008900bef2561fd2a1e3138552461744131d19
-:008910439b55f3a7d28ffe3c537ead2e6296ce
-:0089201391a7e3516d5d9695acc339e47e3e0e
-:008930bf9dcec2e878ab77b1ed68bec32f4ef6
-:008940df9fa5394add2b19fa70265a3904d199
-:008950ca2c2de8a22598cbdc6e81de655fc185
-:0089603c78af0f2e94feb2fbc1484c63cded1f
-:00897044ec7267104bfdd9d7ccdeacabd18ec3
-:0089804a5187d3c49aca10bad62f99d3712643
-:00899067a21a070fe171cad877f0fa8bc44e8b
-:0089a0888fa10dd2f3a9de627d2ac841b1f2e1
-:0089b06223be7c32880318d402e1a48fbd570c
-:0089c0997fed0a27cf03e81ca3a74aa1b43cfa
-:0089d0c2ae62c15298748b2865df9e5a9ccdee
-:0089e0bdd0f34a257ee54634ee93839c93eca9
-:0089f0647626ef4c2189ab9e1cccd0d328545c
-:008a0089d5eca02b374a0e72341a369a57f690
-:008a105397e0df0f502ff7c84a718232b73f0c
-:008a20d5bdc0bf9d911fc0270fec391b51548d
-:008a30bf879be9a36f74db8b9ab51f5443c833
-:008a4012c90fc1eb50f0828986c999d3de2261
-:008a5003f40600ea46ecf81277613c4abd9719
-:008a60e031d9f4efaba42e68a6be41164db47b
-:008a70afb6c168aa32c35a46c6a453a035c5ec
-:008a800e651cacc0ec1616a7db171dcaf2d18e
-:008a9019afc7747b9e9c1cf692e8c362c4a54e
-:008aa0d6c61ffeac475fe72ae20ce41030595f
-:008ab0ea6ef7f4279ccd47e3c01390acbccd7c
-:008ac055161cd73917959af064bdfe340e9608
-:008ad0c979ede668a02974b64ee205ca1e3ae1
-:008ae04df02520a4ec10e0238fb150eff8bb53
-:008af0f3f344e8318c79f14f451da432822cea
-:008b00a199aa5239dc4628505fdd790300cf70
-:008b109afab9b3f033350ed7d5000decfede2e
-:008b204bd9e5d451e80fbfacd8618988f76849
-:008b30b8271aa7bbecfd7406fe1363851793bd
-:008b40d75c033f6a95e57e997b070d86ecd995
-:008b50b69f6ec78615996b551d2f91bdf2160a
-:008b60b60a05fa71f507538b7dbf3dc1130826
-:008b70c7756f81e7d54091a158a791fa6578f3
-:008b80a91c3c2d76be6112f20c4ea333a47665
-:008b90eb51db7f08cef69263b8d08a93c1b932
-:008ba0a7dfdc3cb88d6f05d02a936a348a7dd3
-:008bb02afa8a109be00cbab20514544ef88309
-:008bc0e486c4cdab2a6d7ed2573f19fc57647a
-:008bd0f10d615de6ecc5c8b49b850ea53c97b8
-:008be026c44261b654a224127031cc05c49d84
-:008bf0c25e61cd7cee7cca3807473106cd5303
-:008c0070cddf9202ac0ad844a19717f6ddc8a8
-:008c10408e34c12d2089f3a692b5498a46f43d
-:008c20cb73740f5835537436e52eeeb76f2bae
-:008c30a4539d100d5146d0791bd0947beea68b
-:008c40bdff5184c2bc09786f2fb446d44c8a98
-:008c5094eee530f54a24a0a87a7b0db622d407
-:008c600e0b1dd0f5ec9a790b3e828ab85265db
-:008c70e18976957f7c22775b13383a6ef3fafb
-:008c809b0edf54dd8228e361fe442f623fd1b7
-:008c907488cd026b5b227e7bd260c87b892a39
-:008ca06a9f8e3b8e8fcc89c259ca33cf006607
-:008cb0222e409944d85b874d97fca0ed52c550
-:008cc008e89f267404b38be484abf1287d8395
-:008cd0d84db3a1d91a17ba4cdeaeb0aae6f3ad
-:008ce04e893df46e582b6bc861498dedf58dc6
-:008cf06ce3711672b8e9455c160b06a6e4761c
-:008d00052dce79b34a3e8ccfd94df0229ce269
-:008d1043f39079a5f1b578b3495f1c342852f9
-:008d204162538343db033788faffb3203686a6
-:008d307918be3bc311ecb124ab01f8fc74a0f2
-:008d406872d0975282cdcf720067fb9cd2e398
-:008d5052033d8d65724bf30fb5dde6fb5039ee
-:008d60b43fe23f261fffd86c0dc0f93f0db12c
-:008d702f1fb9824c9c2a82670062a0babd7156
-:008d80f133a46a3c1b84fd1d3aa63ecfe0992f
-:008d902d0e7af3e6aa50fce3b6374060442b96
-:008da038243411e7960d6712bae0f09267e483
-:008db038284c82d2396561eebb8ff2c51d6d77
-:008dc0d9d165c42a5dbbe2ff30e5cebc825086
-:008dd0b0cf5325e74cce8c71d42171da5eb0a5
-:008de023075963702c9b829fc34342a8adb5ab
-:008df0b88f16fed725a66eea71e41236bfce6f
-:008e000b0b46fbf9803e45c07b1c34b05eb8c0
-:008e10b19480809cdcfa591f37b9fa6755776a
-:008e2045ea761aeca7c98083e2e585da31bf09
-:008e3022a8efc0545739b46655934df72a1033
-:008e40207179d2e17fd75bac8c28e54e390c8e
-:008e50e20d0d75aab0ff331a4a120d845eb4a2
-:008e602ca371aa6afd65d672e70c58150f0bb1
-:008e70e3ee7097b812782baacbe72b3a2a61fc
-:008e80eaf4798c901f703fe0295094cb90254c
-:008e90b2cbfc57597173c2d3b993d1947ca990
-:008ea05c06a0f8165a7a23ae45f5787565160e
-:008eb085479db890cef8a99f234456313d1c81
-:008ec029f45a4923eb8dbca4aeb8e0349b33b8
-:008ed0dbfb112e0b907d48d9c1c4f6891ba785
-:008ee0fff6cbcde8692a9a020432b2e2b46c7b
-:008ef035773a720174b4b4ca1528e83f1e7f86
-:008f00aa1c70b7b5dc332b2f9d7c52b0aa2282
-:008f10871404b9890972cb9df0287b49acca12
-:008f2012615eee4db9cad49a63de765f5c365e
-:008f3089f0b72c5742e2f88234a780c1b983fb
-:008f409be1161e81426da195bbb885747bc364
-:008f502865d69d39d4ecb74cb65404d8bf9812
-:008f600e8ecf92c7607adcc8782d485b7f084e
-:008f70d1829e73d2baceec30117058ff5d424f
-:008f808b41e599f6acb3903e9265fcf6bf7a89
-:008f909d06efc035c0743f2b5f1c756a738448
-:008fa05dfe0ed1b3120c68cd21b9f0c51ed7be
-:008fb07cd688ed5ab9a831ecf251dc5e900138
-:008fc057f29e953f084c9208af128e9b85641e
-:008fd03cbc4532b67fd1bb9b379a258d4ee3ce
-:008fe0a8eb589cace9f51a361bbcf10e4ef3a1
-:008ff025d4b3410d53124cb9c6cc82172b4b33
-:0090009f1940255b19680a0d03867cb5b94ee9
-:0090108ff917cc08a49b11051725fce64e13bf
-:0090201bd6ab4225c0b0a18e530fd39b59f7bf
-:009030bfe7a40b7a9e3fcef22f6e37797ecd2d
-:0090402875a8863c9aca4afc6bb80cbd4973ae
-:009050218e84d821a107864b4d28763c4ba13e
-:0090606e2aea150db54e6c4bc5e7c323524a88
-:00907074758d045110c169a369e685d6db18a1
-:0090804aa815929bf7ece815129957fbf5e894
-:0090906bc6b9eb07bc167367a79ce10a2f4990
-:0090a0ce506e83d383f27c2b6978fd89aceca5
-:0090b0061d845b582c060d156ca16ca91bfc09
-:0090c0bd7de55291eedb2b339174985f77189a
-:0090d0322309bed2d8f02de7dfe05677b305a4
-:0090e0166f7d5923c01775b777c53e0a4e96e5
-:0090f0453860fe4c2379be874dbde23aa5f6b5
-:009100ed2ce3f0292c050e0eb2fc9ea5780147
-:009110879d596c2d8e96f898098b056da24c4f
-:0091204c1680aad06c852a07db03ee88bb2d31
-:009130045fd5f188544f88c0f3b84d1d1f0422
-:0091405a1704a29a15f66f277089be9c139eac
-:0091501987fd3f5474c415e203c3a432042c62
-:0091601972f7c878299ea25adf0eace2377e92
-:009170cbea943d8ad3fd5e4a75ef477db1fe6e
-:009180b43222f0b17b016626305d40f91b12cc
-:009190c3b6a1bab3acede919da4f236a5cd836
-:0091a01990a88f9a92d15ae83a92b0d0f10e23
-:0091b0c7eb9995534966c468a71db4907964e1
-:0091c0fe87f3042068c05272c5633038a0e4b3
-:0091d03fae25ef12c1f365ea088fbde6ffd56d
-:0091e0d9cec146adbda4ba2c7588ad85fbaa77
-:0091f0147c6d5bb0fc1d1ee604cc0bf555f6d9
-:0092006d24f153d2c9b7b7f1aefeb929d338db
-:0092103a50a31872806990f17c89a6417f99c7
-:0092202b0b70b59850a6085e7bef82ae2e8a1c
-:00923050baf871ed872e2ec70824b2253dac73
-:009240336da784e5db6c0c20a0887dd29ac7b5
-:009250dc7b6f4ce6fd8349f12a6b5a212f8a3d
-:009260a647328713cca4628a8797c8275ecd9e
-:009270fcfe9c1b350730c43ee007c3c41b2e40
-:00928039bb72cf5225a00b8bc247e3b1f7e86d
-:0092900de173b5d1cd84b11a6cc93dabdd1744
-:0092a0a631afeed677cd9ff66f2965015abf9c
-:0092b0ff2ae2ca8fd26eddc3fef1125514fe79
-:0092c025b60999507ec89dfd79c671097834dd
-:0092d03a2bf2eb951e9f3e7dbd404ca6689b85
-:0092e01b3f07b71f185c20b27cf749ac65cafc
-:0092f02aa59376f769c8185fed0fdcde795c2c
-:00930009821ee921958080d7145d6e77d503fe
-:0093103cb73f59b1c4842f8b76c16f705ac00e
-:009320ea2aa223384fe690e87a46a5336b1280
-:009330e19c764f1c5ddc71ac7d28566488477d
-:009340a74148f8efd03c4318b4daba7c89fe25
-:0093507e5c92146c5845c0531f409bd3ff675e
-:009360a104d8f21008bf7a2a6893804f3691e1
-:009370b6e0fe21d5dabaaf2ce13809cd085867
-:0093805c52b8ffc64d592dec296ae0c6b97400
-:009390370fdd81585ab955259c9136072cba7f
-:0093a0411f9cdb6cdb6a29137d8f0301dbc2db
-:0093b059561da4e06e656532c5f305353f94ff
-:0093c0cd1772c3b70d1ae9e9fde73e4ad2865f
-:0093d05ffdfb73f962ffaf630075203706ffcd
-:0093e08228dce176671afc455eb7d3b6cc4c2d
-:0093f04e9afd3762d5e3baade9f9cc10e6b6c8
-:009400bca8e1a614eac47d96eb5448fe548eb0
-:00941048ae7ca59af7a9480fa7a371f1901880
-:0094204ea1c71c168ee2c10332083343bf5fa3
-:0094306de2ed8834b95e746c3d39bb48c6d0ff
-:0094403ffd9fefbebd18d153a67f7ecbbadc98
-:009450bd3742c77259e8234a542e80041bba9b
-:00946072936bc4e7ae32c462f0b001e896718d
-:009470174b9dab2500f0142dc3f5ef02257e3a
-:0094808c509902d755a5b6cc70d37baca415e8
-:00949053bf51aabbbb05f2e56449bb808d4d8f
-:0094a0eeb53e1c4fddff606118910c353caea0
-:0094b08e620451369f2f69069c069076259285
-:0094c0bbd39da78b30e344dad050ee6df34341
-:0094d07fd8baf5294570530ff5b896bf60e573
-:0094e06d9db7b336f698cae586e7fa92bc6158
-:0094f0d75649a1284026e780768b8ae404cb39
-:0095000b1c5b6012827f71412513cc9937d28f
-:0095102b8ef83707d8f912cd3ccbd9f2accfa3
-:009520f5d733731e11513f3020cddd4f77e9b4
-:009530bbfe77558c8841c4589e2a35e77c3ee4
-:009540720af6d3265bf11e110b6fb228790710
-:00955087a4b82ede2dac96d9b432fef09a0e3c
-:009560c077abef3203166040cd91d7885c3c50
-:0095703cf9a08d1b9632c0cf80c07ae20ea6d2
-:009580d9d0d0ca8d4229eb8b7409abdba0984f
-:009590fb5abb3f5d941c5fcd091b3120dbbbaf
-:0095a0bfe644e91b7bc1809068475d03d0a5b4
-:0095b050f948724cc98a5e95d7b9f08aa5c287
-:0095c0ac8460187a01a9783486756b0ae83fbe
-:0095d0e510f56c24cd079bf8f588c9dcd5af1f
-:0095e0a67d949f84109b263016a4001e13310b
-:0095f0fa412b54223ef4458b915b29ae848ddd
-:009600a562b0836250606a10075395341cdbed
-:00961055ffd2f96b64fb42198f821e82d0c9a7
-:00962043d52d0cbadccf3c972633052335c284
-:00963068dfa63de275dcfc451491710e216023
-:009640642d47d562418974e45b3b35d7961155
-:00965023a77467b9242a3a781840719e0784dd
-:009660995afea5b69590f25c44005c090363a7
-:00967037d2be922d6ee0c49479675fb5a87fe7
-:009680b0592056a62210ec3b3726a318394b3c
-:0096900d0cb94cafb6e32cfb1a199882c9df14
-:0096a0f851bdf9a8bdda918a1ed2762f231f67
-:0096b014ccb68e636ca1037b5b0a8a6107588b
-:0096c0e6867cdabb99b288486f36fb44e4a948
-:0096d0f879000461c350eb1d8c5deb437b535d
-:0096e0bb0727f54a64474fb9187c8ffdb51759
-:0096f06efd77139c592f2bc25418d7ddfe1358
-:0097004fd4ea819a23f845515e708ba1f7d484
-:00971003776ca605cb6a015f2cc6a9f13de464
-:00972066bbbd83ebaf59312491857607a35fa3
-:0097300a7219f104a0d4fae16407f665f1b130
-:009740285be6aec61684edf345b7780e43f7d7
-:00975079eaff4b8906d93b7fb2a3604f871366
-:009760ade62d13f4ed28ad97fe186b0e4eb6fc
-:0097708f17f366e538e92d967291e7c1a26774
-:009780b0caf397a64618acaf0556ae328e6722
-:00979047b70ee7d4c64e3f85bc0f25a9629b05
-:0097a04f2ffdc56cae761442132782b815a889
-:0097b0ffc46bf00b6a42fee19157cc1ffeb2e5
-:0097c036b980596420450a7da7916f6c9ee82a
-:0097d0e7ff313a51e4a6a90af257562fb27d9f
-:0097e0b9df9a7f9ec2b1c3c121d84b49040e8f
-:0097f049683ed89aba4910f9369906d8251c3c
-:0098004d61d5a70460912c849ecfddf91abd11
-:0098107219b7b8ba40ce8b7a931a7a5b978e16
-:009820aa416cfe288a18b0da17ddb4bd03f4e6
-:009830a6ad614d99351eb28044a976fe2349e4
-:0098400162b2276876696fc2e6bc5aaefc3755
-:00985079334275d2918b33e64bce941713ae34
-:009860c8aabda434cc0e4d31dddd7b22725d7f
-:00987051440b4eb3a356767d409b80693d7662
-:009880a9d5ac176bf4ab37c217f814a7521c1e
-:009890b45b6a852e8727636aa7b790be25dd49
-:0098a0e0059e1839c7baab9b5ba6a48fcc4db2
-:0098b076052cb4e6e474ee0a9a7148ff29bf87
-:0098c0a6eb35820f99de8755dec1ad1dd64361
-:0098d0337a6201416316c776cb7d1ef1eea901
-:0098e0d6fe2535dc7cc0323331e62924e2b1a4
-:0098f036ef51e4b1acbc414f7cf73f0ca703a4
-:0099000f3b53cb984d6847bc4c3b93db9483e6
-:0099106dd13ac3a199dc1445c16686b2feaa52
-:009920005e25cfa9d464e95ccc944cca87c61d
-:0099309c7dbb3a558a7c2e679ef9bd29370108
-:009940d36e9cc7802fbfded49dbcc94b2b3208
-:0099506347147010aff59a7d569f56319ff04b
-:00996072337a56cfd6dfd4dabb22d82605d537
-:00997097f28c5d2a73b56280e8863c5a214a91
-:009980c13d006cb92d663ef04b308b54b99fc6
-:009990c2114c461b19fa99c0b7adf50c0118be
-:0099a0e66aadf1ea8f26bea89d4c01fc80b7b1
-:0099b02fbcdcaf51293922b53c59c9234e4b36
-:0099c0bcbc9207bc9df917ac133a4e1901a8ba
-:0099d0a0d9b7f8dad05eb78f7b077a5327b9f9
-:0099e09a7f109b5a376938590c570bcc27840c
-:0099f06d24c686c27381ae8360150c4e961464
-:009a00ccac73a10476ccdcbf8e0b9211541e2f
-:009a10a7629e7902bd9ad35d58fb52031e6697
-:009a20552ca8c9cdc263b4913a0aad1633b749
-:009a30184f5e85b843aa1ade9f24cf24537c7b
-:009a405751324e1b8c229d02b72132484a90b6
-:009a503e6789e753e7d1ec3c9d13bdbde5fcc3
-:009a60e711ab34457482172a1a7dad8d8ee686
-:009a708862b458e911ecb4eec3971c73a5b1ee
-:009a80b8ef4e9d02edd9a7dba94825d74749bc
-:009a90ee04571ece2406d25ea2179fe68be9ca
-:009aa0e9c94168a83cf0786d948e650c00b7bb
-:009ab0d4cf421be542fd9f0e8f90d8beb17efb
-:009ac00b456c3f2f83407a6a12e9d38d3c0211
-:009ad0fa78cedd3368ed5225043d6a8e840917
-:009ae0d43d7cda2a14f0a400de4389a63eb75d
-:009af0f0f275b95dc7619bfb4cb0ed7fcb2fac
-:009b006340179cbe031e37917efbdff8d57bf8
-:009b101a8e0c7e30a466281e72d9e69a9471bf
-:009b20d20fef8b51186fe46006acd42bfc5b2f
-:009b3043bfb6094cfa3f41e879b8eb5b746101
-:009b403f15346c2f06f1292a4981ee2642fe68
-:009b50a30e30d837f0feae554a5c7d41a468fe
-:009b603a923c52b36a9575ad7f99d1235d2011
-:009b708220a681da1b88a2a0b71bdadf1445b4
-:009b800a8ddec53e3375cfc6f33baf9912959a
-:009b90e56c683d4ea886dbfba8c4529cbbf31c
-:009ba04fc4a6e0c15a9c8e653bd7bf331d64d0
-:009bb0c4bca14a0aa41ff035e24e201db0ad1b
-:009bc0897091e91411ac0c2d9d296544ab9dbf
-:009bd0d429b298ecef06d10477bbc4beba6d1d
-:009be073b745f78f3abbf76f2d3216b43fd74a
-:009bf01b369e1e38f8087347a3cdc99aae3658
-:009c00f594aac0f5905389605005f85f583c7c
-:009c1059cb69e4b47d9e432a25899819a93d98
-:009c208fb3b5b1b5a7114d995518f0099a68c3
-:009c30e9795e8dcb9a3fee9ed19283317f13fd
-:009c40b97c9792e39768fdce8af39f0380431d
-:009c502d4c0225b81a1ee74d5eeed0b6d6ba65
-:009c603936d6bc7ba39b51c43b75935b680862
-:009c70e57e382ef645149685a6b0122549e5fb
-:009c80d1f3d907af09c2090aec36619aaa117a
-:009c90eabfd2c1f9694cef8d23bc72bc2633f5
-:009ca0ca417dd1e33477c7c711fa466995965d
-:009cb0b337f2287f57d7b8ebbd250c8fd6bf55
-:009cc087a91c75e81a9e8a4fcf8a8f868ba041
-:009cd0f52d1a46b1f8b53f93685e7d6bda0d98
-:009ce05c34b66a96f91de4c84607a498868693
-:009cf0da006f78d1a1df3b7dfddf4f757c5422
-:009d00262d872051fedfc6ea3454abf621addb
-:009d1071bbfaac2830faee24d7b21423d2ba07
-:009d20f5031d525f09c79f9682b6db1d976251
-:009d3095c7414b2916238ab14850f5db50b537
-:009d40fdda602b598843a977f68cda1279bbe5
-:009d50c4f79ac65984fc634f77e9b3c0312b2b
-:009d6036ef4c9688dd5bcb0cac0ad97929d1c5
-:009d70c6437b2023041d198eb9a4e3b8474380
-:009d80fbc647b0f1f1c653ec90bc2ec45d79ac
-:009d90af5e507d0ead1bbe9335a73c0e11d8aa
-:009da06b39395e755d63ccdc7d6f6688cb53fe
-:009db0527681212fedae4b265633bd6afc80d0
-:009dc0c8c630d67ddbc1d4fc7b6e082743019b
-:009dd0ba8a968c0e8887165336eeb3765dc283
-:009de09e94a93317e3525ef6ace1d361bfdd48
-:009df0ca8abec1edf11d5b71ac5f64dedb6b64
-:009e0062cb20aef09b2741420d7c43c280fbad
-:009e104c8d5e1fbafb47e6636a2bfa4dbb3378
-:009e208871c842de06b2b0c07fc60bbd3c52a3
-:009e3065985a90d99c162abb26f8b808334942
-:009e40b8ef204ac73c4c77a11471151b6bbfb3
-:009e5053a013f8a763c1b437e22f45f44a478d
-:009e60a07f3256931140657cdd400f5c5eba2f
-:009e701c3458f95896efe81864e71a884ac05b
-:009e802a36c399623fbb4b57b1ef6840193efe
-:009e9089ef3863059170854e777b697649a5ab
-:009ea0579cb6bb981ab10cf2fba7203a0b6482
-:009eb0ae5b53d92fb30bceadafe99596ab23ac
-:009ec0e6145ac641976d6d104f769dcdf3b9ed
-:009ed06771e723bbc01b6e8898e496c640940f
-:009ee0fc20e37afe800027e25a91e9fd9e163c
-:009ef04f383eebed0b29077d95112c4db1321d
-:009f0056ced0f6812398a1c6c648f2abb84bb9
-:009f103bf16a9ad2dbe8190537d6d7817d8823
-:009f20494b22e1a0dfb6d0c945c257bfa297c1
-:009f306835f6458adc4304fb612f8c007698de
-:009f4036c19b53fbbef7bf4ce74bef7d2a56a8
-:009f5092feed9ae6a42a974a29033d392992af
-:009f605fc9e60ff3d462ac501eaad0e1e4b434
-:009f70884db3cb1302e361002509be7779a7d8
-:009f80e798d756c0870f650a8f8290fbceee51
-:009f907bde080ec07cff975dd6568f942bc6c4
-:009fa0cb1639960797700343f530d11d3d3d99
-:009fb0becacf6f628fb45a44c8234f8f3c38ec
-:009fc0a240ecfb1dce1b116df0fe7e26bc7d16
-:009fd0c8e33d4e82409e994dfd6b9e71747c09
-:009fe074206d6a24456e0f2a74bc8c643ee0cb
-:009ff09848cad6d2e68bbe9743182334636c66
-:00a00051c5bfca23412ba43856e15161e8eb41
-:00a010d228fe5a05601294ac0f9df12b941f9a
-:00a020e92a98ae5bd6b27821b7a4636702a67b
-:00a0308d1b8a532c54b03c93d64568b3e74dab
-:00a040b4497b8260d20638efb943e7c37d2df5
-:00a05087d140bf3fa2fd468941a2e2ebb38ff6
-:00a0608ec6db1a2fb3fae417ff2c3bde0be701
-:00a070056ce3cc09f1988a0b05826ed14cbeeb
-:00a0806df6a998c98a1c547478f0dc05b57dfe
-:00a09028c46a6387cca3f451c794c8d6e009d7
-:00a0a081bca1e3372456f68c86568b19edc256
-:00a0b015b8067fa0e5f8eed7f25486057ee3c6
-:00a0c0e82ba8cc4127a79005dbab524da6c627
-:00a0d00da09cae84fce883e61f762769c58348
-:00a0e00e7fb10287b604cd8470393584afdecb
-:00a0f087132d953f7cd279de3332233e0c5ca6
-:00a100fa81db0a4aaa9213d062a55f69736592
-:00a110e374bdd8cda790b0ab4a1160020b2ce8
-:00a1209e0f4cb48f0cb4988d436d5da2e2aa19
-:00a1307ab2f0ab4e989cd2646525ab7e9b9f31
-:00a14003687c34f392e97c3bcd6976eee771ea
-:00a150b9c8d4d2d4c9c1272be28548d6d33f86
-:00a160e65fb10a1d1b35f9b8e66fc8030a1b8b
-:00a170ffbb681b397021e8711e37db1153d114
-:00a180d7a56f227e853ab4c5981066c3f98841
-:00a190a588f5a6975ee84fe61bcf57e523d4ba
-:00a1a001e6735aaa05eba9fbf8fb98c61591d4
-:00a1b0d13b5371004a105d7fe07ae142e97929
-:00a1c0ef54159c19e846b8fc2409d44c52f9c8
-:00a1d0fd66d71bfdadca6e6c9785443a489168
-:00a1e07a001fcb1b1eeb2abf9338e3f99a9a4e
-:00a1f0313894a219529077823e7920a7c814ab
-:00a2001b8254a21d9284154f4ef2b0e80983e7
-:00a210173f60be4f4a96f3dbfd283cfe438caf
-:00a220da98ea201da3e093bb33820c66dec6ed
-:00a230ecfcff48bde7418f1f60e6353d88101c
-:00a2404d7ae803019ff890ebe5cfc68591b9e2
-:00a25038f1925a179b0ed82e7020fcc03cb6cb
-:00a260aefcac3d7214b8145378f1ab3cdc56e2
-:00a2709c16a7d76a37e97a0cb263d3d5dea9b4
-:00a280c77e569c7ab925915f36dd84c63ffa94
-:00a290a95d9693503b6182a5f95132f9523169
-:00a2a0e76652d719bf3b8f83261c26363fadbd
-:00a2b093f6b40e80fac1546e356698ae5eab2e
-:00a2c04b2445f5453da3e8289b8f5ee9773592
-:00a2d0f97abaab5e59d5838340c1696b1ba760
-:00a2e01998b3174e839c1a6323523b3f8f7d93
-:00a2f0afc56fa53079d828ebac4234ff9797a1
-:00a30012cc2cf1e5a12e0e88cd58d69cd83b56
-:00a3109bb96aed31ef73a4521993c320fa7aac
-:00a3208785c415ba302d1d637742acd70f774e
-:00a33069503076fc823c6936c2412526f81c80
-:00a3406ce4782c4af4e317619ab6ea8aebd69f
-:00a350d36c8168778eb123d10b9c6f61198240
-:00a36090ba416e2f699a58854a95eee8ad509d
-:00a37024cbfed89ff438b2acb38824e82dc2b3
-:00a38032e4320526860f08885636a63e9dbfc4
-:00a39042d9a016aacb97af15e94fd701ef471c
-:00a3a080edc3d64037b164ca655dd675ff9fc1
-:00a3b0a7e1e313a7df88554683f55812cb63c5
-:00a3c052aaabd5eceb6a5f995a8674a866a11b
-:00a3d096e395dcf3d08cc2bcec9d52e2d7be7c
-:00a3e0150f74612d3c7a33891e777b6de83b42
-:00a3f0dbd97edfe1a7bd28679eebb62d19c2b5
-:00a40000466f9fa1b05d889987a67b7d093508
-:00a41026c5ba7d68bb7bd746e6cc2a181eb25a
-:00a420e6817bd1a999d8900f7e9ec5317b7768
-:00a430659db1f2b1e94ca00222dd3c167fd72a
-:00a440cfb4c624916aa21dfae42e840dafebb4
-:00a450415acbb07fa3874c5ef4ab3cfd4d78c1
-:00a460470cd978747e105bfdb5016d9436b886
-:00a470f2421afc746fe5d523ef9a3a699b7bc3
-:00a480e21c7b25d0ad1a7353a0095b7778b4a8
-:00a4909f34209e1ba269bbb944558f28d86c00
-:00a4a0ed8a4e44fcbeadd7ab564b5f5a413fea
-:00a4b07d0f8295dc201622b7cfb4a1c8c93bf1
-:00a4c047a860829c8150cdcc210fc274096a19
-:00a4d0b8f188b04b196deb104bb6f3e20dd543
-:00a4e0dd775d66fe896b98c9c562a5969ae28c
-:00a4f0a6f79175b712ce63655d68b615c2740f
-:00a5004e91f789f4f4b933770127f8541f2970
-:00a5106f21ed97c718a71e664fbb546662c0f2
-:00a52074080283b3bf1837946c23a25b849b73
-:00a530b971d97b868352d5a06327a2bed0d0b0
-:00a540784e7c5029c3b8d3928a00c6cd2bd743
-:00a5500d018f52c70ade6312d0846a805c8ad1
-:00a560142d0522d9f007d1c49ce17d70c1f0bb
-:00a570fe6974fbcf81e902abb63298ce406121
-:00a580e68b1b037aafc0a21c7b0af8a4d4a07b
-:00a590455696f50ff932a8b6f682817a17abe1
-:00a5a005a22872ca65fd10d0a9f911123be3d6
-:00a5b0f8849ca85476aa08ba4f344a1f77f639
-:00a5c0cd5cfe2c2ae7d22c6ea8bf8b393df566
-:00a5d06670e781ffd1fb0bdc9bd6423b69df53
-:00a5e082fd5d4077815a6ffc639c213ced86e4
-:00a5f070f7574cf6f82018732fddf0dbdfa82e
-:00a600cab99464f7c7bcce29cf15f3da1072de
-:00a610f9439a4f509b5eb123a04cf6f357d080
-:00a6207ae9661d038997a731d9cd5959d68ff8
-:00a630a464bc93a9f8b2536db8ac7e615eeea2
-:00a640ae5afbd26ff37ca195ce159b20efeddb
-:00a650dc1b2a4f3f109aaf6f79f4bc99661b53
-:00a6607da42cb1e517594183f621caaa4d7c09
-:00a6704e204940b0ad5460b62341bdba055bf5
-:00a680f0e943e4d3f0f1055c43c615d8df9461
-:00a690755fbd40b3ead094157ea000755a6e27
-:00a6a02d2e7907e5127d44747dd7865fe33bee
-:00a6b09bb92f86e115c3005b4675c7d062026c
-:00a6c053710776cb17c949e861f13c0c4f71db
-:00a6d0f2184e4514ae44c6f345f07aafab2c27
-:00a6e00d7319821857633baf69ec210287b0e2
-:00a6f032d0305e1fdac43e6a64805ea10e40af
-:00a7006dcd6c252b4fcf9f13f3a0dba5c7bebb
-:00a7101cb34a1e46e1faedeedf7b528f7a326c
-:00a720ec5ae9fe55c47a94925b71089449ff0b
-:00a730f4143bcd490161ab5b6d231d5f6730c4
-:00a740d6f68ef150eba6869201615b89bd2613
-:00a7504432ad0fdc5c3a4a580d846bb15ac881
-:00a76079806050df7ec7bc30180fc0ec3446e6
-:00a770a624ea3c900fdb86f2b46b46db151d5f
-:00a7805d6be31da5c2473a5ae0596cd6d9d7aa
-:00a7908532881ac0716754dc197ef8c2ee0f4f
-:00a7a08bf46caab2d612cdf33345a3d6eae171
-:00a7b0034ccdcb3488ef4837403368afdfee61
-:00a7c087be830804e5a15e7eb4c793aa5f4d8b
-:00a7d01e5bf65f84fe398e9c2423206bc8c71c
-:00a7e069f4ab03923fa528aa94e4205f7d45a1
-:00a7f0fdb2f60f6e0ae311a57dd506c6ee674e
-:00a800517637d16ac3763a0e9037e918d5101f
-:00a8106c419a183b6273dc56dadc889d95d6f4
-:00a8205a7a0705500f181f1f351a642ab0ed96
-:00a8306c40bdf3265f6978f73fdbfe66b6168d
-:00a84040c30d107264cabb2c9c7f09d90eeac3
-:00a85034b39ba0ed3df5602d4a0ccaabffc12a
-:00a860b2ad350543c956143eb9b6f997efaaf2
-:00a87068f7fb9967b509bf5344770f64b66c8a
-:00a88069967444a7784f7d056de0d84521edbf
-:00a8904e3603409e8da5e019c712eeb751ae71
-:00a8a07576f326efecfdcc82baf539fbac4268
-:00a8b0e3944ce48736d985a876e398b10edda1
-:00a8c09710d97452b7e432083c259f0909be6f
-:00a8d0455c5d09053a34889ce2cff31643e3f0
-:00a8e0f3be12676e0eaddf038be47791cde264
-:00a8f0adbb0cec2d9866ce23ef0f9f5cb57493
-:00a9002cc7a19b68bc1c90e11011e8f407872e
-:00a9106212fbcf50c16ce971e28e503cf77980
-:00a9207b49a9ca075601f99d5e7142196fc79a
-:00a93012c61c944860b4c16e696e8f16a0ea3e
-:00a940174b64dbdc878e6c6f2fe8351e90c616
-:00a950a55b89f6d488eaa5710b54c83e78717b
-:00a960148419409ae1aeb2ea00e51cc88a83d2
-:00a970b1424376b628bc63efb4e091fe974fc6
-:00a980d0924f23630f11692b6f5642e26d51a1
-:00a9903be0f18ca2e7468a13dd75b73a78bb3c
-:00a9a069313b243a36c4ba55b2cc300cff03d0
-:00a9b0fbdfc0c67e95057b0772587416e3d803
-:00a9c0a87edd5941f5a1b7de357a610442f3e0
-:00a9d01839342c3d52aaaa012105009535501a
-:00a9e08e443ea11c69baccd0c61dc48285c537
-:00a9f0d08364c1f6a461344d5d0864b2e39fdc
-:00aa0097927970fd6488a3e9b4c0bf87b5617d
-:00aa10070d96314e778ac0d86d2e96a2f7f2b0
-:00aa203e610c7b9ef6bef7fc946996bfb53c9b
-:00aa30dd7fcdcc915cec630c3513e30863f310
-:00aa403a9d9ff9fa038877b0fcde6466559913
-:00aa505b95be182499032f8b4443bf709b1016
-:00aa605544e2327500aedfda2ee889be3682f6
-:00aa70e6e8709daa4acbe541177b96d82a227c
-:00aa8042639b355fff21b8cf5d9be47ae601dc
-:00aa90741d959fd9fc2f934f2649d43ddda43d
-:00aaa070396a6acc650ab85e21e761dd3d288e
-:00aab095fcef753c75c518c63d7bd319dc7a5f
-:00aac0d46c6ba7c9e0f0fa325d107900151a23
-:00aad06d395d23d5cb87647ab829ef1ffc4ae8
-:00aae01d68a4baec41651cbfeb023b89478225
-:00aaf0e4244e4e535f23b11106d7c230e39534
-:00ab00bc3bab0c55a81fda4a3b76d2579eda9f
-:00ab1065a257e43c43ec2510ec6e82eb6f34f2
-:00ab204b4287fdfc591debdd388ce09ac8c158
-:00ab307f22229ff0f57b4c6866c7431bf7a778
-:00ab40cdb642b78fef67a6942d476b6a80bfd1
-:00ab509efde6111f76a362f965c9d591ef01c7
-:00ab6040ad6e5d1f3586de17c6effe47b38a55
-:00ab7045b3c97fb7697f798ee18666cbc2e445
-:00ab80656366f479618b5e6b01a5df70f22bfe
-:00ab90dca9369666b3443a8f88f78b89da25ac
-:00aba059d8f7dbe6e90010338b375ecc6dbb84
-:00abb0eb50a81c33b186622eed1c063660fa96
-:00abc03d4793295dc6998d6e1347122d4017db
-:00abd0d30680f69bc029be6570d3e57dd020d0
-:00abe028efeb08a4918bfff4fa0b8ed5a42168
-:00abf0341a678040633d3b5c77b21da86a2965
-:00ac00f2515b2fcd4e01856011a0660d6c8b52
-:00ac10a36f9f5721744b4e9d87d7de3d39059a
-:00ac20830af0d961ff8f40995557d11a55d6b9
-:00ac3051f344c420b2a7be0059c040c7c6dda3
-:00ac40c974d6ef4135bbabfc441d613eeca819
-:00ac50289ede0adfe75cf0e2474147b39a18f0
-:00ac606f50a4166aa3520dfc2de8bc34eca372
-:00ac70fae354ef913d8fe82eb1c66494c8a089
-:00ac80fff483647edf990dbfe7374fe4231b3e
-:00ac9088a0dc745bb70d7be67ae77eb5a4e58c
-:00aca0953d8c1c2e02505c515c717df486650e
-:00acb0700a0145680132ed3904cafa564036af
-:00acc08590634aa32e07ecf1ea7f60e2efe3bb
-:00acd071803edb5bcf928d0561e13b47067206
-:00ace0df0c21d6f3ceadbebbec12f7128dd8a8
-:00acf09a30ce5256f2e700933fa8f64a04b649
-:00ad0068c8ff0afb9d8337759d60e791e6b716
-:00ad10c982eaa61f260d3de6f5e0a7f7b50ed8
-:00ad20ca2273a4a7be2416e9335126a571915f
-:00ad30f4501413e506ef5c48467b11ec54aebb
-:00ad407238b726bb93dcc21c7a02bca418ebc0
-:00ad5087421c08e5f49fdfc92d5625201da1ba
-:00ad60ae9dd9f20ce419f75e3e27a690683b59
-:00ad7066b90293b3cc1b101c5df3690fbd0b95
-:00ad8031f0a485410a58f005adc95664425e24
-:00ad90c86c7d2d2fa5be64226dc46a5eccad1b
-:00ada0b548a406fc19503ed837ca6ef4835c21
-:00adb05fdad3991cfdef6554c00c2c53ab738a
-:00adc025e6099b44ae157575cdb67fd98eea18
-:00add0cf77f0bf2d8cdf5dff703b01da961ac8
-:00ade0bb07a12eb9cd79cd892380ef68e934db
-:00adf0e59f093c5aa525e891e920bca5ecdabd
-:00ae0004bfcb0d8f6a877acfc121081bdcb181
-:00ae1011e3df0028b78fbe743bee7a4aee84df
-:00ae203fcb5b892d6c9dc1d2eabdbcded6837c
-:00ae307db313b53a17a39af1420a996ea5e6bf
-:00ae404b49bb727a9141079a4a3497f603c5c9
-:00ae50bcb272e4253e78c7f612772eaab94a12
-:00ae605d2979b9e1fcc1186d07fbce1e900f24
-:00ae70d2aca3edc8ef0686c9fa794d4fe06d92
-:00ae80c371a7e79b48288be3c730aff6a168a5
-:00ae90f552d2912e58af456475a81f314478a1
-:00aea0a73e6d79a6044f400f9c6b36737d45ab
-:00aeb0ac998a15c94ded163ddd7e0d164ff0c2
-:00aec08a99c83a923da4d5f5cbe49885e375ce
-:00aed0a9fbb87970e505a0b584c7ae8ddeb69a
-:00aee02323ae10083cdd4919efcd5c27ab80e4
-:00aef008571da74106a8de58bb298ab35a27b3
-:00af00ae974e7240acad78885bcaa55edfd046
-:00af10ef4c17ad92c21dd34da89651baa4b905
-:00af209e8492f274706e33e59331b2066383c8
-:00af301c797fbfc453603933b83ec02e0d8743
-:00af401b3942db82e0ad82ea11b030d6ac1761
-:00af50ab696923b8db0974624b06f0d2c8ab14
-:00af601829f0d986e7216e1ea9c3511a6e1ff0
-:00af70f48310bedbc2cae5d27b421b2c94d53f
-:00af80a3c2437e510b80cb4f2fb16e64fee8eb
-:00af904a84f39a98915f5125c9f68159d44546
-:00afa087d12d3a5c33900b7a25e7e6832edd4c
-:00afb009149b1754842476b5721883f32120a6
-:00afc0d8be51e862d5486d4a87f74ed07f4f43
-:00afd04888e751f633348fa2ba84640ecee055
-:00afe007947226894fa1fed726ad9aa1cfdc1c
-:00aff05d464e07093d0fb15e3a44033c35f051
-:00b000ecf5c5cf4a46418b2485a34b127e052a
-:00b01086c2b6362add949a3af847932711c5ea
-:00b02022eba4bcd1d196061331e1518be9ecf3
-:00b0304cb6e83471fb61421700408950dd505a
-:00b040509921006b981deb160411a53ab66218
-:00b050e079714badae82ac93d14f980cad273f
-:00b0600694fcf2bcc73d3b8f6ab04b2e5b0c99
-:00b070a8d7713fa43fd99a978d757b702f90cc
-:00b080a0241e5588c25f77b30e6a8d8f02fd41
-:00b090e909f70faa70c4f61bd5f76e41a19970
-:00b0a0758db4f1c8eba0d20304a544a995d76e
-:00b0b08a469dca347ad1ade2725aed4b236495
-:00b0c0439da901ac1e3737cfbe19ed9bda7531
-:00b0d01d982180d6122fd47b4e2eb38bbf6981
-:00b0e080d3c82fe414e039bfaa7ab045220cdf
-:00b0f011431fefda6ae9dcb4d91b1e6f4807f1
-:00b1006e8ddea5ac5c5942b8faaf6bbd37dfd8
-:00b110283cb2c66b92c17e0becd2b31b8cc7f4
-:00b1202b2d919c5029fda41edb67da09277e55
-:00b13066c101631a5f52b5ca1535ea14b04562
-:00b140c32c7deef5575ea2d602b75475a5ec53
-:00b1504abd93c20478d571735f9129c0a17673
-:00b1604efb0527518bc49cde343cc46bb55a87
-:00b170a9031cdaad328861afd33c1d3749bff4
-:00b180480a515c05714b50ffd8c6d597e9f920
-:00b1908b1e9c4b8c7c16f68226f0e0c5693b74
-:00b1a02f23b7cbe8d6fa9b3c33295567148ff8
-:00b1b03a3e9cffedc1f6049f2b9a54bc68af82
-:00b1c086fab81cdbf48ea3d531618b1fcf2825
-:00b1d02c08eef1ffd0f98299de5551d7a4370e
-:00b1e04956d13f8065a0f4b5c5eea356061df9
-:00b1f0a073e8aab5215abb9e4cfa1d9e679a8e
-:00b200ee5a611b5ceecd68a545f30ab8d97136
-:00b21021891ffffa5294f3fc116e1f3e6fc338
-:00b220c3685f549d5752a3c034d702a2413d8a
-:00b230343ab523090948c1bac0d8817e824f8d
-:00b240d267f145815cda811bf2b766369cab95
-:00b2501bdd6197001405c02ce740fab92126a2
-:00b260f51314123906526a12dd34e72f21977a
-:00b270698e91f5d2542cb58903a2bae8ebf6ec
-:00b2802896bb5701a743361293d5f90226a85c
-:00b290f5095d2b0b1e4f0df9d191d819f7c266
-:00b2a045b1b7cdebddc1fe16b4d1031f85e8f0
-:00b2b0154b483770d36e45bddef3b63000c4c6
-:00b2c0bf1e8f493029393192cce16714a85289
-:00b2d042c6f83062b81e0e4f5ba60740df0c24
-:00b2e04c3ff976b94227f1a608db6a9d5491d9
-:00b2f076c77a512e1b7bea6aa6311b7d161ece
-:00b30007f1b60df74b0fbc2eb51131f0d21b89
-:00b3102c6e04663a3b2be511860ebffbd667af
-:00b320fac5788ba7443b93567fedfa25c34dd1
-:00b3303ba53478c64ceaa07df03bccba64f381
-:00b3401e49de70ed42ce415fa8a0907a33f5f8
-:00b3505ac82045bf414be71ab2d6620a602d82
-:00b360b4b5b5bbd566adc1e67f38d67576dad9
-:00b37033ea8fdc164dd491e1e78869d06e2681
-:00b38077de5ce98f121e134e3803e282062402
-:00b3903a3f84e73576b0faa1fd5c703fb35dde
-:00b3a06907a4d7f75f3d8f99d0171356f85bab
-:00b3b03d8518e43a0f6903cf0a4394afec8304
-:00b3c012fcce7acc3ca8dced714397bdda47c7
-:00b3d0c505cf3074112c5ad4818a37871c3f04
-:00b3e05915b62f69807773125fe2d454ed6449
-:00b3f04a57c6ddb919347561db7ce2175c3bd6
-:00b40029b0684cb4752a1597560952e2fa6622
-:00b410c7e783b0e775378bd154051998df1405
-:00b420389cea81c5dc21a6493c1c4899852f58
-:00b430323b9123b64a4476c2953e608455ae69
-:00b440abca7293087d044e062a7919d0d0f3b1
-:00b450c938d7012086ab46445f0bceac328ebe
-:00b4601a72335d13ca7eb34d2d56e0d92a2632
-:00b470bcd042d9f16cea5ef8283bc9f6c49ea6
-:00b480d1393645389c4e4daaa8d0658a950cbf
-:00b490565e575233202eb36408b65fc97d7a97
-:00b4a096abf016dbcc9c76429fc7e5a512cbb1
-:00b4b06c0493cadddf38f0aee217339324adcd
-:00b4c0e31d8284bd8e292a5b1bc028d08fd245
-:00b4d08167c29110d7c60ffaa4a297dc7a2f86
-:00b4e0a988c3d2cb3115d3ace61171a7f847e7
-:00b4f0ecee15ea549016a28fd819513aba83ef
-:00b5002f5d0d61c4a1578e27e72d68abf77e95
-:00b51084b2b53a310b5cfe4a08b7ff4bbad4b3
-:00b520abd4b4ef603a650eb0794a5f74a402cc
-:00b5303b7c84b851d5782968f33eb21af334a5
-:00b5405b5fce1f1119cbda11552d42f61a88cf
-:00b5502c54e6c5ad2ecfbda21e2802028fc77f
-:00b5608e3274e66efd7225f1bf988d402bfeea
-:00b570d04b8967e9a74ced410c3fc9da0a1992
-:00b5802459bc01ac15177a84177a044d1ee525
-:00b5906cb0e601fe9a72a718df1b24f4333da6
-:00b5a0cff237f2a6f554da56094f4b8fb8eea5
-:00b5b03685c2a0cb7a9264e35b652122b0353e
-:00b5c0076b4c6e8c5ea65d3acf359f6f8fd9c7
-:00b5d069442b5b5ef506bc467918b841eeb824
-:00b5e0670067842854c7a4cbceaa19ce8b6b40
-:00b5f026ba99fe778b22ffaee00614ee6b586a
-:00b6005e67fa98cdc25f0053db9c6b40f58bd2
-:00b610e0b13dad917453645c20b9dfbf1f57ee
-:00b6204f7441a9ff5042800985b96d0f5c46c1
-:00b630d3278b9feea4ced490d623e94ffe92c1
-:00b640cd00c5f6e2c206d58148c234722972ea
-:00b65044b8111d5433d9e2cc7ad6e951fa4394
-:00b6608a1975a422e00b7a5c8d85c63ab9c175
-:00b6700249939aaa59f68b60eb7b447e0b01c7
-:00b6802f08a4ecf69c8cddbdca426177e68d24
-:00b6903fb34e6c703de835e57d917a7ba54ec6
-:00b6a0cf7ea712f305278d7fdef7173707fe4d
-:00b6b020497547c079ab1c0a1389c3f345ba13
-:00b6c0e929ece5934f5940d925d3b748f2bd37
-:00b6d01aef4f7ef4560d12d8d12714d12c46ce
-:00b6e0372c1345980fc61b7b39be86b954a5d9
-:00b6f0be83a9ca691290065de0ba7cfee03fc3
-:00b700765707988641f44971adebda7fcefe04
-:00b7103302c34f7a3abb6b659a59c364936202
-:00b7209cadf019c5f4dbf31c881bee6434f0b0
-:00b730d392f2594a09517fc83bc9b96c6928e2
-:00b7407ba570a0f470f5b4c97423cfb9ff1a07
-:00b7500a87ca68349e7d6463ee61281b9a2fc8
-:00b760fc70a752db4531688744cffded53c6fb
-:00b7700f340ecffb0059be8c5883d7e85b04d1
-:00b78046d6b2428ddf42e9948d6cdf4cbc6c97
-:00b790ea04b8af95efcbc5c44d432794252107
-:00b7a069a61f4e835ff1468a39db50c0623931
-:00b7b034309f6b13f3a1131146b2210b875bb8
-:00b7c038c29ab16840c60cb8bc79496ab38de7
-:00b7d02944adb43a81c729f9c3ab6060d3bcda
-:00b7e096035245bd3554ca230b5c15a6f8e685
-:00b7f0a5984c7c5c8c3ce66a1ad88cd0cb5105
-:00b8000faa50a09f670bf037ea7ac48334be14
-:00b810cda647bc2cb9ab5776a4cc2a83dd7d3c
-:00b8204a29965696f2819975ba78e714a7c79e
-:00b830743fdb27ad3cbf54d7d92342fe57288f
-:00b84029776061ca5d2fd6693655b87fe9dd25
-:00b850d2442edb89b92b54748e77e777fea404
-:00b86055bd4a966f257ba2a91925d1097fb7b7
-:00b870a957704d1ba8cfa7db174bab79fa1371
-:00b8806e4baf5c5e6d06c4c06bdd36ac71b3b7
-:00b8909de850d1df53789128dd3f8cc97c12e1
-:00b8a0b77bdd77d3b165437b2de9ddb82496fd
-:00b8b017cec6e1702757b1f12cbc60c8e3cde1
-:00b8c0345a4d5700ff1637a03c39a5ac98286c
-:00b8d0d7bed9f40f6ab4b1ce24c75d0ad209b4
-:00b8e0e9d85d3369641e94df1c7a2957371183
-:00b8f0b4bc4b6733adb92da4f586fe5cd78b0c
-:00b900e8bf34a583da1169b5812ed4e6195a27
-:00b910fff2402c68510cf92a7d8d072d82b6dc
-:00b92095debfc1415ee540ceb177ce044203d7
-:00b9302f1612e97e12041905f6c8a7de26fcbe
-:00b94053089148ee19056f1be9cb99555f0db6
-:00b950be8b4228a3e382d7b34b3c9bb5b3c4ce
-:00b9609359887f23890d5bf295bc73c276480d
-:00b9706e7edc3469614b28d652151a90eb61e1
-:00b9808e137fdda286dbab2c9fce8cfbb7a5fb
-:00b990dc0199a3de9a124e14ec17d8a56c32cb
-:00b9a00e5463c5dd3f653f3c150c35f0c4547b
-:00b9b0bca602b2e37df77ff6a0f1e0d5f3507c
-:00b9c0d5bd97c2709752de1a9efd51388ee767
-:00b9d0d2e7a0081f4d810dabbc1bb821966df5
-:00b9e01ed947f76a1a9936fdbd83e62b7ada9f
-:00b9f0b8e362ee8efcd087bc6d05c00c159f58
-:00ba00c35392bb9a4388d19ee3973fa34061d8
-:00ba107e9e9627884e15dc971964a2990b771d
-:00ba207927a57ed2fbe223d697bee92c033927
-:00ba30c463d71ca529ec1dc4473e5b5f63bc36
-:00ba4002e58aad248e893e127003ebae7c1d0e
-:00ba506376a8324f5b623196ca085d8c1c95e6
-:00ba6003b8421922ae42c585b84378aaae7ce0
-:00ba707dd8eeb2acb427f1973353dde2d41640
-:00ba80c9bf927a2eb4442df63094293fdf8d70
-:00ba90f2bc18fb2b426e300d255b9bbbcda313
-:00baa0cbce5fe877e742675d761885bd6727db
-:00bab04d0a30eb2b0cb39dd0ae63f2fe76516a
-:00bac0e405c8b0fcfc5effa8be4462cc7acc3b
-:00bad0a69338f4a5c7c61bfcd90b24518ca485
-:00bae027a5192e00577cba3c914012373bffbc
-:00baf01ff1d8757c72845e911ddf1caf6ae705
-:00bb007c039248b452060f9a874164f2d914d5
-:00bb105a78042330400635736dfb240eb921ba
-:00bb209dcdf2cb19902471c4c69e1cdf48f46f
-:00bb30d877d2f4d2fd9d2011e5ca8edf90d203
-:00bb40b8b9ec150b98e23d03a4edd9d0ff7f13
-:00bb5084effc49f1e46b77cad840090cd8eec9
-:00bb60086d7104f39e19cd7c73e7ec01c46e91
-:00bb709d982a55042f911a7dbb2d4b7a8bb561
-:00bb80f8bfd0a6fd88617f3ee39160f849bce3
-:00bb90fff6eb382de0cb728bf9da56ec0c7717
-:00bba05e1de809947bc9b511dc64fa36a20732
-:00bbb0c8dadb1ae7047f44b7db942d5f89bbd8
-:00bbc042bed15749c2efd22b9d59b9277c3e33
-:00bbd0b88647ed54cc84bdef9086cb179dcb84
-:00bbe03a1c49d7241883c003d5b46b4bff020d
-:00bbf0daa7861a95b8cd24c602b62d8e5736a0
-:00bc00e266b4d18c81312e6c162a6b1df3eaaa
-:00bc109bd621cf00693d21a6f8b02bce79f804
-:00bc20ebcb162b1ea0997ec010301fd4f24977
-:00bc3014a9ab15a9924b20eeefe80cb3f1ef2d
-:00bc404ed975185405eec6f6f59f20c499e72d
-:00bc50dafdd020c510ad28871e2466c9e3395d
-:00bc60c308f97ec7b4017604ce69a2ebcbb6a9
-:00bc7000158d5abd4d4088fcbec702b146f5b7
-:00bc8017db620a196b1c2c766304673ea89f8c
-:00bc90616c833ed79d029ee52b070e38412e3f
-:00bca092a75a827fa438df097be90c876982ab
-:00bcb0ad7456266d75677b2aeee31e9f6af397
-:00bcc05bbdd6b9013786890ccb9540950442de
-:00bcd016b4877766178562ac444fdbd253cb18
-:00bce0b102f883e6983bb2028db09c24f973d3
-:00bcf0aaf59c85102a2a5b0fa1042fc4263a7c
-:00bd0085e199caadd78f73b751e9daf9ce45ae
-:00bd1023a3577201d4ed0cc07e746d7719e944
-:00bd206833e7f8107e69a9ad7bf4b76dbf6352
-:00bd302d89c4b04761818743ec0100d1bb7bd4
-:00bd40e4f9d0b7df3fa3bce4c7789640848b2b
-:00bd505d32d69d067575d8457d422ef1b5f485
-:00bd60a8a811c3e671de1fa0c93dcc7dbbc811
-:00bd70e34f4851526a82dccc4b47ee12d680a3
-:00bd803abef9b243eda577744ead621129e10f
-:00bd90a4ce4ac192d9643d53f072b30270951f
-:00bda04bac2f37d17e9146e7bd6c7e189f950d
-:00bdb072a3b4b0658c83c057fb3f6455cb0f8a
-:00bdc0dca9675b44a9d1f91b66257267aae549
-:00bdd069ee137f00e744d78681f2e82ca98f2e
-:00bde0b7b6b457403002db50239c31a4493fb1
-:00bdf05600ed8edfd01ff0433e982490f0befe
-:00be0007cf2d5eba3a7831905cd128f894043d
-:00be10d5df9e4627eb7abf6cdf2a03edaa974f
-:00be2048d92fa418e4d0d66688e56c5d351211
-:00be30bf53f3cfc8e3f371d454c8456d969b02
-:00be403a6cfab7f61578e609b153caf9508c4e
-:00be50e2fd27a88313f428d971f0f5d5e121f0
-:00be60d8d5ea6fd1b6b1d26a9c1f7a7e4dcf90
-:00be70c1789e7af5295734183fa09b70080312
-:00be8022c6eea6c7c51052daaa8d9e1e2b361c
-:00be90d0a78e87dc1bba3e515dd4c61f0a1aa8
-:00bea05b940b412ed4cf779d208099dd43aaf6
-:00beb00b4ffadf04dcc67c9a16db74d9db73ad
-:00bec06ef1432f7f882b268c3a031cb1bd7bc5
-:00bed0ff15cddc0752c68394d466124209beb5
-:00bee0997ebd997573f0f18dd100fe4d8a5316
-:00bef09e7557e448e8941feb60d05e0e1b7401
-:00bf00799c9cafb33ca68c177e50d323d5cfdd
-:00bf1011e51d75cde42acae8a8136cec4abbf3
-:00bf20c113194f7310b06aadb77d497ce6ef67
-:00bf3016a4b54ceccf35752b8a01a56930bfb6
-:00bf4041f183f26c27d43cf67e466f93bd392f
-:00bf504850c600b2ccae11eb4c04e7de099fa4
-:00bf60cf71788ae37c0932bbe165e4de3b03b9
-:00bf70f38f1b1bec4239f0e0a5a44a79ece61e
-:00bf807418711b17a754b58dc0f8b9445afbfa
-:00bf90076ba0eef8efb2df34b235d76bdbe625
-:00bfa08b2279ae1a3f91cec9da1af43de3bc09
-:00bfb0e1cb49afe0dcb9e6048d8133cf8ff793
-:00bfc00dcafc1f42adeb87ee5b467ad2609e42
-:00bfd0cfbbdf0def5ded77d7901bae38108223
-:00bfe0226cc8a2bc74d070a84ae9e206bdb22a
-:00bff05953ed26fa8bdf959b9b8cdabb93e6ac
-:00c000a50eb5352ebee0f2e75573b939a4ede7
-:00c010afa819bf833e994ddaf00dabfef7f721
-:00c0202073c183a5ea428eb0d56614059c412e
-:00c0300e473e2ee578bcc3be8745378c8eedcb
-:00c040b65b8e2ea50050aba4bf541e73745faf
-:00c050986ef45371d33c86c9ea28a17ae726d2
-:00c060f9603455d7b8b4c6561799fd15d06b63
-:00c070b63180ee24925342ce46553ec37c49d1
-:00c0807006519f9beb245a3bb3ede383422a80
-:00c090858d4aa85df71b6a9b65ea5a7bbc10ff
-:00c0a0b6d24d94ef1fdc864b1c5a3befa30172
-:00c0b0b18dcd760e448c29cea8646be3b0a4c9
-:00c0c034f8c14773da13af5c5d640b87271c5d
-:00c0d0e5587103105cfb0a5ff1ac4572c148d6
-:00c0e0cef3a0f740476568f1ddcc9f8bc607e3
-:00c0f0bd5650bf2e5f8f7b68d42842bc85f30f
-:00c1003e40a3eb0f832e5c9d4600917079b119
-:00c11088455392ddefc9098be4b167f9a3a22b
-:00c12011d4b20be6708a94cddbddc8e5ee87cd
-:00c130c16936bac0c8914d3da6571102be6967
-:00c140bf4567368b5bcbbd00f952cef8fdd1c7
-:00c15009684cce11f4d235a1edc9ba0e451679
-:00c160086835516e65991484f2130d920668d4
-:00c170cb95a0c38d0e4bf3824f18efca6dc810
-:00c180f498d93e8737750db83b8dcf2ca039a0
-:00c1906595c3bbfd15e88c663d2c176c35c2c7
-:00c1a066569f27a74bada3d901a0c7c46071c2
-:00c1b0bc5b963c28ae7baea25c13da1ebd3149
-:00c1c0c3a393a8d4a003f2a00a22f3f3fcb54b
-:00c1d00fdd7dbe48554e5dfd6eaa545df489c7
-:00c1e02dc9f50ac4e593a3bb4103f4d80af624
-:00c1f03903a9142032a89a5992d082050eba3c
-:00c2006cf85073e2b7a79ec3605238c4bec131
-:00c210e20e87a7b0adfed506fa5551b6848ca1
-:00c2203beece166fdb4a43e46e536b7afde731
-:00c2302e907521790ef116036d8767e8735f02
-:00c240e3dce4b2d6bcc42b240e4e4d8f158ebc
-:00c250df946c08cfd295642042aacf655a2ad1
-:00c260cc608be2a84a540d69bc80c8775a5e84
-:00c27017c9e645558dc93b69114193684eeb9d
-:00c2803ca7ef756953a341e29c52b267b6e0e7
-:00c290fcfaf185d463029b775b3ddca78bdb4a
-:00c2a010498d2c4daf24f0f92f9a338585fa4b
-:00c2b03b60862bb2cccbf7f47972b55921042e
-:00c2c0efdab37fe90149f34bd56563304872b5
-:00c2d032d9b69fe1d221a41f03a4ec3da233dc
-:00c2e03ef9d38bcc59bab0224b100461a4b9d9
-:00c2f0b6359e6c6140eac5c0412b5082234625
-:00c3007cef67e12485e37b1b4f03c8f45faa85
-:00c310f1235a2b64ad11f7b53f7394b9c20161
-:00c320c6520ba4b751c0b9e81a5b97904930b2
-:00c3308b640c3164374f7f93d9b5875174df5b
-:00c3409e9f99eb8e711afe61ebed4ec1fe5e9f
-:00c3502f936649d71a63c3e221ec8043da48b7
-:00c36097dc0fbde69ce57256910f4a863e5185
-:00c3700bc898e8d8ebe0b1e29a569fdf423799
-:00c38081d0783a44bd190c5615073122f53189
-:00c3901cc7ffdea6ffa98ec01b9ad7f0d2c94d
-:00c3a06da90ac9434c66d023bf36a14c6919fc
-:00c3b00bf82344f3c507b2668610d260286192
-:00c3c0a3b8a8a1d5ed3f2c111263914f5463b6
-:00c3d0c3252ef6d4eaba17ecc41564c66c5a9c
-:00c3e003512c89bbb0b56529e700de5a62f484
-:00c3f055f40ce7e7a0d0c395aa78f61c56c4bf
-:00c40085c755eac12c9915486773477fa56cce
-:00c410dbfacccef94d3244a26e6d15ebebaec4
-:00c4204425eabe97f449059fc4f58c32d36c03
-:00c430b02f4408268f0b82cf9ab3dafe98a999
-:00c44021e015257cb70fad7709e2b4002bf55c
-:00c4502064907d3c71ce931309ec9d4af89ee9
-:00c46004400a9442bf8d9a125eea45ab1e9d3b
-:00c4700d20c718adb16129044bc80316e83bf3
-:00c480504500fa9afa9868bcad7b5a58a29350
-:00c490a187666876eca7f7f73916418923c214
-:00c4a038f22b363fca51eae71befb4c168a37b
-:00c4b0a795fe29408ee16a3a127dbbc61651b6
-:00c4c0b8e312e87a7f9755253eef0b05a45c64
-:00c4d058d878354729456b3d8ef9455e7ad7e4
-:00c4e0fcf34da9f17512ee9c1a694076573769
-:00c4f060d6e6a3ef57c375bc57843943acf2ee
-:00c50093d42d7797db3c6e536fb2c867eaadb0
-:00c51050fce94b53b5202af0b7bf5d166e6cc9
-:00c520b4db410fb44234d95b25e1106bbbede7
-:00c5305b3d546bbc772e381b431922886e8842
-:00c540ee178e8cd982db2451f87dbd7c961ef1
-:00c55015e6ae3fcff654d8cbc789bcf49882c3
-:00c5600d41ab3b375c74ca1b89ebc8329f090d
-:00c570fb0bb7be9ae1469d4a4f86c15d25ebff
-:00c580731983caa70ccd30832343bd4c771947
-:00c5901e65560299db7e81f68fddcc64f50b1c
-:00c5a0cba346a34e6e026171d733b298006b46
-:00c5b09a764977d13889cb49600b9e65f45aa7
-:00c5c083177119787bbea26db44bab1b8c4563
-:00c5d0348cecc74dddcbc3f6448454deb7d9c1
-:00c5e0e69b49f5422df049aa44597660f94fd7
-:00c5f062c8e09917984bebe2dc219cc3fc1159
-:00c600b9760c56c41e01304100eeb626c77914
-:00c61031d9d5c736854a4dcb9d7777b4694e1a
-:00c620c9bb2ff9430593b737ce139332cf8a5c
-:00c63092f702fe174758e1a545765cc57e7c0a
-:00c640cc79559e4978e541e2654219064ac089
-:00c65066ff413f7b99d1955aab3b79c443c398
-:00c6604472a6e6279ce450e17053d9373003bd
-:00c670bc170cc1995e4ad18a3f3dd09f543658
-:00c68044bd7bc1923a48cdf7be135f0261368e
-:00c69090ad87f4fbd7801db5347945ff68db4b
-:00c6a0cf3b4f4fefd5d80e4cf22b5c868e16e0
-:00c6b02796b14cdc6652bc93f0f02628e96fc4
-:00c6c0e6678f9099969e11e3990412e6fe3eee
-:00c6d04551e9be3874f78b2ad97900cc1d10b4
-:00c6e0a216b4832f65d928c17e5577ca162d8e
-:00c6f0ac32dc0c81149c85524ae42a5fb0709e
-:00c7003b507434c781b1b740fffe2858ec0e67
-:00c710884e4ec072c1b9761f491d0f568e6030
-:00c72060c188b476dc4c65c71a50986299d26d
-:00c7301f7c193f3846a192368f7229be8b6100
-:00c740c7d59f46019258f94e881db892c8e9e5
-:00c750e5517939a310d3ee95e1180e0f40f0c2
-:00c7602936c20b319fd0818d12f347a793449f
-:00c770a7146b9a54169305f62e3bf2a7a40175
-:00c780365d6159cab58af88f9f3a218f5ac3d0
-:00c7902ee5438a6d7e9864a69fc49f7d967684
-:00c7a05f86d6d11adb44a037c15855f99a881a
-:00c7b0c3641239fd39648cb11abc55e3a0b956
-:00c7c009d13c91fc670fc3329275d6424e42b3
-:00c7d0188c3cc46eced42262cdb2e8b27f2aa3
-:00c7e07b2237a1e686a092a2d6845a448e7fa5
-:00c7f0992fbd8be092a29ccca7454c1e439897
-:00c8002b0ccda339ca813a2b804160916c7e58
-:00c8108a230b994a8b30517aa4cccae439a0a5
-:00c820c137ccc1b472a2b1d5dc916e6a58bdc3
-:00c830d0075598052f88f5f7f6e180c4a8d6eb
-:00c840b41f1430d82afed7bde5dd5f9b1d2f73
-:00c850d0280b7e9cc663e92c2eeca4df4566c4
-:00c860374d2c9ae06a6908b74580485f3dd397
-:00c870190ed524ff5ca3533cb4d49ff46bae5a
-:00c880ef105f58590b9c3317bce7a524067dec
-:00c890b354460aa3c1c90125250062e8ed77ec
-:00c8a0715b315aa68c498d0adc7e3cf55c52fb
-:00c8b05839fe2e3b538955a1b32eacd01b6c68
-:00c8c087480f76277f38671669f8cd8cc01c1c
-:00c8d003e44bfb7f573e1d723abeba3614722d
-:00c8e073d4b61e1022187e57d6f0227651255f
-:00c8f0caf4036989d26cf2428fbaaccab76662
-:00c900e251c95832c0dcac3240ed2f8b18fb6c
-:00c910d83a34f7ed15a105f0beca36358c2797
-:00c920cc059c50d5ff5d59f853dd3eff56f0cd
-:00c9307156d9bd987566a8f4f7a0658572dc26
-:00c9404451f454c83d4c725406fe1754931d8b
-:00c950d76e2bb8f6cefb1a8ec76b9dc541ebf6
-:00c96099c33dafb9de5e5c3daf3be2fbd5f4b0
-:00c970ff838da4c6a638aab7f002fca6ddf762
-:00c980d045a38e6f52c6837ca1ef66cd2e2273
-:00c990bee706e6621da36ba8e60e960d24a6c9
-:00c9a0ff1e14d2c86e1728c3aff50faf097b42
-:00c9b03af6af06b8ac571a6ff6d9371abf980d
-:00c9c01119d8716b9ecf38ab98581ab14fbb94
-:00c9d0774ba9ddb5a04201bb4ea7c233b96c79
-:00c9e0ea5d8e2b172395a33a9f6a151c6881db
-:00c9f0e5ed0c88e59147d191c39d4654c74f0a
-:00ca0051264f2bf83ff68f1991927e1d7b4c93
-:00ca106bba6bf83d5ddad6b5a602f72001eaca
-:00ca20ead22d5755d861dbfa05effbc5bfbd5e
-:00ca30269ef94d2c7e0dbeda0497acdfa7c497
-:00ca400603b2da1f5b98735c25b15f1ca91d2d
-:00ca503ea98d9434eb7ee264cdeb757d974a80
-:00ca601b9b304613fa37183d87d1897567dbc6
-:00ca70e6e3231c68e22a7bd7a1c96df1c657a3
-:00ca809d49ed68ef4bf95480bccfd3120ee5af
-:00ca907557b0012d64247ef441af48c595af57
-:00caa08edd34569f19e4d218541dacc63c500c
-:00cab02d1654cdcd86f4ebc4ab56a993c1fbd7
-:00cac033a4ff1886b6fb449c534c8a468db5d4
-:00cad093869b9e8504bd53bc335eed4c3e25d6
-:00cae05c7e58d6a812a21292bfc6d304f6dc2c
-:00caf000c1ce6b8befd0932dc111528701f48a
-:00cb00dc7dd6c34ba741694d9ac728c5928f2f
-:00cb10ca56a03bf467194ea8e2a628c9978eab
-:00cb2058cd33ff377e4617fa8a363dc4be13c9
-:00cb30b89da5411dd3de27c3eee4a6e226d324
-:00cb4082065d58062c3d370fcdfba13b4184df
-:00cb5098a88c8c1b07c20f2bbdb59292142484
-:00cb60ca1bb3601e24431387d9e57a2de42b93
-:00cb70603ad90b79412a033123d7edbeb2cbd9
-:00cb80505f440e10f72026e4eea429e0fe7fdd
-:00cb9076efb3bf96dc05957c761d4aac6eb0bc
-:00cba0e2fa54428ddc1b88dee9ef7597857a15
-:00cbb0f8ffe2812756b2e5ebe7cde7c1fec015
-:00cbc05306feb2e2ab9a524e66fd49313b8e36
-:00cbd03901f2ef89d98f68876642c299ea442c
-:00cbe0aca82564372a77ff9f14a548dcdc011d
-:00cbf0f91f63462dbac318b33a6833c1469928
-:00cc00fb89a7e781d2f6d568c60755be326e54
-:00cc10a3e98facfb29d2d5423ae81b3cbed1ed
-:00cc20bfa21be6ff5c0f88f94f75936fc41ace
-:00cc307af4777f0711ee124a579a37a0fb68e1
-:00cc4005bb26204d13bf51e40f69148f53e888
-:00cc505b4886425dd19f30a5c69df9af307556
-:00cc601d1634de6731ec7f2f953039e1058caf
-:00cc707c509ef86b1e5811f562bb548132082d
-:00cc8075673a7664e3f6a360862cfdb0c6854f
-:00cc900f2389b6986e103a5a2b54e236373bf8
-:00cca0257948acf6a725995196a369ab6f58a9
-:00ccb0e006991f96dd4fcb01b149c584abf033
-:00ccc0cde5c1651e8f0dbe411a72a7da589c78
-:00ccd0418b78e15f22fbbf08cae15f23a9874d
-:00cce03322605eb0353ba6d1732137fdf4e87a
-:00ccf018103d06f60e99c763fc455824c80e77
-:00cd0012b5fb3137c349820507e8082cdff54a
-:00cd109012e56466084c42067ba6c9a382203c
-:00cd20afca99ad6bc2a52aee4b5995e8fc11d6
-:00cd309ccd8c718b096a9c490b31cb3a6472ad
-:00cd40c94e95b3070be5ae1bf9fceb923db052
-:00cd502731cdfa2026295d0d21269f367f6ba6
-:00cd6061485839d57744474d0cbeb3603da591
-:00cd70e2bfceb24a49c53dacfed87e602048a0
-:00cd80da062816c2ef455effdb1c525872b8bf
-:00cd90525edd6ab8cc8de60af99957be16cb34
-:00cda0a11386f993256c905a9e2202769c2abb
-:00cdb038d03dded179e765a2438c27353d4c8f
-:00cdc0b23a5f847db5b7176821cbd97d72dc1a
-:00cdd0bfab0ed820c4a9db65eb9700dc15e74c
-:00cde0dc5fd97ce4008caff096c3f84800b4ae
-:00cdf0c6545f9b6426364e324b6f1a3e17b112
-:00ce008a7e2e5c4f60d3fa331b0d5c9f54528d
-:00ce10507dcaefb3817216c4ba7fd4e56ecd47
-:00ce2020ce3252b38027a2ab942494c3eec427
-:00ce302f174adf4bacf02588cb8ebea141c04d
-:00ce40e768d76e4c5c330ee1cd5f4f656937ab
-:00ce50181da4c5f8606adba878a90d18cae9e2
-:00ce60250e9409dd03cd291d8bab569bbba6be
-:00ce7099cbe16cc374c03c41fbe0aa1771ffd9
-:00ce800c4c5f2bd235dcb246746cd9400908b0
-:00ce9035f20d2e56dd860c10e6726130a88db8
-:00cea01587f4927fa8d9af7037c2a905172610
-:00ceb0c2baf99b2bcf1a4c15a43c688e46ecdb
-:00cec0f34bf1cf4ab5b39b9f3c1abd711aed4d
-:00ced0a2cf683babed034a1111e8a2d3cf3cd8
-:00cee0a0d954baf90e7dad087d6a89aa4f4b5d
-:00cef0dd44eaf61d6f22d1e414a70dd5e6ea0d
-:00cf008a2eae77690cd19ca6b17322474f1c1a
-:00cf105ec86c1b728f394c9d09c2f8190b22b3
-:00cf2023172b20044275ecae0c99ce00bc0682
-:00cf305556840b58920b687eaa5c224359913b
-:00cf40411c965ba8b51d31ad3fb977cf76025c
-:00cf50ea6230be37290c64fa1fc66012dce662
-:00cf6017a02a30290b1a9b8694a4a3ed9a6637
-:00cf70c6601f2b57e4e8cf445469eb7f8047b0
-:00cf80228683183c7f71504846bdd8d003b4ef
-:00cf90a27cf96c6cf3e1c81dbf8a0d45e545fa
-:00cfa017f35647b00c8190d145bb9e5ae7073d
-:00cfb086fa68008d0be9d0c2221cdae615b4a3
-:00cfc0ae8582fce04ef6424300899a77dabf01
-:00cfd01f65ca13f27169dc34de8232f5b5b5a2
-:00cfe07617aeb4ae2a7b330db889ecf5a89aae
-:00cff0cd32385b5632b2461a5c5d813d10b884
-:00d0007cfcfa01be346a199611babf71dfcedb
-:00d01097a0cc4417e6fe1ec3da82b634eb4d07
-:00d020683da1bf87ccf64f72f329b020985249
-:00d030c2c6dbea3b1d59a454e3ed300a9e0198
-:00d040af999f7ebc7867f6e65ad7ee05648b42
-:00d050ff05da71c45ea231c5129aaa6ba4fa49
-:00d0606d17b6a50ddebd57195deed6481e8d15
-:00d070ed7b8634eef7c8746e620b2e4138c518
-:00d0805847efc5212cf69421efe2600ad66239
-:00d090c4e7af8caf1ae4636086858622a8041f
-:00d0a0deb641e5be37e4a73e4ff12127996591
-:00d0b00f426a995a30d4fe16b03d04b9e0fc20
-:00d0c0bee792f65e5e03584be167c0c55f84ba
-:00d0d08a0af9739c42489b7585da3e65a56d55
-:00d0e0a829a9ebc66afb256fd3a356b845111e
-:00d0f0888d25d35e64f9e1539c80e71192cfa6
-:00d1009cb3e451e8848aed9ea38a6a0adadc5c
-:00d11037e5a4486a25654b6cf3111b48c6f98d
-:00d12035dfb5fb8f9e1e2c980b363a3124e62e
-:00d13066ae431b6e15516dd56ca354ed4c4888
-:00d140d01c17a4338a51e162a290636dbfb672
-:00d1504f031e9386a3cf34cbb9390b1c15590a
-:00d160a0604a98c1a4ff9ce03c2ef764418c8c
-:00d170aa12ab6c3e3f773783616a2924c8ed7d
-:00d1809c31fd29f3658bab2f00364779117216
-:00d190d2d57fa58b09a47594b7f431d6040284
-:00d1a0e031a757b2c5869ab77901dba2fcf0bc
-:00d1b03a257aa88c0855440f731edd5ce9640a
-:00d1c01a02915e826fc7c84cab7e4f30aa3306
-:00d1d08d12eb5b0b108ed6e9f32fc274c00edf
-:00d1e09b23080c50d9240f402f624acb4215ee
-:00d1f0fd221e7aca085f8232f62e0b8d974535
-:00d200da7abfa43eeb2fa813dd70fe977a6e14
-:00d2102caa84c513d50dcc4ea5e0c8af1177e6
-:00d220f8d5d82e636e1b33c757573450ac0708
-:00d230de09f8e6c5ed1295e4fb367f9e80f8b9
-:00d2408be14c63b1a3666350d1dfd1ce463c87
-:00d2503be647f118389a61fbc5bcd3c9d4e139
-:00d26034d0f226c801c5d912f1d18383abf459
-:00d270f5c9a5311bff6187f71766f04a229185
-:00d280d4bd09b47550772e7e32455e3e1e4f19
-:00d29052d84885d812b75d1f5a4900b8d4c517
-:00d2a05f34bb485cfdaa8e083b9b5410ea4654
-:00d2b0061162473cf29e2a482dddd97bb1bd3d
-:00d2c0d33338c7b0d3c466766835fb8caab9f4
-:00d2d062cb01124be7aea2fba81045d4cebbc2
-:00d2e026d37791eb713333d6ca22cb2e31a4b0
-:00d2f065c9a3ecc7fdaababe6633157d8b9e3a
-:00d300ffd2400da817fd1ba00bc797305a7583
-:00d310f9cf865a032c94bae21a809eff55703d
-:00d3205702c83b0fb31fe8c29a6e2162ac08d9
-:00d3308c753a093780d2794faa77efbfbd8e3b
-:00d340ffa2523eb644298610beadc8301b656a
-:00d35064ae481721d72137ef3a1e387f23f467
-:00d360e188239ee0a2f19d2ee9daafae28f5b4
-:00d370cbf4ca2a645d4496d7d1072377c8d75d
-:00d380b36696a571e20b2ffb525392a0c7c4bd
-:00d390bc8873f9a306126da883e6b73e85ea2c
-:00d3a0fb9ede3e93748f30ead7839b1a3fc5c0
-:00d3b0208e8413cbb7336692278a1a8321391a
-:00d3c09db1ea0b70f986448af8c5b6602aae2c
-:00d3d0056e4eade1d0b2bdfb2ba9822d48129a
-:00d3e04bc1ceb139e17a1b64332a3a2fe87d83
-:00d3f0a19453f1a2e1f6e8ed3aeecaeb0cce46
-:00d4003c5f1a0fc2b603dcb68b90cd81b0a95d
-:00d410087f506be1220e00e96ad570da523d34
-:00d4205e59f44e0c4ea61bb936b18532e1ad98
-:00d43066e8e4afe95f2ab8c2e3106afdaf2b26
-:00d440e66a5a9b867f9b06c35a238928327bf0
-:00d4506bed5931c4abe3815c8dbf59c818b3c7
-:00d4604b88af45bdeae1cf4a555fdb6605b4f9
-:00d470ea75ba49105bdec198bd94b8c8f8a889
-:00d48000a6af80aa1e46013861e4a07143012d
-:00d49025e613fc16cd674842f768a2f53a44f1
-:00d4a03173c6faf65e091ca412f40ca4798c4c
-:00d4b0d76306499b906d746961f10764bb4618
-:00d4c03bacf8e060857772526002d9e9cac68d
-:00d4d0a9a7e9a17a4eb9b50fd24000010b501c
-:00d4e0bdc7934478a83fde245f7d34ae2bd9a3
-:00d4f0f39c47f893e266092acfb62fb9c31f58
-:00d500e5190547d4ab0ce2b1ca2b0d66e7de1a
-:00d510268f70733fff368a69ea87efb92057ec
-:00d5202ed0bb8acc57ec8c1e956e540f789655
-:00d530b7ba24bac38af7f596a21fb289494b20
-:00d5405a23c6f6aa415fb4641fd4eb54267565
-:00d55054ae084cf32b5953713845df72334bfa
-:00d560624cf0f1315e97b149c59289ec407033
-:00d5706adf771ba8694d35114c5ac38b9066b5
-:00d580a9c6ae1b13d878dffe0652d51bd55b7b
-:00d590ac5ea52df88f801f94fac9f3dd7cfdf8
-:00d5a038566a11604f62847adb85dc51d20cdb
-:00d5b0407c619ca262e82169ea91e40e45d551
-:00d5c07ae87f1f5f789f421a1d3c82e9119421
-:00d5d0b26da97848d0f5cf50278f2c9ea8b127
-:00d5e041cb1d05f9c4cda5b4a798bfae1f1c3b
-:00d5f0ad4e28e36af96dbe8f5624db22d2bf83
-:00d60081886f4eb00ae9c5176c0c4e9bc11e74
-:00d6106b975685425f0d3d52b526ec321f82b5
-:00d6207082b9b9d1a6b445045cee2479baa328
-:00d63062cd2832d6af74dd41e6806224ff4d6d
-:00d6407c7e626a7b232149e99fb29608e6e178
-:00d650378b5746d34913f0053ff6eab761da00
-:00d660bdbc9e579ce445419cdae69b7a9c2f9f
-:00d67076635831358efcc4665850b13774daac
-:00d680a76aa9b0ec0dd3b1832414b981437fcd
-:00d6900f9c45a1a877b01664328659cc4b3dcc
-:00d6a0169e4fa838df50961d58d490a642d1c8
-:00d6b00f00964f4c632682637c527a5ef12c30
-:00d6c0b1c694e5ea21accda7baf7ad7d3881e8
-:00d6d0745ca50d799f2f3b65459adf67479127
-:00d6e031e14f9ad868a3b0cc2066b162c4ae4c
-:00d6f087141101f8d145c63717b46abe181117
-:00d700e7c42224056f4a14db8bbd790b39a123
-:00d710a734af63ba4fcd781376b88e3793e231
-:00d72002db373c47d89dd425642a52a9ed2f45
-:00d7307e98cfd7288d258f1e3ce365dc186e04
-:00d7401fe885de06a3d56e3abc9ed7445bbfb4
-:00d750be30f9b1aa4faadc2a7ae7852285c308
-:00d76031b6c3be394fca6f2b1a374165971ee7
-:00d7705409fc581bbb4368fd2aee42971d81e8
-:00d780485bf2808b6ba06c3e0de944b49864e3
-:00d7906f2f281b3b53af62fe0b782a8de652fb
-:00d7a03fe1484f9aeaf2de29202f0ef135e7c6
-:00d7b09482e47f3bd9e88e8c2be99e90293e6b
-:00d7c0e0a49ccfdd41e167dc22f1fc306ea3bd
-:00d7d09ed6372565d45807b1599bd911b2449e
-:00d7e044209e2742f50e971a1eb7e6f84653bb
-:00d7f0c890ef1f9a10496c4dfe940bced51e8a
-:00d8005e38b726ad971d7e2637c75ff3e636ce
-:00d810d067836211eae7da1d562f95442c03fc
-:00d820f50eb69174775dc3c2a802175ce9870c
-:00d830506735b7a0078c0658927cdc5c001a36
-:00d840801b9e086188ae98fbd830c699be683f
-:00d850622c439ea6f763b18eab4068f9ec1193
-:00d860aa65697311f5c20a70b9f36d043decd3
-:00d8705940e2e610e3f6b22e0527058d512085
-:00d8804f85cdd57396b65a26414c1ea018a302
-:00d8902ffde05fe17fe0090e38da88801d31e6
-:00d8a07661a2b1f9bc63afd087aa89b613ada0
-:00d8b024119236095a37ad71c9d9ecff24c2a3
-:00d8c0eaa3d9f70dede9541ef4b52db25c2d54
-:00d8d03bb258bbc7e071f89f055266fad51393
-:00d8e076420f03f565bc5749a0d00393a1ef96
-:00d8f0fbb691b0fc8918b3645126637295d970
-:00d900f951ddb362bb35c0cfd5da263a48aa7a
-:00d910e2f0d2c176e12edd9e4543679ba4ccc5
-:00d920bccbfaaf13ce89b9ffbe03f787fce1c2
-:00d930dd9f7c64998d9c401546fba11374e325
-:00d940a30b32752d7c6b47c84f682ae2f3445c
-:00d9506c474b73169fa704cfa96afdcd94ad4d
-:00d96057c8218363978cb98c1abd74f1555934
-:00d970a8f7309c70eae48e9f30cd6884176035
-:00d980ed680853946c38d774f60439b4a848d7
-:00d990e5a4bfaa45655e4f5f9656a2143ef2f4
-:00d9a0cf395c01291a9d7b717ae014c4b0012d
-:00d9b0058a9cb582bcbdf8b40ab428dbde85fb
-:00d9c0d0fe5615242bb8f3cea12f0a0cfe5437
-:00d9d0ebe75bf50451454cb8f827c36258c473
-:00d9e017cfd8ad7fa578b2b8f9626b215c0e58
-:00d9f0dd664e3c77a5e6f7927a6ca902c07191
-:00da001de118c066d277b9b85a3d774312b6ec
-:00da10c6e7c4d0a5f0b7944660048fbbf0079c
-:00da2001db0ac775bf9012734411a13e444ef3
-:00da307f14251df9622bdea585205f61a07fcf
-:00da400f81815fbfc9913924d3481ef662a8c0
-:00da50444aae01a03d4e55fe4b79d0d81d7362
-:00da60a0b5dff59acdc2b5adc4854e4e172e5a
-:00da7006da96e50855d92dc62382742c2da445
-:00da80cfd394237210ccb61e7860a146187784
-:00da901be95d88159c9a19c15aa456533c527f
-:00daa0bdadbcef5f25fb18a9de790b6f5c5dc3
-:00dab0230c161927dc3394b3693dfcfc91925b
-:00dac07acac853d51f8a7454a23a3ae279f406
-:00dad0c06799a523da787017565aaf9ea8aff1
-:00dae06cf7a849255f24ff6b47877bc1481e5d
-:00daf0d6b845d603911309ad02aa7ad459da06
-:00db0053ecd4fdebbde1ed6029ee215a7271cc
-:00db10ba226faefcc80c69ddd5aed368488e90
-:00db20ab8163fef58d47baf69e429ab76ad5c4
-:00db3040103d0899e842c01247147f5b6783dc
-:00db408f377fb7eeff002b86c8c52b4bfe606e
-:00db5097d9d37e12fc68bf65059ac9ca3c4166
-:00db609e1ea95333ed5448e4be5919b645ff6c
-:00db70271ee3cbbf6b5afffa9298e8d6060682
-:00db806a3811c52c4ba28d7e88079668974e9b
-:00db902306424e07dd2e66c4cdc335924a2cc2
-:00dba0e97fb9ed3e5ffbf4b836d207eb90f89a
-:00dbb04fe14a8663cda6458f22ed444a151f2d
-:00dbc047fcbc0a0099508ae86f7363998359a7
-:00dbd062e70a53b94a4f70535c116ecbd0d207
-:00dbe003486adbc319b7f58a589e6072705a30
-:00dbf0a718fda8eba0d6b4f8c5c274a6ec0993
-:00dc00d505a31be297ab5570f825b8bff3f53d
-:00dc10578ce522906776580ee04ec29a9f39a4
-:00dc206552b339140dc7dd1226acc0edf616ed
-:00dc30199562e4d5acff821adad731aee91360
-:00dc4007adeb4bf244c48e807b79be59b1c072
-:00dc50412c65027b16169e5b8af86921c547ff
-:00dc60a2c2e14295e2431d9e97e14d26f228b7
-:00dc70f80f17dc4a01b1f1fa49e59f6b70d12e
-:00dc801bba5e461aa1e4ff60db9620846e78ff
-:00dc90cad7cae3073c184c82ccdf956e8ba366
-:00dca0502f691b1541fdcd240a2c72841c51e3
-:00dcb02781558344b796f6a24418cc68f2027c
-:00dcc0b1c5778b3c686e6161fe79f807261489
-:00dcd02619b4f5f5cc42b0a1970c0745566bca
-:00dce07531d8233348c192ba75251b5ddb5ecd
-:00dcf06d326281dd577e6c0acd871e33cbe56d
-:00dd004be15f0f2c3c563a18878436b54cd3f3
-:00dd10784648193a81cec55c8b9b439f03e7e2
-:00dd20f49927a92e6353bf57a071b367c7e9e9
-:00dd30a84950c2214e666fee8ec9279a24fa19
-:00dd40272d51a1d77ed4dab93dcb114b70641b
-:00dd5040c93cc7a7a670f01c4b8e660b759247
-:00dd60996a9f13a6d3eff6a8ac0b9068421178
-:00dd70ab34727cba8a5d3ede94a4ee9b4d6412
-:00dd807fe57cdca89740a85d0446cf1ee6364c
-:00dd90072289a2823ed06a7f198b1dc6d23042
-:00dda0d3d62abafe7ad82492c4fff801cb077b
-:00ddb09c3ddc7744188534daeada283f62a06d
-:00ddc03fdd84089d55c6ba312041d2c561ddc2
-:00ddd0376bef256edae0f66ff0485658058952
-:00dde0f178516e0afc375b950b415f45368694
-:00ddf0355401bc014a82886e85dcd2508ccf09
-:00de009869426d384ce2caf84d52b77fb79f5b
-:00de107ffd7ba8ab259986641c54b3a98315d9
-:00de2016100e97bd81bcdac4a6b84f9daece54
-:00de30cf873ebf549f36f480e7e17f0a66f7bb
-:00de40b6adcfd01a536365f61ccb276100ba36
-:00de50e32bc2a8851b2fd21113a4b45ffda908
-:00de603e27b84ce582a56a0f896ff5cba6e86e
-:00de70593ca2a67d1e38edac22e80613662d45
-:00de8020bc34da5a17bf175e1729d1382100f0
-:00de908e816b0267043d7cbd3bdaa46d0c4be5
-:00dea01452763759d72af91c556ee4ce22830f
-:00deb03d160856f08d5a9502054dd6480e8624
-:00dec0bcc5b8576a00fecd5dcdc95a88a82fdd
-:00ded0771d8483cadcd23368eba59425bda45e
-:00dee0bf0dc3fb3c825ef241d043292bb9dfef
-:00def0353d85743698cb5375b8c7c8e2baa2bb
-:00df00a9a512ea433a02249eb3a467c7d40d1d
-:00df107728ea658419f27dc396486fe4f58b66
-:00df200bb45b8a6a888e9e97e2b106d6704146
-:00df302665205445f7625c6d475e244f44e7a1
-:00df406c43f8a327488488577d499145f22d57
-:00df5023cfd2fbf1223f7ee8d04c3f0c507896
-:00df604ee75a2b4f2028e18cd399dd1046fafa
-:00df7083d5165b150a4a89c7ca8aaeeeb136b2
-:00df80e304d7dc3f6da020708524a00b86ce29
-:00df90562da6e9aa28e1742bf22ae3315b907d
-:00dfa00436ee38dce368dcb42124401a3f708a
-:00dfb02c32328aa61437177e60d9232bfa8215
-:00dfc0c9f92d36b08273baa874e4aa73aabbac
-:00dfd07def32cb0e128528a1a93d73e30f1a54
-:00dfe0de650f627335aa37640368abe669d5cd
-:00dff0bf179fe5c6fe7a90cb7ae4f08c4bffcd
-:00e000ce4cda32a92430c7245319aedb60dd4c
-:00e01044d2843d0e1ba85101ea07cf48d94681
-:00e02014b577d2642158f98d007d06513a0667
-:00e030e65360b4b9fff89405afb3a844563b24
-:00e0402bd05e2a9fe1da48c5937e9eee833d78
-:00e050f70a34ca8ee25dc79fead6a25f6a4818
-:00e06025254d0039df5e7ed53464bbf496f22b
-:00e070a7512af9126dacce4143a45246f65831
-:00e080927f8d62116da0e2046a97e8da5af7e5
-:00e09091043cc308a2a6437d1c7753cf5fda82
-:00e0a0cdf1d69fdc7986b0cbc14cc265c649a7
-:00e0b0e56f2fe3bdee2efa6a99a632ddd59de7
-:00e0c0e73ead61ecc014d5b451b63fc3b4e687
-:00e0d0ebefae353a7176a5b13c005f85e06d63
-:00e0e05c331d60b6a326c17cd3c34879c515b0
-:00e0f04a597733a510c09675d00f2dbde2c7ea
-:00e100e3759c17bc2878a54b641285e37d9399
-:00e110a8d3c4f103ae0df318b35840d83eaaea
-:00e120d67d237837967f6609c0044d384f2fb6
-:00e130642ca14e7b6fcd97bdaa6d513841061b
-:00e140ac15a4f1b69c378f048e6ee3dc257020
-:00e150dbd5141302b38e1b2d96709b1834d0ae
-:00e160927b6115e5ade3042924f0b86fdd55a7
-:00e170f5667db54b9faced10e014a5e81de380
-:00e180ba2a41a2c5452a6e0c7eaf15f849f807
-:00e190036872e8833915d4da1892017a4b943f
-:00e1a0596b7d6a891bc4af61ce7a60988c2484
-:00e1b01019a787217b52b488c5184c2c2734be
-:00e1c0dccc41fbee3e45303168b02c09ba18bd
-:00e1d0cdc932a5e68628143e17859e202e7b93
-:00e1e04918f2ede62feb4537223766a01d6837
-:00e1f013e848130c5bc149cb846cb5a46476ea
-:00e2000733e8b28470b246bbaf2d7eef9b2450
-:00e210fcf1bb565dff4e1ae96aabf204e8d8d3
-:00e2202b3cda015c7235581e6d446aa003c22c
-:00e230227154bbb944b105e85d1008880d8216
-:00e240c2a7cbc5d0b5db4f13849370c226b31b
-:00e250585455d7c5a2da6e41759b20ea2296c6
-:00e260c58fa286dfe82050100e2b550fd1969b
-:00e270e3f366fab3a54cb3702d349554a21e6b
-:00e28043ce522cd35de06be927d026bcfba455
-:00e2907a12a74092d577e0919a9113e2bdd55a
-:00e2a071102a80a64e89aef14b4254edf567c9
-:00e2b03ba2f341e908771b293ff4c6ab4e2f3e
-:00e2c0babb1f71844cd921f4ce3abc7398a889
-:00e2d0e78c5d9b6ffa866634abf866d980ccc1
-:00e2e0d7fbbf0e93d215a0e0ace6b1c80729f5
-:00e2f05ffca14a851111452c56add5dcc3ce21
-:00e300d208c8c672a48b170cd1a32565679419
-:00e3100f192f1d156bbc738120fc2765317871
-:00e3207a4a00098c1990a79c8ab96c1e361378
-:00e330d7e5f00267ac6023f9fdcec26da5862a
-:00e340084fcdd9a934647e4f6bb25af23d2a97
-:00e350ddfb7d33a5a2a1c852d04df0cfedfb46
-:00e3608c265129cef4383d7f7d9605304fec29
-:00e37075ade26888d981c7848b9450d87c40f6
-:00e380a4ed0fde8d2a8a3cb66ff40eb473d938
-:00e390ca563c1e5a0595a0f986a6de2a54d32b
-:00e3a040fb44910e4a47683c41dd50a16edeff
-:00e3b0e4b2a8a8be6d797bb33ff558f7c1509d
-:00e3c02fbefb9ce550c13b0613cfd533452bac
-:00e3d07dcdacae362e4110c2ed0facff72ca11
-:00e3e0ebea7e619cf4ad1a6ef2b6d790682ce4
-:00e3f03b346ce31a81f5336c09672af4c491d2
-:00e400d22841acb634e88cf663356388816c94
-:00e4101e4ef4bbd3d3cc74fa7e426a4768baa2
-:00e420f0fb69243a76af873f7363834d8dbf21
-:00e4307c844000e0c41259324b4178ea702994
-:00e440f44450c1c5b77984200d3ba4e49c1f03
-:00e450b4d6bd6f489383dc8c60886abd4d7e95
-:00e460ff7eb47b6d7716e64927a85366eb6ad4
-:00e470cb369b56c3e499ef41374112ba68e1b8
-:00e480bb21440ea581dffd7587c75d9a5e1b8a
-:00e4902f9d50935a2ac92a94ddd68fe0be846d
-:00e4a05495c28ebcb0745ec1417f8c267e69a4
-:00e4b0fefe23e903502d596ba738e6b18c65db
-:00e4c03ca8d9bf32d7f2c2dff9405aef2e2148
-:00e4d0b6b2251a880a53a037a3cac770ab1368
-:00e4e0f291df97255f3e087e0789dc8f782bbe
-:00e4f036e0e36b1e83c7a486a424a2dd447770
-:00e500cb612f982b31b47c15949f8e1f42df74
-:00e5106caa0bc0b777feececec8d77ae4df994
-:00e520e8f413704a860776b4ec24a1c2408666
-:00e5301e05b6b7035479b42c0f4524eeb92c47
-:00e540f323b73a8d109f52391b7651311e9c90
-:00e550766047bf76c348bcb8f88249646441b3
-:00e5609f14f371cd512ac4b1c1631c11df9d85
-:00e57002b45a5c210193bcfc35ec307842f4c1
-:00e580fd8fcbd31da7e2776f922f0c657a646f
-:00e590d03cca269ba015aaf2f71bacea091f66
-:00e5a01e4042682a1a9b05a5f170f4df5ba247
-:00e5b038fd1a221e7daa230a5bdb0eccdb4149
-:00e5c0833940fc81c3f567d4d5763bd3b04bd8
-:00e5d078691c8334ad2dcf825b2efb0472168f
-:00e5e00c63ad878e4c44b7807d82815765027e
-:00e5f0ba544a13c62528ec7ec214307592dc65
-:00e600e54cbeb53bc817456aea0bc4ec197828
-:00e610981d8f526ab0b5cc7a065e038029bb0f
-:00e6205c333209c765274e9eb9c088cc2211a3
-:00e6301d014120c28420c0bd597030337f4c15
-:00e640cc2340b3b9743bf02a10369da13f7539
-:00e65090854d9ff6a2520b58a7c9b0d63cdd44
-:00e660dd630508831c7f1a9e0608ffcd341a16
-:00e67012228cb273ee4e107e2d89de04517866
-:00e680f5395797b7f85c67656ad2b6cb9f8abc
-:00e6906298cdf6aca418553980af2050add8b3
-:00e6a03c076f5baf936b8543680358906bd1d2
-:00e6b0c44529768086100272db66ed02a746ee
-:00e6c0b1f0f3e5cfe48378cd1d6f8e3d1de704
-:00e6d0e2043a3f82e6545d129455b5c792e2d1
-:00e6e0fccb5cd9bbbf69596086b890de69c8cd
-:00e6f0c33ff8d4bd10dbd380eee096ebb6c8b1
-:00e7003278a2275c715b75747820ebcbf92ac6
-:00e71015bd9508b07667723b0ef5e668296ee0
-:00e72057070bab5d925703a314b2760f315cff
-:00e7305be6153d1d2c76717a42905c9f9ce437
-:00e7404cd60ea18c94fa6458a0d523f1b6760b
-:00e750f9b54382f3e63288425e6b910ed39359
-:00e7603b464635c6e5e12a548e796647fec6af
-:00e77061c75b632374307e4c65d015b190c265
-:00e780baacfda17e85b47bbcff4c132b6eeacd
-:00e79000bf5a6c0f0bc76ed0f3cab4aee72e1b
-:00e7a0883c58c5243f2d1bc6d9812aabd652c6
-:00e7b0e61e83cdd5bbf48a24873002f15ce2db
-:00e7c0480ecd3f62e00a78a759307432a43106
-:00e7d0fe230540b55bb39c0344331a4efc80ea
-:00e7e0022fe95a3486e93ee8eb37c3e84ebc80
-:00e7f04d16e9a27457b2942dfb15b4b8c5e219
-:00e800a1d162dee4ee4faedd8719768a858045
-:00e810b2ab96939be932687446550b3d59dcf0
-:00e82009382042a7e820eca162ac5f2dc4be3f
-:00e83057af17286addf74fa0c61a6e2a118c0d
-:00e840b8836b8493e4e6bcb1102fc3412d2a04
-:00e8501bce10e1c3ba451b9ec3591828177da9
-:00e8606fbdd39b23599f9fca81a60a7ea8f7f0
-:00e870377665e866a12e6daed8dd6661d1e00c
-:00e880f6a66d2f624c36a2b1f201d0d75270f6
-:00e8909fb30569bb8202eaf7d4694fa574fdf1
-:00e8a05c44616dc2f8e2b6001a2dde027cef52
-:00e8b0ab1f055ed15a4e302651fa2ae4b938b9
-:00e8c07c39505ef9ec9406148dab341c226dbd
-:00e8d0ab828468a04723e360e74550846ddd6e
-:00e8e0f8fde6cbe3b894d62574f889837eb040
-:00e8f0b0467868f2ee9dc81ceb1ba284893794
-:00e9001b9ec79f178b173d0cb2345d258f67bb
-:00e91031269334aedc919c0d0ad9e59587e0f9
-:00e92012768428b5beb6a1131dae832e691092
-:00e930ce958773ae041d0eb37b505fcc04a68a
-:00e9409cb7f1df10075a54fdded7000250cc0d
-:00e95020f0d41555f39faa427fbeb0828d70ed
-:00e9607228e83644f86b2f9be54687b1d99e26
-:00e970835035097797af7879e44d3527c46349
-:00e980b883b36c453a9dbc5cea2bd634d33cc9
-:00e990b8d8f45773bc5a54799647c52916f11d
-:00e9a03eb902d7250794ed5fabe795ddab95f9
-:00e9b072756e36ec1cd070ae47df6b8ff6e06a
-:00e9c0035ce37518624218e782f293b206e9fa
-:00e9d00090fe9a2139fcdf8189efc2b1f0cdbb
-:00e9e088338ccc43a21c301398b493f103ab38
-:00e9f07e7bdf78ee35e4a02b1e372bcf07458f
-:00ea001aa37f1464236ccfee9858d1cf093f1a
-:00ea105d6adddb9124b6d6a9b06ffa14809cc8
-:00ea20f30190c3fd3f93048c47af9aea3f738d
-:00ea30b068bffd88bfb159e95b2909075d0aa4
-:00ea40d51fca36edd01bf74b975d0dcf1ea662
-:00ea5085077c4ad6cc131511c62f6533483ff7
-:00ea60fde49b89e49d0fd8c32625a83c13d169
-:00ea702dd5bca12e29aa917d0c1b78f195ffaf
-:00ea80c55030fb2b17c81a292aa8b9c7b49578
-:00ea90d9151dc99755fa84e3b2282b5c9f4b38
-:00eaa0c5c6b255b11f6f03615948184ac753c8
-:00eab0403e7ef05546d8ecd14f925be3435189
-:00eac0989739000b2e89601404d35e552fa9a3
-:00ead01ba87a85d806785bc690446013bc5267
-:00eae0e24e08149af7ddd3bba1218525b8edf2
-:00eaf070201d0af0265a0fc9a6dca2d583471d
-:00eb0009f7cd904ab854191a58a4b1c28ce207
-:00eb10694660a6f635120220c10779cf3e5360
-:00eb2098944de77ec901f30d35343f2f50e145
-:00eb302c8edaa16d05f6880521257d1d1ba57a
-:00eb40a5db51e755c420dfd8ce8226ebef13e0
-:00eb5048519382f30fca575543c02e3d1f1c40
-:00eb6007ac8413ff27e36eb3cf631152009804
-:00eb70ca13723f0ec4f28d1b99dd7322d19017
-:00eb80aec62bf1e713c5641289034fc12f7780
-:00eb90ea5ea4ca6e9d9b95757793a4510d0d34
-:00eba02d7e9d6dd878fce8e6707137a7cb821a
-:00ebb0b39ec2b7f3d62c2c87fd3d154a871fb7
-:00ebc059bad004772c0813cec47bd94d6a68a7
-:00ebd0e7db1714f5f43f902c8258c865b02c66
-:00ebe0e42b81cc46f5ac09fcc97e282baf5ec7
-:00ebf053056ee77fc2dddc822756d96c8efb48
-:00ec00e130eb73ed638c3756001efe28bc1ca0
-:00ec10cfee8019df8048988ea021c052e6214c
-:00ec209aeaba8aca5f68b6acfd97153cd35ebc
-:00ec30d903146ddcf1bed6c8e35df27ddfe8d8
-:00ec4043fc7a004f3c91ccd06cd9ad7052f0f0
-:00ec50b9982e4a1862023a5eaf459464fc446a
-:00ec603a2ee7a1f0516ed3404311aba106d4c5
-:00ec70c2a8ae6cf75471fda067c055f834932a
-:00ec804987f31296b33fa3064eaba84f1f487a
-:00ec9032beea2c237462913e4c7c0592828353
-:00eca019cc6889acbd2b2d1bf7310efe211bf4
-:00ecb03fc88c7893e41026b301c1c1f1a1e662
-:00ecc00a5119b39e991f60c18c8a43a8cfdc6f
-:00ecd0b334ca08ae9418be2858c08c09a4f5e1
-:00ece024b4023cfdcd9775f2d7e325ac5f72ee
-:00ecf0673456f9e877951f5b7a13e7adfb89c3
-:00ed00ef45ba011cc06f9f1900dbe7ea069e73
-:00ed1097c9710eb5f9052f5fe8777c5488a62a
-:00ed20c8eba59a6a0ba065386ed1311ed3bfcd
-:00ed30d83fc6f1ab530d212cc6614463b931cb
-:00ed401d98e1bdb1fdb5e6fd07958d75988d53
-:00ed5035a144f910d3e12e3cbfe701dbfdcb19
-:00ed60b03977407991045583873c1c9e0bab89
-:00ed70cc88856371f191b92f04e5988e3e1e5a
-:00ed80d202a0bcde6fb939ec5f96cf17e1f63b
-:00ed908c91e407cc83d01532ad0a8630640367
-:00eda008b606b621831f7b11024ddc2771abca
-:00edb05d3462b592d753ba1d1c4a2efa1caf8b
-:00edc0cb13e77fb2097faf5a43b03550dbf635
-:00edd0606ddc9b04f99c12d5fa1e67fa6d8b18
-:00ede0b24d6cb79e914205be297896c54f70b9
-:00edf057fe5ffd54f9946e8c68ec38f9082606
-:00ee0086b8875e5b9fdfd4c201dc8542ad9e58
-:00ee106079bf49192f85d84f1010371cd2484d
-:00ee2009a7f4310a1f7d08ef6bec3128b9fa2b
-:00ee30a31049e7e95291d956e82ddf16196609
-:00ee4065641d508628f2d64a789d243be4b06d
-:00ee50e1ca3176eaac7a01fbe08386e8a16e69
-:00ee60b25d0d2950ab56cf6eaf957374e402aa
-:00ee7013153c7b3a73d1c182a2c874b99f3360
-:00ee802e3a6c986c0aedcd0356530ae108bad5
-:00ee9047423268d7221b5604651e3af6a3e327
-:00eea012de074a27cdd48f6df2c6a04ceac8e4
-:00eeb0e1f044a94da34fbc916db144e68ec6e4
-:00eec0e68f74dc93d8fd13a6631ee9f8cb8317
-:00eed0203c35fd3011c1eb830f64245e7f72af
-:00eee04d75fcfa6656c591c93c91463bb8f7de
-:00eef04fb06c35d3437226422951856745251a
-:00ef00358be2857645e246495e2cf0aad26c98
-:00ef108055ba6a198c986949cac3cfa5c98e0d
-:00ef202a9cebfd361e5ae9bc9086c8dc067e17
-:00ef30c338a948b5877e65de53c09bf7a54dec
-:00ef40e67194344c0985f56c7b28ce70fb521d
-:00ef50b6bf696ae8ba1ebf9ca3b9c55a6769a5
-:00ef603c6c0862ab552634414e39513ab99683
-:00ef7000ff7795aa26bf7f68849d8f8cd46fa5
-:00ef808149cdc706f55448c89db6520d8a7a69
-:00ef9072405abb4616a5ddd850a665b5954cc7
-:00efa0daf53bb2b19ef0a14a8deb6d21dd4f8a
-:00efb03b0dfaa489b270ef49d6fbc76877f734
-:00efc08a56cada4950bb9d3791e19a614781a6
-:00efd0eea559f5d98b738ce51ef75189f050fb
-:00efe093932b7fc6a350c5881ffe2fb93c091d
-:00eff0371fd1edf5f853633b3881a26b464764
-:00f000352e10587018e354070f6b676d618bfc
-:00f010c20d20cad9a2d9199b149f5d0f5c7a6e
-:00f0208ae4e3d8f1d0693efbfa94dfb2fd67b2
-:00f030a347a1e5d2203ad0f4a4643bd9e566db
-:00f0408ece74ba2dc40ce03aa50cceb35a7463
-:00f05094b1d4dfccb5b659c8d3221e2998b901
-:00f060816c0900a8a001a4f7a2b9a45084e1e7
-:00f0701b79a6d347869a4a2c81aca6b344f667
-:00f08042ab4a542a8e777bd76d333db2a84406
-:00f090b8f35bbe88d81801d01e177bd694ee00
-:00f0a02729decb0468d212b6c90df8fd4ad03c
-:00f0b0c7143b420c8c3c494539266332f9722c
-:00f0c06faa7c39a73523027e3f6b316bf7010c
-:00f0d076626fd96a560535d2213c3f3f3d9207
-:00f0e0240a1951761479a42905d665bd8a7d46
-:00f0f00dc64cb950581c9eeca7421e30ecbf7c
-:00f10076f556dd20599ec790d5efa95f2b9b11
-:00f1108ecb7ee466ed1c5f9fbcbc4b96e56863
-:00f1208344e0bc3b309878740bdcd433ce96db
-:00f13092e755192b3a3d65cf133519d1437002
-:00f140666e50c4dadf3964532efcf7564205f8
-:00f150fb3d9272c52ee9d58bd5292dedf76bf4
-:00f1602e32d9c98e81def55528de18f91f22dd
-:00f1701fb35fe808c90620de690d7b2297f911
-:00f180856808d6acd103810cc3d83145756cbc
-:00f1903d4ed662cd324f9cd026b9fc08dbec45
-:00f1a006592e5672de3999f91f2b1f7fae84d7
-:00f1b035904e1d781039df458b3236876c65fc
-:00f1c056b1c88b847c2a829dffe1ae5fe0b79a
-:00f1d015d92df18255078876666fc0b78e7a48
-:00f1e093d836d3542caa05de69286bab8651d6
-:00f1f07d3663dbb70fa71bc140d367bc4813a2
-:00f20008a73fd8be944ef977f8aec307a6b65e
-:00f21080b9fa414451c4f93eaec0e050412bac
-:00f2208ebd869b0cf66cd245d834529eb764d4
-:00f230cf03acf80ae3ac0b4c3a39c198fda380
-:00f240fce62bc10e3c1fc9d1d78abd506914f5
-:00f2502e88b3f0bd078565016214b04f88fa0d
-:00f260fb44ad16b98da6b02ff5450225342593
-:00f2704b3926e33e63b71bc050919559b3fa0e
-:00f2806efd7ef00ad01c63a894cb12f75a6e2f
-:00f290bf53451b83dd4509321205aa873a352d
-:00f2a04371b9bde10eb4a33b182c618f25070e
-:00f2b0708851b2aae714549d0743b4a92f76cc
-:00f2c0fd0908676cb1bee21fbf41a4e9f1c4c1
-:00f2d0195934eaf9b7174678314ac80fd4ba80
-:00f2e0af3938654131059ac76a187e18b7c475
-:00f2f0ed1205401f3fdaad6ad0db133f175b4f
-:00f3000776726c66d5f3050996f6c0415fef2d
-:00f310358d3ce62db1dba809da79b6d59e5728
-:00f3206ff37c1f791b306f709c6d454745dda5
-:00f33020857137f82cf6f9364750a6620648d8
-:00f340e1cff2032c207709c959ec9a8045b664
-:00f350e065a9a42b384cf8888cd3bc10552c9d
-:00f360ea4d5678bdbda7b6a170dcbbe2270d84
-:00f3701cc47109793faab442d4778e9a3d800f
-:00f380d1abd44e74b548fd698e482115127cfb
-:00f39004843786d089f68eb439589828826576
-:00f3a0675255c8d7d6b1bf8276752705c6952b
-:00f3b043351775ebbbd48cbf28228f901bee76
-:00f3c0e7fc4bd6458ce41960606843c7f2e7bb
-:00f3d0ef4da60f2ddae116c49d227db0b9b9a2
-:00f3e098ea09519f7685ed752bba6205e6ae33
-:00f3f03e422f7b6c59b9caef171f4e380b32e7
-:00f400732cc38fd34413095902dc59875746d1
-:00f4104cb43cf0fd130355133018cdaeebf6f1
-:00f420a55e5f75b4e48bbf2c6cc34e12b14038
-:00f430082b6957eac64e985be1e0aa45b99375
-:00f44006bbc48977dff2424e3894aa37485db2
-:00f4507b0f59739e61232824568796b75bc007
-:00f460dbcf1e322a95222388cf0f9683d1e241
-:00f4704832857ade6c2ff48f95bde7b9983663
-:00f480be8c7b2ee60211fa61c3f3a0acf1f109
-:00f49000d0cc181482fd8d8db830f2954bda2e
-:00f4a0a015a7d28c2ad879dbd94521f29b72ab
-:00f4b0e6a2260b7c922a6235d8181967178dec
-:00f4c0da485e7218a0936e2a0111cf0bec8743
-:00f4d0fcebf8678a8f5dfa75efa140962c891a
-:00f4e0c3b917d4589e236305cbf411566d516a
-:00f4f0eedb2fee97871d32bf8738ade465e62a
-:00f500168bb733aec7155aba1bf3b156808a0a
-:00f5101bd973265256538ce1b58c2ef7592ad6
-:00f5203e69554545aa1722d2f1d84c6bf160a6
-:00f530a3f1d6723e3f80da1bd8530dfc7cdd20
-:00f540a13185f6edbd1f872a8c4abb8936736e
-:00f550d0c843ecb446ec381745a2f6cc7caf0c
-:00f560ede80d41776d827c17cf59beca3ea07d
-:00f570dc9b2eaceca0da0a411f5e439f0635a4
-:00f580dca9247999875311d9f1582627185d61
-:00f590ea85a652db230859cacb52269d940841
-:00f5a02c9b6d1fdda6107861250f5612ca0bae
-:00f5b08e78ae4cdb7fbdf263eae951b25335ac
-:00f5c0768991db0c0760a90a134f3295c3eea3
-:00f5d01e5d1c0e5c403838c733eb41365295b3
-:00f5e05d139d491e0a5e58b8f8b06d7ef24e82
-:00f5f021964fe4607a60fa5164c56727cae848
-:00f6009ebd694b182f29f338381cde18617f95
-:00f610dd1e0ecb17bb3f8179290bb0ee4a0892
-:00f620894721850e52870ae0b7d77ed110d0bf
-:00f630be70a68235d619b186110b22e04cb64e
-:00f6403990784c8ea664615bd30fb41fce6972
-:00f6501efbf08d06ec4fc70d237c5e8c8e588f
-:00f66017159c8b646e863ef521e5f76a3d82d5
-:00f67074b7b5812ba7f6d1c8db43f5f456e75a
-:00f680d2726df27c0bc801d041d42ffcbfb857
-:00f6904404e44627a244d64610749c09772c7c
-:00f6a081b2997148a55bd63ee3456027b0252f
-:00f6b027c4710c0c52fd4661029dfb3d93d2bc
-:00f6c061cdee467948f8f10a5f127a77d9dec1
-:00f6d00eb075dade46a08cd09a0fd0dbbd9ea7
-:00f6e0b8e74c887cab42d46a7c62f6b40bca12
-:00f6f07605ab41899971a4afec9bf69ddd05a3
-:00f7004691c21c106efc14425ae37c01b63dca
-:00f710dc0d06822a49e1181031c61f73f8afc1
-:00f720958d1c737b553e69af8fa0f29610b18c
-:00f730c53079505a45dcbac708b8798ddd9845
-:00f7406ca46e41e55bb3c1731e2df1d7d8ee11
-:00f7509ed9975296b45601365af8cff0c5ae06
-:00f7603575e578fd4305da6bb7fc02b3f24b49
-:00f770d65510103950f9e74c38ff70833d096a
-:00f7801bfcede86c221c7ccf515d3c5e22264f
-:00f79065cef809591be70ee43d11bb409fcb37
-:00f7a07eb7f15f0bd6414e35be0521c2749e92
-:00f7b076c6cb7cdf756fbc874ddd49462f816e
-:00f7c047f35bc69fc0b16980ca51907c0eaa2f
-:00f7d03f492fe163632ce1a35b8fa7d2e31e72
-:00f7e0f8882c0213cf7fc552c8d0fbd14d6ade
-:00f7f034e33b3e46ca5fc84bd2d018a09a7f9a
-:00f8005b76497f886cf7f57f268b5bac3304e3
-:00f8104553f9f2d008174f873bdd61e9e28185
-:00f8208b3726c6f125883ec381b3594e20e35c
-:00f83031d72117b0957350a3e4495cb0c5f2cf
-:00f8407cc850bd51899c8dfc058a3e7d3eee75
-:00f8508175cbc1f26bee920bc0842b6ab7289d
-:00f860b9340355527633105e488608a980a9fe
-:00f87061b08ae9b95d9bc83b71523eea574f52
-:00f88039a031d54a8cbf94d4014e0c2e710505
-:00f8902e77e79fc07102bd9ea1b94341d3a800
-:00f8a0cabc2a9aabea0b7de8d41f58e6d8e41a
-:00f8b090cca9f423b7cb56730ac3d700132c65
-:00f8c068842193c6c88fa1235b6f734cf1e005
-:00f8d0e57622f44ba547758366daf575368f34
-:00f8e0c9c8c61c5f226bcbd603c9d7ec099d86
-:00f8f0ee725047aec20c6eb02a17b45e27d039
-:00f900081b79b4a2b86f33f8269b48062e26a2
-:00f910a148d40a2c08e692ff71da4c4e22109c
-:00f9205e9a636149bfedd056ee81e7ba3cd488
-:00f930febfd05ccf1454c2639b003657edc319
-:00f940b22728a7bc14b8d681c118a07d5c483f
-:00f950c1a832e42abdaa673285b2bd494f8298
-:00f960338af7be9c1441ae8150bfa00b6975b4
-:00f970366e8d7e19a87744ad30f569b9ec5e71
-:00f98072d0e23ee5b81fd6171c148960d723d2
-:00f990562266fdf81598f0f7e66ce7e7a375ea
-:00f9a085a9aeb5c83b28381eb51c20b3156b06
-:00f9b0ff18db4c3fb1da7ebf31cbdcd98572ee
-:00f9c0447ef5bc28c312ebd5be068d7f86d3f3
-:00f9d0b4816d8a37d4f817788683e4b1a9591e
-:00f9e0cd8336f0a311162d0d0d69ccb17b1e71
-:00f9f0b85f7a110231561e13c55fb758611c52
-:00fa005feeaf44f7a6bd560fb68af56592f64b
-:00fa101e4126b3e88fab8087ac821873253e53
-:00fa20be5790a109655e61a2d5c4085d5ba88d
-:00fa30c35178eeb810dd37108edbeb06c5117b
-:00fa4020489a69f87e087968d6aafce67cad1f
-:00fa50b05e1293f67ba4d86d907c4f880e17ef
-:00fa601719b048e2c5a7b5eb5832cdb70164bb
-:00fa70aaceeb7dc576132897f7425ad7a78442
-:00fa804112d2e6c020a4f129bd49ea0198caf5
-:00fa90c5ebbc05abcad682e5f7fd3309d593ab
-:00faa0f96828a4c6150ee3233543e991dc6c94
-:00fab0a1ebb3bf391c133d38235470b3d5389c
-:00fac0bbbc66ce788edeb30f97aec7e3768dd7
-:00fad02661297972670b09bc25c8bdbdd517d9
-:00fae069017500d023de8230ac2477b594b2bd
-:00faf03eab2a1581802fee843ee154fac95d7e
-:00fb00c4470cdc5244f47e122372e294549c1f
-:00fb1046d52aec242f537f6b954bb8bef96440
-:00fb20c95c6de323ead1b59b0112b23b5f9cc0
-:00fb30b2430d4daa89544d35fe2dbfe1f68775
-:00fb40aea261e609036afd0d9acf95f8048a85
-:00fb5096d520436e7b2949bd1b397cdbe846a0
-:00fb605e7c0c0f9f15a724519f9fe1bdd6ad70
-:00fb7074b2ab77c39b85d53b446a0647bcc29d
-:00fb801302706c05e6c5f633accf513bb38a3b
-:00fb90819126ce0e83298bf5e9216fe760f53c
-:00fba0608caa64d2c29ee455e0efdc0b915f9f
-:00fbb01ef16d137e0a9d3f1652a8c8c0be0731
-:00fbc026302ae08b25df068ae8664e309c0734
-:00fbd0870b68711b2eee64406af3a9d67cf734
-:00fbe04b4a5d4dbc8ab35831b7edfd51686714
-:00fbf0fb080742976235d3e36a3154f9a80d2a
-:00fc0024b32b656feb1d52481a59c8ec5a05b3
-:00fc10772f298acb03508833c6fcccb223c221
-:00fc20b1d3ce6c0bd92009c781acd36ccced8d
-:00fc30fa067701e176ea1ac4843a37be86ed66
-:00fc405567b65e69f2b68976572bf9b3c5bc66
-:00fc508ff80f005d5f25469c50dc89f1e44055
-:00fc60f84fef487777618dce08d65ab376e006
-:00fc70984268b6f0f38604c0982879360625a6
-:00fc80183d36816412cf63115ee7f746051d3f
-:00fc9099c1c9a94ac469548812f2eb4c1d67e6
-:00fca04b9f27afcb38331ec458b5b747c2c5be
-:00fcb02931587f851b1adab8cba09c370cb5b1
-:00fcc0fa214c45b6cd253883918fa36d54e7dd
-:00fcd097595dbba18bf51c0bfedf38c9461491
-:00fce0d648ab7b20ba1da995a7fa08fad42d94
-:00fcf0a9a53ae8460d0d10de9f89046df14a01
-:00fd005d01b846721b4618b294caae3d18e30e
-:00fd10b5d13721a83ff7550352936b36b3f2d6
-:00fd20f7f9645b34ff650f92e27fefaa7a48b4
-:00fd308ae0e28aa423fde0f36031395d5099d5
-:00fd409b997e3990830fc6b17624ef3b1fe01e
-:00fd50655688d43630f1bb053cd5ec47608bab
-:00fd6057a4ab4925f7911df65b2fe37c2faac1
-:00fd7062b989dfb9969f5ad016267ba474ebd6
-:00fd80f49f4cba5e60fef9f3c8cdc83b838855
-:00fd90cf56bd69148c987f96cd86a9e82042b6
-:00fda0d908d717ce504644f916cf16e7c06362
-:00fdb0c0bd166b29912d85461159c262fecb71
-:00fdc0d2f01f571786856833eb65f470dcacbf
-:00fdd0f4f644a04ffaa22ba9cb28e207172b31
-:00fde0c2563e23bc20db65f6a14304f3f7e27c
-:00fdf0320fa68c6384f30972f7b9d4c1619988
-:00fe00fcf1cd8764fc247754c988f121f367a0
-:00fe10e3665b66528b1fa39bd3b314d9cb90a3
-:00fe20546ee6d640c881a6ac9807d0ebb06f09
-:00fe303fb68e68b54c9e60bfdfa84c7be7b2e4
-:00fe40191d123699216b4ae37521c8bbef90fe
-:00fe50995d9119b6aff1a9bc12422286717f4a
-:00fe6036334f507c561dd95d439148755653c6
-:00fe70a7e90d64959181ee48fda510f52390c5
-:00fe80bf5622021bbb668b2a759bf75ed47dc2
-:00fe90ec65761b30221d72266d062af1b06a90
-:00fea03a9c466b9e1e7aa11943bdbd78342c86
-:00feb0055e3adf2684240d940bc16de16e5cc6
-:00fec0d6e271387bba63611d7512b21b725d88
-:00fed0e274bee517df260aae0a6bff3c9a537b
-:00fee009b20a7170f7002814f574babdb1fb52
-:00fef09d8d14ad385691ceefd178effd54cce6
-:00ff00aeffc867c9d6044e4947eb0eabc2f843
-:00ff10348b3dd81ff8c486a6779b1e565a3e37
-:00ff207a8adee86e34a34b15fe0574d71c7907
-:00ff30ec3b940b07567c1ea3a2260f283fe26c
-:00ff4090c971eb0e3f96530592d8ec7b263271
-:00ff504e4721eabc745c7e97775f32c0e52455
-:00ff60e6fadbe90c02d6db0c4f058dae0bf2fa
-:00ff70939c5ba2043fb2124002d4a2b7c759b5
-:00ff80baff5f7402a059f65c5e67f99623d9e7
-:00ff9053c8416aa05fd93162aee2764ecce51a
-:00ffa018992271ba804491e8e498d0280e4e00
-:00ffb0599104166cc354a4c581b36a4888f5d6
-:00ffc0fb74e9ee1a2ce1057a97600e412979aa
-:00ffd00abcaa5475c62480069412c95b93b173
-:00ffe0da8b8c6948c7b7918dfdaf3538516101
-:00fff009644fae340c047055c18eedc5c206e1
-:0100002cc02612c9ddf0ae50f3d73bf1865d7a
-:0100105769da28b48e987dd317583f13677d16
-:010020eb51c5bef09122b34a1145b8503c8979
-:010030e364da754547a638161222d857c31ba1
-:0100406231700c4ab587c8206fd493beac57ff
-:010050da44888a91f21793091ac235a68273c6
-:01006096416d76d86b273289410ece02fa81b3
-:010070ce425e7bf25ad322d7b49b134cf5029b
-:01008090727afa09eb34b730db1d9199279582
-:010090e69c8047de71b509a34fb6c3c9297494
-:0100a003eb61a44de3481d3773a6575f1910dc
-:0100b0200b2966d4e8ec079dbb51e6818c5857
-:0100c01a0b2120fd55c5c61aef351cf66e82b2
-:0100d061bea92f9f0ee29cfb80d83d6711ecbf
-:0100e0074122ef54bfcf2f0daa0d22077e42ae
-:0100f0a5668c513cb6766cd66a5ddd1b74f2b3
-:01010018b7d4837fe5ed78f1cb33f0908c8900
-:010110537aa73f29c6fc8fc0d9a2929811d515
-:010120e7210a2004e28b0f99a0278fa1005827
-:01013034fdefa3d3a10d8860f2ddce1ff12775
-:0101406a02081a9cbacc7c0c4e04c93ec275ef
-:01015010d501b8c52aa55bd866b3ceb621d116
-:01016065b475a59c5c8e533c3d921dc70b321e
-:010170247a58fd9f5343b8126476874fe352ac
-:0101802501ff840b0fa2a5ea3c42c42e6f8259
-:0101906a5eae7f97f03bcf994edd320fe44cb8
-:0101a0ad6cc94b113439352aa142b703949e7f
-:0101b07837aae0f134e264ac37437f193f2340
-:0101c0e2ad83f616bd979c1cf7538f5763a082
-:0101d0ad0fd2adbd333bc6d1fabccddc547d9e
-:0101e06cc15fab7d8d1aaf7399315d83bb89b3
-:0101f09714b8dd0900279b157ea4d3585a1242
-:010200e4ddbe5743c71840e58f10fda6231b4d
-:010210be73d62be320d6ef87b1ff5dc51e911b
-:010220f6cbd5725804b40262599319410c396c
-:010230721cf1d5a83f0842eb9716fb98cddd4c
-:01024035c4a1758749a6236d1fa27c81a8c7c7
-:010250040cccecaec10c65009057ebf5a8312c
-:0102602ebee10bb65bca79f5c2839ac46f24b8
-:0102707569a210071c4ac90c72fab791823ae5
-:010280de467573067118243c53abea4f99e0e6
-:010290632ae16401b77023ec4943a3079bf7ec
-:0102a04761fe83700bd02a535a07b019a59251
-:0102b06ce09088d62a26b4edd55bc7dcee237f
-:0102c082af830f5196a2302801aa5ba11358ca
-:0102d061b0d0251c6aae3baa674d81178e2cc2
-:0102e038e80193edc92cfcacb772d914da7b82
-:0102f0596551934e8d09b38cfe2350ab62fda5
-:0103002885d962e587a97a2c13fb5959481f98
-:010310975834b0390213ba82ea106fd9ac088e
-:010320957da3d5a56e8eeccfb76fe96f2cbfec
-:010330f9a0ef3140dd16d0dfdc237faa00a8d0
-:01034088dd79e8663d88d9a776ea112154d3c5
-:010350224e2d63dba579028c750c2a94c2d2d8
-:01036031623e4de0c21df7be2b14126a31b1e0
-:010370df67f392a3d65df1ed05d0d90baddc5d
-:0103808d30eb8afdd6a89eac25cba3d779b45f
-:010390dfec6c7098f87475b1d67e9f6aa77ad3
-:0103a016a012b823db1a08da95dc2d112f7204
-:0103b06fcb7c816645e32605e1b464f24fe50f
-:0103c0e782fe7aadf0e30e58c4edfad146b5c9
-:0103d001ad812f297cc138a912fc0c468f27aa
-:0103e0c360e37e88d8eb3051624e9b7855c7d7
-:0103f0f3e6fea20ec871927a94125fa9280461
-:01040047e7f986fa33c57351cfa4dedf35baa5
-:0104107bda73df288134a164c222b199fa4b1b
-:01042029a446aeaed1d629da19a9769f13ba31
-:01043094ad1adf7e2b1e65c7130a9befcc6434
-:0104409f010dce155a30f2c237abfea41c38c7
-:010450157fb7edc3d6d3ae77789ccf13dd52b9
-:010460c8b8aa8ce3621c24303885a8db22ac74
-:010470ca8d725e667d7d635a12d1898bf2b44d
-:010480e2e0868744e9c373aa7deb633f8642d8
-:010490f017530b392952882d583776a1109c72
-:0104a0544b6632169882cef49edb9a8d3fdfd0
-:0104b0a5227ec0c0dd4c2ca5e0f107ee9da2ed
-:0104c0065b25afcab3ec8ff542bb126cc68b4d
-:0104d0f29b4355a8e3530c99743143843fb106
-:0104e04e884ea6f8771ecbf62cd4193fda7865
-:0104f072a253155f2db984039aaa24e58790cf
-:010500915412b0cf027d30bb4bb9a63f1cee5e
-:010510d934f7231dcfda16630a5c1e8892cf6f
-:01052099febbd4a41531171735d0ce066b0edb
-:010530917d53e6d865336425449befc4cf4358
-:010540b1265a2101d4828498349a635518ad5a
-:010550cb054deca5293c214668081d286e88f3
-:010560952782915c4b8a65b1d94d55e1d1b678
-:010570a36280d44dc02d1880fcfffa5eb83058
-:010580556060a8d5b47aaf1f56cb527d9499f0
-:010590d5bbec6b5040569bbdd80e5ffb66e840
-:0105a08f80c7424e655df86fae65b42b533e56
-:0105b070e6165646bced75ab1ba6496430f3e9
-:0105c0c4d48471791579050b7b0469f01044c7
-:0105d04d47dadd8133f6842a552f41b1d2dfd0
-:0105e03e15865c125fba2acad3ef928e8d84f5
-:0105f0cf3173c5c5dda88628cba409f73e1434
-:010600d02af11c09f752a69d18bc328a979cfa
-:010610e874d861955299e2a5793599370141fe
-:010620f3b90bc7b0736c6a69a453734c6254ad
-:0106309fae5c8f4f05b77d950eda92860a1d8f
-:010640612b1dd4f868c1d51231412efd53fdea
-:010650b5097cde8419261ad24b2e2b54c67f34
-:010660ea963c2807192163c2bad8c463901325
-:010670347cba25c83dfc95c30c992090b30873
-:01068078f22eb66a5a5ef5fa68f246a0a40a7b
-:010690aa165f60e574796f32c4b90e8bd8159a
-:0106a04c795a800202942a37b1c0cc6fb1a9a3
-:0106b0dc05c60f92e5cb514738032d0f70a96e
-:0106c0112efb52e8b339c88d7e829d4f4f4693
-:0106d0037f109b7e4a8755027801bdc2f06246
-:0106e06fc298da9d220e3f5370d03fa57199d6
-:0106f0e3bfebef5f02b380ba3327f92ab135c2
-:010700597eab5b719c1353f0159794e0c4cd4e
-:01071017721ac94d544aad1a53f7c7344dfeeb
-:0107202458be9fc2839df90a9d1cc138ecb953
-:0107303eb626cb5b4a07a8dfb78df5d7d6b16c
-:010740dfb7bcf58273032a471031a98251c03d
-:0107504cc89f3373701c87d34c599d39cc5f94
-:0107602a10e46676258e67a498ef91c8795923
-:010770bb9345e666c811b671c0309091ef93d1
-:010780ce2c63c976af5d2837efe3d5d34f78a2
-:010790c27a33ff0be2dffe0a5fce18338a6af8
-:0107a0c6e8633682fa1fcf5196fbf2cc2a4c02
-:0107b0389ebacfad203f47d457d12916d72d51
-:0107c094bacb97aafb316ddf83d3fa4cae0b6c
-:0107d01b74238f2d2bde68a279707e986a52f0
-:0107e03288debebb4d6ead5bff736eacb46a02
-:0107f0c030d5472a0015d2a32a48d15421e57b
-:01080075082fc96789867179c9a44aaf80a26f
-:010810645bfbc97813247a36f4ad5f1a4bb712
-:0108209135c45b3409c99d70b03c926855104c
-:01083057d0b20889a928ef81611ea0974ae533
-:0108405ab54acf862c21036112313db3f3c050
-:010850fc779c3c4b495875cd8fa5f0ff4af730
-:0108601ccf69baa028a58a40d0d3d12fdd60c7
-:010870786f44c04ed7e5b7c1cb990618557194
-:010880b47d5806c3eaa8156e5e04f8d6fb3dd5
-:010890150366e22e1ffb6e77d2e148212611be
-:0108a0cefb90f82c408588fed1d230163d1842
-:0108b0518bff748c652851942ac575d94e0112
-:0108c0d69ba35fe42bb73e2f47f58570c2f35c
-:0108d089f7937645deefbea9b163a2bc9ee416
-:0108e0983e6b88f047716813a7f649d7b21a09
-:0108f0e8962e7719f90226a7198cfb0c3682e1
-:010900f29d13cdcfb8211145880c5de438107b
-:0109104700cf55ff4edf5caea5d5b2c93f7a53
-:01092076a87568071dce6d2ecf3d1434fb0678
-:010930e0ec8e44087e515009f6f908b2e1a7e9
-:0109405ffcbda75cf737ccfad637aa59866d9c
-:010950d0e024bc43858986d7d928d7521dffaa
-:0109608a1c07494ebcf71155dd7432881f38d6
-:010970961c1cbf8befab3452d6896a6cc417ee
-:010980d98c449f4507ddd36a98808119ba245e
-:01099092d97f97056c211e3b7138b58bba3c07
-:0109a09680e8b235b12269860a5109c3537460
-:0109b01927682f6468835bbf4d709ee1a2dc54
-:0109c032c4b25bb89fcb885b79459e0b1395b7
-:0109d0f996e106b559941613de933da7827494
-:0109e080b8d05e16d6e43899d9acfb7fa522ac
-:0109f05b5d505b8e455133678412abf6f9641c
-:010a00afa95a087e3114156947571e7f174798
-:010a10070ec40206050fe88e209a8691f52ea2
-:010a20c913cc67e8ecfb474ff870d7b8b6d33c
-:010a3036f6bcb39411159e524bd2f067830b6b
-:010a402bc274176b97bf8e0bc0d255893d65fd
-:010a509b9c448b1855fd8e1e44d734afc469d5
-:010a60c6250bdfb53caddb33c9073d5ae8cf38
-:010a7077a915c1195eb01eea45dd35364cadcc
-:010a804d0d3d3dc4bce37904e9532d29cdbd0a
-:010a900cad4b1fed8f8ab08eec0cd3cde49b19
-:010aa0ab9ce857dfb696ab8850722eccf65297
-:010ab010c00f4074dbfca12cc4033bc5667984
-:010ac08a79cd58cc8b3a8e36e248e4ee6e95c3
-:010ad0e17f62b772005d0ce39f6e6b1693de1a
-:010ae003ec572d5753914a5d148654cf5cc686
-:010af035a36b41693ac024361471499c167b22
-:010b00721d617bfd6295a5a682e421abf9ed2e
-:010b1025a08fcc12ce687bf4bf84585c294fa6
-:010b201aa4865188d396fcea6e8e147ba5614b
-:010b30a33e38b01d6079b6be4cd8f85827b76d
-:010b40e8aaece39685d3155cb80261a846d187
-:010b50f56a7eeb0b9501c62e29741257606bab
-:010b60436c82842ae4938aad2fe7a6ff6e2d48
-:010b70aa0d6b18ce11c297b27ef6e8a4782766
-:010b8062efeb58c4a5d983066f3bc8f632b160
-:010b902d2235c352d048aa8f52759bc47d0713
-:010ba052ad3b16d8c9ac75da8d5c355f99b1ec
-:010bb01256f73d8fd2379e256feef978de23cf
-:010bc0c055c6c94d8a19a104bb969f097928b6
-:010bd00703ac99a990b24cea4927d09b8dd5cd
-:010be0900027cdd21ae48679a52532265f5dc6
-:010bf063624106d2939b6ef24b1e08571f6685
-:010c00a1241a6aa801fba60c12ab08bbb4f280
-:010c107d7b6e7f257d1a7b686620ca440dad1e
-:010c20cf914003fe17cc32139a463c00d79856
-:010c308c07bcc17b565356d0b3056b03fc57b9
-:010c400e4e4e10a097053a34ca4f135bbe08c0
-:010c504a9de2a960ca47b187cd7fa3844a3728
-:010c6059837eda569a67f1a8409274d5a7c39f
-:010c708c359447930bb8fa086774513f0cdfc6
-:010c8060b477b0c01438fe45edf9a95e8fa51b
-:010c909bba23b4b3e1425a98bc764730af38df
-:010ca025506c99e084e4d4f14fa1743d119a81
-:010cb0b930901b575e74a5c91f6d46a1bdd603
-:010cc0896dd66fd366280aecc78f95d88048a6
-:010cd0d04bdd2ff6e936267a0da93c1501ed21
-:010ce0dc1c071d50b6cc6fcb44b353d141c8fd
-:010cf0557de9083c8ef9ec2522c5b1d62766b9
-:010d008d6e5de209a92b896ff727171367dff3
-:010d108fb57d7fb87eada19a2034884b217bb6
-:010d20fd38c1d5280d11bcb40d912f4d2fd66f
-:010d307a17a95adafde8d5a5c779ea2809548d
-:010d405431e56dee1793541e34f76c2f363291
-:010d505882cb2359f0d2559603a385232dbd25
-:010d60a4e94ff8bb3e39ee684eb03efaf95b9c
-:010d70fa3f6d3457128fe5706f136428da1db6
-:010d80376f68d161b58efc299fb14f2b0bb002
-:010d901148f708fb5688db72d532309d3ad9ab
-:010da08da96db30c421b3283a006a03b7596e8
-:010db0d30827d151e9f92cd1809f172b6651bd
-:010dc0b0e8202641393c022a6fc06350ed38f4
-:010dd05a458db488f3a82e6e18c763bd323088
-:010de09ae9e65fabf40990e6178ad9e293ff19
-:010df0f8588118da7d4189d91e7aa6aeb6647e
-:010e0092a1fa25eae7cdc04aa6134437b55078
-:010e1026cb288b471652dd9f4a975fd0b0d3da
-:010e20944a1f06a0ab8439702d406cea74cc27
-:010e3014502d2450c885f7c1e7d73764ce55aa
-:010e40f20670d9211630a124cdf51a42d1424f
-:010e50b167ffa59112e4a898f467063759317a
-:010e60b757bfc3783141f5e680197db0b89efa
-:010e705bbb73fc00093f65f775f8b4802992ad
-:010e80759747c5d094532ece3bda175dc00dcd
-:010e90534e936c4d42ae1dabf736ef33a02194
-:010ea00ea52b2dff8475c18291222914ec739b
-:010eb035295580b18c17772c2c692e160bf9f3
-:010ec027a4b70aacdd60d60b3652c35d8e27fc
-:010ed0ed4d1fd4d10e3cda6dd9b94917caae91
-:010ee0772d4a82a6348cd5dcbcad5077736f1a
-:010ef0d335c3a5a9ec09c2cb94e2b6ef810423
-:010f009f1ad04a30f18cf13d575b96c2658627
-:010f10f166db0f020fae1ef9135c75f9838c6d
-:010f20a1ba6a5ad0357e85ee5748ac794c2c97
-:010f306f6b06240b72ac0af4709a1de70edf45
-:010f408097cd6e380fbccc17bf3d3f53d52650
-:010f50b3d8fca35425b9990c98d24fc8c69261
-:010f60110c97724ca642670ebb7c01d0a713bb
-:010f7085ebfdb44df6e6605283ee29eff78fd7
-:010f80b8c6412df37dac0760d56b8b11111696
-:010f90ffc1d129432c4cc24d5047d895210758
-:010fa07970147446e3cfad1b9525b5273e896d
-:010fb0499b520f798707a5513468386a3f511b
-:010fc0b6ad3c2e65c785f7716ab8f65448400f
-:010fd0fbaa2637c6f6006166fc60f30e1e041b
-:010fe0a4fbd3563c54e7e6f02ee1d8bb8ed1d5
-:010ff06c5e7d4971fa6acac2476cfde16ff4ca
-:011000b1cc9e7f432e677690eca2e5664b4c77
-:011010cc041d35b3a9f9baadb44e283e36ccc0
-:01102046e7ece23d04a35a497564e319501a7f
-:01103054700a9820b316124d4557ac26c38372
-:011040df1f75b5ed9b744525341e880bdfa34c
-:01105071b26a22ba0d458ff67775500c2097b4
-:011060f301cb588609a14e174a3ee260063de7
-:011070711e1a62b0671c050ef0c86fbd657222
-:0110808196bea4f4b9838b4c02bf0f5e47f77c
-:011090c318d5a1af969bff97ff4aecfc3f2cbc
-:0110a0080b4ac1ed2307b2f64318a0ca703da6
-:0110b06a14e1ee0def10e8b29919254591266a
-:0110c0f16d09c448fbffbdf37a399877b4e50f
-:0110d0f340f3067abfdd5435a135085cf27274
-:0110e0d68557c0829a8ee49cfa06b124abedd5
-:0110f07073c36c520ca136ed41697d07f9d24d
-:01110031b6d8fd648a130ec95df0566a9e290a
-:01111011a818a8f13fea2f614d59f379994d7f
-:011120218f14be6a537a5c1e41bd7d62aa4143
-:011130ff98390e172c93cd96e485c8e354ed46
-:01114091d934eb643a8a95ef49358077586da8
-:011150d15c14052659449ad327d608710fe3a6
-:01116036ce22c943071c5fbfe95c969b5dbcad
-:01117011658dcd2f5376b21a0e1448beae35ec
-:011180d944ce48997f7fd242aad1b4e6b7d609
-:0111906a60453821ac44bd1e4c8237072f5629
-:0111a02265d9a3525d8ad7dece2c93882267ea
-:0111b0674dcd7bb0db76aecac0012873568647
-:0111c03fd65406d6d89a9485f73541478b410a
-:0111d0553eb2bf8e3d38bc1efa54b3b84e231a
-:0111e0062bc9e611d4e837cc0c90e02ebc4cbe
-:0111f0becbec93ea78c0ac032e2ad12110c476
-:0112009a634d7e7725515c94243d85057b4e63
-:011210970a0cd59271eb1fa7d5201649c7b51e
-:011220949ce84bbf37c7cd73a239bad856c626
-:011230517f1aac768502ca25e932ad355b7f57
-:01124046c38742dd9c640963d3a1e48ba479b3
-:01125084735854fbbd187559b6396384dfdfcb
-:0112607a73a392b0f7ccd51983309d0bf7b332
-:011270e66476beb8a91c9f0e0856c444fc31ed
-:011280e0a95899b486c8810369c7b2e9a90337
-:011290b2db317506a0985066fca34f17dc73e4
-:0112a05d21a2f4f2b9125ec37128e8b52cec2c
-:0112b0f9756a3ebb102722bea3b5c4809e21a1
-:0112c02119a08da612e8f671c3906217b3592d
-:0112d0dfa117074c3559a53b758c1e8f551ab4
-:0112e004cc83d0df2df72fa1c17094e0a7f581
-:0112f0525cb438ed4a63a42995d595b571643f
-:011300cb6f6fbeff9bdc6919f6b434099867f0
-:0113101b035a4deac6f0ae1db407ec20a13168
-:011320b7d8a5b9db81ac9db3922f1bfd2cb772
-:0113301c924e4540cb32b03ac98ef5f46a1251
-:0113406375763a2d08d01e5afcd376f0eea6f0
-:011350180e597a983aa57d08ee50e7f93ec1de
-:011360893f0bbe6a8722a93b649ced7edfa8ce
-:0113704b79f4c4f546cc4d58780526fb19486e
-:01138086addc7aa2518e6cffdc14975058b6ca
-:011390e329bf118a57ac594e09ee87ec170d0a
-:0113a05d3a697be1b21ec306d3c2515796c1f6
-:0113b0dfec74c44911e5cdb8126256e1f4ff3f
-:0113c0f8f2c8f260e82fba8d6018cd17a11c3e
-:0113d0774065c8628a58a15f83b47c345fa77b
-:0113e086b65034ef5b71839116ce9d6a20b053
-:0113f0fbcb96c0abc05bd659f7e138ad65d27a
-:01140029db1d0461551c10e5b96d389f2709d1
-:011410d78d0a72bd20f79035f3a66ea0a9fc47
-:01142084337596b3f178a553b021592fc51f5d
-:011430805070129db3a738624416c61db03158
-:01144016e3c3afa48bde56787df92b2444bbeb
-:0114503575a4c77344697f77d205de8c2200bf
-:01146046d54826d3769078126e0bc17c9e777d
-:011470baefced9effe1e29d1cdf6629c63a838
-:011480f87cf0a306178152a19fdb9d18600f22
-:0114908674dbb38d4ff9967fc5b20920e86677
-:0114a019f3663ab74b6f5a922c14a17eb14d23
-:0114b01bbe75e2b1a5d1dd50d936b920c21ece
-:0114c0108ca595f6066f8f61de2f7b8ef7a6f9
-:0114d0e2fb3f09bf13390c46d086609f4f154e
-:0114e07af68317d93ab4d6e0d50caee610e34d
-:0114f05caf8dbf98a0036c7d1d7f417554180c
-:011500916f66c24e4880b3747c9ace35e8b71e
-:01151052a70dfc0acde542d806f1474297bfb8
-:01152080743320ec51eb2cc11cb782e17bda36
-:0115308712018909c96d7e4840f4c8ed289e5d
-:011540d2542a8f6a835d282446305378d4502a
-:01155059b036677c27270bf2beec2a46c142f9
-:01156083fabe76b409df8ab3e0d242651ab503
-:011570c2478a0910364c307388c020e9c04bbd
-:01158075fd8daabd10ab7694cd3582a3583e02
-:01159043f0b28df6f5a1d5d6c4d0613b940d1f
-:0115a0182fc0c057dfa54e4d7b43c9f42b692a
-:0115b019c2b2a59d639f19ca853f48ec603496
-:0115c0a155c4b4da30b12e061ac84e6fa0897e
-:0115d0e1d8499f066c5504f43ab8925d3f2902
-:0115e0c5cce259ac784495734ba20384c05680
-:0115f0d883234d74351d167b98f4f8573dcd4a
-:01160070f7df49aa4798f207ca384fc90acbdd
-:01161095659cfda5006a2a3de12d6b7c617096
-:011620b938e0d60307180d563f6c38901b0376
-:011630d4a31586c6677bda71a1af8373767984
-:011640525b8d48c2de3cddef53e3d8a971c7a9
-:0116504d979898e507e66e6cc5c0dabecc4624
-:01166066f37ea48ec707797a6c3d3617bbd2a5
-:011670d59c9dffb89fd47ddfd0f92bae67df51
-:01168060d354b767d6d31af347f7f2292a1ff3
-:011690f14e2b01ab1efae2eb39dfdf40eeb533
-:0116a066690c2cc52a4c491b6f4c15ce9fe25d
-:0116b0122dfa3a3f6c91ddad4872cc5606374c
-:0116c09e697b5caf50e120eafeace5aacda7c8
-:0116d0bc5a35895a89f4cde3ea92b895355d3d
-:0116e0de54603af8113e9cc18f059b6a5c9cdd
-:0116f0f78ad5c163ad42714f4e550570960121
-:01170045d705990c78a75ea3c168062e1675ea
-:0117100316c12b6801c28d354b741e22a772c8
-:0117203b48c1b25a833c064f12ea9973c60fb4
-:011730943f5fb47e0dd4b449aa156826024844
-:0117402deb5b14a6279b60145275b2ee19ea57
-:011750bb6df1e15dff9f97e8b1071424b58619
-:011760d665437cda1f166b88c2ab75c16a0ab1
-:0117709b9c979e3a8ef22c4b48c19d27db35bf
-:01178027b40375a403a9c2138870c3df1275fa
-:011790f30fa8cb1b5b70ede9abf83aec8c9d59
-:0117a057e870dd1e3a09596e8369e80cc23e49
-:0117b05c3a8b91d066cfb429503e0088005387
-:0117c0692f8d6b8437460943495efe96061ed6
-:0117d0a941cb9117587f2910fc114184a86983
-:0117e03ba9a197d4d10f5549b2c2317ee8eb77
-:0117f0b162373629ea3ec8b05173edf463258e
-:011800d6a41b2c53d9e46ad23cf81512dcea45
-:0118105d544006847bee05cd26c916dcc1bc69
-:0118208e956e4a2072c373c0eb934b2d92bb0b
-:0118300912a94b3b650c624dbac0d838536ac4
-:01184003a92c22f464a5057ce0a3cf6def0994
-:0118502f2f37c33a15adb89bc2622c82f55a02
-:0118602b450a41be3d53ac1e324b39bf23a743
-:0118701c0056239b02636942dcd35dbc615741
-:01188000ac663497d34551ab1985069decec9e
-:011890b90c3443fad9d58508cbcb44e7ecd55d
-:0118a0efa152dab74397951dc410db54478cb7
-:0118b0aa78c74a66905a4e78cf2f8f90434404
-:0118c0aa2cfe663b0f7aa8cea7eb1d830c8bc2
-:0118d0aeb7c3db6c7bfc0d201715526fb7ba30
-:0118e0c949bb14d63cdf4368c0c197b6af4b8d
-:0118f0be85c94b165513873e0e94dc3ccf64fd
-:0119006cb0c3a9c086fcf3c9eee6d99e132042
-:011910c0b85a5b45e6c2c3db5f51629da0c315
-:0119201e2a784aa272cc35a81536443fb3217e
-:011930bfcd6de32fbb7b90d94d4285ea641d3f
-:011940b5de8e8a9ae48045d8443d57598ce69a
-:011950faadbb59f38b25bfb45af63d58d3978f
-:0119604fb94d9fa4140cf841b636e19455257d
-:01197041c417cafec7188c84601394fc3b605a
-:01198091b092cff10ad6f1445dce201d429df7
-:0119903258109d7bb1d17f769cd3c85266a808
-:0119a0b17ddc0e7f25a79ebc92f294497239e3
-:0119b08c188914ed0f89753af3510c2544a7ad
-:0119c02b4f910e2dd326388259d03a293bac44
-:0119d00050839db4f3b7c15bbb9147a1e7f391
-:0119e06142a7ee680465a3ddc9fc85ad87f252
-:0119f033deefb8b466537b9b3594a9a5d6906a
-:011a008be8ed312b4257a76ec73b7479541414
-:011a103768a0761c60f998b976d35f29125358
-:011a2074008121d286e85157c444a35d2bdcee
-:011a303b7b6168bd02da68df4365ad42cb9729
-:011a40c404526cc84ead0378f17603cb8fdce8
-:011a50cc4c1014b345f53203565d7b3431299d
-:011a609ccb2253919ff365a1d4b2fc58f36ffb
-:011a70f1b277c0e34261081c94f45434d9e4af
-:011a8034002fd1b54b3533ac780d0e8fc02612
-:011a90cd46421edb15bb8e525e34ad0e92fabd
-:011aa0a9a14d674ddb24ed259043a6450ea9d9
-:011ab02c8a55a763031732891390c29686e17b
-:011ac05507243f2df975652750acae0c5f959a
-:011ad03cc7c6650f71d436c19da46949e34df3
-:011ae0e365a72b77d97d1caa6c735ed7e3e239
-:011af07d754a27f450a9b0b1dee02dd755e96a
-:011b0042d19cf865fd4f69b047c46c7226b465
-:011b108b3b940953f0817271a91717c0534119
-:011b20afaf912fb163b0270c619c212793ba81
-:011b30713dc73cd7b05a06ce1035d03d1606e4
-:011b4083300768d7c0f6a2c1853c7afcaaf845
-:011b50ca7a754b2d1c29408ce317bc1e4ed5e4
-:011b605be9d755b4a4a0538b0febec1ee7c26b
-:011b70163ac56f4c624e00e7eb52396660fcbe
-:011b804c07d5126a38ab227c70777734a4ce65
-:011b9063f1bd882ae959f37b2c809d76b8db15
-:011ba0f1c9e5dc44edec6552d324944196f9cc
-:011bb0964fecb706650a97e67ef65c4f07d124
-:011bc00fd2f7b36a758829224bfa420e1ef922
-:011bd03538ea48335af52a41ed66602d5dd541
-:011be02cbc7e6be725f3ad167a5d09c2a8ef46
-:011bf0c5c2967c6412187fe40bf721e521ed53
-:011c00f4136bcd069d9b16c54c42dbe5a9d7ae
-:011c1023610bd80cdfdc74c24f9306a660cd3a
-:011c20a2ab2945b24883ffc371e9898417f346
-:011c3024cc26e526d4bb5b995ec8b0c0f51fb4
-:011c40d509f19ccf8816f248c28fa591b740d7
-:011c5038b4c4f064b05f318e0801ce77e9be07
-:011c600524d265cc47993606ed7e153c271e90
-:011c70aabe70dd88bb675110d173d63e9f4e8c
-:011c80890a119d6f20819d86cafe2d80f25581
-:011c9051f5efba1998c1a5a043af5a90e28771
-:011ca053b38f14df11dffd30aad7ba22f89f7f
-:011cb0b9f6a614578c9af9e1ecb5681204bb32
-:011cc0108a91a6a7b51f706a20a2736a2e4f4a
-:011cd0a681596c270fb484fd640a01a55c30ee
-:011ce033ec23540c6d901de28a47ceb2e240d9
-:011cf07d61c3cb9ae65fc52e01845143e7cc76
-:011d0083f29347ed17a1f8b425cacd2c21e3dd
-:011d1032d7d149eaeb8bc377e9c19cd45447b6
-:011d200838e9f706c8d70c3ca678e57842450e
-:011d30c6ce19cff34402371fe4bac779d360c0
-:011d400570f08ab602abc039e6f9eb79085ef0
-:011d50880139a362c26532483b1e207117114e
-:011d60dc496cf5bc02afdf8340f4ff89d39704
-:011d70b0f31894846883dd2edf4a56ccaf1274
-:011d805da687bfb766cba78f656b9e4f54065b
-:011d9063f1b2da79d36c58662c7f854dfdc6e0
-:011da0804b4963fd778adea114012dd1959364
-:011db00c5db20469ed6b59ebd475cd9d21d593
-:011dc0ad6ba93e02f94c58b2e0bd47e972ae29
-:011dd03bb56fb049f822a1fbf0a663b508959a
-:011de0829196bff3fcff42a92e7eddd9425003
-:011df011af061f3b8bbf769624f8da7a46be4b
-:011e0084c395670dedc378eaca766086dd0a9d
-:011e10013add15447013e405e557364a0cbb06
-:011e200ba576a295615afd466745fffe7d0c2b
-:011e305be38c7743744cd0fe01cb85f29cbf44
-:011e40ab865dfd2c75524899794049f6696868
-:011e50efee8a5289833e8203ba904bf127716a
-:011e60e30756af853e13c06c6b290a26028335
-:011e70df1d869d5213d097e250c41a3a81ccef
-:011e800b663edbc538282b13ca7088053d98ba
-:011e90a4bb4fb5f7ae3f5b33fc4df13afd412a
-:011ea0819bcc4e4bd66fae2ab19e81bb4b3a9e
-:011eb037a3126cfc00e923196a79467e65b0e6
-:011ec04e060bac1f5c7e45a2387d61928c757c
-:011ed05f48f1f11203753a1b1f65376c13afe4
-:011ee080e7419ce86df759e8e8585de5807372
-:011ef026fbf54254e1436ade3cec27e144c869
-:011f00e69bee67dde7c1feea685ae9fb6e1cec
-:011f102bee02923811a818e0a61fa6397afb87
-:011f202688a4e2239cf7e0729f0e14849e0542
-:011f309f4561fe7640ab91889138ed801f6c6c
-:011f40f453988629f37abbdcd81207a702f013
-:011f50db7b26e029b986135aeab08788ac734a
-:011f60b5b74e40dffa4a519479c73297e8728b
-:011f70276a0ddbeef9dc32c021b381230b8ea4
-:011f803e34f043be61f0576f73d584baec4376
-:011f905291d621d1c5dd89742dda1978eaa073
-:011fa0cda06e7c6441c474cb0860d042fa1b6f
-:011fb0aa1db7a6e615a210897248cf84d6b687
-:011fc0bdf83ec1c46e4a6662b1af905585ce42
-:011fd0e8df66e4c3aae8f1126ccd4e969b32c2
-:011fe05a4b6946e62f9acd12ebb8bb8da2e0b3
-:011ff0cbc93e5ca6273840e7902101d2113bf0
-:0120006da2e646620eca7ed44d0f61b6fd7232
-:012010dac8909bd4c1a4b7ebabfbd932927674
-:012020adb30c2bd6917b344ff68f3b87ae1d25
-:0120300a2e0bf7b89d8ee74808faffe3fb7c04
-:01204006669bb8b5fc5aa44448cdcc3735dc2d
-:01205061446a7b36645fc70288f91553e41d1c
-:0120602f6711d7645c594aee3bbe9a1fca10f0
-:0120709d7dc1aa7d26fd638761bc2591c4f1ec
-:012080a4f134c4258bb5cea8e6ed59cdaed4ee
-:012090450db00a57eaea1de0fe2cd8125d810f
-:0120a0d103abf8f11572aa2f90132efc7713ea
-:0120b03a2609a0b63fd436a1342110d08afa33
-:0120c0a2b923aa2a5c826f017fbce0f1e722f7
-:0120d00a6604c89291dc38bdb1bd288319e496
-:0120e095e0d618e6de42f2604872f056065c8b
-:0120f0259a6196ef00f076e1a71b0d6dfba328
-:012100025aa52f8bc9193efd4a2cbe4a4f9a0a
-:0121106338bcb649902ec0c7490009dd1d1e29
-:012120e774386a6db43aaa3a6bdf59dfd2d7f0
-:012130086427f1e7f5b151e3c760de76df4e0d
-:012140b8c52ecac6a2aecf321be97c159edb97
-:0121506bf1aceff1ea2ddff255de40458dd00f
-:0121602545bd437eb0dd8c8936c4c5fb5e3557
-:012170732fa88a20845a49d2a0a63c6f6fd177
-:0121804f1512a98d787815695b7f4649fcc9c6
-:012190f4ccb82c4ec27ce93e7cc2dafb31c1d8
-:0121a0068e0de586c58bc2761d50651cfca582
-:0121b0e467f04118b971b85d7820de8228b61c
-:0121c09457d5a2d8f81df9b3dbeb1bf768b53f
-:0121d080a0681392bb7800ee88fef8246f34bb
-:0121e02c33a8e3acf88eaf0c372db83fc4bb74
-:0121f0c7a264910297c8bf6a409eca311f1719
-:0122007dfb0b7cbc360e4970cd5f53e5c5f6f5
-:012210ac0c922b5bdcddb0138bea7c4d936394
-:0122200f43daa328a9e83283b2359b5108a9db
-:01223088791eb6c7a3eb51a91f5ac9426e4f81
-:012240fabff87fa26e145232f25ee51e956731
-:012250596a9ce1f2b41d29db1ceeb94c97e4b8
-:0122609a187b676eeea2cd6726d0a43c79ec2e
-:01227091bef4bf34cd68308a87bfe7cd68193a
-:012280bbbb1c7b0e2a836f782b3e1402d94cdd
-:0122906155752d8de59ff081d4f2325a7236e1
-:0122a0bba255ac49be519f36be3d9a7e6e2743
-:0122b02d4fd5d4bc8a670807e07458b40ab99b
-:0122c047c86eaa96f9a7cd131d6ca685cfefe6
-:0122d01ccfe674095b1e794a981d68cccd9558
-:0122e022d112c46de04df48e9b569711678b01
-:0122f0faf190e8bca700c1c52e985d787b9d8b
-:012300285d3368fa8180d691c57adc99c66b02
-:01231058e55609782199573248289c20b063fd
-:012320b8132a8224d241de8de4c666d70500b7
-:01233039075681b02530fc155e77283fd358ee
-:012340cec2baeff5661db285c01141d35ebd4e
-:0123502c48fbc48ed61a7345d139d5c60817e4
-:01236050bd50642d604f60e3ea30c7ea7dd204
-:012370ebced9794adba6d9264868881a07733c
-:012380a5dbf502a6e5f428d3194d63d9468343
-:012390d733b61c2efb9acaaf88a3f3f423a3cd
-:0123a07227fd09f824f1db6f37a33e8b4a9388
-:0123b02f90daeaacd05ec58144cada0e6ea987
-:0123c041f6c2e4db8537ef278f8fb185ef4659
-:0123d031ea1944c268cd49c16c681bbd6779a9
-:0123e0d6dba97723b6d8ac9b01842fca076a8b
-:0123f0d84e4ab3205c243c8545af969687262c
-:012400037d463cb32e555def95733449a0a304
-:0124100ff0408946280fa6dae36c03042c6140
-:01242059952b3ae68b373ae115b055ae595650
-:0124305ad33004053bd92b6ed0d2ca396d2094
-:012440b4063cbeff05f9e405bf7ab5df9d29f4
-:012450f689de5bca41f64f994ae245c886478e
-:012460bf858c89538b2d329579aaabac108f52
-:01247086fdb584764ba936c657cc5277d29876
-:0124803ee4c37188d20b29beaf7f815e0f4f93
-:012490e6d02d3bf8d8d5cdab30359bea09e527
-:0124a040e7751af8802f6ad9c9b6d097e69c9b
-:0124b0a5995467cac875b9adef34d47b4ccbfc
-:0124c00d7b85c693513427ab6453faa43f3528
-:0124d0efe2ac25ff78be6610785a4cba3e280d
-:0124e0aec28e55f19d9bcb0b5c6e282ddb2459
-:0124f061531e41e483500f1cb248c1488eb3c6
-:012500fd07bc8ed8ba3bf37a284d782333fccb
-:0125107a8a85d85c583d4766c6f3082b56e1de
-:01252085cec00fd6ab4a08c79b3a1ecdc359c4
-:01253067c8a804f265d7d9f4699e66ab735fa6
-:012540f48fa7ca97eb8e2fc29fa3cf4de383cc
-:0125509c845c85768cc3ffcb7fab8f278ab84b
-:01256057fe5f4494fde9ae7cc1d9895dcd3f03
-:0125703a555e25fbd6fc9e57756b47538dc4e8
-:012580437d9354a66baf1d4c2b88b26913f433
-:0125908f3b2b3dac6c082c2723c0321bb4140b
-:0125a0895f62e6dd9b3a0871feca571b4ebabe
-:0125b0c116bcf5fa5b62ba727563c774a45702
-:0125c08a29e13e8d6ce347add0a8bd2cba9c46
-:0125d03f0abda68f66a28c1ba172df9a214739
-:0125e03a1ecd1423a8339ba8e3334944dc9815
-:0125f0a62683e319e8941c9891abe022464427
-:0126005a224e8ce4b33de82f7c9180ef45ea6c
-:012610eb580804d5bcc8c5f46b4d591ebdb52a
-:012620e3e7b69b49d65140f5603acaac534952
-:012630d7140337eb8e4522f525e51d53e473ca
-:01264081f4e50528b94664efc1e1930057a3c8
-:0126502a1743ebe1fb7bba0e0013c00e9cec53
-:012660938cab4c0eb8df1f73ea4acceba594e7
-:012670ca6433a52ec8a557fd353e7398570dd1
-:0126804045972065cb784e3ae28e55e41c7b41
-:012690ab2393e04abed03057b52407b4e2bb31
-:0126a040732361f574154d2e092ca4396bb846
-:0126b0d706136bf02e5774b5151aef92754ef0
-:0126c096f57c40cbfe9187e5e524942119b1b0
-:0126d0f16e16d9da13f18149b085473b08fdf1
-:0126e06b5b3d730cc72933f145b9c298010fc9
-:0126f04c1b7d922081aaca6f5e929eeb315600
-:01270037b83d2e90f9bae4f309fe3f37c306e2
-:012710d0e1d6c718ae0b9cac6928cfcdee1217
-:0127209be5c8481d7f1564623c0312832f8406
-:01273016c890596a4bd2f5bd9375b222fc32e9
-:0127406f99520035aacd6c62d14b9d7411a3b2
-:0127502ff2d3ecb2118c650d1c0aa3c8e92a77
-:012760e54f841cd2d14d726bb1f983877a4f6b
-:01277029ee5ed24131581887023ce883c5d549
-:0127806879e485473e8fb57d77741a40960a05
-:01279097d44718f83a1ca83dcc7bef74336b8d
-:0127a0229d3faf33d0450be19ec2494a42d4d5
-:0127b09482929a67a6f06fee1e2d8e1e441092
-:0127c08517901498f16a30c0ad7c82f07bd76c
-:0127d095b78bd8d6643e2e01141949d7bdc20f
-:0127e0ae01b99b0eb0dea3c4fb692677e72297
-:0127f0d97c7e870fb4fdc0b208fce9708c8d25
-:0128003e16713b2478d5c0045b551ca4d195f8
-:0128100db194ad1dfc03cff1225852df6f85da
-:012820e72081f591e5d9617af4ad512835c792
-:01283017e30eedbfa092a518fd22a8a3428752
-:01284033c6c934758adb6b0fc4882f49a30944
-:0128504864d57668762a498357a35784deae8a
-:012860867f4c69bbddfdd5ad0fcf60ea697b67
-:012870353d44eb3369b08612ac3239760f76ac
-:0128808e9f5ea0d63f3329ee79db742632d2ea
-:0128907155aeacf877025533ca89053132b17f
-:0128a073edfa4bff260b780ace929d77027ed6
-:0128b086bea3a1d0e58a0eb04e584eecc84ca4
-:0128c076aa3fc903eccae35411248f2508e839
-:0128d04db993c7dc8518a813fe7d07317a2561
-:0128e0088662ec7ae942cccdabea8ebce6715c
-:0128f0fb1956c35c82cf136e0ee2f2f99a2ed2
-:012900190d7234b07dec312d5d5a86a3a16f60
-:012910f5ea1c4b8c80a6e91fdf6021b44bd326
-:0129209ba5bb4c167c821eb8752820f0845cc9
-:012930a8543398d3fe6113646dfbbd2f232643
-:012940c0bf6db5723e8e6ccd8e3a3303c1b464
-:01295075de7d39601aedf4909a97f38b340060
-:0129601beed50b090d28f7d9f91aeb8ad1d4ed
-:0129701868bd4b6c4103793a070b6c31bf7951
-:0129809194564f4390f17cf3074074412a5eae
-:012990ea7a6996d6c0fc3733e91ecd6a90f0a5
-:0129a0bde41073347f4505ca0993a2d0de2961
-:0129b00dbeceba5307aac283c3b829d9c4cc8f
-:0129c0ae0d647d023cb54e6c60a3579b35a2df
-:0129d09fe9128913eb22864d5778eb3102a1d2
-:0129e09935d2758a3d5ba796a58bbb0c861c0e
-:0129f04a6677c17e47317c9c41ab854e542e79
-:012a00995bc10b80dba8f17e9b65b2511258db
-:012a10547aaa47615790446b2e5735f01d6ac1
-:012a2098eb38cd65aac7d67e03143dc8824bb2
-:012a30a42dcda40db98e907cf74447c461751e
-:012a406cdf25b9c1fe66ff12515440a27d6560
-:012a505282ab0bab1bdfc00aa0b96aae10cf19
-:012a608109c8388640392647fb6d402dce0fde
-:012a704e8acb91ba5395ae7106b49e71088277
-:012a80b568b85d673608cb65a6ba599cf98044
-:012a9069fc9c62b81b08c9c30b09aa57793e20
-:012aa0fa7509ca5b838bb27be24672adc90251
-:012ab0a84bb3eec21a10d3e48c029a424dad63
-:012ac017e300d1b85ec0be7413fbdad6ca67e6
-:012ad0133c192f936073b246c126c1e9cf8e4c
-:012ae0792ed6121b1309338687497ddbce758a
-:012af0e6050ae6c07b803e3de7c486da4db6f9
-:012b00473595688692d1e89b2c2055505ca553
-:012b102e5a466c418a746dd79e2f336fcd7609
-:012b20fee0da8d2367a827f3d87e7a905a5778
-:012b30e5e3aa4e309b9c8b4d7ad5b3f56ced48
-:012b40ebb6f6f13a60a366c2e35db7457d6106
-:012b50c3ed4755d6c641dfc45cd0385d59b7ae
-:012b606883a937e61677223a5c7338d78572dd
-:012b70657e13511706a8759f2c4139bef962e1
-:012b80b98834ed55fb0f3fcbfa4f163253dd9c
-:012b9073cd04c1a324ec3a0b17f3499ebe0988
-:012ba033b135b0f5302e7049c72424e85e9ae0
-:012bb091691f284d10d103043fdecb632a11d5
-:012bc0fb41fa17dcd0fae4a90b34a37d665610
-:012bd00ce0c83e3390f07e4941b6b720c41ce5
-:012be056a05993e2c2ac792391fac30edf8b22
-:012bf0652a9db2563e416bb1660e45acc339f0
-:012c009e51e3f9592837aaf4d21e79a6daf0fd
-:012c105828ef89a450b53bbc26cf03ba734e5c
-:012c204295d3de8b1153e0221a5cc5a702abf1
-:012c30927d8ea312e5adf8e969357974cf6755
-:012c405dfb647d1e725955eda5c3c69a92efcd
-:012c503be318f72a57c5e122892a8e8637af87
-:012c6037ad7b5276b50c19c897e01cbe33af95
-:012c70e453237706939ec1aa2147efd9d31053
-:012c80da030ae98fe1339acf9ee18ed2bf832c
-:012c905c328c59ad6ea7d38b0551d26310479b
-:012ca064b85f7723fc1401d2de0a0b7a4ac46c
-:012cb0bcc016e91a02cdd2acd46277efdb9117
-:012cc062db514459dc1a5a10e5bafaec838222
-:012cd022e56c4d492390f3089bca98a405fda2
-:012ce049509a31c109d8a7b8f7e74fcd9fc491
-:012cf0c66495fe77e130927fcb3c8ad14ed833
-:012d0050b08e884c61ff16e03e8817f7957a70
-:012d10e2b13bb106500580977c3f34b3c99283
-:012d20af8dc77e527c14cc11b2856a1fc49d47
-:012d306faf4ce4417524aadb0d1e462911f51a
-:012d403f99c8403a2478ebfa845a5e799c6ff5
-:012d505911aa06173d09da03e211d4a7d36db9
-:012d60e473d84a3ea31e2485ff91eea823e4fb
-:012d705419697def5f03ba103211d9ad190236
-:012d8039f4d46fb6e6e40ba217c8207a175398
-:012d902abf479e29080c9a53e0ef982bdf64bb
-:012da0276529a2dc811f38057817a0bef18aae
-:012db0e5d1ee7347a38333ba751c4360d8e88f
-:012dc06456d7810a7f25a72e4de4ae9793c51d
-:012dd0b3bdd8b80d557408e111fbaee7055209
-:012de0702c5de77eb5ab52edc0c9f64499f206
-:012df0e2f07841885ec3ec46820e4ab767621d
-:012e0046442995d7f29ff208c237d03e4e34fa
-:012e10211d7f841e5cd069836e75553122e232
-:012e2064e65e3b646c49d633645018fd906c56
-:012e30f2a18610b22e51e65e24230c0a08cb18
-:012e40e0a0e695c55e7603c93b79ac65cf9481
-:012e50ba5c06bc8a4b9bba4596c38871005a83
-:012e60de9ebaebe0de582acebda1967a5ccd19
-:012e703ce3f455bd5a67b8d8ef475369b62974
-:012e801c6590d9a92162ad4b861784c8dcc56a
-:012e902668f2c0bf2c687c5e4df2769c6f43a0
-:012ea077b101e62fffd8b2576d2ec5ac93d82c
-:012eb04104492ec8ba53fd83cfc16a6d24b1ab
-:012ec02c71c03aed8878b07d135aeffd389406
-:012ed0dafa9990b73dbbe1663f7b9e2b65e778
-:012ee09fad123cbdf04c4ce187369226d708e5
-:012ef07f59b9d25db059885116c22087eba45d
-:012f004150384cd2bb2f57524c7956cb02b9d1
-:012f105cd9e7904cdbad79df2aa3a2fa9f5997
-:012f20a492616d1d9f64e11029802d32278a03
-:012f303ae782f11d92285c449b39622a99d055
-:012f401f4b6ddf8d84db7a534637aad288e337
-:012f50bdb739874abdc9fadc6704ab01bde1b2
-:012f604dea625559fe6eb33da905d983ffc953
-:012f7021a6623a7ed4f9cb4dd8579713b9d669
-:012f80b3f7f66d884b42715be5a22e41f111f1
-:012f90435a7aa0a1d699c1e1eb5f3aedbae43b
-:012fa029dda7da4d72c73e7c6daa82238b1322
-:012fb05b708f6ff50eeddf63ca6de3fa08b938
-:012fc0f62e5e08d8fb46b2e8e11bd0c3223b44
-:012fd0937b3f9ace803307afd744a27d60984f
-:012fe0aa84aaf4e57ba4d91c672617f2551478
-:012ff03944e63a00085932914d416322cca481
-:013000f00f7df854f509025229cd5d9b55e441
-:013010caf31b736dd6742a28835f118bcedb49
-:013020c26e60802605c6a15bc49c458a54c69a
-:0130300737b7f5d0a2537d5ae9488b16ed674c
-:0130402716109da8b090a200ee33faa3239a66
-:0130501cb38e4bb12357cea1e6a2d15f9866cc
-:0130601c6c00ea8f40483d2193b7fbe21477da
-:013070fb321300c6adf8d0b26df2feabd620f4
-:013080c9e80a8f9a1f313b6fb38782d7025ef0
-:013090d822a60ebb70aeeb1cf8f107d351200a
-:0130a0b1cb0853c153c9ae96d133e72b46b912
-:0130b0d10069d53c91a54b8da8f9dd5794d727
-:0130c08047e9bb0409eb7237bd1ad8f6e0ec90
-:0130d0d1c8707bee0c786a0bff723401abc691
-:0130e0150831499bed5f5987265b32874d1675
-:0130f0d5d7137fc2730959b0bb3a816bf3f9a7
-:0131001a643a4d6fd0b4f75125ede576c53114
-:013110a066e5d8717eb1badd035ad14ac59526
-:0131208c552cb125b973b4f5dcc6e84ef882c1
-:013130d9cafcce288d6b3d288cda00efb5c36b
-:01314088895d3c6869747c0414be6e7ad1b9d6
-:013150028fbd9450309e96e26804d145399283
-:0131606055bbe12405ba806f0f4cd7e50f6bfd
-:01317025d1ad35c95e8f5b0de4d2085c01b351
-:0131807daa7987de29571267ac4035c048ede5
-:013190f0cac6b81dd3b872c7460b0f61310644
-:0131a0be9032db7e96bb3e3bd8a434740b1e87
-:0131b00d49b9bc22ffab34df09c0e5ba0170b2
-:0131c086e378ff3812e27914329608b87e87f2
-:0131d01c11ca4f270af65fd084c2f0caa59630
-:0131e093fd42968bb6d8ac031c75264d57536b
-:0131f00970634e6e0853a042ef183afca7e3a8
-:013200bdb950e20385cff98932b563cb5272fa
-:0132109749a2b66014c0169e9a4368ae6cfb60
-:0132200a64061531bf2bac1cdb6a9f2b1dce1a
-:0132302f2a3be8ceb4faecaf0253e6932767d3
-:01324031a17cf16088d9dbee48d85f450579fc
-:0132505d226baadf0173ab4f34b7d9981f5836
-:0132604b75906a486baaf0d39095c2384c2420
-:013270e2e3b695b310f653640eb0d99c4dfcab
-:013280e00f3036b41b3673a8fd3dcee661e1ff
-:013290dcfc0647423a4d2b00076ae513d3d2ad
-:0132a0092dac41aaaa8114b8407dd1ff75d4c3
-:0132b0562aecba3cf653db79bb68b641e16846
-:0132c06f4ce50746897ecfe8625970dc5799e5
-:0132d0f1ea4755ce844e15ca11301f2ede953e
-:0132e068d3e51ddf2cd9503795bbe98fefdce6
-:0132f0d84f4fd6d718162df2c85b409fbf2569
-:0133003ba4d0e78d420bd23ab9fefae9865f89
-:0133100122be66a867bc0b19368541e10cdcc8
-:0133205bac23145e29d25c970ed9957ca7f7cf
-:013330b751ee6f38f51a4a67f5019523a1c563
-:013340751938178f9e56155f60cbb8b6e5d727
-:013350b74c16f9f26e7eaa8ae74ecb5a3f27e8
-:013360ce6b8e16a8f591c2268aeb95b04949a8
-:01337045873fb5398d627ee5e43addcf3e7865
-:013380cfd9de586c3fd0ef824638901b60e7ba
-:013390b7efc148de213654f671f58d9db022b9
-:0133a0e60af367d818b80aab1c8f8fe5a42894
-:0133b0ee7e575b413d6d19a8adf1b39609644f
-:0133c0d768350937f2c9661dd1640a00593382
-:0133d0a9d7f71e19854d3e115c4e9d10c771cd
-:0133e03cc2d9d630344dda7a31d31b4b834fff
-:0133f063ca059edca3d96ee46fe4b00febb5c9
-:013400c8f0a3b169ed24da5c3d8a18d6ae0358
-:013410079c3967a39789b59f58ae99ae9394fe
-:01342056dc26107ea8dcfd9d3ce52485caca5e
-:0134301a015ba1aa802470968affa47fa0b51e
-:013440b0748e1d954d0fe0218b589037a61d2f
-:013450dc8824e5816c6d8625a7532f6a76b541
-:013460e25b2a543165756b04d5645f4b2d6b03
-:013470427abbed17decd6745d14990f0ad1115
-:0134808356727c9c54086eb52c566dade88d97
-:0134903b698f13e5b1154869f0919ac5151ebd
-:0134a0f554602a5d0206a5f91ba54ed0c184e2
-:0134b0cb36b9d444211df102963ae69c4820f2
-:0134c0581608a3e76aa23d87c745b572285e1f
-:0134d0c194dbc9e34bce54448ba87b5ed4b16d
-:0134e0ef41c87efa4d44f4d738e9d366bb5c71
-:0134f0f3f3899d634bea999b12c1a0661c70e7
-:0135002b65277112e692487feb84ab05c263cf
-:013510a4848424d076a7829148eecc56a37cd8
-:013520568a63d480c95a955c9017525af8cf81
-:0135301ce0839eca075cb83c9299b6945e7ac4
-:0135402b6a323b1265ec1a71b06f223ded9581
-:013550487a153dcee67eeef5d6b76652d13e0e
-:0135607625deb19ffbd95cda74c315340a3c8d
-:01357017583730a869689cb52bd6800527dc30
-:0135801f172b8adb64b384dcb5f60ac75c2b34
-:01359004468a63f6f5185ce2c7b9baac24cf7c
-:0135a08e8ab51750ca2842671f3d711aebf40d
-:0135b027ad92a57fb0f23ac9d84f10938a097f
-:0135c0216b1de3587d71dc85289cdf8dad98c7
-:0135d0886db69d03f0fb405cfd86a180cd2815
-:0135e03ad07669eb7589973933185f8471b4e3
-:0135f0ef6084e72a2923f72da362200e36ab62
-:0136001428007c9bb23623b98f923ac4b98548
-:013610c1a01a233cec0647cd67234597eb0f45
-:013620195af4e799875a287bce8f8c5793ed84
-:01363009aa01edafcb2148f03c54fe7ca7caf1
-:0136403bc772c4a14160eacc704c850366f43c
-:013650a76db7dc4c0883dfd810a7b29b9a687d
-:013660862a7e5805d7cf891699e77b181cfc76
-:013670841f138225d74e132e134d6a577e3713
-:01368062ed232b97a6983deb34fdd2b554ca6e
-:01369057a3b055a5fbbfc2d3852d2c3a506086
-:0136a0c31bf26f6f975435527319eabc70581e
-:0136b0218a25a72a589fe6ab37784b54727a00
-:0136c01bab31a3c5a98a19883ba88b9ad137db
-:0136d0d00146411ffe41c7fbe103867154b7fa
-:0136e0cdba103df73dd0664f35174a3282176b
-:0136f09da1ae2218c68d90f68fcd9a2653ae96
-:013700ef2cb122ffca89ae3174e83565684ace
-:0137102e1ca6fdf4e147dfa982e0e4129c659b
-:013720b5518376614e51a3e42d6cf57cbf56c2
-:013730cff67bc829a585929689bce711341db4
-:0137409d421662fe6213e7120423bd7aed1f3b
-:0137504e5f5192bc85ec440f23f8882fdc68c5
-:013760662e9cc8526cf6d530a8b1d63de660eb
-:013770aef980b5c9d13181a3a700cc1e05aafd
-:01378070c763289a33016a20550b43749a1a04
-:013790c50d28bccd58b5ca0a4d36119e8248e7
-:0137a06976e50f980e2598ea97c5a6d3ded479
-:0137b0fc39f80b968bee1e4a9cd13e7ec412a1
-:0137c0b878348b1164dee0f8ecc1ca3db29c26
-:0137d054605558a084233bb01d287998d23e0e
-:0137e06689b1ad91726e6a59bd948ed13beed0
-:0137f00a8c406dc8f96006e4f3e12f9e9ced5e
-:013800a697a7c1e08ea6a04579b4ece0413258
-:013810c0bba389790fad27447ea65cd1d0e9f1
-:013820e9f6bc2364af54d981b43eaacd86551d
-:0138308d8d41b787df2af99ca72d11cb8fc31c
-:01384031b149adcb10f322e686c7251c85fcda
-:0138504c8f7ca97f2294312bbf15b597c44f1d
-:013860373da790027a547b62b13ea790805a91
-:013870439a1a5309208bc3f8195a926155e050
-:013880c59256bc0cb0ec065e8f7b188203e14a
-:013890e061c37bcb63644516e37914b1599de5
-:0138a02f059db06650f193a7b732621792064b
-:0138b06ad14d5f874c140d2b67e2f15adafd1b
-:0138c09a933b0395ac086ce572bb1ec1baf752
-:0138d09d2f6c3207b5d92c028e3ef7af8f183c
-:0138e0857fd896cc5a5ce74ed12210cecedc25
-:0138f05a56510f94b3b076fc7a9618deb1c38a
-:013900c24ebf58c2a999defa3960ba57eb481b
-:013910188a6c7344c785d21f803e0db1dd7ed4
-:0139204ca3be9810c759851be600ff1c5d5ba6
-:013930a4b78fa78e04bf6de1c58caf8de45012
-:0139409c70e95c3fd3bd5266c70828dcc1ba07
-:01395066633923fbc17190aecf8772d0eedd43
-:01396054eeb2854f433cbec5077e10cfb7e8cf
-:013970ed2f4a77e7d6b87676fa2507dda78657
-:0139803ea2bf052176ab6a0bbe764158cb5983
-:0139906bf64c3992d760b09c6f2e5782fc22b4
-:0139a02124a9480fb18b6cef37b3404d9f9d39
-:0139b0c23866a15617931d73559d8704b66782
-:0139c008adadf318cb140c7ec2c1a5b247b703
-:0139d0d49fe7016e6eb045c07765cc4066ca2f
-:0139e08d87c7e746ee860b75753a5cfc5ecc5e
-:0139f075590f5064f101acc1c1f7b3e0bba835
-:013a00b449171212bbea0f9e87a182baecc88d
-:013a10014014e818b2243780dc435055d19fbf
-:013a20a68939b5e38188918b9367994e96e6b3
-:013a30d01e2d8d043b64422d2f80f6d691c03a
-:013a40654932b1fae064126f4a3853b2d87165
-:013a50d1cb71b547f5a3e160e9b3a419cd8837
-:013a60df00da1335af8063a49ecb42eccacffa
-:013a70f89a8735710302de7a5ffa23f7bee09d
-:013a802220dd35ea9454d6f77da08f557feab6
-:013a9059e6944a309b0ad4c6af670e4d753582
-:013aa0bbe44787c17996b48b6513d30561916f
-:013ab0dd1f32678eb5eead702ed18db9c973d1
-:013ac01ab340549b1d786f94b16dd1b943d2d8
-:013ad0a5ac595543161f2a7caef197776d7e70
-:013ae0a02959acf9eae37ff2c720b9bca7ebe0
-:013af001ebf1efab2ab469d938aa52c4663101
-:013b00bc9087d68ab5ab74a42a83bea94931b1
-:013b1064300b9e396cf8b7d82b40a578c1859f
-:013b20ed03f2781e10493d918f7d35d2ed298b
-:013b3019a96fb893f1974f0947594bb0eb95a1
-:013b40672133622993c270b9981ceaebf91265
-:013b50bd063155e93ef682a802f01015766495
-:013b6089d20c9ac26e2008c445a49e43ddffd7
-:013b703bebea5f302c6e18fe329a1adfecfd32
-:013b80ad2d6695df9a49996868f89309bbf94e
-:013b908f1cf54f13e632cd37dfc1a5c52bdaf6
-:013ba0c859d3a869a1aee44b222c34ee153e48
-:013bb094b62bbdedaf213894c066ee46dea9c2
-:013bc0d05d09af83d08e1722d911e7964698e3
-:013bd088155c066c0d1712bf8920f82d3bcf5e
-:013be004751560ab107f94e582051b109e06df
-:013bf06f75eeed30458f1f9b7279873f10b3e3
-:013c00f80525a998b40edcd9bfd812d0ca0763
-:013c10a1dec3b0acc81c68739c715cad169230
-:013c203d55409a3bf91f433a8b9118dbe6963e
-:013c3052559993a4dcabe18bfa22f4d9cbef3d
-:013c4031f91d31d8a6d637221b037d89c4ac96
-:013c5027ab671e6f82541df94136633bdc28b9
-:013c606a80afa8109b16459e2cb134e79df292
-:013c703e4da6e63485334f81a48a4ca05012f4
-:013c809a5a4c749fdcdf1ffd413b8c0de30cea
-:013c9019f8e6db2cc04380b0ca956fcd5ec541
-:013ca0f885c8807581ba66c57cc21cc166a6a6
-:013cb0103cd546651fa89519ea5e8a4da87fa8
-:013cc0415be038f771c3d67c2d99256adf7e27
-:013cd03498dc32e2d2c10b5ee187f9b5777e23
-:013ce07acb0c60c09853bdb8a1be0b73a974c9
-:013cf0bbb4b905b4b12f2de18be234b4e3910d
-:013d00636b1791481f65a38ec65f657255ffbc
-:013d10c02992d39b5535760ce77055059c96ff
-:013d20e4326e480269f4aa31b298d9ee11b6aa
-:013d30391fab646f8dfcc1b21e4dfc6a5f3771
-:013d402dfa43e534899adf2b3560d8a724a0a8
-:013d50b14413b8b2336994abac01000944f026
-:013d6093db1fbf928197b89906bbe224ecb738
-:013d70038f05eec69e6102d8994efd6e018ca9
-:013d8038f401cefde60d3d2e32498e2d7af629
-:013d901a1fe1dd444ba37b2cc3dcfbc442e8f0
-:013da03f4fb3eea030207b48cccb4b801e5f7f
-:013db06501484e334c71287a5ab5c01940dfee
-:013dc0dd7e864e8b02c5796ae15629773b30c0
-:013dd0bada71e8058e9006e7afe884f94ae56a
-:013de0c743fa5cd045705c1db7327cf1c67f22
-:013df06f827c08a8ada456148e9bd399722d48
-:013e00e186180d491fd483d2f953bf0a5f5d98
-:013e108b9294ff22626c3ef50bb009600fb39e
-:013e206271c9c3e6e7d4983f50478b58d79dd9
-:013e305440b8e6d91d27036d79400b64bd7fed
-:013e40e3a4f5726864a2651e2b47cc5e615518
-:013e50f9833372bfc8f974e1738f67a7446a05
-:013e60f0d9c7d37b7418f0315c41dddc196130
-:013e702c3c0fc8555800a04c3e082c77574fb7
-:013e80dc1eae1bd33c3d42569fe8bc09b54be5
-:013e90c3e77e504e8654f5d918f579929c15f4
-:013ea0e27e0e4750af4ebf983c3ac51f00a459
-:013eb0d3d1a861441002e0ac0df665d8465ba5
-:013ec062a861e8d93c331fda518e56b4b57766
-:013ed0c3232716dd99aa100c541ce3b533c269
-:013ee08a3c0c7684d3c86a3b92c734f39b4de0
-:013ef01d308ef31dcccdf80c2b456ed7b4641b
-:013f0062ae1d8e66f0c331c6c44e35a02c207a
-:013f107d660d647f664b60ef3853de98c27094
-:013f2000dfc703257a2e5815b294d2b98a1a07
-:013f3058657ab93117eec6e88aaecdee67b28a
-:013f40806bbc18895126d4511457b274bec80f
-:013f50ec56ded42df92ae18f112561187b2040
-:013f60a502cd35a2ed0cfdee4baca74f8d3137
-:013f706a486ba690cd611ef5ce7b9c334c60de
-:013f80838cc7d196ff5a95c47b3c5884efc6a1
-:013f90b9b32ce71caa3fe90f680e3f6e0a7222
-:013fa01d3983128370c0c962f1f7b8d738abff
-:013fb0482a582b7b8ee31cdb8273f176c397d0
-:013fc00293c5444d55357b2bd7f02885cd7aaf
-:013fd0b6060e7ffb7aaa736694db1049bad672
-:013fe0c6b826df7ebe857b291bb6d73f6a0160
-:013ff091dd33db0ea1bba76ec79fcecdafc2c3
-:0140001cc33c56d8fff4b4062609b3f87b63ba
-:0140109bef45a0bb3086cd49d96567e2af3142
-:0140204d897bc1762013bc757a60c07c04e337
-:01403042900a5f9727bdda72a8c486230aae9a
-:0140409f432ff2f6bf98f7d8b7f95705573b45
-:014050907ee7b77febb7ea5d009794c8750a10
-:014060f36273facf21e7c885e3d57d8930f8b2
-:014070541cfd8df99a723d1eaaffb4f874b502
-:0140800e5ea4ea380b7fd89a3ae3729cddf7a4
-:01409010ec31a6b0eb3b5129ddba57251f86ab
-:0140a0fa7c32dc6be4b160d729572fec6cb7cd
-:0140b0eed2109bc8a46dfb4345714757700ed3
-:0140c03bae5bacd73274d99d5b281aa288a0ab
-:0140d0e0251e1c12b882c1f5a06a331546cf20
-:0140e045c0072f6b45da8d00f7a077168c07a7
-:0140f0d05ec0cf3e4de731c84e1c17afcb950e
-:0141007b26e096f311962dceff205294ad8b4f
-:014110ae96ac6a4b182e7fd626a9eccfbc0798
-:014120c81e72893f1b10d549f7585ecc460467
-:014130ed296bbfb6444a6a96ec78001fcdc344
-:01414083186fd6760a39e082b635ab9b929a77
-:01415001672c4e7e1ec7e4c0aff7253d9cbf39
-:014160497cc0a1683b8d17fc538b3336ef4064
-:01417051323c236df23b2767fc2c7c44867b4c
-:014180f1a4e434ba6c1c36cdb3b9c82f461824
-:014190cf4333ccec9b998794eaeec466c699b1
-:0141a0f0517d7d362090a559cfd71f15bc4942
-:0141b0fa58c15952b87e2a503c795c048dded9
-:0141c0910480271229c87b4258553e7015c1b8
-:0141d08b035323c3b3234a5758d46b176a83fb
-:0141e0e620a9d838c6852eb7b998344f30901b
-:0141f07e2a80c528d8733c6262f9c791898ee8
-:014200ff1269b8d19b122e703f2a8d6e2d6ca1
-:0142108ee8851f4d8f22b25f340d79a5ed6241
-:014220a5dbd724ff027e6211df23590470c999
-:0142305438953686002fe33df5d14cc1e236e7
-:014240565a1f35ba4e7ad2943e280b5ed8481e
-:014250f00d734885d6d21deb22b6d263e67679
-:014260306e4013a2bf08d5116ba410418320b0
-:014270d113eb7fdc5363e3cf94da1909b316ea
-:014280f4aa1d49be604ea2f126d7fe22789b29
-:014290bf6b2a0fcff501a6ec3ba0aca7564505
-:0142a0ae01b4acd2f82c4a096b070651343179
-:0142b00fc1d8b16fce75e103d67d1a1edbb1f0
-:0142c01ddbba8a7cf111bff4174483d5e9e77c
-:0142d0b197b4bb94121a0f1591d8e709076e7f
-:0142e01741a11059b2581c0464ec48855e719c
-:0142f07a03fec65e5db793dee47ef7234e39d4
-:014300cbd5a71a191af50b9be8f069623cf81a
-:0143105376b1ef27837379765ae02d56082107
-:014320fb79376d34bb40c4f7d38617f838780c
-:0143303d88319f39b7b6c4fd5655ac0c7cccf0
-:0143405619572a5ce08da316f50b7bed42f93c
-:014350b864e01a1725129fa50c3d915c9f4350
-:014360432161815267eddbb3df0b5393f6d62f
-:014370a8305791c4a4343e167c7f7babd5e1a4
-:0143808b7c91233bc15c271387a705eec5ad56
-:014390ef890236e60e0c9fcfbbd4fbfea2320f
-:0143a077b947cc577e6dbee2d50bbaa4edfb7f
-:0143b0852a0d365d36f628e4b11b4710116baa
-:0143c000e99620bfed7a917aaac954757f01c1
-:0143d02357dfbdbe1bec40fc5b5ebf462df46e
-:0143e0210b46a4c84aac7dab701f21a7581934
-:0143f08e3220812058eb3e58de638b9d3de7b7
-:01440086569d507f95246b5375ca822bd688a9
-:014410c512081fa6174bdbbc2c37dbc4279702
-:0144207a4dcf855a1b648f88ce4dc801e820b7
-:014430bebe0e689f487477cd0e0696540fbc72
-:0144407467d8dec32468b3e53b8e22863e2015
-:01445037752e4160133e799575dd4277478a31
-:01446030a9372fc7f779513142ff9d5d70fb23
-:0144708fd8e635ebee37cc9c11e3918109accb
-:01448095ddba4ce7c4375507ecbc3fc16fb77e
-:014490e18182ec88c2b11890322d013cd9f53e
-:0144a08462500146118f0aff9e1309449684db
-:0144b0ea021a4b5984d98fdb1eb337f5fa895c
-:0144c0aa38bab05fd740d36767ff52372258e1
-:0144d0b2fe9ea3cbfa6cd5e860b8cd86e9d98e
-:0144e03cefc3f89df6f5de5d9def6ac06287e2
-:0144f069049ab4e09a7ae9546f1baed0d6eda2
-:0145008efee5963fabb1c87f5ff21a87a22774
-:014510e17759bc3ea0b91f21b5748649bbd07a
-:014520ee1e860ae416b1b7950c4b186db57d35
-:014530a7b54a3344e4c67cd1f8a1ee218b86d5
-:014540fedee5d12f04c4b545ebd696c78ae33f
-:0145504d8d8a3d1240a633d8efb73f5f0c5743
-:014560e4103e1d6114b3cf6694652c28cf506d
-:014570ecef00bc1f981c91fe4404824c27a74e
-:01458002fc6142d781528e2a6a3c34d190490d
-:01459056a07fc9cec649164e8c4c1c6271fbac
-:0145a0da1f1f373f26192d4e3c1e8bfd5aaaff
-:0145b03c8282e9caecf350b6e322c385f3c26d
-:0145c022963bfecc5f5d79cb793433d10aceca
-:0145d06e922a6c2c746322840bde2d4135310c
-:0145e0c658e6138c45d2df38848eaa979efde9
-:0145f09ee5e41ec01bef86780f92a0d6919ba9
-:01460084e1f46d046e0a2d662066887989a18b
-:014610a3ab5bf2d2314a40dd01f9ea93ad1e6b
-:014620396faabf8ae0459e2bfe4371bc0c3ef8
-:0146308c05976b8a4bc51f2bf3c69f8af163d9
-:014640fdfa90cb529319fab1decbff1c34589f
-:01465039f264e6c1fa4e61595788058104fbb5
-:014660770341292669366f277bdb411f1201bf
-:0146700d834159472538abf25f34e4c69d3de2
-:014680ff638f69f7d18de8180fa37a0cbfa267
-:014690bc05117edc67cf9dfd59a0abbf9d1432
-:0146a0f35c15141adad7f1a53d2d91ebc7fb83
-:0146b0241a4a27cb5113ddc584d2effeabecda
-:0146c097ddec9c7a30af0c0ee63dfe8bb8da2a
-:0146d0b2cb3a86b83363d8a0be275a4d1fa435
-:0146e0f269434752a025242086ef1a635b335a
-:0146f0ce7c7d8f9992480e02216ebdc1fbc190
-:0147002ca9c4cf56ee3db502fc4cfbe8d25c3e
-:014710316255d1f316e6c4c4fff742fd6ed718
-:01472063aba8d1191125998a6aa41ea9f2fed4
-:0147308323063425c9ec90032d4d1456808064
-:01474026b972a64552a56bb99c7f82b4b08af9
-:014750c595a00f7927a40c7d40bc9f8dca86d6
-:0147603aa8c947758d8259613f01748e619ee5
-:014770c6dc9a5c3f47e4dad533ec0ca4bc5973
-:01478021ffb4eb25d041b1da3517b9900edb61
-:0147903fa8c6750d9bfb8d23f5de26efbc2836
-:0147a03a38a9145ef8e272d462009fe0a09354
-:0147b0a88c4e8d604ed64b962b61385e69e789
-:0147c0a63d260ac801554e6667bcf35e315d8c
-:0147d0a09ff5a031bc7ce42530828486297eda
-:0147e0b5ae9008eb9b2deae0064dce44db823a
-:0147f078e858d670eb6c3539cfe9ecb67c0571
-:0148003740602b61e7f2fb08f5b43836ceffa8
-:0148103858ce078ee371096bab400cde33dabf
-:014820a908ef8e14c1bf6a5facba796533ee7b
-:014830627e01e61734c6e8b4ded836ab4acdbb
-:014840299f18cbafc0673daa577badbddb4c51
-:0148501ca229a0112f97c868cb583c6d675934
-:014860d1a46bc97a352b737faaf5f9548b9dea
-:014870d27fdcd7bc1f615e6e338c68c7241795
-:014880ccd30258c5e6282f297e2f2eb5281cb1
-:014890081ab86c34ed9b006192426a54e29c45
-:0148a084126e460a34c6c2141b8068e18144aa
-:0148b0bfaf7f5ac9529d994132076ca4e723db
-:0148c09ea01ad62073c0e33ebbf4f2e265f24b
-:0148d03c5ca3a1781dc781fbcc93e8fc574f46
-:0148e0cc529ba6a8a9185df72d00cecf2b988c
-:0148f0c9e8275fa5b7379b070a131d2c7ef94c
-:01490094ef0cd8e784e14edf2f2b6f9e994e3e
-:014910ee36a1a556ebf020127b3f310e8c9ad3
-:014920c9f18fda6a5210b5eb5e1328f756477e
-:01493005ecb943f9373aebf767c9cba4892d1a
-:014940b6ff860a8f9eff82b36fbf55e965694e
-:014950b81b1d81160b1898ba34182566ad6981
-:01496009206b95d875acb0d50fadd47550288d
-:01497051b0ae3e48d2fcf0f7908002afd93184
-:014980b9ba67f2c4cdf94060bd582c71cf4e91
-:01499056767fc46481e96bb57420a493c2f723
-:0149a01d5a51462796da4d6b2e5ecf7683438b
-:0149b033444bb8f139cdf4cd12d81d477cb35c
-:0149c087fc165972fc86b74162d7bc18611fe6
-:0149d076c60b68b38fc072d3726aa7d19e1c16
-:0149e085f6fee1ddd210e445f6b68c5ce2dfba
-:0149f091bbec3df3b7e6f763881b3bde6b5f43
-:014a008fd3c40e02c1bbaee1af926d44bb017d
-:014a10584de8567528e118826e5a79acabce41
-:014a20004545d4b489227ad7512be0d6850415
-:014a3075d42b7ed73726a94d4880e55362c8d9
-:014a407b81ed43f8bd213aee58305aad7c94c1
-:014a5054894bf0c25add086089025454ed8db9
-:014a60cdadda331245dc3fa7e18882791f4301
-:014a70180e445a8be65c73a69964ef1778f5cb
-:014a80f0107982d616e27ac3598f0704912eab
-:014a900efa42a379cdc54f3fab6dd3835edd78
-:014aa012165ea206b233054269dfb761cc7d92
-:014ab039bdf4177138f688e2a10deb0479e1c0
-:014ac0efce68f0ab8bc60688860a58b7063650
-:014ad04d7395aff0ca0fec85a0f96046383490
-:014ae07b883a1e5adac33efe1972969b682d6e
-:014af03f096886d000048b9578bae9d1119c7a
-:014b00b2dfa3224a9d9e41a8d3d7e64b5e5322
-:014b109821e912db1fdab5a2b13d35efccd2a4
-:014b20a697bf8a7f314adfb1deac830af6a5b3
-:014b307984d031b87ecf8e002da2652cdf3d2e
-:014b405599c70492aff551d68e357623c6bc3d
-:014b505c678b98c2ab337444abfab1904695f9
-:014b60cd8f94ded12de18dd54abd40aeb45f61
-:014b702fb4df916d2bc2aa798c9b647d7e82c8
-:014b80fe2c133313f1294db5f09cd2bdfb866b
-:014b908e2fe4f224881a2dec58ca199436b6d1
-:014ba025e40eeea8673a9306c3e2478cc61790
-:014bb0c70ca9022ea719b2137bb0dddb527679
-:014bc056c36c75a3b506097e0266d467a4dd85
-:014bd0147ec9f115a7db3dec91ecbaedf9642d
-:014be044fa4b3ece30be0ecd1bd371c2b4ce1d
-:014bf09fcb02f375a5b405a3333bf906d1e289
-:014c0005a8dde299f593b0fc1fd5b005f7da10
-:014c10b84cfe93fb203e3e921ece3b0bd8affe
-:014c20204c8f603a1b79d87574baba387bb3d8
-:014c303467bc4980412f780001f40362466b52
-:014c40bfd9c96494beb8c57aa0f4d4f77b9be9
-:014c5025b245fa5202bc679132f5397a314ead
-:014c605cf72c9ad0e4fbe1d465380f30af9eda
-:014c706af6b8b40de3ca01c6492ee95a90fded
-:014c80546abe851d9906edcea0cd0f880f6f32
-:014c90015d115799a12b8a044aa149d450456b
-:014ca06c97fa4a19c5869854c7fb219502a452
-:014cb0cece5570d7fb3057bc9ed1cb2d111e8b
-:014cc065315e2ce895b9407e328b56cef6fbd0
-:014cd0ec58f85a1a90a8338d86ca883c075021
-:014ce08d97055df519b7bd65aa43b0b6c987f6
-:014cf0be1529eff918272f947a302b3e0698f4
-:014d005cb81fe62eaf693de5aa277608e38b46
-:014d10079948b8b16dfdd1e36277fafcd0d26e
-:014d20f4bd4873e5fc0d9441c108a0ee96df62
-:014d3071e4908b0a39d913b2dff780c5d61070
-:014d40e5eae7edfc49ef34e773d750a30ecfc9
-:014d50d07d4c1a3fcedd0f943f4d589e97eeff
-:014d6000f9537360a71ece4528922401de73d8
-:014d70f5ef410c9e7e149a6c332b3ece7632a8
-:014d80db337f6a73ac596d7d781cd76e5f0f8f
-:014d90d27638482bba88d1e4997752c2567065
-:014da0522e4f7fa5e0aa1e3581a05ec9b453fe
-:014db012dbed7d5992916e8f12ab0c18832b20
-:014dc0f137929c27bd65100d6b9f58e2f4533a
-:014dd0a045b09ce57bdd241dd1c5840e5dcd54
-:014de00c8914e8d3b2e8f6a850e4c868363beb
-:014df04ddc19a437b6f103f4e36eda4301db8a
-:014e009f6dc6f4c29330e1edd57b212ec347fc
-:014e1088c91d0f199b4dbc47a7909788f142d9
-:014e202b0385252abbf474afdba77f64fd5dcb
-:014e3096dd1eed0a6d533934c60df76976da6e
-:014e40ef78ab8a84da27b80f9ce3f0ef13a401
-:014e5012895aaa5a08d1420e0be118c879c8fc
-:014e606448d4e54ed24020c6b1a1fd56f38aab
-:014e709a8d36d2b95fc61607e30af5af0a4174
-:014e80050f800e6bb0479e20aa416875eb2ed3
-:014e90145c23ca49fed97611ac3df96e2f7a86
-:014ea0fda6f67d7a0b8512a21dc3f65bfc43be
-:014eb037ec8e8fd3aff5b91a4cb16fa9869fdb
-:014ec027a3deb323619da007b5165f217cf292
-:014ed0c7e930fa426c1a535ac8ab8abf1d8bd7
-:014ee07a9979fd0a2853e4b9e83b6bf3661f7c
-:014ef059e024975f4e12ee5f2e29cede74661b
-:014f006f32f135174aa22e69812e8e41416cf4
-:014f10c3b419222363f43d8e08b84ddaae2250
-:014f204fd68da08789a79075edd87b5c937461
-:014f309bb0cd25fa3468898fd5002328fcebf0
-:014f408c5c62f54070100f92cbc004729e9fcd
-:014f50dc3b4b7da835361635a66dd6a4e78d00
-:014f600632884a2058beb563f2172e7b0318f2
-:014f707058e68fe115930bae7cb4cb551bab65
-:014f80c94652429527603d3787880e21ec8e23
-:014f90f7442b2d45dfbb9dab1dfc846f5a1bcc
-:014fa00011a94f61d0a75abb08996931ef285e
-:014fb0fdc3235ad63c2baea3da61a75869dea7
-:014fc00e2358fc972373340eeddca4f7d8ea86
-:014fd04b0948b1eb97d092623e0d0435be215c
-:014fe09496f9426782c468a76d93c810570eb2
-:014ff0fd450be0420bf2e7ea56b7e7c145c0eb
-:0150000c0951d7b1bc69cf73db4199409fce16
-:0150100022f444081e2c01ab54f9fe85c4a787
-:015020927e1d8557c749b523c7ed9973b1569d
-:015030823477253cca4169c9a20c167341931a
-:015040f8bc3cab659ef25fbb77bbddbd1155e9
-:01505030276739ddf32d3a94bd39322568d663
-:015060044b15420075f727f673a4ae489e0a24
-:01507057de1ceff70680398daabd13de171533
-:015080d8cd9cdba2bcfb70df68f707367f706d
-:015090b534405436dec8bfe9dc67e47d7d3ef8
-:0150a00f26422750905a0bdb19cfd66badfa9d
-:0150b021cdd1c59960bd6872e9a8c6302cd3d0
-:0150c05f95c5c329224a321a1f750ba3721858
-:0150d0882d5a607459ac955e1abc6a78c39dfc
-:0150e0a7a3796d9c3be1ae51749f45364dfd77
-:0150f0d78d32c787adc9395db2387bac064481
-:0151007aa2cb98d881ebad70454aca02584b50
-:0151100e7bd3ca238cdf6400ff84b846d408ba
-:015120411588c0b3015ecb7c3c7d874f1dbadc
-:0151302433df34642b010a75abdb6922ecfe9f
-:0151403ef4bd9b60881a87a60e4d984769a22f
-:0151508beecc41e8a1109331a54181982b0556
-:01516084dc8350810850f5958e85030308e2c5
-:0151700a5ddd18c0b9d28751d0bb9bff4ff4df
-:015180827d35693e63504c4c56d620811b8834
-:0151902de2d66c2995573647489b18a25cffb6
-:0151a03db77e6e4b038b65501b59ee579ea107
-:0151b04c98712d5cca978c5fee5b371e4e7ff0
-:0151c05fd1d005b819017cb42ad8dade604923
-:0151d09d05fdc7d29f58740ff597e648bd88a1
-:0151e0ab647afbeead24eee8c927ef8a5ad351
-:0151f06e6d13cf888f06be7e5317dddd51ad67
-:015200f4bba925f446c2c4ae58d242125a178e
-:01521028c078372ee33c26d0f7176ab2f8dca6
-:015220046aef8133ef4c31eec9f69ad19d471e
-:015230cd990e5bb7fc780ed9a7212e8c48fcd7
-:0152405d33af0c0440f0fe7157c9ef1a0e915c
-:01525049f4bea4f9d48803f9c3c52246f36882
-:015260929cd91f34b11fc32fd2bf7b0ad4ffe7
-:015270f6a1029de6edde9ce4e7673ae8060124
-:015280220f7b7e3fb02953aa164d53c9e1274d
-:015290a580625caa25701ca5715d2bd6b4bbcf
-:0152a040fd64d355cb0dd4b512286c15b0e9ba
-:0152b00b0b220f4a0de4942885e74a211f0387
-:0152c0c9f18d316e75b98db7bec54b6bd2e625
-:0152d062faf681d4bbe483e0f45078a3615d19
-:0152e01624e9925d6ea9d8067589ff85b13d39
-:0152f07fbbb4a6d8c3569aa5a0712f1de0316a
-:0153004d643353f616f8b7992164f17d5d8b1d
-:0153102df1961692550e932a4c4d1dd7434bd6
-:015320cad6efb8e8653473f51ee1e4c1c5f8af
-:015330a28046cbe97cacf983253ea74b530069
-:015340e4f3e18655dfb5edb59637094426b362
-:0153502ccf9def9aefe9294aa2a9e07c2415fd
-:015360eec46e10254ac3356b709dcb772e4db3
-:0153708776d8e967e9a7f2123f4ec41c3c5e7f
-:01538018b502ee676ef747056c5ffeb7de6711
-:01539092f9ea8b458793d2d96902f63cb04f39
-:0153a0f9aa8b8b51ce28bb228fb2a7a6343b6b
-:0153b02fbbe0c9bee1f83de2d864a15fc30149
-:0153c078d3af1209208783aa9da52263ca1820
-:0153d0e1b18053feb9e58680c00439c8693467
-:0153e0cd0aae5e3babf86b999d117a154abc03
-:0153f0a9928acfaf27a79a5aeda95abd13b9bb
-:0154005cb13a6c65843383e8a92f4bc8d499e5
-:0154100bfa4e71dd2b060d560ceee19deabf74
-:0154207d88c91e7e28bfa4729be7c3ef8bb5c1
-:015430a743ef2837129375c8b9724b5301f87e
-:01544058c44110dc71b4022e6cf99585399a7f
-:0154502904197956d1c38028e109e29800f97a
-:015460d788a31950f9d8d7a7cc293780e810e4
-:015470b93e5db29cc9f61353d7ebba47378339
-:015480f306fa831ce6b85f5d931b354be939ab
-:015490a798cd5143d75f8e71cbe74bb5bbf702
-:0154a0d8e3424708c2b17748a2149652f8da48
-:0154b071da9656f5b906c12b10d6a3ab8e605e
-:0154c060ddad6b1f2f3f932e3e448933e23235
-:0154d077160fddc9406f871155a229a7694838
-:0154e0f9824f88466490bcd18ad15c92d4ee68
-:0154f09e524416e276e5598540b3d1b597c5b8
-:015500922e1ea23e8fa9dc2c2f5de9f5aca030
-:015510c2b1d0c69527d3fea0fc8f9816a4f2f8
-:015520a27fe3aeaed848de05bf143a5a5b3952
-:01553083663a41cdd47c200a12486834644fa5
-:0155408f462392c200a3e24af88e7480d1e01d
-:0155507e5046935aaf84a86d75e54fd5989ff8
-:01556018fe1eb369a5142cbd24ec849c5294d4
-:01557090636307c76fff8e18ae8256ee7e5b06
-:0155800d264964daa32d808f33c0f180a5c196
-:01559092600b56e8b2a1b9ab280a816226ffa3
-:0155a0c1c2c91fd667dba2f9f0dfedd1ccbcc3
-:0155b083b7ebfb4da431b8fbcee2a5d6e984ec
-:0155c08a16f893930c1ee4709340a1799d059b
-:0155d02ebd658fe9741e4c1ec5a358ac6126df
-:0155e0ddb3f215ce5b8da35e4d3ea995dd4bb3
-:0155f0b09c53184934c6dfa3a9762a014c53dc
-:015600a79c1bd410fba816a36d507ea7116bbb
-:0156101ebc5d5f6e84521583aebb22763bcaf5
-:015620d9e4eae57a2a7d50e162728f24fbf2d7
-:01563036d1da4c1b90146b6c24875113646013
-:01564024c7e58bacccdb4508178701e633528c
-:01565055150b8e8fbf3f601a648b07444fc506
-:015660ac600243d2f692e5a72c7096894438cc
-:0156709a2e829be657890ad8b0496319048830
-:0156800bc51f2c5518ff34dd1b15000ba11cbd
-:01569027e76d76d9b905e9f1a3766c8dd95066
-:0156a04268d6438e7fb0f76ca1282049af6b9f
-:0156b0b55608657557cd09f5911a87f0227e31
-:0156c034298e96e145a3dd7ebcbcea0c3bfd7c
-:0156d0adbc033db3a7c0315505f9e82364c9df
-:0156e0b42ea53cacfd1b3dbdb370297300e9f1
-:0156f0ec2bda73044a35a30f062cde834ea522
-:015700cffa7bd57c1addc0ad4d1b4023c46527
-:015710e0c29739a79622958c7813c6aa1de80d
-:015720eb47dd149fb19035ef39da4c73e9fec1
-:015730e0c1710f6c2ddcaa75c4e49892942368
-:015740c1b72ec9dd15aa1595f83fde32b3729c
-:0157502fc581a6ee929b446c5577936d20ae83
-:01576052c8a12f5784ef9f78cde3ee9e72f8c4
-:015770f0cc0ef3b84d9cc955cd25789ff4e0ea
-:015780023c21e167ee7af18fc952c76b9c7b42
-:0157900c8429474aa8f17e4118b6f92a0029e4
-:0157a00124cfa6417cdda11221d5b9a5ae91cd
-:0157b0c999283f59ebd13b368acd769c4f7261
-:0157c0e0335941551ab555b41225831ff70ee8
-:0157d05925c6cf4ab5ac1b70b657895b2bf654
-:0157e037c5946a75f5adc55c1b044584966b15
-:0157f09712b32749328a39fc12ce4012eb6986
-:0158005bda6cbd74769414ca0feb14bd9ab6a4
-:0158108d75ed82746c69962f2c6c6fe32eadec
-:01582094677c2f1a88dcf81b886e03cde4d45a
-:015830d9ac45ca5f127bf8bd39617161b0a455
-:015840c9ca31487c3409a1976443ba20fb0497
-:0158507e56526ce080490759355a184b85b6e2
-:01586096d44bdd1de0a954d09f62a827657b2a
-:015870209970ffa70042975e26559d0b4987ca
-:015880cc81a726b36ab6964a705bca05b75a38
-:015890bb291e569260696f5f457207f59bd529
-:0158a030b026e01290a07c62c97d899f08d9c5
-:0158b073d18897753250f935fd126f600b0942
-:0158c0df9969d9a21ba6ce3006a2aca38368ac
-:0158d0670508a3d8e7c17dbe4901bb6a36f225
-:0158e091ad94121d3dff60226aa8d04eff4dc4
-:0158f069c7fb652002182acb1daec34adc5712
-:015900ff55981d9d8744ac1bc55d8a4a445af3
-:01591062cd76fcd701d8cf2f2d4043f6e1a75a
-:0159209c8f430da50d42d85be09bc50517df82
-:015930e0f9a8571d564d19ebc08c142ed89b75
-:015940b80c93647f89e31b4eb56ff8eb2ab082
-:0159500ddab25011f7d827f8a846c25db4b1e2
-:015960968c901cd6849e6f0162fa81a0174f34
-:015970a970b33af2d01f5addd682280a59b3de
-:015980703e8e463dff497608d2cdd63dd92ad5
-:0159908e9cae0aa24fb8499653e9a135f45341
-:0159a0ae042c274150d0ee8338ab289ee96060
-:0159b0dc5af0f261ceab80db969d32a4766997
-:0159c0d6892b9c626392e672065f4cdc650b30
-:0159d0d7037d782b807d387e49441456f3d6c5
-:0159e0a0060702c3fb5553203ff3c9222444ec
-:0159f083a97aa2e153870a8a3e9f248b1f3554
-:015a00d45771aaa5b31ddabd28d0910d22d067
-:015a105657c649d08029b337882fe279414bfc
-:015a2019f8f752a1223c75a0195cc3f1cb8575
-:015a3054459f91f92ce5c8f8368e3c172ba799
-:015a4025ef6ed917a5a51bd9b8e48b0e813735
-:015a50c2e6e553b232c7e4bb339b8360f52520
-:015a60889f553ae13ee63c7a7b02d71617821b
-:015a700d779f354a357dfd6256f18fb1116868
-:015a80a6bf622937c76ccb78f629399d9be998
-:015a9069b14e90e740cc31ec3064b01eccf242
-:015aa0a9b6ff8e0d7707dea8e986b7f1c15164
-:015ab0854a00fb18c162fc225e5a2abefa041c
-:015ac0b775155afb75666221904e7b6a1f436a
-:015ad01e12330b20392fcdd00b628662a0b01a
-:015ae01a0370e479bccab4693f69e08a327bcc
-:015af0a3603e0cbaf748ee28c9e7fee5254e64
-:015b005e349f373213d339d4e5f073c1343eca
-:015b106042738a7c9745bdd9969094ea5b12fc
-:015b20a0a3a3b1788c73543b36b4cc081b33d4
-:015b3099dbe171ced1c08b81c5e0bc8b47043a
-:015b4067fe8e8e9cce2aa50b267f2ba305df51
-:015b506d9cf9fc91fc89b753327ec35e3e91b8
-:015b60baea6fa5c5d429f879a0d45fc6fd51e5
-:015b70535cd2ab7256f7d44362d648915da63c
-:015b80d9ec8e45f5699e348ba597892849611d
-:015b90492895459918aff0b7de876d7c2f68d8
-:015ba0360caeb948255ace2ffad0295a733e30
-:015bb082d8fcbea78be749b1c9557a80593b91
-:015bc06717be85c26e1aeaca49bfce38986256
-:015bd0536b588396479c9b45c16c9233d87d92
-:015be0e20acedd227d2ff8dfc24523709c1a49
-:015bf0624112893819c94c6538239fd6be7be2
-:015c0001db43412b5971485d335be39a1f6702
-:015c10528e94e37fb73d8b02806d169ecf31d0
-:015c2088283126195a20e84b7be851aaeb158e
-:015c307335d0a5b848664a1a98367fe5739a33
-:015c401fa709092a31211daa7d1d3e9e59f243
-:015c50033e12de922c6172141e419a1257bcbd
-:015c60848331114e55ed69d5cc52b3228cf724
-:015c7094d6b18ab042c32c79ad2c4c35dabff9
-:015c80b76e86adcdc177f1619b35f39734c8d1
-:015c90dbb65018f9cda1e1936330ad592cb0e1
-:015ca07f1f61f4b1cf92fde31ab6e776a95ccb
-:015cb0bd1c6ec6e5a8036b84d3dd88c33ce310
-:015cc0da6d33add40271b75ca9e15ec00337ed
-:015cd09208f99469f8590f01c7f561aaf222de
-:015ce0b28005f2c6688d414ae248f607c3a0a2
-:015cf00d89ee9226a06dc9ee60e24017ab0ff2
-:015d00e96522ed841907870b15caa56e01a093
-:015d108636594b7f7cd0da818ee96157ae91af
-:015d20bee15c3ed4817958a634540aa30cc68b
-:015d30d8e66c1602cc2711ad8d358e630d193e
-:015d407f89d8d6af28639afacd078447311246
-:015d5000a179f5b9682ba17d28787ef5826bde
-:015d60ece6fb48c9376d9494cbd1178707b153
-:015d70fc6b56e0776a000fe91df935cea1155e
-:015d80be23ed5d598f4d08455416b38557bbf6
-:015d902ccbb33170c65548ce2a93e1c72189d7
-:015da05bd8e902c62b548005858bb06f47dfd0
-:015db03008d99041c7f604ee82f065f5f06859
-:015dc0fdf14f62dd5370c0aa7cde5b94d65cbc
-:015dd02d5ced99822f0d370db184be8f0db8b9
-:015de0c19b24bdc9c011782ea5b974932a3f23
-:015df0b48f6d08fbccdb407766423396e1dbac
-:015e00d1a8ce79bfaf7e34dddd0f8b3be1becd
-:015e106dd2e4c814cb05dd3f12ab2e3a020d45
-:015e20076f82420a02853ab69d118a80c351ce
-:015e301487b11741ad518d69be1fb6554ec69c
-:015e40b9094eafc8238055beed8cf7f08bf2fe
-:015e50d756937e343a02c8034276ac5b025bff
-:015e607ac35458ef9b2e51595c8db746acc137
-:015e70133b9c75be2a9858322b51cd8424a1e5
-:015e80114042374e2f877e12fe7eb649a67588
-:015e907200c3e94adc6e976a7a442ffe5aaa40
-:015ea07b8a39702cba1c930069ee165cc09235
-:015eb0e7a329037821d672f8f45dcecee17a2e
-:015ec02c6041ae9fa0569e077d897e9db3bc3f
-:015ed065b68d7b4277061dfa7e811e09c741e7
-:015ee01f448c201ff197200de3a68de46c06dd
-:015ef04dc3015d00e2b199ba076797c66ca1fe
-:015f0000aef388bdec00584b950231dc0fa9fe
-:015f10233d3c5f50d8f6ab0b621fd58771f0db
-:015f20fdc6f69f651a0874fa8401343af774d5
-:015f30cb557435c95abb1080c3091a2ccd7e3b
-:015f404c7fbaa9b813e8f0bff0c51b264f6fac
-:015f5029fe2cd53e49e2e32db9d2df2f330ddc
-:015f604f44be81f448b30a2b955a0613d15b6a
-:015f708e283b222a5a340585f00c4cc95ca195
-:015f8050d000c288f537aa4982c4a8ab8d98a5
-:015f90374d5fbf9b197d86ae33b4c5eb850954
-:015fa07b6bb59a3def01ee685c796b3b432b3f
-:015fb081ab2b36ae334f0ec139a949c490c576
-:015fc01cbf50b63dae520dd0a30ffed94e8965
-:015fd0e4292e31d451ef4b33d7b8dc96dd2a9c
-:015fe05b00622eaf578ed757090d83b43a764c
-:015ff078276f494da58739d09a2fbc1945c855
-:0160006a2b19d2675e245cc4df05dc8bac0c5f
-:016010acf0097ee3b22398585e578c174fe870
-:016020d1f871d4264e82084ead9fff229a35f6
-:016030bef6aee9bc5e9e8085c57d291f743766
-:0160404cfbc92b62a7a89f77b085b5f325f2d9
-:0160509c738e856c596d8e2b4e86bdf19a03d3
-:016060f0c18570f2fec215c77fb8386640b548
-:01607046bafe2b226f39d6d71ba3ad63814792
-:01608086c8322e47dbf324c734e29bbd0bd666
-:016090b90eade4041cfb6fd0dabbfb8f3aede0
-:0160a0d6c009f5e03c0f838e6e40f6c7d3a55c
-:0160b071cfc5eee9871d6b55e83c0d2ac23fad
-:0160c0128a50ad20fef70e64ec2d42105e9c86
-:0160d0fce3f1cf7e2be7376ec1f0dc6256f703
-:0160e05e2fb1d0dc83bf2fc78a09b6878a9ada
-:0160f0d06c5be2716e077e0f3656feebed1a6c
-:016100917e8337076f77f7125716b5718c2395
-:016110b79843c98c64d58fde32deee291fdc6e
-:01612091b6f68c8b1e6408b5dc3bebc08e12ba
-:01613092f015e05403e6630a50e4149cfac90f
-:01614070be003cb231be02315a32cea6fa5d47
-:01615066f5bbef09704e8df4865ea353cb5305
-:01616067e3da6c2797f69c245b64b97e4a1460
-:0161705e8b20e381fe6408ac267a1ae37ec7b5
-:0161808ea9b61fffec1095ac83acef698b5d86
-:01619053888382658daeeb9fc023a378d062b6
-:0161a05d55ff24c9ec426132a5dd44c06ececb
-:0161b0dd511a02b1bdb3a609ff71121a4d9625
-:0161c077dfa993e629976befd49d30b370e2fc
-:0161d07979cdef287a359694ce538e668a5d91
-:0161e0e51b76c76525bbc15c07f6407f9412a2
-:0161f0a27994b0c040e789ec37376c7da1a830
-:01620000f73e5cc965411574d44e2dcb12258f
-:016210a4a24c35b1e073e81642ca568182db68
-:01622004f8b13164c0fabf45ce7293097ff168
-:01623028d03a56571ea7d3f25d1edce2ec8327
-:0162405026ef58b2790d0f13c70384fdb09889
-:016250ffe23ad625cea034a6ee4d3351a3ecfa
-:016260eb766026bf65ff918b6b125e7bedc173
-:016270b0bc9dd0c3aa78e8f26cde2245f65d4a
-:016280f6028f17710a440945e18b81442d0abe
-:0162903cd35fc5d08fe580b18f9eb1d7e805e8
-:0162a0cf1d8d9a7b451fdd85be9c4218e7d7f8
-:0162b00531dbc311cb75e6ff44bfac1f7e09d8
-:0162c023988409d9294578c394b01fb3335344
-:0162d095c5358b15e782577cc1134416b41014
-:0162e05bdd20af4fd944c2161da14916121765
-:0162f0998eb2bf50709fbecb20e3f45fbc812a
-:016300e020e71c7968d79b8c81551e30874dc9
-:01631020985976cde5eba54ac2690c638d5971
-:0163205202c5977e36f8be71d70a4ff0491974
-:01633079026d6ca41eb3d2b86952cad672e8e8
-:016340e9ce1922b33baba3c85a5495e8e0a9f4
-:016350042ff16bdebd884684875136679783de
-:016360f728d8e548ee73dc1a4c15a9ad80f888
-:016370c19a8f4ba0d44637128eb4d4ccd8ce05
-:01638016e0f600463a662799663464324e1882
-:0163906cddba5c7f8c9e5bb6bf3d590bce8694
-:0163a06a924b6fc9f476b0e2361c0c7e2f9061
-:0163b0dbdf251c5a4d9f9a88138f04121bfd5e
-:0163c0eb3d940699cce3f063868ffd5ffd592d
-:0163d0fd11a2e25ba32a1e803864a8821fe65b
-:0163e02bfde74c7183d1bff91c1a85d44e86e8
-:0163f058a85022860ae822a54c802aeeeb3ac8
-:0164008be27ea82f6ff93420b60544cd9f4782
-:016410c316cc77dca041c9a4f102ae45d68136
-:0164201c0cab8f2139e5f34f658c67b537513b
-:016430d9254938369b44148d245a90b9a7b571
-:01644028212eb2a9d8c723094edb2493eeb68e
-:0164507e8beed60a24fa5bb2158e489026c73e
-:01646014b3e3987d62043354c542e428359fa3
-:01647031ffac16cbef4b91d9f5ba87df6e6da6
-:016480392bd855708474538808a266dd775efe
-:0164905057e22aba47f4b05f97a88b048d988d
-:0164a0b5f2daa634d40861343d4bcdb10c2e7a
-:0164b0670f1694808dcdaa688639f4afddfe29
-:0164c06487616a12ef67af133da74831cedc49
-:0164d0b6faa607a7e17376106ec7b1724bb53a
-:0164e024517286e54753f2202e2f797338d53e
-:0164f09fe6c43576fd3409baa1064c0d736cf2
-:0165002aa24800eebc67a2cd9fb6b7c32688dd
-:016510348516c2501e6cbff6f546c7cda887df
-:0165207e8ec920b0f9b5981c516f99c63b3171
-:016530993c7a326f612bd00366ae971a15fd08
-:0165405a416612a5ee845eeaa678c11324793b
-:016550bfcf6763df00ef888d8cab556d53d4d3
-:016560735a51f39b65e91c525df2b515790f40
-:0165702b82cbe982a68bfc4c248dcda6709642
-:016580a76ecfe08b73330f8d539212f2392461
-:0165907a7ce091da7d1e7a842b8b4af04aa377
-:0165a0490c972f6a245a0622afd7e8bfdfda41
-:0165b0d816e86226a10f6dfc2f05f0053dd3db
-:0165c0c12e7b882dd41ffc51a04dbd64da5537
-:0165d0db580e70e75a9bd83120826cd2bf283b
-:0165e0b3b01933457d4519745ea4072fc98567
-:0165f07af73070568bf5c4e3a3dbcbb90d90be
-:016600825d92df9d3af60169e3bfa8d70e42a6
-:01661048757249f2f6047e61398dc07c505688
-:0166202a41d28bae200d14df3802cfff29c573
-:016630c0f3c7f48f5caed691b29c617432f9bc
-:0166403b67a14e027592675c2c069bd1e73534
-:016650a02fe771f4049052057e2aee5ca9c055
-:016660a4eade5bc3a3a2c06a9f26110d1373ae
-:016670c8fc43fe02d3ca6215c10cc53da23ae1
-:0166809d13ddfd2b32c4c74ee9b537e8d40028
-:01669069565b1cd75fc7132341bfae06972ed5
-:0166a07eca39e74477bdb66fc6fd0c58406806
-:0166b08fdbcb201813456fe720b4e7787cc106
-:0166c023e016373c5fb3bea8f1ef45269ee7d6
-:0166d014cafd8dd5043843779925e782848cdb
-:0166e06807b37ff5edbfd3380fd72ccba69b41
-:0166f0bd9cec4e31c9114dabae12c96b1dd092
-:016700f893223a7ffc1bd04d00ec57f9094255
-:01671025d6de29507f282e64120894335386ec
-:01672031574c279f6bf11f4754845f8690cbdb
-:016730f74630c2a067b5613b241fdc40f8acd7
-:016740f105a4e3b74eb3ee8709ddea350c4f9c
-:016750ff9983eae15f3abcdad2e28cb231e3db
-:0167606b8908d52c27681d6031337ba63d2b56
-:016770e0731d1e101befcdddda77363149d8fc
-:016780c2398425105c2470e6954c34619a0f1e
-:0167905277b856c41834d0e6f10c83e61bdfb8
-:0167a0c4c50379f6eedad47c881a5a117f4078
-:0167b031539d666396dcd1172a4efc5088151a
-:0167c0be2473700619594ec2717cf27ea61b87
-:0167d09222d71ca8936e8f6a6bb6befe61c230
-:0167e05247e1250d56f5d3dfb98fad84f0a3b0
-:0167f095c843c8f67c1be5d2a82e6594502757
-:0168000bc7b33d3b0f84f484f2ae11bcd6505d
-:016810294d34cc62d9915cbc423c277d14eb89
-:0168209d485db043284220a397d3c15c399907
-:0168300177e547758898f3a56c544f4a5e8c2c
-:01684079d2424a494d6cf1dd9d9a2458e735bf
-:016850a4f42b0d9e50d6c4e78ea163f20d6710
-:016860e5b9c49d4d47bd0c1c3a95c2456375b4
-:0168709c39c8a74e0439025d242a4e9eaba5d7
-:016880ee19e20fee8fbcf5b85156c5f38587d3
-:01689074625cb4741d583452656c6c7c8a07d6
-:0168a0637c8e144ff72064b13c9dead981377d
-:0168b09e3ac84dcb8383f08bf57c96fb82c122
-:0168c0ae453bb93e707a09f51b886329b33387
-:0168d00ac1394e054d21e7e4670581cfde6fda
-:0168e038c7274e440858fa32475e4d2c817116
-:0168f05ef20cdda5f9824ee83b6a10a7b7acbe
-:016900f8c1f78812b5c6fdc396ed68ff446454
-:0169104bbccf1608bee88319b8c81b6af09c26
-:016920985c1605df6b545fbfe629d48796d607
-:016930596b26eb94d15c4653d7f78bbbb238f1
-:016940baa34e9205a7b48a7b55e13e4896aafe
-:016950c9e135f723c9e7f35c8fa1619a67177c
-:0169602692ea1a5a97e8b8f8b460f5de78f3f9
-:016970e92dc9f043f8bc83bee44d4410c7b91c
-:0169800466d564f103cfe10524ac519ba9edcd
-:0169908105121be9fd378fe6fa2ad19d8db924
-:0169a0127d5a3c30f3ae7664925d85602a3023
-:0169b0d6833fa62452603557b398c2463dc4ae
-:0169c0ebbf424aa4d9a2545f61d600e22ab962
-:0169d09fe5d9933c9a579bda6cf140c780d502
-:0169e0d92a185c5dbf3fc55161b76ec045158f
-:0169f0d981ac02c5875539982b148522a19130
-:016a002525c9a7d91537a3639a8c8b1629950d
-:016a10a0bb9516e172e806d185c77041b46b5e
-:016a203b4063b591c7e81de61356729f958278
-:016a305f600cd8b5df17300b4c58dfdfa41ec5
-:016a40e8c806ab90a9d1557ff0492b2ac1b431
-:016a505e0fc8e68b92e7fab4d0cf26ebdac74b
-:016a60aceb1651b882e403f97679d185884090
-:016a70ff7795ad5d04c3af3de383fe9344a029
-:016a80275e5a7c251eba1590b611c1d11e0576
-:016a907052acfa48264443bb0e3b867efcd6a1
-:016aa0ada65b688f338c4f43ab87bc543139fc
-:016ab05d7a9339ab72ad5e3c39f2b1fd8f5f6b
-:016ac069651e7d271ac30e1ae77feded08844c
-:016ad0392b4197769bd9a939e0f03e84bdbbfe
-:016ae0d24eeb6e0c4e037d72874ad95d065c45
-:016af06462b453bc074d7f96fb6dbdc06e5b3d
-:016b008091693510cc7b60d08a6463a0dcab77
-:016b1076399dec2e887dcddf7cddfd13a15462
-:016b200322c1e270930c12835e25cde5823ef5
-:016b308e42f718e93db15177ca136af5dc765d
-:016b40e997479d52bd9086ccd10eb08251cde6
-:016b5091eb8685ec5d9dcd81b0d41a84b7c923
-:016b60ae67bfef8d1fff105a89922b9699b58d
-:016b7025dca108ebcc791404a71718e03f1b73
-:016b80238942365aa546e6d85c7443d7d2fe7c
-:016b90cfa3d4afc4bc18937f1c125b5b379248
-:016ba0a6095fb5459315043c69165192a72eab
-:016bb026561b576db86a8c8c0bd827d64adb37
-:016bc03256badd10ee5980c460634f50516408
-:016bd011725de69e4cd935c33f150caeec5a1b
-:016be0ff55232a1f43a4cb48af4de33973cf7e
-:016bf0daf30bcace66a652e9319b3f043e5df1
-:016c0059a2bb8276758094bc8141543c205f0a
-:016c1039773f08219d10a28e67b4a2bd34f9b4
-:016c2020f52771746ca86f9b6ec9b32237c4a7
-:016c30d3bfc3d613d5508f9df6fe4de93b7e8c
-:016c40af33d951412b128569891274f3a9e0c2
-:016c50190c2fb0d42135aba10924c7fb9ae701
-:016c60733943c25d636012317b88e227bc1431
-:016c70d1667ae534104b648fbfbd747e607126
-:016c80b8a22dee8af4fdcfa516dc4af3d5d4b2
-:016c90006010c00efcb923a718bb465e23931a
-:016ca07a213e7c24d3dda798750dda813c3bbb
-:016cb0509eab4fb312b7e22a2db03f6196d20d
-:016cc050b9d384272bb54acec5ee87c6960976
-:016cd0671888260c7cb4d40d22dc812859e418
-:016ce0f0c3fdef8018c951098cacdd8e2e544d
-:016cf0a8e5b8ad7a2f22264a0e3c1aac60695a
-:016d004e7b65775e927c30fb079f00e5ec535d
-:016d10df03412b8af2452764ca480d9a99cdb7
-:016d20678cc1fbb95b79dc849c931cd0a45494
-:016d3054472f7adb59019b1f9ee5f36dbd04d9
-:016d4074d8c579608c70503ce719517ed375a8
-:016d50406b432df09932265cac6297cced6b86
-:016d600c61a015f82de914a79952fb2570bb57
-:016d7091e8bd3366923c0ca7438e3998c4a125
-:016d80fa66e2a0bc8cffd4f7569fdb28ed3067
-:016d9014382dc288df032f38ea85e337038e3e
-:016da0bdab8b59c89614781cd769698ba92824
-:016db0a65df11a58532ba8947c71cede65b612
-:016dc0e2b619e19f4e33359e0af2ce372ed7b1
-:016dd0533a8d3c97dfd3b02cff7db26e0e1faf
-:016de0c1a2f3a33f0afa7d7b40469df3fc764a
-:016df038c4c4dd462da820085abd729df6dd73
-:016e00a2712a069626042ce10fd5cdac428636
-:016e10d56cbef4e78ef22478dd10c2740c2e45
-:016e20cbc5587b10a703b0a06c001a315c4391
-:016e306aeb273bbeb023abb76d74763f141df8
-:016e408b1feef2661c0404e01b26af97044ad5
-:016e50c4b3e187d95e2396900cb2f12d51d27d
-:016e60b0346139aa34081fb36be457f99c9f86
-:016e701418d2294a87ff6dac641e29ba9d9d90
-:016e8088164d277e4be2f9355715a8d5d77cdc
-:016e905f01d611803f502452dea3099823d417
-:016ea0119b5bea2db5808a935d2b7f8d2c08cf
-:016eb09ed714a371bd0af39e49d7c24a9326d2
-:016ec060f1c7c10d4f290aae0b39a2fe83ca07
-:016ed042cec7666d812430a8e98c11a5472279
-:016ee0e55ea06bc29a15982f8c0141cd15515a
-:016ef00875cc2f6d3ba2115e29b988160d9390
-:016f00c0780f1de0918165b6fc86daa3756f8d
-:016f10e566518734094e6607e687330dc958d6
-:016f20a6b0ce323df92533953acdeef502846e
-:016f301f96f5891c0396c7f647d2779cf6402c
-:016f408ae45b8a0518f473131f31a0eeced4fc
-:016f5088d36b539806fbb343677911651d9724
-:016f60de3d23a43e92025b44329aff06c6bc4e
-:016f707fe97941d82683d1194fa63b13652035
-:016f803e82f8af5ff6d894525837ef76f7d832
-:016f906ba6d015590bd0bbc0c0a470ad1be856
-:016fa08b3ba1e77c7f933279cd7ff056237167
-:016fb011a39b305308562ddf7e4636eeba073b
-:016fc0b9a2f30ef448400c8dd3a48c692224fc
-:016fd0c08998d5e681a1aee5019845d105210c
-:016fe05da749dfb09412521b15aa66d48fb83b
-:016ff0fe5d7a2a34a3657085dd68757dd1f237
-:0170001dabc1bc1e3c3fe7e2f25ec522997556
-:017010d099d61eef9a274d504e8a9df92148d2
-:0170207f27769386580728283add8ac3b8c3fb
-:017030b937aaf2d8d76e5b5b220efeeafa2d78
-:0170406cf379417bea0c7f28772cdbb9ff9252
-:01705017768d84b0ee01ee2e98e028ef869714
-:017060ade82b26f00b726e738507a22a6d9f9b
-:01707004a0b7f056ace7e48d124b6d615512cd
-:0170801ad56fb2e0fbddb825d3a6d98348dff6
-:017090a9b6dbe5bf3c782a980a465cd64ea025
-:0170a0b9baffdcd8557c29651029860106bb18
-:0170b047f19f2713e3895e61553c6b9fbce8d8
-:0170c0952993fa13381216912268f1b68312e7
-:0170d0faffe6379dd6d3ace22f77eede8e3e5c
-:0170e07010a26d9a792ed7cca423fb3faea037
-:0170f0cbfea4c9ba7b6d6a02acb8e0fada220a
-:017100cf2620ac0356a8ea190c393d8093b7a1
-:017110d79c9ee96750241fb285652d256f6934
-:0171207d3ab547fb1ee65fc706d9f9a5b83c47
-:0171306d4e0bba11e493a4e5ddf1176fb19f34
-:0171403823a210b34dcb6dee67f7a4418dd95f
-:017150c2bacc6281c05615882c0fb5ae5b34b0
-:0171608dab793358f320b36b3208de219eedf0
-:0171701d07ab423c0daeb3a0602740d702251e
-:0171802ec02e22a5f2314ef6f9e82afee0bfff
-:01719078e880d1a530402a2a2e5ff02dab76c9
-:0171a06f17e9abbbc66fa15042572e5e539e08
-:0171b0cfe36ea083a2b941e9c9a4d5e14faa81
-:0171c0247a40edc9465f6f5a147106dc71c2d2
-:0171d0910742ddc93d5e4413000c30e16d0975
-:0171e07e7d414c09252b0cd2406d65d060d5e9
-:0171f003fcca9b9be389d01f97c45fd2135e6a
-:0172009db6c81c5f097fcff14ab68177296734
-:017210c8f1b84437006294592924aa3dbf0baf
-:017220484b5c73b3f2c90bf0fb9c93b73def66
-:01723087252ada6823494c22e6fb1389d1dfa5
-:017240087273b48b3efa5a065acd0721bf798e
-:0172509a5d30d33d793328ed8594976e8696cb
-:017260a08bbf3c74332025d9ffb52005387e4c
-:01727035530622b037951fd07ebafe3888a528
-:01728080a2faf334a7743f7e2c8977a4d82c85
-:01729079511bd71bc6f9ef6c83971535a33d7d
-:0172a04396039a4160d55104885c749761e584
-:0172b0f013cd386b91f56873099b4eda139bf0
-:0172c079319018b85db36884ee5caf8cbd7793
-:0172d0fa1e191a44aa787992bff95dc7bd88ce
-:0172e0f23877ff4d149f7780a58b2c9dc200c0
-:0172f0c69fa0f1ad02cc454dd047fb495d3bed
-:017300ba91767e5db240523b8a9fbacef9664a
-:0173101461faccae655b863a026a00870ecdc2
-:0173204efaa0512b5ab1326c952d6c14fbadd5
-:0173306eedb726284f75fc0083d297cf9075c3
-:017340a952fbf291f1e367f08842742996bbea
-:017350dc6d1d96a9ab0e5ad15dfc88d6c38560
-:01736064fba5a94df42278e45831186d7dcdf5
-:017370cab5efa720fec364dad970518b9d7958
-:0173806f2dae8417ef2b337fc427cce99ef09a
-:017390137685716cef7927d97e56e92f76bd30
-:0173a0eacde3dc72c6c27325e8b9a4d6864371
-:0173b07792ee53137c5c2fd320f96be27dbf85
-:0173c062b841c454d52cd85650a582b0dc68cd
-:0173d0e34282a6492d5e6422e2ee4248a9ef6f
-:0173e0a37b1c73538b9dc91b76bc19ec0f75b2
-:0173f04c786d6941f9f71920672b2d2e4821bc
-:017400a9552b6e951030dc81cc6b1049d16526
-:0174108041d08c66e9c45a7455afb4e5704983
-:017420ef869d431b3c53d109a273c238aa3eeb
-:017430e89cb162ec77955ca5f947f89e8e09dc
-:0174401318e21ae073213fd30c799fc9626ef3
-:0174508e070b7b032e4c6b0ca3a1ec9e2a60bd
-:0174608155ddfffdc1ce5980ce37276192af48
-:017470d576dc098228ca99a18aec75e956f1b1
-:0174809085b5009ea7f0d860e2865357e6e34f
-:017490de95dd25f186ee50df4a28d98fe79f58
-:0174a042ea75bed51d4ae780762de9d364f01e
-:0174b04a6c76665cf9eaaf3e4e07dbcbf8c2a3
-:0174c001f383dbf6a59d067a3f75286b793585
-:0174d017915a1b1a6dba79b0475f09e44033da
-:0174e0ae9e722cd5a18febd88bd1d039fdeda5
-:0174f08822f9a122d6c681dccc3223ea99fbb6
-:01750033b1163dffa5c827523919d83e146bb0
-:017510cb179a115b33a13d4c0dcf5709c65639
-:0175206bb8b907bd54de2948c858aa77ff06ff
-:0175302454bce6814f7f948281dd12330ce717
-:01754074a8b661df7c5b7cccf5fbbf134cede0
-:01755043c0d2a088926a6869b320c867f8b938
-:0175601a1b495c2b003c06b66b7551bcf08bb0
-:017570b9f8f560abffaf146c9467ba27c570e4
-:017580223a3ae053b95fb04b84bb54fec27bdb
-:017590a446347bb2c915c4f3900d8fac58e301
-:0175a03ccf5f0f373f9fe8d56cdc86095413cb
-:0175b0f488779c15918266ec8e1291dcf0a48c
-:0175c0f60b0b056d1c95a2951e40fc81929f83
-:0175d0a8fd87a10b0b2dca3be82575d209a460
-:0175e092cbcea3567d60fd1066caeadedf7386
-:0175f0a2e8a795dceac6da688b0a31de05ad8d
-:017600fa9a2a3827a97a7143b404eaf0cf31b1
-:01761080c128920371923e8b35d304d8033ec7
-:017620f4fcf68405f0651b0d61dae9daadff2a
-:01763037b99f74cd1f9e1ccec10154da4cea19
-:017640c9dd396fa077dfcee1647541dadc90bd
-:0176503add7e8f3ec9a780a6a8de712e1f2eec
-:0176600eb04699e081f25969f0aa6b31e976af
-:017670f2139723b95ab3678cd14ba495c04a6c
-:01768007f0db9ba25b80c6072128409d14bfdc
-:0176909d6ad987b96e6d6e1b04439a701adec0
-:0176a025042c9920cb878cef76d22f6dadd4db
-:0176b02be791049207c6765de4dec584649186
-:0176c0daf23325128c5b16a369ecb26b119108
-:0176d00d5890f024c10505f364d24049380d4e
-:0176e0708e502c06f95af92cdf91ef9bb7906d
-:0176f0fc369f74fcbedd24d850b6e18f66599c
-:017700845fd0233b68268b0986d553d758a216
-:01771068d7f644f42593754ef396cbe12706cb
-:017720443aa591aed214cf5abebe026b496937
-:017730324e7cabc07009f9bb32555e0a69f821
-:017740a0e6eedd4c7f5d0acccf0b64587411c9
-:017750f5b2d25eebf4b3c990574d3cb65ed71a
-:017760f3c9dab75c7cdce214393119a0e73ddb
-:017770de0ebb256c92f1c140fd8d6706995db4
-:0177808cf846e6c50f4edc65ed308c93700416
-:0177901c7ec57b500076835f2a2db30b202f1c
-:0177a06670e919fbd17dcdaf4af6d1784b2162
-:0177b0691a00221c83afd0c79bffe7640e4d8a
-:0177c099ad0186cd5dca50ed2b8d0c407335b5
-:0177d009347258bc21645b2b1b7f8b114ad2ad
-:0177e07a0cada3d81650bab3cf2ee07071f2c4
-:0177f0b8900e08cabfccb86a35e13a94bf1c3a
-:01780078a8c9c6365e3f26494057bf9e9e57cb
-:017810d101f957a9143d4e4f1ba657b64219d2
-:0178201f0a4ea7fa6a5db8276caaa6c2cf1da2
-:017830e5d355d6846bb27b33c6cd04b380aecf
-:017840091525f36d0189737ca19cb251271c1f
-:017850ef158a111343e45b5dbebd503e665010
-:017860f3d6fbe2d46ddb951b2d2828a85f30da
-:017870a4356459e970d4c8500d4fe48ecbc9a4
-:0178809f6c0bd6590a6167d2f9ba0a49a34d68
-:017890dab47bbc8830d7a27bc63c66a4459f52
-:0178a0cc7ad4046b1ad38ec6e8ffc6c1f66e38
-:0178b0ad8d45ea9112de2d73d46488bac33fb8
-:0178c0dca7f520dfb2fd1612ed376ef744894e
-:0178d0a161949552cf97fbb2e8435eb535db4e
-:0178e06b07ac72aac3e89f8e5a73c5d9e586ba
-:0178f0bd60c2418572627ef538ecac59888286
-:0179000b109078c6b3a7565344094843ded9b1
-:0179107d86f697be69b74d6975200769d8292b
-:017920be2945f2b0de2a1ad65a7fce11aae187
-:017930785efa1b6021472f2a2f7225a97ad436
-:017940a7a23eb931460395a612309a64cfb033
-:017950940a3b04618343d6c0b4ec381c2cd9ef
-:0179602ec36c5b0cc679863cc27b533f69a94c
-:017970b343161b4335fda6ba61776558e09789
-:0179805f46c718400f7133f7d2edd89eefb333
-:017990d6533143ad011b4a4042f5060ee4e734
-:0179a03058d78f62ca6773689afaa320206828
-:0179b01338bd61e0191aacae7daf6177132bdb
-:0179c006dfa378bea7beb3e55b1caa2eb8925d
-:0179d0f5dded7d03c95ae4f69b795c47b14269
-:0179e09fef7833db95ffbf6fc7a6ae587f5d7e
-:0179f07a09e9c92c1af4c28b507ab17c34fe61
-:017a00cf049b210d712197c4fb22d5ee564e1b
-:017a106c2d17a46433f7ff675787a24b4107f5
-:017a20a74ae1ecd1b20c3e14db5c13d4337104
-:017a30798f18f03bb38ec521e858675fa9726c
-:017a40091f62286ae18e40c4cd3912444b216f
-:017a504a9b81f8e66ea5cf362599071a5498c8
-:017a60b39c613e7042b8b83345bc0fcc69b85c
-:017a70a898ea999cf5cfe24b33ef6e67925fdb
-:017a802a83e6d4e6c4bb8487b3321f6db8037b
-:017a90595530fd185453b150c2efc2a1e53c0e
-:017aa08dce5e9218b6afc1d76eb297f26f441f
-:017ab06da77b702503372d2c0361017b2393ef
-:017ac067a5329fd206ec36e0f737fd37d55a59
-:017ad05f0849af59d1c4fe65a5c3e7ebc56c13
-:017ae0f214418445806786b138cbdc34d04e99
-:017af050713a979647bacde56d5dbe61e724bd
-:017b00be314afd2d05e9b5310a02bca32cd8a4
-:017b1092b7857e05155b734299145207e692ca
-:017b20939c83b24bb768716b5b839b1d3ea616
-:017b308903801a550aaed837bc869516885e8e
-:017b4016c07238092e5769dbe7b67e0bf2a00f
-:017b50a7b522dd638b4bff7c300286e4c0158b
-:017b6098dac4e5db57bd718b2578a0d7fdc171
-:017b707911198c96af690b21754c80ba114a4b
-:017b80e875c9dc12d1e562f22be87a32e5c89a
-:017b901d6390b4b322c280decd00b46d4bc073
-:017ba0e2d34e5b84c739dbad98bd85035081fe
-:017bb08554de5819017069cc28867f7aa05d2e
-:017bc059434f30620f422603d9ac3be31744bc
-:017bd057c2b2acac404e2b99acdefc0a59496a
-:017be094793053687912e6d42a3e4fec767e21
-:017bf08b6172c8bd2437acb6a41312e80d765d
-:017c008f1eaf600d8fb026bfa40e58b991bf2a
-:017c104d29825ad7e9bc84e34549cbc833be01
-:017c209fa26e0a3eb727edc2d467e2a3bc9936
-:017c308256381e91e3caf0af1b300489025dd7
-:017c40492e35667a719eba009f7591e80cff00
-:017c50610aaee4c8a08a305e5f039a7a20bf2d
-:017c603700d82869f273cb26899800f5c532b1
-:017c706078ead5ca22b6a11e02b3b23b8c0047
-:017c80f9c1f8eb1e87ccb779b2495271155720
-:017c90b0bc1baf669a28c773278b8f6a8961d8
-:017ca0bffa9b9d9a448314efa47451255ed3b2
-:017cb05b0b9fe8e572c4beb15f21096c0c3d1e
-:017cc03e9c052349610444c7b79a46f4cb990f
-:017cd07eefe40258e4eb0f08cde5640815a303
-:017ce0005feffb41016c4bd8f18d8995f0626e
-:017cf0f714355c19260bec59d849ef73b11f2a
-:017d00a1e32d82cbf0f96f92d6ce99cc28e3d1
-:017d10b6ea16b0f10225f0cac1baadd031b753
-:017d20d938326b3dbc113541ba0f53fd9501af
-:017d305703c1f1061cd538ac3265c6297cbf89
-:017d405121a85cda4f4a3a3a7eb47583328837
-:017d50ed918cbb0819370b510a95172577434a
-:017d60d33cdbc7696876ebd3b0f40f57ec4c0d
-:017d700a1d735acd16b59f169cfcdcd30d2562
-:017d809540762ee967b3f688a3071a0fdd39f2
-:017d90394513cb30fef473edb543bc15bf3f2f
-:017da06674141239df1fbf96be1028b435f678
-:017db0254c978f7709a042b11faf776893fba3
-:017dc00f17450b05e7c5722ee4ad0af31059a3
-:017dd07f76de6a469f7a81d082ad09c1742a18
-:017de01beb2d730caffa391eddb92b2d728ac2
-:017df0cd325dcf73b5233045e362a794af2cb2
-:017e006f6942e1760d1f46a5bf3015520b4094
-:017e103be2dfbec43826f73b23da31336b30f6
-:017e2025e7e9802195b9b70f82f0b2085df961
-:017e30637d2aac921abe444a40d5e82bd8ddbb
-:017e40af76314ea4bea167ea9019b3d139e2ec
-:017e500c12c623f69041303a70d431116ca55a
-:017e60dbf18113b567572b99a3325d2e68f34e
-:017e70b8612891d63e3ff494460ff76e26104b
-:017e800ccdcfb1abd92ee216484ded18d03c95
-:017e90d37983516d9848808b46777d6952f5ce
-:017ea0a84156e75320a6ed6f2e5fc234cecad5
-:017eb078ad95be84d7d4fb9570e20709767cbb
-:017ec086ba4f4122eb2c91b0e84bf1eae0e9a6
-:017ed04f214ae8da20388b9eee15a63aed21f5
-:017ee0ab9610b0ecaf70c7649bf126718048e4
-:017ef0fd04294ce9232de569ddcf04fa0fe8e0
-:017f00da4473062ce594fba5daaec2eacfa73b
-:017f103070c7f03e972e0535f7c478a1ebd53d
-:017f209a2b71f1f3fe72e4b657779c90c7aae9
-:017f302dbd4b2b9a14c1d3096ede79acbb1e8d
-:017f402a5cff07a69f62f513b6ec562d244594
-:017f502fb1f7fde56118d873e45431f2a4eb27
-:017f607b7ee739ee8f44aa6b26d41c8d178aa8
-:017f704eb955da5ef0019b40e6ab83fcce805e
-:017f801449a05306a561726e3c62e5e03e831a
-:017f90ecd2aae1dfc72d2f01ac15f8b2dff723
-:017fa0cc2f12139a9c408e9fbdda8e10691eef
-:017fb0e9cae7dd296b52951bbefc8547ef179e
-:017fc0d9dad9f34b44c14f4d1e2245ce7931e2
-:017fd00040f21a4de888e4e88670ad0307c6e3
-:017fe0da88f9dad62ed275c57281ed6ec6855f
-:017ff0c61fcb80c23b043233b22ae149a643e3
-:018000b6ab9f24868f97a8be8efce971faad82
-:01801006592fe8db9fd6fa3f512c7df18a12f3
-:018020392b4c7cb23a127daac7c8c05068a5d7
-:01803049693ad662288555bd9eacb14f9f83a5
-:01804007abd0268c5ac069abc7f723d7572b30
-:018050bcff4094d877bf90bc9302a622c847ae
-:018060c8344efd695d8e6fb8c343be3c3c8d43
-:018070b255d93da70b219b527e46a32562bba7
-:0180808050b16383b994058556cf54fc35ef22
-:01809005bd3388ea66cfbf7c87350824acd438
-:0180a02791425da5c521e317558783e5cc7399
-:0180b03fe5d8e515e90cc6d40b1f1c18418aed
-:0180c00ad183ac116ba807c658c88cc5a749aa
-:0180d0786dcc3d4e8736c4c7b36d4f8a9c4942
-:0180e0b29dd6cab24353beca502a60f6e40698
-:0180f0e54302ab8cdbb010b5e36e62ead09fb5
-:0181008ca0705660d5433ce0dafec94d2d4aa3
-:0181107739b763931eda33ec8e9d380bf0cf01
-:01812086a7bb4f87bf14e1180766da765ae9c6
-:018130216db58672fea6c70ce2ae70f083b01e
-:018140341b3f7650ad1e66c32fe3478f374d99
-:0181507c407ab2af18e9f4f45dd93bba16f879
-:018160ed0a320e3b1781914443987ed5737f67
-:0181706b89fd5134a374d401b0cf9dcddff57e
-:01818018ec005e404d3b4eec3f1f75548ac5b0
-:01819040cc626f7b065a291c6c70d141497695
-:0181a0cc800931d91450841060394db1fd3e4d
-:0181b06817654a94264c0e8bc8a4c30b18085a
-:0181c03af3fe1d54fd5cfb954f13bf81169879
-:0181d08d94593bbdc932e85f791b90378a7d04
-:0181e0a7632785bf229f586832cbfaf0681b91
-:0181f00705e03f90d4b8c56d1c777a6b3273b8
-:01820025c89faf6a00119c7fa70fab5eeaf3b1
-:018210c3e54744168d882f9e541140abec1636
-:018220595b8099db7acb5eb1aabd23719c403e
-:018230ccb2b03b087150a61166de0acbe8c995
-:0182405cb5bd9e1af9114078e546215073b543
-:018250b054f10122c0a8c2ca8242c541be7ee6
-:01826041fbd53bc422a04a810ba9bb05b43001
-:018270535a8f053e29d6699528f65ce2aa370e
-:0182807b665bee22b100c80d4199243f066243
-:0182900ef0b9e5ca3e27e39d3e74f118ead7a6
-:0182a06edccf3452083b07bb71675c520f6d42
-:0182b088c317bf15d33ff2f479d3c4a20d6de3
-:0182c06693c41f0fa95c2f09610bd70359a69a
-:0182d053355d4f8b9f8acad842e9678c7a23c3
-:0182e0286a834821e4e25a5216c74d5e67fcc5
-:0182f03b84eb1e5d8c986cd8c4102bdd0ea0ed
-:0183006504873aab30ade142610b9d7dc14f61
-:0183104cdc7f31ff3dd538178c39a8972619c1
-:0183207e0a82ce7569bc8942cf5050ab9bf47b
-:0183309663b402850289d5b0c994a709fb4bc2
-:018340a695af5e18d1f8ea58c2645e279a4ca1
-:018350427d12e25c41e1e824c244fa44b44f0a
-:018360f5ffe7d474f6ae4a6c9f970da6f3c021
-:0183706759137175f7890abcbeac3acae01039
-:0183807c6d9cb241f85f0459d82ea89eba70f8
-:018390f132647a30814cf34b675183480f2454
-:0183a05b8ee6e0f60c2938c59ebe816b25c32e
-:0183b0e0c4e957c7e07177eac0e349ef993239
-:0183c05463cf2193da626b75ab33d65d59ad82
-:0183d02b4b246aad30ad422d41a2aacb42ccc1
-:0183e0e6495e4812a025a6867840cfa4b45649
-:0183f020e54201776810b196bb42b9cdb5e1e0
-:0184002700b616d9e2537d53fa1cfa6f01ffd4
-:018410bb6f69d007d6e213ad769d4775f44507
-:01842090c3890b9bf40b5f075c6aca3ee63cd2
-:018430e73dd26022532ab66fa1a5f3dc87a60c
-:0184400a28ce136b58270d735ac72c303a64dc
-:0184500cdd34bfd312017102ce5f9022f443b8
-:0184602066b6574ca2e5c1a6297ce9beb7b43e
-:018470c8c4668a3360c37a2fb7c7a6d5d7d746
-:01848085a615df6a7e802729e1a922e2d442f4
-:0184900b86af071787435b1a61683cf496b3f1
-:0184a02bd6401de9dbc0201d0079213ad64364
-:0184b02cb8113908a1e68ff5eb7ce6fe7da812
-:0184c08f5269b9bc5ad712f041b094b880b3cc
-:0184d0f37d160435a7cfd75678fc7a9e7dc8f2
-:0184e0aca46513496ff01d97ec81ea0a7260dc
-:0184f06f5be2a21dac4771852aa1ea5abbe320
-:0185006f1b9fed433af40eebe478d4875dbcf0
-:018510a9de39f4feb66f839133246d288860a9
-:0185204839e5c0278c533eab60022fd9e8f4ce
-:018530f2ebb9b00ae074adcf9be233e5fa2e01
-:0185400c2552134dd761c1eca8258831ddfc5e
-:0185505ce95205c8284796ce63f826e8dff2e1
-:0185601611e8d9b4ae8c5e5da62c4dae66bfd5
-:018570a1f7018652d0ec2c7d5c871367b54b77
-:0185800ed503cb33060e5e8e1b4c84ac6d1aaa
-:018590bcc25c8e7ec219d70b1048622c841bbd
-:0185a065812defcff8a527cd31b1d6731d452e
-:0185b038e628f4aa7c30ecced616002d6de4d3
-:0185c08bea0be5565ce1cc735d507c52a0d81a
-:0185d01ccb421cd574c78a0f2c4a16e5d72c6b
-:0185e05e0a794a45cb9a970a2ee8edce2f1ced
-:0185f0ccc66a7bfa9a2200b5e46b9255dd272d
-:01860041cf367447125f960f44040a5435749a
-:018610dc59ed3a068af6a02e4266f55fd435d8
-:018620b4fcbf7b4f2be5303a76c0d881ccad2f
-:018630468c4f9d31e58e150bce45c8ce89ea59
-:0186409d3e2816bb4572a9be308dd36291c1d2
-:0186508c9fddb37b035d626f4816e60ff38a60
-:018660995443aa2ee556e9aeb693ff7aafeb63
-:0186704f6c1b5e95734d1c4bda3ef06421ef34
-:018680e403787d4037567ee88efa409184b15a
-:0186905074ac762022a1fc40571444e2b5c327
-:0186a0f7c3128bb8c38cac47426642f2b37343
-:0186b0a49c26e1c4f197f0c1413871cf803000
-:0186c07b9f833c60268091e00707209393a76d
-:0186d067707294ead81716048864f782442b3a
-:0186e0b58abd21a5b2135f79be46909f42eb68
-:0186f00a677438a7613e125de78350450551f6
-:0187001a5eb6932314e63940417d0b0fe66101
-:0187100b1180038944ff4c19095db9e87df51f
-:018720c0c4ce3f5cc3964f58e0fe1a950fd059
-:018730c896def25184ed833eba1f3e288feb3e
-:0187404f24f7ecdae17c87870d271139a92eeb
-:018750ce8a8d089c0217cfaafaf707300960d1
-:01876006149f525107982db3a72dc690899625
-:0187700750950cc013d56e1341641bd54b2aaa
-:0187805e07861f192622ea8aeb9116fb2a5476
-:018790a61936b807a19d0e035ed4b3650c9e44
-:0187a075070dada6c870b7d73da29bf074e937
-:0187b0cb85d9ec9776c0529f968bead4ecd936
-:0187c004f2ca80b5dad13e46b52138b5ac4a5c
-:0187d08ef5d595877ba3624a67b6b8eef7aeda
-:0187e0dc56b1cb84904753eb2fac8e266aaf09
-:0187f0763de2e1a6cca4fde85fadc8c1ddae0e
-:018800050b815bab49daa8c4c9e25664d7080d
-:018810d37889c25f14e860831b2f83e3c01d62
-:01882021fb0d93912275806b44fa7e4ef8456c
-:0188300c0798baa7e85898cb1df386511bee63
-:0188401d5fb52fb7224fcedeafdc00389a4bbe
-:01885001a676aaaa21d2fcdfb50d455ca56a76
-:018860ab35c241dfa166224f5aa5985b1d4929
-:01887094242e09ccab89f3e575926fab9b3df5
-:0188803684dfa71ee789b19597dc8ea7c496df
-:018890c860affaa607fb5dcacd9c34ab27f6e9
-:0188a0304dbbb55febd1fc3d16708228900f5c
-:0188b02a995899b18e6d2dd8f7badf00ade63f
-:0188c0f2ddedfaf8eb721736349a89a3cc1cec
-:0188d010021741d4332169c05e88fe9922c199
-:0188e0fb12639431ae06a4b643eaef7f2fafc8
-:0188f05dbf797182cdc866a5b358d5207e7a5d
-:01890091adc23a1015906b574d2076347c2975
-:018910bd254ae1680f01e9e49b50c54274c1a7
-:01892090fbfdab4a61e05c832954234c692dba
-:01893033ecbb12d4622daead9e491d26f174f2
-:018940bcdb72e43956c0a01998955605458530
-:01895045cbed330379a211f41a0b6a1e705172
-:0189603c417584ab0fdc02a3b4f7b91cac6443
-:01897067b6d367600a0af62f4845fae0a98f2d
-:0189801910e0ce05d5a14892fdb373527a8705
-:018990467482c330e530461d29a0c854eac945
-:0189a02ca5090985ba9f0c7999039452aa5452
-:0189b09519e6b22c9ac52eb195923352bdbbb4
-:0189c0aa24045f65a2d0caedff925505a8892a
-:0189d0ee7d25405cffd214cb8f02cc0985b3ca
-:0189e0384bb2393a00a8c8c92b3a919f030af0
-:0189f08c18dff1710e1cc6a4246a2703d19d9e
-:018a00985b7863079b5e33ad65e1a951aeb02e
-:018a105a93085b5a39e34f9f41be5f24458819
-:018a20e73d1955ce0fda7f18939955d02a8a2c
-:018a307085aee05fde84e5c018d350f9e026e1
-:018a40ccbdfe7b771ed80a82760baceb3ad6e6
-:018a50c181c2a7850ac8f5d7b48c6d4a122960
-:018a606fda527e0f22a143c7947bf5ea523430
-:018a709895389f124d6d528dde3647bbcb93c4
-:018a8045f34d951d580a0143468235679d005c
-:018a90b552b9c8705abbb5bef602394ea59e3b
-:018aa04f797f3b0fd49410842a5342fe227cc9
-:018ab0ba0e65f029701d864665404244e8a560
-:018ac0151a90a97b960299ffa16f16f067989a
-:018ad01c5244c121a8c29d66ee8c295b214713
-:018ae0a5ca05ba4c61fa2849d81e88943ad726
-:018af0f3e2f11f34470ee6b226ff7ceb90d132
-:018b00f994f940ce28ff86736bfcc7b4e6f3ce
-:018b1038bed2e92998984899fc5af9c841bdf2
-:018b207f0d55fccf487e2d548a54b8dce26128
-:018b30204d019ae20a36c87089bb12e03428c8
-:018b405aa9814209f4dd4b380cdfb354a19985
-:018b50e4cde841666a2d125d0e23dbaa1004d9
-:018b60c8bb36cdf691af8304d01898c7ef636e
-:018b705868666bcfc4fa312dcc6b8a54b65134
-:018b80c9afd03d81e217f438d011ed9d8cad68
-:018b909d1dc7b9816efb538034356dd2aa0716
-:018ba0fe9ea48a94823c6c9629149a8704ee99
-:018bb0f88968e365982f5fb682da0b14b66260
-:018bc009e834606785213a7b3ed60630e10ae2
-:018bd0b7342f00c01b94b42b799a50716f22b4
-:018be027764e23ddead065d298d6493281a5ce
-:018bf001f5daa1961d81331cea531335718b73
-:018c00c666b24c4ae33d27edd0cba344272552
-:018c10847954b40bbbf7df6e4100d5c276a60a
-:018c206e061837f289ad82d73cf2b96370dcc0
-:018c3096f5c1f9164043dedba6443d34fdb9da
-:018c40df92861780f79715230c214fca994d5d
-:018c504b4113cb4f9afa3c2a9a14846357b75d
-:018c605f0809b45178dc440669f4cd272bc4cc
-:018c70307dcb55e7992a13e40e1f43a780243f
-:018c80c36c037b56fd8f2bcce1422056d9771d
-:018c906f30e0dd6e020f03f3411dacc1393e57
-:018ca031737971e5c9057cce927d87cef2c24a
-:018cb093a7fb958a5bae8bf38f6bfea202a54f
-:018cc0a717819c1db5034e752e0c0bf81e93db
-:018cd08282c7db855145374a9e591f23ac6c53
-:018ce0c7a3b4a4bc5b8b5a35217e9992dd7e10
-:018cf0ac5c747ee1a169c6862cddcec43fbccd
-:018d00b036613ea8a86dba4bd80ca528f1abe6
-:018d106d496529df888d559e1e063fcd70895b
-:018d201b16f7ae2a90718b38e11690b00121bf
-:018d30e12fc5ebdc71b0c25c679f67ec667873
-:018d408db0933c02e378bb4548c27429ca5b98
-:018d50f439d3df50f2f9d46729da7c23a177a8
-:018d60011669925b9c819e7c6812c00ee2a2f2
-:018d70c056e01e9bf5dc2449af05a866b94af2
-:018d80eb0b12fbbb60de6c38a7015d508800e4
-:018d90c4883875244aea6091780947826bc778
-:018da0233247ff86f747cdb924923974bdad88
-:018db06a9fd540ebedd4fb3d5b7b4c943b52f9
-:018dc03a6633079cf9fde846e4e33bd5762067
-:018dd05efd06f5305c2ecfd373f1eda7f74d3d
-:018de09c4c4dbc708f82a74661ca497abbe637
-:018df0160a27f11ea7a25d1e720dcba9fce8e6
-:018e00f48f386b09917b6577d2521e5c6b1858
-:018e10ab6c003933c78018ab1f15863486fe9d
-:018e2027e72838c48d070ba77c14014e4e536d
-:018e30c0a6485d31f8101cf4b478fa84a0dbbe
-:018e40c95fa534913b00e1ef35a8a16f77f8e4
-:018e508abfd69068a0282a6a2f2bf982a47c7f
-:018e6083eef27c5fde58ef05cab9c7e5e2e308
-:018e705567d29fc5d5961a4e247951e3858099
-:018e8018978fba6146fdcd681af9d1d9138202
-:018e90a1140b5078271491c92706e7526e63e2
-:018ea0f0c803bebb3a8c8d6e55101aa272d142
-:018eb0c0ae86183d796680579ad98c3e3c1f6b
-:018ec03382d6db7367da55e4a21c8f2106d644
-:018ed0d6855462cef5bd7fce5fb6963b810f4b
-:018ee0d9ca297faeb90bc1213811606ad4c676
-:018ef004fecac2bdbb491c9cdf5125f6d56fda
-:018f007a61fa85c33b879b8569cdd76bf9eb49
-:018f1029407a383fb6f00db5ea99060c5306a1
-:018f20b9ab8e45a7876f9fd05544cdccff0095
-:018f30e1e2802136298194acc24fa25e668515
-:018f4003d8c324f644a26bf99d245fc07fcd79
-:018f50840d83ee50d05ec7f72227e890880b29
-:018f60bb635520e03081faff2d1330e9211a2b
-:018f707f27d23d3a14a8e7295f2f8856862e75
-:018f80abf083c8312a1ed3d534838804c9ab24
-:018f90e3e8f451cfacab65f652e87311210165
-:018fa0ec963eb6e567c539d8f9153a0b7aa94c
-:018fb0e4756f17c90a0f40844f119bbe9dccd1
-:018fc034301e3f6456d2569ea11b418a195426
-:018fd005082b82499d0fe8d83f9b6cabafffd2
-:018fe0f549915f6fb0c0d7389b24e619156fae
-:018ff011b64b3c910e096a6230cb07c55d84d6
-:019000b4889676df9bb146e88ee488f99cce9c
-:019010e9d059bd7fbb97aebade1d974ce92e27
-:019020beed35596e95260b983cbd537b829c98
-:01903040c88684222b5f5f5f2c8f185c09d907
-:01904028d326411a55a31f2d1560b32f6d4bb7
-:019050c63eb57731641f0192e7f2fda80b3835
-:01906038b50f6002367f3d77ba932a3ba1ddde
-:0190704d30db5d7b93fee6896eca0513714851
-:0190808a691fd4e44102d27726d7f5a388b184
-:019090a3037830aa2544d0eb24c2a5fc1a7725
-:0190a09216e58da5666831212cdbe9b8adb855
-:0190b0538325f70e6759ba86cfce35d8b695ab
-:0190c0d3d583a82d0a8610d5dc737453165a41
-:0190d0ed28faa6cce74fea1861d823c69867e7
-:0190e06037b5cf687a0ab5c047be535f00dc14
-:0190f0a1fecb7a22596d7b5c6541e54b5b9f1a
-:019100599d0dc940b0d40124a8fb21567d7000
-:019110dfa15c002bc531c53109899f8ea882a0
-:01912094035a93fd99af7f26c3e570ac3c8e94
-:0191306876009c98eeb7dbf3c7cd8d3910fbb1
-:0191407c5c26c095e09145b5e17ce07c2a4349
-:019150926c542cb9f5a9c41dd163a8eceba75b
-:0191600fa95d5c999bc220a0af78d7a03becf3
-:019170221e544aa091afa5cf3ee0dc4fc42894
-:019180401eb1386d8ab771b3f9f7a8ac21934f
-:019190c1c9cbe52e7753939f147b05c9cd05e5
-:0191a090adfda3b2e93fcad76ec0eccfac572e
-:0191b028128bc516649260652b43e5d796bc15
-:0191c094a04181a6c699c093ee348f8d0766ea
-:0191d06d8b148bd28b559ddf276be0ae36ede7
-:0191e025624b2769aabd388f0b3707a23d16e3
-:0191f058c4d7503e4545f0ebb66ed242a7a433
-:0192004676ae3a69cf36bb4ccc94973fc3ac24
-:0192101168afc9e8cf1ede781ded70105df591
-:019220393e89a17209f8baa1f4c5b2819a13ac
-:0192304e058d5d0747d07beb40f1e9a6c7c9d0
-:019240814ace5ad7f9c16547c1d86d657ed41f
-:019250694532276074c55c86e04330862cb7f3
-:019260db5482294a9efbd2d9b38c9e2064882a
-:019270acd0e303908f020999e326b4e654a674
-:0192800aeb7fccb2f4fe9977a89311b92e0750
-:019290d2ace1952682e9bbbe7872a1f5dc7b13
-:0192a094a8a87d5af3bf6d86d456f1b0e8030a
-:0192b0fddbfa2df472630f60bbf357a543fbf1
-:0192c0fbb9a317cc05d619d8c2064254471b58
-:0192d06bebccea4d5e3356fd69aafcb420ddcb
-:0192e0c423d214b5214355e17f16478c68f925
-:0192f080dd6039e6abaa03aa2c49ac9e585057
-:01930002ed67f34b6850c3fb8100001a104be5
-:01931075587f9ef24ec58a39414d386076446f
-:019320c8142e5f09345f66079fb0f1e73a3bb7
-:019330cfa177bff2507b3266271228ae5b5071
-:019340fb42ddd0e80a6e739970d4e0fe067c27
-:019350ba042083f69be99c8acdd4c5fdd0bd14
-:019360af5c5b7d8cae6b3fcd372bf27fff9707
-:01937056432a75ff54e8b230ba2e1a1d8b64b3
-:019380c6a809a16037ba8490c865dd61b615b0
-:019390f6acf32fd6c73523574f51a096ce61ea
-:0193a0b6252024ad937729cd55e355eab40ffd
-:0193b03434f87931c8bda702a52946497bf032
-:0193c0b54c2e54cbc01ddc38b6d09d96c766a2
-:0193d093176005219b7f8b54d9612091ac2943
-:0193e09387cdbda7b9404b5234c96b2db680c2
-:0193f0acd6e4571d1512c8e4cdfae1b6a89b94
-:0194002feb922dc451f7cea20b86fb4dd83d18
-:01941028a4bdf28ccfb57c0dde4a608c2929f8
-:0194208b2afcbf4fc4116f5ac24d1bdb6da254
-:01943097c6e88e9d2a7626a30e6797eea3512d
-:019440194c229c9e64ec6070607c6aba2137e9
-:01945067cefb5e24669eb992c6af80bc2ab51f
-:01946009058e83cc9a0c2f74e94f43b41400ec
-:019470ab407c44328d4d8dc89957168656c3e9
-:0194809f0b239b88992febd9d5be7b53c5b8ae
-:0194901d27ed41bbcd86e0c46e37128cf27ed5
-:0194a05339f8a0fef59b0604389249e003d278
-:0194b05e4681020231bf7a1a112d781ea737c2
-:0194c03e05e2dfd135e56ee733c88ae6ee7cce
-:0194d01278cf4e3c58046bae3070f7b98d29d5
-:0194e05edd12d72a3f7c1821c11856c3341f12
-:0194f021ae7d08b91f333796f0218944de5d31
-:019500711a970229cbdbbb378d3976ba0287a2
-:019510fa1b167166b436db1b3cab2d598a173c
-:019520e05fadf4e9523633ec38ed5120cbd532
-:01953062220b96bcb2f51f32908c4eb94e154a
-:0195408b0a938a45fb139e5f22220aee2db3d5
-:0195507b5942af26d6359a75c666b957ae47c3
-:019560836be7eb43e0fc88ae18d7970815749a
-:0195701c3a2c89dd4ca082cb2dc16427546133
-:019580f08444559f2b4e8ca23698aa2d6dc6fe
-:0195901084c77c54d38b78b52940c4f3c6adaf
-:0195a04e5e426849754421b35fae4cf1656ab7
-:0195b0467f627f089db0d39757f792b8b7fdd9
-:0195c021b1a9978e3360c49e78fac995e965d2
-:0195d096e938e36d0318b56de8d8dacb92e7f3
-:0195e05c1409b904bdec6200800fc20ee07da4
-:0195f0d46f27f6e71f4bab9ca2993352bb6fbd
-:019600fb830d80c9234e0136954870281979b2
-:019610c5028f947f84b29c2d315b5db50b5e57
-:019620c5018c0808b31c9b19babefe8b9c20f1
-:019630c88472206932a36580384c7207471586
-:019640507e91e089547e5dcef93686970b02c2
-:019650df784a6f012aa160220ffac4f116c1d7
-:019660aae97395d4e70291a95e4047788cb791
-:0196706dd311895c4334605146056c7b0bc126
-:0196809bffba04d31ce1cd9a1d7c1d6a6c2620
-:01969068960e3c669af855fe161eebb3f2ca3d
-:0196a06abfe506b56dee74e74b43ca1d03173d
-:0196b0a16f22b1aa459a233b1b024bcb9a8d6b
-:0196c0613456c3d53922442011aa70aee3bc41
-:0196d092a6f35034fbe3eb80b465a2a111565f
-:0196e0acc5efc5f8426b4479dd4a72f231649e
-:0196f0429ca1f89eef9414a81302e9d960274d
-:0197009e0f0c02fadcba321808de83424c59fd
-:019710b404bc4ab4dad9ae982a73aaf88d4623
-:019720512f551f2185215005d8a3ce4abf4d4f
-:0197309626131585ae9350dec5799f9cc8fddb
-:01974044079513dad29c7fc9bed6af290eda6a
-:01975046847c7efa76dbeead4d3b8381b36862
-:019760c079bbdc8eefd839aa39331c6aeb9c3b
-:019770626f152ef408bcd282ca6850a83b4376
-:01978054ca609bfbb2aaeeb03139c6f7e94762
-:0197902b461b20a7fd335d903426d57049d05e
-:0197a0f4a2a2fb21fca8c6982f426129d72fae
-:0197b09dff6e6eb0486fba051779a97698de1b
-:0197c0bfa222a72089a60dc288c532a2970783
-:0197d0a51f2139b8e7c9133e3acc16da0ce727
-:0197e06e75d0cea68ec87674d947ae0639b23e
-:0197f0ef2262acc74f2f07e9af953a8059fb6a
-:01980036f92fba6e6b2700841bc74a84a4aeb1
-:0198104757bd6b66451460de46a21f1803b0e4
-:019820cabdda27140e737570a3dc7a95310f43
-:0198301612545b3caa72298d7c0773a4a13d12
-:01984091ca00a6cc471849fc41e3278ae80d6a
-:019850285a467415837fb01db47f98859a0c27
-:019860df4327624dad9be5cb4686e245af337a
-:0198704de2e7751689b4215770c160124786dc
-:0198806a0d01dfdf62c18267b3c8183d4bf6ae
-:019890bb6cdd53ad1dfe6a5d646ed634d01454
-:0198a0e534e38f79ec761c58776e44d17fbc4a
-:0198b0a67c15a94929a145022ab5cca7acb887
-:0198c0e3d0092aa082d70abd0a1820dc598b82
-:0198d0434f2ce79e51da88793d070bc2e20f28
-:0198e001a78114eb5f4fbc4f8ff64926309568
-:0198f0f5d6de03007102f64bcc866e80c62223
-:019900af2cf27cb1185e434f3a258d88ccebfd
-:019910778c472f0dc808cd5b97f54bf088182c
-:019920768a379b31069aa1de80f308b776409b
-:019930dfb8ba7d3a45d029dea38de5be8102ad
-:0199406db9f7d8a7b4b6bb52c09501b877a506
-:019950d7fe2a4100adc5f8a6fd38c359246524
-:0199601cbb321a5ba8a8e240c9e0bf78dd91aa
-:019970362eb7d40567d0b4499a621844146bcb
-:0199807cc2416b3748c18dba3f954b43a34faa
-:0199902e7b73b2f91789a38d75529e7c51a674
-:0199a036acc0d2e15fedf2ef90063765deeb82
-:0199b0e1fffb9eaf36e789a731c49e64d84efe
-:0199c003c41feae9b09a691e048e7a959a1c3a
-:0199d0827774dec5152a786901c27b2399adb7
-:0199e016e5af27870985dea13745240b43e7e0
-:0199f03445c6ae29e751dbb850445393b3fb33
-:019a00a285affa948f0c377176a1b3193ec5ab
-:019a10fded3ce4dab0e53505fba4155ece2bb3
-:019a200743a979d85dd68d383a11826a2a9505
-:019a30ed54220f8e41ed5e151c4a008119be7c
-:019a40244fbf3ee3ee1343bd613c8b33806fb3
-:019a504305c7c09177702e67b538611e981a22
-:019a60449f6fbf988cdfb47985414b9b77362f
-:019a7000b63665d57c252023b1dbf512553b29
-:019a80b06f18b3c288e55bcaaa1aee5e4a2950
-:019a9052a0babace1bc93edc55512b4abe08bd
-:019aa00858ec953873f905b980ea11a437d958
-:019ab0536c9b2ba6d93e61647da0cedb76f602
-:019ac00633805ee46b224a0cc9d01de08646ea
-:019ad049277a4d0c02a8f41a42f1a4f29ee880
-:019ae05f02b6dfbdeafeb3eeb94887edb9a7a4
-:019af0b2e51f75c14846f9fbbc4705c2e375b3
-:019b00dba28456ce3f0ee09e037d615d4d92a4
-:019b10d7aa38bba9e3b71469721189e63f8839
-:019b20a23ffe2b07a1934dee744035cc996a37
-:019b30c0bd6cab7f9212316b69ff7ae343bbb7
-:019b402a1cbf8cb094f47fd9b75b92514112db
-:019b50e0ea2342f4298e5706e90ffae0d30311
-:019b60cbadd0e94439e0f2da3a684d35f3d7be
-:019b705ea2ef6deff88b670e0e926f517a0031
-:019b80fddb51396f468b33425eae8a7ce04945
-:019b909294f4e18ccac7302cd2a5ebf03ab2c0
-:019ba072c9ab44b902fd20a0be55d0ab4aaa84
-:019bb0cb346beb4cb0e7b35c7c60bcd48dee06
-:019bc01db2142b0eb946330548525915ca5ef4
-:019bd03e4f46d7a4cc79dcbdecef03a9605006
-:019be04e2bdc616d0b97fd7afba37e5ec067f8
-:019bf00268439589eb7e97bd505e7e5f46b271
-:019c000f1f646b4a6170f151411191f38ab342
-:019c105a8be0dc0bdefe0d9718df7e88e0be54
-:019c203f462277ee1be0c92fba6793aef8db8a
-:019c30b624a7e25ec9eca133975ec53e07ae98
-:019c406120274d7a2681fcb24b470bd30d5017
-:019c50e529c7c141743fe20ceac123bc94967b
-:019c602d9cf0e6de580f41c18e6450bbda9b83
-:019c7058d689e7aeeda234dbb9a82a304d2fea
-:019c8005c5a660c36fcd31de0906cde609a2a3
-:019c9022e158fd79380710993478eb81cf8520
-:019ca00f61b24357c3da67dbd91fd5d67e666a
-:019cb06e3447616b5951b91352f4e1633a9a28
-:019cc060a75575e735560cd886b10db2aca977
-:019cd09fde6ec66bb02466be0e3e3324a11e97
-:019ce04283a6ceea2431a6453909458c286f5a
-:019cf048c972ee9f45192e39c342645c85c4ef
-:019d006582f187b4ee1447b19b1ca7604ff592
-:019d102885f9b05ac1386306cdc7ea1654eee7
-:019d20bebef9819a33f01c3deea2fa6eb1672e
-:019d309143683e8d2ccedd6239e22cb0a440b6
-:019d402f5a2aa28b60686b98ff34a8d163dfd8
-:019d50b155593b9d2994ba08d627011fa7e6af
-:019d60791e06af27ccee8a418a41158d543aa6
-:019d70ca8e35f15563172fed243c4f78594425
-:019d809d74a756a9e2a78fa461343158d46a12
-:019d900c806e1d6104459d1a27a1178a5a92a1
-:019da035395a61a1dcc370df0d4f6627a42d0a
-:019db03c0c81935c767fe1b3bfe46b1b086b34
-:019dc0b612afc4d57f4727d2368296535be2a0
-:019dd0575384ddf2787364f9fdab3b5314d793
-:019de06f5c0355ffddc762cf607e04846e2cf3
-:019df03b7e5f18418a4e1cf82fa620f0803b94
-:019e00423b5e7eab70065a5590c1029f7bb364
-:019e1008c9922b82ae2d1d2c9a9b015b5469d3
-:019e20dc06641121ad6d72ad6faba89995ee38
-:019e30c10395d7d4749be692d60b4d06325718
-:019e400acd9d5437c19408a1a05ac210dcd09c
-:019e50a8d895104bcd90b1c2695638e62383b8
-:019e60070b101b373439d19ce1f6b69e09e08f
-:019e704b3cee99578ef3b29ee306cfe67eb4e6
-:019e807dbcc46d0377f7e2baa32a2476413c76
-:019e90a21ba3e3056b37798011040e0c798cf8
-:019ea02c004f9fd0e94d0d27a94ee0367829c9
-:019eb02f32b43549b747268ac80f4b4c66a047
-:019ec03bd04cf95aa127a7ca19eaf182a843e6
-:019ed0433bbab59a373d6f264fccbb14574b89
-:019ee046135fcf6a3ec0b6e27ce21475cb6f8b
-:019ef003c99a1e7c7c989dc1932ff9c7d7a5fa
-:019f00039af3bd22bba6e759a4ccb3ae17b25e
-:019f1031a7a4b5be36042b30d965272b6446bb
-:019f20066a29d5de364ada5923d981836403cc
-:019f3098a3284d76d10f77df4f9204f3ddf5e7
-:019f408d91f833f0f9be630da7e1c3f4573876
-:019f50605396c4d6437bc775dbdb989994204e
-:019f6072160b44e2bc513c6209fdc2c61c91d0
-:019f70736b9b519ac415249218a0d44a69103a
-:019f806d3130420b12d27d7750bb155b19a7a4
-:019f90f2353a8d8682d90fe5a4c7a5c9983396
-:019fa0dde5fdf08cb5a8d6306fd34e64f0ac6f
-:019fb084b1ff56350bb26b8dc732f8f1bf83bf
-:019fc0068559784708cdc2b710205b65f9d7b4
-:019fd0d513a345e31d1d69102e277b50391721
-:019fe0254d7365004a9182c5b1d65b6ba4faba
-:019ff078c645c76077a75c624c08bfea49bba0
-:01a000251917b1d1d7cf4f492afce18235de34
-:01a0108290ed4af6478d986632a7edfcc675db
-:01a020c2bb00e1aa803c76758eb875be15d6d5
-:01a030841a1538615b280c2a4d300ddf96c8e5
-:01a040d92e0fd0b3a08302667815fdf7de8c0c
-:01a05031336fcbb50175a821fa9148497dc372
-:01a0603c5b050b2c1d29fbc3d6d0f8f449c851
-:01a0706a3ac0c5e5e5630699c218ace1d70090
-:01a080fa48223890632fb47134cff84a6ffa14
-:01a0907e7b5370061675d5b91e133f12c64480
-:01a0a075693e3a1cb6c620e61aa571e8309c3a
-:01a0b0834e2e8048b68303120fc2d9deff5a1d
-:01a0c060fa4f80f052400d88d753ed59be3b5e
-:01a0d056d399adda98a99f6617969398350f3f
-:01a0e0ccaa033575047f344344a3646840baea
-:01a0f02805b9a1ac1ca16a5e48cea379c4f4b7
-:01a1004eb1c2e50aa1db6d534662f193eaf6e5
-:01a110ce965b01779c69fbbdbdeb43142087b7
-:01a1203d2fbfb0921087ad74b75f6b90fec775
-:01a1306600eb4c09bee7a30c0dacc7d32ccfbd
-:01a140c48d7aa73fa554c1824ce1f05d84fafc
-:01a1508592a33775f695f99cdc357bdf076104
-:01a160f1a135387dbdc1926de706fcbe4abd04
-:01a170f0fc9131359ebfd79e10ca33642690cd
-:01a1807396dc678931f5daa4093d0abae78afc
-:01a19033a38d7dce2cd48ebe3e198a12c82b95
-:01a1a0388cf5e795b180d8881e822de7509390
-:01a1b0b2876cdef3e5ef70f4b8eaa13141bc90
-:01a1c0f7252f3f976396e228535abd58f8587b
-:01a1d03ef1c996abcd980860dfb34ebd16eb48
-:01a1e0c5700dea8581c0afefaed187c318a1ec
-:01a1f0c6381283850659993bed597761ad0de0
-:01a20095f84d2f18f43f021b65d41142d312ea
-:01a2104aa2513d783111571cb66336c265b855
-:01a220fd5d7a834902b19f8e7e0853a001257b
-:01a2302dac4d7d94f8ecf2d5c783950c94baeb
-:01a240d5572c2744199ffe5a8ed56c7a16800c
-:01a25062f45cf251b161ed0f591bbe7b3ea3fb
-:01a26028c5af5ec2954e69a5086a35b4c70795
-:01a2704c287221e90a3345545170a6790ff980
-:01a280c18fdfd11a189c6e65791dbb2e623dc9
-:01a290a5443cf189894c726af37b432a9f8585
-:01a2a0917a8e1a202497ac113aa82ee40d9f15
-:01a2b071df7ffddda0642a6530292ada39b144
-:01a2c0c8577139d3a6b7c97ba302d939f082cd
-:01a2d0036ce6aa95aed2bc5e9d990f9061b4c2
-:01a2e0632e8780b3943f35e7339e3ae21b3645
-:01a2f0e9aa1d80319a245c449a1da493275e27
-:01a300b2cd6a0d1d45be0acb0717a951ebcd15
-:01a31000b53b2f0b2cbf3c8032f4be97ff0661
-:01a320b7c4489289baebb92fcaa485ac9d199b
-:01a330150c3282c765f28da5b03b106437ad96
-:01a340bc2b9749cffbaaaceca152d0f90e98b8
-:01a3504dc30147fabfa87a43545d919ccdf20c
-:01a360e8c33bf58cdf5b86f494a282bd1e2852
-:01a37009ec4514f21e9b024c0becc5cb0c584c
-:01a380ae2bdcfd4d58816ef4561f0a72c92d36
-:01a390bcd2909736fc67baf4c4c5357f1c3154
-:01a3a05a52edae9447080b511e4b4c2ba17929
-:01a3b0c3d2b13973776eddc15d1d83f0159320
-:01a3c01aacd20abf1bc9b839f529628ca70592
-:01a3d01191a8773de5974352acd9efc1b3fc75
-:01a3e0d2a451c6d9879c2b11ccb2c9f9b0e43a
-:01a3f02bfeb2c07a1fd099196afce9830b28ec
-:01a4008426013184a56527fad52123b99bb8eb
-:01a410c26c8c59c7c594d4cc1a122ecc6a40e2
-:01a420d80af03ebcd6008f6751f54d0aa1c01a
-:01a4309fe95e7c44019bc9c32997de490d051a
-:01a4402a4abb9b0b3ee3560ab7c1cfa46cba4d
-:01a4505ff9437a5e99e63aba0242c8e36f5737
-:01a460800b85b653d68dc515c113203f0685e2
-:01a4703d129ce11624e448b8fbddb4b43c0bf4
-:01a48059162b3e061c8656ebbe5489936bc445
-:01a4904037990afe6d0cc5df124a49882c5a32
-:01a4a0e0035046fbf853b6c313566b1ce57311
-:01a4b08b1f97a74aed269ae56defd2f444438c
-:01a4c04a17a398036c0b49f8d68668eeafa0eb
-:01a4d0eee4377aa1bc07bac6265ed60e3282c9
-:01a4e0e1b64a142a1da801cec2c3f145e07928
-:01a4f08aab1f13f42ea4aac820711777aca34a
-:01a500938ec314eb7f7a8b6892b78c9f04d81a
-:01a5100e31cd3b2186fa443cc60b06fce37593
-:01a52061fcd9a6ad70de4d6f51572737ecd66a
-:01a530af68d9dd07ead93d068cda9242839103
-:01a540267dc8d0ed895b30df7847246de43e9c
-:01a5503605eda92d8da3377eed7296daffe1e6
-:01a56013b30a65ef6f1109f3db8207204b02a9
-:01a57091440a57f17a735cb1546f05b107c3fa
-:01a580291ed45d40778ebb5750e6765d2e36e8
-:01a5906f81fd6d0c1ff181521e125bfc135cc3
-:01a5a0ba7c12717fe9050e93f65ba792774034
-:01a5b04e92005beea48b4cfb53eadbb3833139
-:01a5c0d1989116c648c3da79da783b1bd93959
-:01a5d07169e8e61a3632d5419bd1aa115fb361
-:01a5e0a3430638ed72098e7e9e0bc50a542ffc
-:01a5f0b737580e3fecdced31c650fc983bb03c
-:01a6005ff50299bdc1533c6d011a6fc2de9780
-:01a6100467c3f8030e07c84b7b2080038a3cb7
-:01a620f28dd3f139fae1bc9f71c44dc3a797ee
-:01a630365af715186a522e2c22da47657a5f67
-:01a6400551186838a57ad41a74b0b12e1b9a48
-:01a6506d618332580563ce21b3689f01d54bd7
-:01a6608eee532f287e328aa4bc1c42ffc92278
-:01a670cea5d64b77bb4f8fd8a698f354666a46
-:01a680404b4f726e0d05877175fbd939fd8e04
-:01a6906327fb2909b8fa030bda1d777d452a77
-:01a6a0ec9ef7901e9c360b1f2cc6348b74da08
-:01a6b00db6ee14480706dac4312c44ff3d8fcd
-:01a6c05bae1513bed2276b0db29f244b166ae0
-:01a6d0df304d1936d794b55405739788e1971d
-:01a6e0459b049d0c78f1a5da5746d99092721f
-:01a6f0eab2a5d3c16304c819cf483018b6c655
-:01a700d78b292339e0d3de034bf14b01587c55
-:01a7101ac3e917901d4a44a373723c0cf5fb75
-:01a72087cab321cdc3cc801339902ed9975a3a
-:01a73025ca07eb1b41ec14375f04c970d5fbef
-:01a7403e5ab2d26286496e0c4f48e12a1ab360
-:01a7506d3a9714add81f0e0dcdd9ca26f88285
-:01a760fa3973f1186ff8a7536c8e0c0e34ea4e
-:01a7705335ebaea8b0f8f01a2360f05c52d19e
-:01a78087cba1e451310f61e18dcb9b98a00e2a
-:01a7903f855d625845c332115070820b71ec6f
-:01a7a08090663f273c1f2d9441837ce47f149b
-:01a7b0e0442ce9c01e41988a0a0f0ebc742a6c
-:01a7c056077c44174dc21a91d2fce1e126106e
-:01a7d054589c793d4e830e726cae704892ee93
-:01a7e07edc88655b3c838bb92d4016538b69b3
-:01a7f03666899badd3401b3ac2c547302beb7b
-:01a80050ef181eadd6cb522a2f395b8283b19e
-:01a810d7255ec74deb3a96219c921e89b2e235
-:01a820f999d615a7aa7fd0747376b586de1434
-:01a830c12401ce4f13d91f2d427a04dd248d23
-:01a840bed676e1fc8ae399c22bc5fdb9f54dd2
-:01a850da8493dec8ccbe29b92fc89dacef1b6a
-:01a8604e92762eea9af787b3d74855e293eaae
-:01a870deffdc8c18ec2dd90cc42fe4b5416ff6
-:01a880d536b60fe36fcd962d87573881e59ab3
-:01a890445a3716fcc11a5d1df74c1ede7efcda
-:01a8a0f9747a5133334d1249da43818042351d
-:01a8b07530fa57e04c78a6e6c54abba0f1ae59
-:01a8c046c1d99e66da89286cd33cf9c2e38515
-:01a8d02d8015fd87bd3bcea8e281dc26b62678
-:01a8e0c1ffc6b37272046f8ecbf3cda8b0c1fb
-:01a8f032d0537cd5101068b53804a27a925953
-:01a90080f6d7596f21f78c44d4d2f7dc9b56a7
-:01a9105226b21deb0f522c6603d42e82f098d2
-:01a9206202732114ae38ef17d4eeeee02543cc
-:01a9304e0358b1a8b5a87eff9ee6214ebe18e6
-:01a9405845862b4a492f7982d40c416564cdad
-:01a9502b785825b32b030c40527e9fc0ed0957
-:01a960297a9e8e8b7915d3cc10598892110f0a
-:01a9702975ccc0f50c17085edca1970d324e0f
-:01a9807e273ff5b8c5f9935f3bed4b1a14d25c
-:01a9902e787f21fe2f3f4f1ce95d96276818d2
-:01a9a0f80ebfa0143324eb82577e0adea70614
-:01a9b00618111337ddd199ef43e37d93a17ac6
-:01a9c0c896c485b3e411808f3e056e2aa3211c
-:01a9d078cdfc6b15c141e1cffc75e2bd0a1f8a
-:01a9e0aff29f56270e8721a6a2f42b52a40156
-:01a9f002b55f1391d980a454a79b5a2f4cc1d2
-:01aa00d2bb97e5f09e063c19bb413f030cd95f
-:01aa10fee6061bc3e084f895f2d100d460d1a9
-:01aa20998357105586e28f2ad7daeeb2a85bfd
-:01aa30208c92f8e2e907e278ee66295866b6d1
-:01aa403ff50878aeddcfb991793d7821c04370
-:01aa50dde21c1cb6535dab8a255295919f74f3
-:01aa60bbecff48521ec12b3f169c78eeb694db
-:01aa7033b2ac99d9361ec9d40e8c72fc8830bb
-:01aa80cb6324f0f511d555ce721795e0ab740c
-:01aa9049aff5a7482e35d89ed1f8a631474adf
-:01aaa01bf41803a1bdef4ffc635e2229d7d9aa
-:01aab04dc5fb98b1f8aaafc7c051951a8a166d
-:01aac05765592f7b961d4c430e71c3904ffe5b
-:01aad006fb590fff7cd24604da2dee8e62a574
-:01aae0edb5d2ef2a39dbd9e5b7222fb631a2f3
-:01aaf01d546cd672de8473420a0a69d6690469
-:01ab00c4d2a41095b27448f7d18b45c6b7ab70
-:01ab1080a1fa787c80a4880ad961f9f40661d8
-:01ab20d07c615fab2fce25f9ca998519b3a0d5
-:01ab30509fb9b274676228954019c316b287ff
-:01ab4030dad56167bc81fa5ff8cb54fa5f0b4f
-:01ab50068eb510c2b606ed3df06a1f035def91
-:01ab608c0c7c2ee8311fb7e857e40c4f8beca8
-:01ab70afc97bb65de2dcae2a7dc1ef19156378
-:01ab80f7d0623abed7ec3fa8b816e7f86b1ab8
-:01ab901b885c3851161ed3b1369d6954222255
-:01aba06b767f8f7e4a0274488f221a260e8fc6
-:01abb098b0ff7a8504d42f4e1a1cda51ee8919
-:01abc0dd6dbc98d464a08e67bb206396e38a61
-:01abd0f5fbaeb88c0bf494312aa4376c2b4690
-:01abe0e70d301cbbed9966a4f06907b97a68fa
-:01abf0de3f0dc6d6c8cfd4bbfec43a7a8100ea
-:01ac000466ccb3be6d7f639d5dca18b810f120
-:01ac10ace5de77148b07b8f79ef609bc13c0b8
-:01ac20f37e406c03b8ee22b1ef536052d3021e
-:01ac30205674dec74316174deeaaeafbdf9f91
-:01ac408e112fd7ad359cccef826b2dd2325caa
-:01ac504dc6b2d6e6de9b09cb0c4f8e14f8ee6f
-:01ac60569feafb3f6c1721052e2869e4adfb09
-:01ac7095520ce81807cd3f78e19d4bb399f81c
-:01ac80239ac8473d5a5221666f1701a0179d2c
-:01ac902bc623a2f5d1f81a20962663e0f34f93
-:01aca0c7e3f1e04f99e826a3cb243cf511209e
-:01acb03e551b5d83cc84a07d2108bb0be77d12
-:01acc06cc1fcd1824909033946e33f5b556d7a
-:01acd07d4505ea4a319104fa52fea3887d530c
-:01ace0f4dd083da2540bda2ec77a33ab0b9844
-:01acf000f3beaa2720ee4e7813a73e6ac79337
-:01ad007b31c0717cd6525ebfe14c5b62593bbf
-:01ad10eafb12bf713aa7d38a8df8c73be3b4b7
-:01ad20b6fa59271bb1f7dd17dba07b5bf8eafd
-:01ad30287d7ab4ac790cda326b7759089c09ad
-:01ad40529935432832a90e9f0106f45571ad8a
-:01ad50856119dfddc4ca975473e21b70d9fbef
-:01ad60230fd7970ccd489a805afbe6a8ab8bf4
-:01ad70f37f521b652665f695c96dcb981eeef8
-:01ad80a22734897af85e1ac6f8129e4515e42f
-:01ad9019b5b03fe728eb284ece8f47b7fd0aa1
-:01ada0809708155d9aa93031a71c443ff81539
-:01adb05ba7d80f99186e3d13e5e639aa314bd6
-:01adc0674dffc5c9b895bbadd8704474a01c35
-:01add0e3af917f5d7571015aa35268567d161b
-:01ade0ad5d30ed0fe9d69a668231fde682b108
-:01adf0cc2c1bfcd1354b2965ddfc3b4622f44b
-:01ae00d6011bdc486d300ab50c2e56f8d583fa
-:01ae1016c04b80789dc1767bbf2810e18e634f
-:01ae20a944c28090765dfe5a7dd700090d7995
-:01ae30ab06a57a7ca760df37ba2fcbe601bb38
-:01ae409bbfd564b7eeb8a47529a447ef513368
-:01ae5095ad4a13bcc2ba05f331299640cfed6a
-:01ae607801bf3b47da2c7a53e6d827c99071c0
-:01ae70a3c9bb17947d228f8f33a20f785e64eb
-:01ae8097ddf2575b6c306001167c2e8dcf6446
-:01ae90b322ffedb554583bd4d47fc905a43223
-:01aea025160cefbdb9600e14b38e60893f2720
-:01aeb0e821ecb6d13c4911ec6cae051e8f6502
-:01aec00cc043b363beb1152577623ddd065b1d
-:01aed08568e2323bb0899ea776e659929f7824
-:01aee056d68061a8b76f00c557a736a7ed4b75
-:01aef01f1ca33c6d75de150e0f05947dbf94d3
-:01af00b018a6768f96f2b6868defa356c071c2
-:01af105b619694fa010112137ba7cf4535e7ee
-:01af205bb528fe2b010375ca15c01c39c2c5c5
-:01af3086d29ffc7912e7185ba91cb68a8fc628
-:01af40b57df232752c1273d4902e2e4ee70849
-:01af5048e6851d2f16cf781487d56d86722679
-:01af60215b54b8391ea88195b4be5ded01ad0a
-:01af70b1fb1baecef80e5bf32812847e5b6cc0
-:01af806465dfd192ee3e112bb3c417d6a660b7
-:01af90d396f5df080e03a338eba82b5a816f56
-:01afa09d03ba4f55591fe3fbf9864dfab97282
-:01afb0cad394afab110e98b2727e9da2d2a142
-:01afc0da1d7fd2d6f6a8e6a06f225b69fdea7e
-:01afd074b004caa0c55515f9a12a4e47b4de61
-:01afe0402155e711e4209827f4371c76a04fb2
-:01aff016133674442681b1dabf5f4559d17a2c
-:01b00029f0e121d7e272f3d8e14bf9a53247c0
-:01b010b8343256770c17a007e0502adbf70805
-:01b020b09debb938d03b087aaf2289aeb5ab3a
-:01b03043a88f8664897ae07e71bcfe0f53099d
-:01b0403547be2d10e5ae33b222e1c188872543
-:01b0506e2dc0a11c80fe1fd94be5a434036ce4
-:01b060a8f0f6a82c27efec8e91b2f89e448f78
-:01b070865b8fccfb7ff5e57a383c6a39f61ae9
-:01b080a2da5c091f57451445c8603a3d216c80
-:01b09013acf4ed00e058e91b7a9626887dcd58
-:01b0a01d9a2161c293e380c7ec08e4b7d1e196
-:01b0b07cdfe381b4b786fa420389f2f6b80a84
-:01b0c0948a03ed2673801b9f04c345314a3605
-:01b0d049deed9d02c40b24616b9fd788e078c3
-:01b0e04885bb6c8d4d7ac88d100db240f78392
-:01b0f04a35194f7c94b0cce82b28b915c5d6f5
-:01b10051c997ef2f2bd32e914d2af7c89883e5
-:01b110c212a5654d77d32316e96f66d91f4a7d
-:01b12054c3f7d69e8294bbef79c59075db28eb
-:01b13032d0dfc888d5b6807bf12a15db61e3d1
-:01b140fb4c86a3cd4b43ef2dfb3397c1027c51
-:01b150d366d26dbe51ee2220f4d267dee3e615
-:01b160a2a5dce6d2309f055ad1be45b0367a28
-:01b1701d5dce0b80d138ca72e57eedc65a8a4e
-:01b1808a8e5c422c107abaa943ea02f66dca9f
-:01b1907f17185502948a5b9f2261873702c743
-:01b1a0867b11d29d45464de6db2e7523a212fa
-:01b1b0949fb0365db2b1e7336ed879530340cf
-:01b1c0b5c1c2ed56b2aa7fa4d3ee71151ee78a
-:01b1d0a258cc310361d77576a6cd600d7a584f
-:01b1e0ac6a695955a79c51c6bdfd068bc953a1
-:01b1f0889d1e3e9086acf93bbfcb658d76b992
-:01b20099eec95bd3eab01e1c00968121b66ed9
-:01b210065cd1b7eddf2f8f682144f5503cf9a1
-:01b220072bfac3f384c6df1a5746e97e5b1b5c
-:01b2301060c75f2ae1ea340e3590211478dc4b
-:01b240bd16e1e81d374d5ac0813ed3bec44af5
-:01b25028faf43077551c1ad20e32742e3c8501
-:01b26042d6edcd57ca75e7ffda434f4d37db5a
-:01b270d238969f7624237cbec13c9937cedf25
-:01b280445682793e49e60cf1cf80551c6d5192
-:01b290bac8e375dc158938fa24788037578948
-:01b2a0f52addb89b058e3847ed562449d947c8
-:01b2b002a65de3aac21207de5851ea33f330b7
-:01b2c0146686db76069106094701c1a00a2739
-:01b2d0bbb05ae4e48d20b5ff4a101dc39df974
-:01b2e05c07dd42ed83899676f81469a45d7d8b
-:01b2f0cd80ae9cc731e56ddfa1ab01885bf842
-:01b300807797b18d2af3a83348cb1927a6a518
-:01b310e0ab0c7972014683b2c30fe94c692c42
-:01b3209cb486a6faa61bd63c397b6ad8f4059e
-:01b330fce663b120d7d668e1fdf5fc5613f495
-:01b340397534fa0005c2d031a50e0a5835f36d
-:01b350ea0151ff3cb30e1244fd290435b6aa5d
-:01b36061ff776b86d0166d348cd076a278ae1a
-:01b3705c8787c235dbc575faa4aef68128a7ab
-:01b380e57202bde08f0ad3220ba41dde3b4586
-:01b3906344ef19cfbe71f98b049c9174f374c8
-:01b3a02b0443a87027cab93daedb32fcfdab36
-:01b3b093150a725b61cd66e68e3dd6d39fc0fd
-:01b3c0733c7340538fe2edc6a8249a7cd60613
-:01b3d0d438e8c29cfba33f990e15b36869afd8
-:01b3e02260d10744bd2b886c1fddcd0dd12f60
-:01b3f05a25abfce1030d3a823c54afb1cf0cb6
-:01b400472d26d6c7cb93ea84c078aab804afb0
-:01b4101c191a19d6cde247ec38c45914e9e9be
-:01b4204f875666df3a9ff8a919a2ee146c49af
-:01b4307a96b21ded1070829bb1e3a718bc90cd
-:01b44038047b05a5338b09db07677da0980c30
-:01b45032233e0baf6e0c39b2bfd4c4be186ae6
-:01b460679fadd2b87cd03e282c76286dd4a767
-:01b470202f6ecb00f71f7eae10e21483a27dc9
-:01b480bccb2f5e5ef94fd259c741929fc86149
-:01b490838fa3510e294f0276d7935410f4f688
-:01b4a0a195f51ff2091ba25e8a37d5d31b1f59
-:01b4b016dd73be5fae5c6c24c87f07318eaebd
-:01b4c0c1b932e535ddf78e6738c6be91646ed1
-:01b4d0e757364d8bcf671366f3887d17bd557b
-:01b4e0ba2f92962cd49c8ad85b565c9633d8ff
-:01b4f03293b3d0e53b0c67e939652144c224cb
-:01b500afa6f7b045deae94f0b9de6c767a5712
-:01b510b9ef476e503e68a43f239b4b25d01ce2
-:01b52056392e8d08599d55f094031367d6dfb6
-:01b530a2b1669904eca4a5fa0506258d37dd98
-:01b54004a4a9f14f7c2366e41aa4b03eb69d15
-:01b550f956cedb05e4fbef4f3a10d6b3aa8d37
-:01b5607ac5f6e70902b2c74e98817f8c63ec37
-:01b570acc672fd1d86aec3f6fa8ffbef65af78
-:01b58082a59a54b07cf0a8de1bb7f40e12af03
-:01b590a3e9cb7101389654db4180581e02b627
-:01b5a0f1df7acafaee9f3462e5158813637249
-:01b5b055debc5feaa3f9fba79b4fa25e8cd8f5
-:01b5c0ae1028cfa430070bbcdbcebdd59046ba
-:01b5d068efdb7f10b01518399135ca0a62ebf2
-:01b5e0e0b009db2f8c1d66600e76f8cabd3e57
-:01b5f0ee9cca6021cac2289fb5a1dc4ec692e4
-:01b600b4a5711aaaa0296abe782693b6717055
-:01b610f113dd6e0f632ec6d1bf2f7ce427b6c2
-:01b62041b15bf2f80b6fdf2c1efa5da1982516
-:01b630813c258ebec1b53adcbef624e75dfcb6
-:01b640397e5d92b3807e297508c49955f24ab0
-:01b6500bed11c191fd9083a0654394a150e25d
-:01b660d824b2fb2d62af7fe5fe06eac6e0c022
-:01b670bd340d91248bf48cb02f071f23f3905b
-:01b680445cd196e39a7281f3ae1d63add572d8
-:01b690be9eca3e57088886e9ca10452db1825c
-:01b6a0532b4ba1f3e17add1c20d8aefe299d23
-:01b6b0072a1160b64c47ddc26f9629ce3d6ec4
-:01b6c040616ece6227e8ba80ae490e8a9dfc64
-:01b6d03d40a66711958afa3405f037e71f4e69
-:01b6e02a6add682486bb07bb4bd9149f6eebe7
-:01b6f08986f4944ed3b3e0ba4ce29256518bcc
-:01b70021c10ce91cd519dbe4f0a2a23fbd980e
-:01b7101edb6ef3494d17cf3f206823c9f0d9f2
-:01b7209145da84ab3204dccef0fc00de2f22a9
-:01b7301973e05cb26b8a027e74a8c1ccc814e2
-:01b740fe42ce5e1ff7f445ef7d497ec7d373ee
-:01b7509caba22a17a4248c01703bc4d4ac775f
-:01b7607c0c0661fe7cdc8d848cd30ff0067945
-:01b770590407464a8befd2389c709278b9532e
-:01b78053e09287fc30d2614ec71c2d2de1cb59
-:01b79080de2ad7026231a813b682722f15ee51
-:01b7a0a67f78b0c55021bf59270bef19690277
-:01b7b037ffae2f11b126672885a6af60a92d09
-:01b7c0b50191491f4e7c6b9c61ba1231e4784f
-:01b7d0bf1a73a96f725abbe9d81496ba47ac4e
-:01b7e0877354674e456b2426afb77d61f7824d
-:01b7f00548ec5cee10f4caa0652fc87fedbd97
-:01b80013f8331ab4d5045a244cc680d654b8d3
-:01b8104ac049a7e15d8f2af7c1f95bbd031874
-:01b8203712f73987dd79e3d0bb975ec9e9c386
-:01b8309daf1576133a25450cbc352f4fff1616
-:01b840c86352a717ef989736d7ed5147a7b8f6
-:01b8506544be8e211041e6ca477968e088d79f
-:01b8602ccc9a76cf8ca291cf872bdc9fa69828
-:01b870995cd236e3b7ce770fee6f8c40a85c44
-:01b880f286438b508aa08055ac029dca5840c3
-:01b8902b4a05d369d53c39f962bc46df3cba38
-:01b8a0106af2730b4da4582b7fb04878bc212f
-:01b8b0b0f440c7908c2adce28332caed52b42e
-:01b8c0bf277ae497681aacccc7b902c7fd1229
-:01b8d0017085a40bbd7e60a2d72106a808b5c3
-:01b8e01db98797ab84204c33440ba1070520c3
-:01b8f0dfdabb801746e3402ab1bb457033453c
-:01b900a2c4e15013d993e3e9734e0d4ed34fdb
-:01b91087cf6bee3f33e81db5276650fa6f1ede
-:01b920c0ceef53d15edf80ba7cb287ec47b753
-:01b9309a3e078b98fbd6aec3e3a95f103d0c44
-:01b940d2517e3dd27edb874a7e2dfe8b16d570
-:01b95076934e46e1078ce2356963e3c353a2cd
-:01b96088c5c3930618a6a742d0fd2a0bc35f90
-:01b970f71bcb72ae8d0e69c264baa79ccf65ee
-:01b980ad07dd073581ee2d7e394596c14a487c
-:01b99000967fe9bcdf7a4ba571b8ed6ae5c27d
-:01b9a01dd73a489e03b57ebcb072168b7a6d6c
-:01b9b06d6d0d7d7116a12f0eae33b5a7188e8a
-:01b9c06313a9b36a08a6d6b96a9f75ba432320
-:01b9d02e76498175142076be711568de9da0a1
-:01b9e02f4072e5c60535ba7f859cdde191c897
-:01b9f08107e1bdccec22a5946c91e124e4c3d3
-:01ba00a33d34988d5e2db6e46fbcfa6f9f8fa3
-:01ba106ab5bc0c569ace664dea54ae987c8c92
-:01ba205d649aaae1bd2b25fd50272762157851
-:01ba30c2241e2bc67ec933656c5b1df380ae96
-:01ba409e10ecc9993b77bf2de33e693a117efa
-:01ba5099e4d1e622823d01eb5c476eda3a7e87
-:01ba60fcf68331fab97c8e38b28b2199b3108b
-:01ba704767e87eaf6bc42eda15939b859e885b
-:01ba80177cb99b97e18dbb4899edc92e47ef7d
-:01ba905c3c191cdca2dc182e9007c9c7b038ee
-:01baa033d7f51472270ca91ae7ab53de55b3d5
-:01bab03c03f4cef7ae901fbcdf9fa22e0dbf97
-:01bac0a37c038136a019e82ee997e19df20a3b
-:01bad07f72953aa3db024d470f5a19478dca13
-:01bae0ead54436fbe21b68214b97f974930c1a
-:01baf001d9281ee76b41e3782760eff0822918
-:01bb00494a4741f4542616abd139df31ba5e2c
-:01bb101de43cb7155529eb08fc03581a13aaf8
-:01bb20c3572f9ba537deec7ef4190a4b6a0ec6
-:01bb30355b234d3d85413d0c1ed9770cd17223
-:01bb40323bedca8864d4c9da61d89d095a280a
-:01bb50419e762180579e4e9f381cdb5cb4088d
-:01bb608e400558e2ec9d21d7f21536e2ad5c16
-:01bb7024e1b93619d2c964d20bcd6241f09756
-:01bb80326d4860bc3d2e582469a3f662d77522
-:01bb903f504102dddb8cf31b2e21e3bb0576e5
-:01bba08226490a0861ab04cefd7458b73a683d
-:01bbb0ec05eac1602a372a61ea16e4c82fce0a
-:01bbc0a293887f62352fec29f1a56872e7de51
-:01bbd02a66e47bc9dabbcde155bdbc4d1f310f
-:01bbe0e14bce834b514c33581a95d789659ce7
-:01bbf08d9bad49d7c6857d7785542d0d4dc1ed
-:01bc00d34b3993935db66f657b36bc7b42779f
-:01bc10f5bd750776101b6c724efaaa6a48ba1b
-:01bc200dbeae184d3012f30db3a207337fdc9c
-:01bc309b93c6743c3b81dae392175a0f380507
-:01bc408effe3d7cdc49b12ec274389e03af570
-:01bc50aee43b024a17c053d4ec635031c264ed
-:01bc60d415cfe10ed346ce5f8578e21feb27c2
-:01bc70f33fb4f21a57f968a027bdae83715440
-:01bc80361c815ce54190f47b515ac2ce36a045
-:01bc90124c2a9c831d0007771ba91aa3f617c2
-:01bca0ac7a0d0b96c579a2109e8274eaf3ba56
-:01bcb07dc491eafaa71b5e4b857704ab518def
-:01bcc024824e59e8be359cf504a6322346a5c9
-:01bcd08f7f51c06b6b2a6f301db5b463f1b01b
-:01bce0d9c91e553eeefff06192bb060d6137a3
-:01bcf0b9d90d9c3815e2652c6a442ebf5157ad
-:01bd0017959a99941df2fbcbdbba08d488b805
-:01bd100b7e3ea7004e034f3bd01953a5cdb410
-:01bd20ef78af6d1071b7c2073769b005c73177
-:01bd300942143cfb37cfadc2b2e8fea35d03ce
-:01bd405e38a17d2f7c8c2f69772faf275d0933
-:01bd50de0522a9922659b897c0c4aab71798bd
-:01bd60e995c160a8295e53e62497e37382f387
-:01bd708513d20866e7b20840e6b96ce9049866
-:01bd80169f57b2fbcc73516e12c184331dd913
-:01bd90906668528222c6ac191bdffd9113680e
-:01bda03db8afe37a7c7e7a0837ed042c071f21
-:01bdb03efa99818e96524fe99c757125ed6db3
-:01bdc07a8d3262c41bd355df1981e8505cb98a
-:01bdd014db7ab4e6b80e3d4502ddda3152091e
-:01bde006f257ea4f6ea1a93f5bd9bdfb6c9b32
-:01bdf068f1e38eb8d4800ca2af9e884b8cf605
-:01be005dba6f555dc5aa4989d7dc99d5213774
-:01be10eb6813da1425bfd206a30929379fbefd
-:01be20c22dc960e7d2e5b6b13855196b1dd278
-:01be30ad726a97132912ab33158431ca6e5884
-:01be403f337d79e9210162e945087df4b8da8f
-:01be502a5b3a6147ff70ec67f726b5fb9ea1d1
-:01be605473eb723546394c0b1eea1b9dab7dd0
-:01be70371ac0f9adc90d6b212fef22d9be4684
-:01be809d061884bae256a8e3b348b2dffbee88
-:01be9016b79a4f7b4bcdd0962e83c0d23f5495
-:01bea0e2aaf0a686606d616988a9a1d7935f04
-:01beb0e3ad14d6c83e624a66b22382744eaf74
-:01bec0d16d10525b491ef5b479e2fc632f25d9
-:01bed0d6074cd8b431cbb37980d2ad11955b14
-:01bee052c8677e0d4d199d9c19d6302ea7d442
-:01bef0709773f6595b10a2a857ed1b477e7c65
-:01bf0023a39d6a6985869fbeebf2087e2e4363
-:01bf10d1cf45dae8cb8cb2353b55491b005c19
-:01bf20eb867df75dd88eae92091318d853a33e
-:01bf308152c7931753f29e3a93ec1cb75cb82f
-:01bf40b7e164341dba76fc95d920006170a997
-:01bf50ef1d09b0549d53299617e9c2443d9fcd
-:01bf60a50fc55604522596e89b43d23dd4fb00
-:01bf70b1d2ab0aceb7d04dd62408d20e55c43b
-:01bf803c0fe484bd91e8d8859455032f289a58
-:01bf90649469992444829674573046723cf6f5
-:01bfa0fb73005646a0bb7525ecec66d2826be3
-:01bfb0cba26d2245798bc0f60115ed398909aa
-:01bfc00ac4a8949e6ded1f2603ea160e33fdd8
-:01bfd0c71e6fcad84f60086d2daba1703abf06
-:01bfe053d857ce4b66ccfd157a1d8598233971
-:01bff0205133935b179d87d21dd0bd8e943dae
-:01c0008cee43969141ddeea0cf786923adf0e8
-:01c010d815452f50e4de0097a7db637696ce9c
-:01c0201177507345cee7bc340dffbf5481df03
-:01c0303563f170fbf07821ab1e91b6195e6ac9
-:01c040a20ebbfbe32a0d00101afe176045e58a
-:01c050c67575323f1c3ee6e4ab68d454af8261
-:01c0601ae1914e1949cb572c4986d839d8b6d1
-:01c070767477c370d3a12e7410ba6931ed7d2d
-:01c080350e22a46edf842d362c1130819d5d30
-:01c090306ec06603b9e406188dd30b31d1d655
-:01c0a0c2750da474e4bf910d5d9f8a395a17d2
-:01c0b061c45a9afbf19ed5078a8db2b5904881
-:01c0c0a3d746f1d9972499598539a60145022e
-:01c0d0e089088deefd0f86d05c85ec28671191
-:01c0e0d2438b1608e497e1d7900a36c50ad574
-:01c0f0b425dc98d1823e782be7f307027e05be
-:01c100ff1b4c8bf5c4aa9da241cf93658a9c65
-:01c110c39e302e278daf66370295251b1c4729
-:01c12074be4ef70574d1b368cb1df887bad973
-:01c1309506db8ff84fd56e1a2d4c535959e5e6
-:01c140239305dfa8b992d0f22e36165f6efa72
-:01c1509f1cf5f484076eb26fb9f49c054c1402
-:01c160008184893ff8b3ccc4293fe77a03e356
-:01c1700bef90fef1f832d85e704653622dd06c
-:01c180a5dcad35a8c1f1e27f28ab1fc2880d15
-:01c190f3ca1fa9c466947948f50349818bfd1f
-:01c1a0c98ffcd6c6dc3508193eb18e5041a304
-:01c1b0f094b5eee2d4007bc5ef842ac3bfce75
-:01c1c0ce94a7e8af3d743cda274df51f87833d
-:01c1d0b230c45b21829a3d5428851a5947e792
-:01c1e0d760fdd0fd1438922ef020b9ef8741cf
-:01c1f0f94006f2ac3d7de03e5a7ccd15e6403f
-:01c200b89071c633b909467c562b739f940a49
-:01c2101deab3d938fc2baed15d0e4425ee8764
-:01c220e8b54788eabdbd9a520e1bb474042c11
-:01c230114ec7d2540b8330f8918c9585466238
-:01c24063d869341936fd2e0f13ebcf8e21becf
-:01c25023a68e3596d69f4a12cb872964563679
-:01c2603c369424a26c4c8ac28237dad0f3b38f
-:01c2701728b5095aa75af99ba983ba85e12e2d
-:01c280e588b30feec66b8c86e621ddafb85138
-:01c290f26bab451e5467ca29f8f85f15d7c251
-:01c2a0eb74e79aa6aae49be26ffff336600184
-:01c2b0ad68913d46dcdf9f17d7c5d8c82936e1
-:01c2c047b5c406e02394e5a95be4103c9d0739
-:01c2d0e8da38870873f6262c14cbd7505349c0
-:01c2e0ec5d5a2305b77718c82ac1602581c1e3
-:01c2f0dd967868386568f41d264678536ccfc3
-:01c300a64efe6dce5d7954a389010b30285b24
-:01c3107fe0117666c767b1cec9152acd624627
-:01c320004e2d44e1783b3eecd3b4ec5e4346e5
-:01c330a07361273289ed90a8515a678b8058af
-:01c340eb8ecd478bfcddd3566a7e22ceb72550
-:01c3507ebf66691fcb17f68434ef0a4fcc0515
-:01c3601cb034ba9b26cf8ccae7a08864380310
-:01c370c4aff21fbc83748dfc9b7b656fd26c9d
-:01c380dfa4e283c366da83fdfc2a7b80588075
-:01c390372edbda958752ba12c69422daf18548
-:01c3a089b6f0f96419b1ab83c5151568afea3f
-:01c3b0449aca224182fc6d33f0efa4d2f519f5
-:01c3c08f47bee4ac78692410d48b6240b1a781
-:01c3d0c8703f04162ffbcd664e65b04c0f8de8
-:01c3e04d9c6e46b9a3c8774ffb46fd30bc7cf3
-:01c3f0edba1813450e80e2fa11ca904719e107
-:01c4001737b6dc6d3cb42dffb2ab880b42aa58
-:01c41058977f606ac4034a8e2ccb1dd9e77fab
-:01c4206bb6569ebbbccf88fbdb5485c50e5fc1
-:01c4305a271a95adaf824b51c5010b613cae58
-:01c440b4670963fe90fafb6d08234d6b8d30dd
-:01c450a84b007b2e268c2e2b0cf35fdfde6df5
-:01c460711d12dbc5df05b0912a9082affb563d
-:01c4708fdf4f8a56f90b405490daf849de4637
-:01c480198aa490bb46d26c9622f72c7bf15e0d
-:01c490f2ed198912bf3329262e9ce7d4528736
-:01c4a05ff1d1992e264d5c17768566b20592a1
-:01c4b04c33cd609e69e7b614a6e52841252d59
-:01c4c0dd30727d97169d3a8209b651421bfa7b
-:01c4d0507cbe88bb24418b6434bab2b8097990
-:01c4e0481cdbc9fc66d192b9960f0c789eb0dd
-:01c4f03218af00f258aa5ca69330f2e59b1d71
-:01c50055052e5e16aabfbc2f675a94eb7982c8
-:01c510b8ffe55ea04c207e6073fe52ef44b3cb
-:01c520a5bd74660c019e5deac756b81e9eb60f
-:01c530fdec7458786b30afaf3fced517ec1455
-:01c540172d1e99e7255038fcb17821c72590a9
-:01c5502ee5a4827c349ac18f8f20d9206d0118
-:01c560fc04ba32370cbba0529dc7e83544ce96
-:01c570f90b1422a0d6f5b2111f92d181f0a2a2
-:01c5807930606f3a7273df50df082e74baa1ee
-:01c5901760d11f142bf1145eaf81a76662de04
-:01c5a01fb6d2b8ceadd5e443e4609c3aa39942
-:01c5b07322514391a7b54bcbb8dfd1eacf58b0
-:01c5c089e0b5dd17a50e461f73bef4cf753347
-:01c5d0b4bf62d974bac866ef7fba823b1124de
-:01c5e05e2c91c09bd474cb1159a4b09d6c9a4e
-:01c5f063ac6fddd3b96b3bcd73fcdfa268bcff
-:01c600b5a00eeba4078e4a84173de2e541c184
-:01c610bbd82c9b196f45dda40dacec9ed2ca7f
-:01c6205ff8298843573598752f1ff6754f48dd
-:01c630950c0dd901a64c9886ce544961d72f0a
-:01c64077ece7fd887b629af370e80215441e00
-:01c650867408af82d348037a2e00353310847a
-:01c660948b637127351f2bda9f4382562bbb2d
-:01c6700c852779efbfd46c76cf854a183a791e
-:01c6806a34211c364ba0edc7aea25636c31a0c
-:01c690647e83895a22a660681899b9ba63096f
-:01c6a0de7007de652f53212a5ef1bd0914f4fe
-:01c6b08eb8770652bdedc336e29395bf41e480
-:01c6c02bad7d97933dc63fa9e51d5dfadebfbc
-:01c6d09fe481b03b10b182834b85715767c5a3
-:01c6e0b1f42c66242ea0411295fc440613c01d
-:01c6f032f4b21fb754b4b0947fba8afc531efa
-:01c700d9ae47151af94cc05288ff7bffdf20af
-:01c710a7ebfeb66b91a477779b0eb23c1f5f6f
-:01c720e874448b1016c1840acb20788d360ca0
-:01c73075f20d683a1f0853c8959c76d82dccdd
-:01c7409e9a19ac98f5368080d8fd227d041010
-:01c7502720f58b1ad2edea2141c8e9518f2f0a
-:01c760db09d5b7f31fe8faae762dd78d17d976
-:01c77093c67e3d7462ff97a15ec17eba66cd2e
-:01c7809ca82cddbd1ad530fcc162b2a9be46e1
-:01c79016ddb2b8a60ceb4d2d892c814e4d414f
-:01c7a0466ea3a74ea967601d747e7b76646f9c
-:01c7b0759bd0248a89aac8dea262e7eb0b79fe
-:01c7c02d15b540881358b9d646c68eb7b5542a
-:01c7d06f42cd7efabfeccec9357ee23d47367c
-:01c7e07627c918ead5156a5ac11486435d9d84
-:01c7f0a67d4adaef82d5d032e38ce25ba2e5bd
-:01c80005397a352378cf90e355e9b5651bc560
-:01c8100bec466f536cc042014cea96f12b154a
-:01c82069ae1a81217588ad283f9abe5562668f
-:01c8304466ec243c5d58160e3469061517e0a2
-:01c84060a495b266c224f4bbfa5268402db7b9
-:01c85079b227608857287fc46b1b3b289bd1ac
-:01c860af493a4213fede0b320a9df0bd6deb64
-:01c870725325e36ff2db4680f7bd872afae2b2
-:01c88063f8acd20111292ce6c25d62bee8b28b
-:01c8905a5711bbeb3b9d76cfdf8a2b3b0f3f9c
-:01c8a0d1d3d4ba9e0f0efad2e6a303cbf1b7ef
-:01c8b0168bc897704541100e35d7a3fd5312b1
-:01c8c005521262a60925edf0f855c84d7aec63
-:01c8d0d94521ced42ad4ed46e9090078ca5701
-:01c8e07c23f27a81cc9df63969e3a42154daf5
-:01c8f0edbc102ccd961aebd5cca1a0ea898229
-:01c900c85c5210e81b38a5eb37f459b918c2f4
-:01c910d135f468715233ca843892296bf7305b
-:01c92015edc58abbab65d021cf04d5ccfa7f47
-:01c930952e2e3e2cfc7ed75e3ab8082dcba8f1
-:01c940e775c983788e8b969d3b67792749e914
-:01c9507b572f04823d8164db15d2910f75c0c5
-:01c9602042bca2ae3877acc3411e2009841a89
-:01c97085ca07ff93e747bf4cf8c1ddb8941807
-:01c9801a7803d22e3bc90fd841cb56c1a20cbb
-:01c990d14138fd0f03cb0248117c41546325e7
-:01c9a0816dad75e63d603e84ef4dd6ed789270
-:01c9b0f1ed790882b8420d07b85d26376f4d12
-:01c9c0608ae5942c01ff795971f79af12b612a
-:01c9d00d081082e8b76020301df31c4997b3ad
-:01c9e06324a93e88ed09c07606016c274c37b9
-:01c9f0aacf870ab373128de825563706478475
-:01ca00345d7897f6553ab219b61f6b6569eb3c
-:01ca104515a2b1f1e37ba23beb4e7539f0bc09
-:01ca200c41a9e87920c8b0c39e4f8a1f6d15eb
-:01ca302ac0898a8ad78e581371fb9c9327cebc
-:01ca409e9bb20372e4ef14bcdf4ebc4b072503
-:01ca50dd12a833b0b7785856d2defae3b484a0
-:01ca60d36773b9bb9bd811336390f3041eb436
-:01ca7015bedc6b8c5e0cb7a28352d39d687ff4
-:01ca806493cdc96ccab1ea799d8618bc8250f9
-:01ca9014a8c77b7227be5d5d3f25b534ccb8a3
-:01caa0dbd97557bc60a625f355950f0a013f8f
-:01cab034bf9de1b01a6c39d2bffc1324d47758
-:01cac009a149e62dcb32e39ecaabf3a6c561e2
-:01cad036276bb62cdf5b77798e4e37a93d9dc2
-:01cae0a1537890e9b677ebacd808fe09ff753a
-:01caf00d6e69ab8debe954485c5074a84c8e9e
-:01cb00ce68338332891449ad5d77cfb5ad9204
-:01cb10867253901ffef046e9e95eb9c2dfb2d0
-:01cb206ff332d88c831f509db2f9860657c732
-:01cb30786dfd41938801efc286a1082c9192d4
-:01cb40d77c50422ad173ac6c99d7547c28f4ac
-:01cb5018439cee79d345a9bddf0fd8f37ea19d
-:01cb6029602895d53c3cf4063923d80334d795
-:01cb70ee8771c69560b697858a8434464bd6e1
-:01cb80e06cd84f50a77d7c7d5bb323ab851e49
-:01cb9030d6eaaf3c4f1f9beabb52c019afe5f5
-:01cba02790200451d435fef7c5e8dfba9b9515
-:01cbb0a8645f2331a247202c02b1cc76dd5478
-:01cbc0f636523bc253c7caca4e73c879487e31
-:01cbd0a423f16b7c383f3e0dd5d8ee5880afa7
-:01cbe075ae4f41914fc253ec3cbed768ec04dd
-:01cbf07774aa193ded007c6dd84964f1dcf7d6
-:01cc00ae38def554836564a72598a9d9bd7aea
-:01cc103389ca3c0fe162bfa3e0d7d5412d6f4a
-:01cc20777c0afefbd64b91240846f1acde36a7
-:01cc30e78c176ef1f9d54a0a04f77125b4efff
-:01cc4026a8132922b80addc6599ba359be7853
-:01cc5037568a0421aa7bb5d58545479d332478
-:01cc60f336e828b672ade01aa71497655edb7f
-:01cc70b9ee7a11cde560e27f9479d5bc3252d5
-:01cc802e3d85af4a1319d1ca738653bfc27d13
-:01cc90d88e4f3d8a67cf2e9670e233c96faf29
-:01cca0449a3c307b87fd84e1dff86c8df8e657
-:01ccb00639f463f4c2f15aab8211c92d178830
-:01ccc0225f6e10c765b096e13ef1a92a7090c9
-:01ccd0fb052809cfb2600a64e2383d889b0e6b
-:01cce0d3da04b313638f16ba323c7642755e68
-:01ccf0afb2ece085d684050e48a385f5dbaaed
-:01cd0031087ab09cf8ca35a18a9551e26ed2a0
-:01cd10fec127e644f1994334dea9758d65e1bd
-:01cd2006ad0eb2a19b82e608a2ca55d6a1f7fc
-:01cd307bee6ef2bf4376b577de86c24c420166
-:01cd4020fda930a9743ac0941966e1646f8ff7
-:01cd50fd4617cd9a4d616bd31a864538a77029
-:01cd6097f79edbf9637ebac2f141e4c84456a7
-:01cd70bf3c2cd890df0cf4402e3014653964bf
-:01cd804b68fc0f1883b2ecf27cd10d967ef65c
-:01cd904601a89506a70d34d6c58dc840482a51
-:01cda048aca095d39c13691cfca7678b559672
-:01cdb02242482471b9acbbc63cc8b3248e24b1
-:01cdc088d161b8c6aa488dab487d265aec52c4
-:01cdd04cdabb6ba70725f4e1bdc01bad1a48e7
-:01cde00e78b4e877d187f38b0149067e99b3b3
-:01cdf0daaa83e8387369db8d7ad9c27b70e9dd
-:01ce00d22a9ec667cc6cccfe4f417b6856332a
-:01ce10db984f1d0e1eb77e72c279c8511ee676
-:01ce202dde52e3fe721114bdd72dd66f5a1eac
-:01ce30feba06d27403bb836c27c83c5715dbfa
-:01ce404d65971d997e52fc199d0a6c5b8a97a5
-:01ce50c84a4104eb01a39d758f253570e7886a
-:01ce605848da1d5d1e1708710a1997e55d9b7d
-:01ce703303259f8319700280b9b565aa6ea880
-:01ce80699d0e3c2f5a7fd4f865b9551eed971d
-:01ce90c9ba30e3b166bad30ab83a0af6cb3567
-:01cea0766509def2808b275e02bf67514b615b
-:01ceb017f044b08ebde1ddf50b991d5622dab0
-:01cec0057903fca961a672026d8f0215273b41
-:01ced0b06ba0048ed0388dc9d1ece91a3145a6
-:01cee09499a2441cc5da6e067c2d42fb81fd31
-:01cef0ef38e87e3eae587edd8a875032b30216
-:01cf00218f86133fe63b3055e0f8b702b5246e
-:01cf10a4709456e526278092b189719b7a3a79
-:01cf2080ef051df6e6d0077c270f22d9a6abef
-:01cf3087cd0c7ca497b31882f1a8af298b1be9
-:01cf40240e74ec9be8a41c96c0a63bc2702b13
-:01cf50ca615a466dbd257850c331abffdbbb44
-:01cf60cd61df7f523c3ddc432d41601cae7143
-:01cf7011605287e2fe908644dc2eed069ed355
-:01cf80791835d2bde320ca7a1f7ba057f3b0fc
-:01cf907c3b68679e74d9321f9bd03e70b0e16f
-:01cfa0f5e958bedf6fb7dd4fedc43df927c634
-:01cfb03b2432cfd89c74612376b3b4c13f9201
-:01cfc052e206f5ea43a26adc2a4bbf64ef74a1
-:01cfd03158311df88640eade530e44c61e5660
-:01cfe04ba5720c09f180551d15d5ca2b2dc01b
-:01cff0f0fb91aaa36b541482f49402f6481ab1
-:01d0001e01ad4807aa6dc1697dba21fd9d59f5
-:01d0101c5a8740ecbf38c2e9243eb7b137d8ec
-:01d020f99fbd8a3aa9ac401ac1e3279fba0281
-:01d03074dde0764051270135f88af2ca7e08e6
-:01d0403e5314ea4df05309c766f446f75f7a63
-:01d05041b89e06548dc668c0c5d71a7febe25b
-:01d06050501101f16e50fc3b1e7d55eb50b7cb
-:01d07091299e475a55d3a4c6c3644a4ce50647
-:01d0804b77b9cdf9e5e70f8a3837911f3e6a08
-:01d0905e3c06cde545a9eda5ffc1de58326020
-:01d0a0bafab46c99411b9e3a03406faea090e5
-:01d0b0ddb04781e4ff6ef8ef9350d3cdde1a7b
-:01d0c0abd76a3823b77994decfaddb65e25823
-:01d0d03453822511a4ccba2a0bea83fd2fc126
-:01d0e0c6a076146fef55d608427bc70f0eba16
-:01d0f045d1dcdbe9bd18b1cae0faf0cb718eb6
-:01d100156b75c13f8f0c444c6851da4158a032
-:01d1103e9407e7217f189291fb3c103fbe2fda
-:01d1205cf5e591d975690ed301b0a6614f23bf
-:01d13025fa93d5b98ad5d5fe2fc430c4e488c6
-:01d1406fb1d293e9e7a239aa4f98447a056c20
-:01d150f25eb50e98aea1fd003bedafe0bb7135
-:01d16039e52e63b6f70d967cb1f788a91802f0
-:01d170757fcc7f2d21a7119c9b2854a4fd0c42
-:01d1809cd015d7346635d4f831926a9f309ba2
-:01d190969434e7c2d3eb1a6a9c31ec00016202
-:01d1a0e52b08c743daa5569908d8926f08bd95
-:01d1b08a4a54e97c8e4c5767574cd33d9dbb3e
-:01d1c00af3cfeddf9880318d0ff50bd3a9386c
-:01d1d08279d20d32f6c3e90ea03c9ade487b24
-:01d1e0abfefb44702628e1968e450f9b258478
-:01d1f0caf763e3610084235c773076114b51d1
-:01d200e04a757b1d7b3a5606ae14a492dec3e0
-:01d210b6d08bcdaa1be313e471f9ae09100fce
-:01d2203f69eec4d78b77249e222b5bfa7cb40b
-:01d2301ca3acf7c25c10125c8afbebc10c4598
-:01d240393db6515b1c97bca1529b6500667d4f
-:01d250d2453e93560b6663e4fd6fc6216924bd
-:01d260de02f3a68d64fb4da57cac5ac1ab784f
-:01d27004998c99a668fc18bdc95c1f03c4e87b
-:01d28082457d5573d268158c2dfda728d5792b
-:01d290c26dfd5ebce16ce8d8afce6cc5ac0c5f
-:01d2a0ae883c836a0f1f314a8cf91b13898a51
-:01d2b0d430328185ae571170eb35b97c2378d0
-:01d2c0cd0a7a12386d86c2e8da0fd7f6dc6d25
-:01d2d04d2d39937e76bc07726b668589cd675f
-:01d2e0fe316f0a99182d5e2983ac02450d43d9
-:01d2f0eeb164d6f9ba1e8218ea83262257b5c3
-:01d300a10ce5209f2bd1f510da528a6d5c51c1
-:01d31011dbedf3c65d428703516d6043050f24
-:01d320e7f166bad705f75a3d324e3a97769906
-:01d330fafc84060a5f16de48b0f5e1cbbefd92
-:01d34095cc3eaf1ff9ff203a85f7d12eb053ad
-:01d35045139de039af3db16a7416def1d48bdb
-:01d36003c79856e0db3de0893dd4d1d68723ea
-:01d37065ec04c70b3b129b8338bcdfda129c34
-:01d380d08b4f8fe8956dd53b433c325c6afc9a
-:01d3908cf35b88b21833bea90a01d7d46e43b6
-:01d3a0d25501accdf2409ac827b9c2a539f2ea
-:01d3b0fb98b902a3bda9c2f369f44ab020b808
-:01d3c052b7bc6b6dea5bcb090633d8edb853a8
-:01d3d0adb4a87f7aa52a04ec20c40eb74bb964
-:01d3e09f5fa88ca60bb4a859342ebb2919bf8a
-:01d3f05b36f8e781d209c0fb1c2d468a4a0775
-:01d40012f385a2feb527cfbf928a2b32eeb7e1
-:01d4101685f237874e0de7ef59aadb0f1f5592
-:01d420abc95673a139eef2662920e714f30101
-:01d430a259663a103bd09854f98ab59a78dc46
-:01d4409879afb43267b637bfe588797260904d
-:01d4501eba03ca89d946c9118d18101046922a
-:01d46043a921656d93c54bf94a331cea9207bf
-:01d470bfc49455579edfc39f78f6655f560210
-:01d480f3022bf72f4363bfec15f76650276e13
-:01d4907bb3cd6958afd9d8b003bd5e6d517d5a
-:01d4a0bc0c64843a2c780fd9f313dc80893037
-:01d4b0eb25c36dce1a04f5b2b75bea1b132763
-:01d4c0d0a80d02e9c2af284bfab6f1bc79fb9d
-:01d4d0c7e0d0be751b75216e412b7611871304
-:01d4e0571cad554aa4f9f2066b1806a9bdc0b9
-:01d4f06b93ec724f5ad9d50217ed4b1c2e1c4f
-:01d500fd10ab1dc629feee0ee771bd5be51e8f
-:01d510ef3e42caecd8ca3ecfde0dd6de88779e
-:01d5209a4f4ff7541d4a95fe535f1f9f2a49d9
-:01d530cb856e673faa336873a9ddf2d5fde683
-:01d540182e090c7f8b69bb6bd5ba9738257194
-:01d550b2c3b3c34aba9fb818530cb340ca5b06
-:01d56065d3519dfcc14ede7484e7d4aad6e380
-:01d570152fa6304b54a8addaa4f57abde1acf5
-:01d58017e761b60e19fbf06fa0801237d7f1a7
-:01d590cfebe3ea2d154b40557ff06c4456adf1
-:01d5a0082ebe305d7a138d80def5051516104e
-:01d5b0b87f54251cbe3b44a50067d2a7e4d3be
-:01d5c0705341a649e21052e12da9437122f682
-:01d5d088168abe1b518a81d5d07db1e7b0d62a
-:01d5e0aac667f2c753c4bf4eccf18b8242aa95
-:01d5f023091e004bfd2e988c76a1d83710bb2a
-:01d600d6d046e5c859dc8648de4d9c8e77db18
-:01d610b133c6e46afad602c158a4fafeb5b99f
-:01d6208776263c24940efbabf4b22be52e04ac
-:01d630495cb447167f297dd9f09bb64e0e6adf
-:01d640a24f7e5b8814011b648b55bad35d2e3f
-:01d65012510909dada4d8c94f13e8d1368c24e
-:01d660537ef92555318d6125046f44828deaa2
-:01d6703c988dcb226ef08f29024023f777d567
-:01d68018360c05b91857e5ca68edfa4a3ce916
-:01d690cb42f0f97f047a70ad51b7f588e0480e
-:01d6a0c7849bccac720796f6c93c78e7302cc0
-:01d6b0bb1f8756d711f28d2220214c5f22a359
-:01d6c0f43b849adfab47d669edc67697a19ae4
-:01d6d01fb294194d55ba7be35b9bf57219e0ea
-:01d6e08e334694ebb0cddf77f867df2e259687
-:01d6f06f3cb697f486be4fd0c44caae642a430
-:01d7008a71997937e418ac464ab0336ffdf4f2
-:01d71088ae55f0d6cf18f9ada152282b114003
-:01d72019cd427faf5d300dfb49df6a8202977e
-:01d730d9023f8f8f5a34d914fa2c888eaa92bb
-:01d7403badd5e2d81ae893409f24f1d2247da9
-:01d75088ac2e019c8499c39550f197f5958c7c
-:01d760bbe1de981374740b3afbf473f10e9224
-:01d7706968f29258af75e8de00bbf5c800f83e
-:01d7803de1ee36dcadeb4f57cea5ac4fa9896e
-:01d79067b5843b6a9f54c143f13a50a25d0624
-:01d7a0f275bec9ad6ad1c5ce18961eae7a15a7
-:01d7b009ce199c260b04e58b297bd8564cee1a
-:01d7c02aee7f519e78bf5b20364482d70c33ac
-:01d7d0b1f1cde950252270fd16dc065baa5bd6
-:01d7e0de93ee7f285a3cb1a5587d23a6df59a0
-:01d7f0a55899e6a38ed17d92464ae1abf1e434
-:01d8007501fbe617db75f6d47ad2c90a0b4f01
-:01d810ab418aadd28595692e2978637a807098
-:01d8207351a57de23e438f9a8e159503d3ad12
-:01d830f0efd85fefe2ab1bf14f428672138081
-:01d840188be3ebd1f0e957a4a68e2f28f2758c
-:01d850c17a83ca6ddb810d20597ea144b9631e
-:01d860a5b1086016c2165bd47b1ec7a355fc33
-:01d87091a4a46dd1fac03d97a762f15992ad6a
-:01d8805468fbef23ccbbb34431ae27a4889c3c
-:01d890961c6c1af4eaf80bb930844d8433b838
-:01d8a05b97d174ed9ce6c45e3334d595ebb1c6
-:01d8b06a732adce57b703b38440eaf96ea079b
-:01d8c0908265d25de4edc4011cefadfdf0007a
-:01d8d0441bd642ce9b6f4d00164be470b28b27
-:01d8e0ab6b8a9d95a7311f1f12f9985555715c
-:01d8f0530efcd983bb4f0d6467cfcbc4e13c7a
-:01d900cc2c22988323aac430b99478c574943a
-:01d910dd10f38f5a3b0da7e29acd90a7c402f5
-:01d920701bd4db3c47cd931ced5fbf5a2ee0dd
-:01d930def4e3da09838ef7c6c41d51168a8746
-:01d9404ca727774d3c1079c062f24934db62dc
-:01d950d93f8658987dd412fb35a1524387cbd3
-:01d960e8a6f9e5e31cc3b3fac0df1e53f3aaa8
-:01d970aabe893d0ad6fbe536e31943adcb9925
-:01d9802948e6a231a65592201d65df00f23ecb
-:01d990075db8a7ad73c079b302eb9724316a87
-:01d9a0958c5f2a99387ac9f036ff20e8af40d1
-:01d9b0efa0d7d0c9716dd36862995688074400
-:01d9c0b32e3a83d9a7da0c23c169be201f239d
-:01d9d0219f7149577ab9447227df04c945058a
-:01d9e0a17378ead79b5e7a8d85346f2ab3929b
-:01d9f0c10523b3db12eb7bd81bd6635220b87d
-:01da00934d45ad59808aac8639084b4ae7acad
-:01da103eb0c11f253fcb3ae4907b5f9ff0fb6b
-:01da204d0e1653e275b478c13c0e0ef628f5e6
-:01da302ec46d1cc38445a934f0694a7bf28c38
-:01da40af6c3835062cf13156b6039558ef344d
-:01da50dbea639c26d7f28ad46f4bb153fb638e
-:01da60cd81f66a9b282051072950e951d835fa
-:01da707e14d5a3a6796afc76054273340ea0d9
-:01da8023c73f2fc8fa600a91dd2d7713d42dc1
-:01da903317255f89d0ca946a9390cc7412ccf6
-:01daa0db67d55f4ec1b650742b3c53f1845929
-:01dab074ded3a801428716165c464e9009d713
-:01dac093e59fb0b9ea1aa32ecbca715a6a78e5
-:01dad057320141c889c5e40f3fba448eee278e
-:01dae0539a455e50ace17c31e0de79876f20fc
-:01daf09ffeb6cb3e9d6d6e4031d3b2ddf1fad7
-:01db008f0cf49f9b661da50d476957be58144f
-:01db10b5d159a333d5876f6d8434451bac58e3
-:01db20f5e1509ccf6b7d9e965587cb6c0dc482
-:01db3022bf56a070a248494d3160226434c9a7
-:01db4054c8d50a8f8dd2e615a04c299a3f0692
-:01db5003923287e9b8353728a03fa5d9a3a9f2
-:01db60517746cd99d1f203455d4cc09fa19c29
-:01db7056182e246317839fb285278bd3ef31ca
-:01db80055a6fb3f4447afc428f20b930ef84cb
-:01db9019f68b7ab25e1db098214b2383a5f789
-:01dba030ab2dd774c7d8c341c66872348c7291
-:01dbb0f7bbcef58a75c68c0e1cc80d31b0595f
-:01dbc039bf758f717f1142101f87880c11f57a
-:01dbd0bb4feb309d12b592c3b7102f1aa45706
-:01dbe0e2a2b8fbd8ab3143bdadc8049f69f2db
-:01dbf0d51ea7c8e35e95e65421699f98a0c49c
-:01dc002a2d4f2d03f8b68236f93497476fe77f
-:01dc100dcfdcf2b1b518aa60d5341856917bc3
-:01dc2024a3839603afff3f3a67c89d2dc906bd
-:01dc3040db64b5c5c46e54d66898467982efb1
-:01dc408e2e8d48b7c3f6c249954b8dcea255af
-:01dc500b5384d11c21afa153a301802f17d0d6
-:01dc60565548a1713d528bb0e29f241f389423
-:01dc706e98959fccac78138a76ee6c5aa31bad
-:01dc8097666356cd51a75c968d90501fe3926c
-:01dc9033af548770e2a3f6ea4a41a24f064ca8
-:01dca0b3eb69b91cb1d253c5a756a34eb55905
-:01dcb050d09a3309385997a475b843d9e6f7f1
-:01dcc0bb48146908e9b0345c190cd6e1be73b4
-:01dcd03f421ac8171ade90b9773ecfaaefa4e0
-:01dce01734742b892e879f97f33bb484df79a1
-:01dcf0cdb7449cd3b0e3b0f5354d20017c50a8
-:01dd008c36fe5bdb548f22252c360255904d81
-:01dd1051e28662c4549eb2d28ab88ddf9b157b
-:01dd201dc65f52cf20f36313efe064ae015738
-:01dd30e768f556af6239fe27ba8ed5f926ddb4
-:01dd40b52769cd463be60e041ecd9f83ee27f5
-:01dd501eee5167bf3e6c5fb2176c650ad24fad
-:01dd6038a7e4c3642e485a864357178177284c
-:01dd701796006f188b322183d23232d08c6737
-:01dd80a26948b006bbce2bf9e0b1c51b044f27
-:01dd90f0d05839deb4cfb950e0c6b3c842f775
-:01dda0410b0c892e781a65fca8884c7d45632f
-:01ddb09b1e70b069b690d9af1e9c2b66a8f2dd
-:01ddc0e4df59c3e46db1a132422476ba6e18d4
-:01ddd0f81acb64891fbf05aa6733737921c2bc
-:01dde06cefc6d711534ca4ede56f788511c916
-:01ddf079a4d89d437f9dc705eaf8448cdd7fc4
-:01de0074eb7cdb4d56c91755bd6879e50f404f
-:01de106acb7d24ba8064505fd00ddd786c3105
-:01de201c09964dd7e42373df6e19f81666b4ef
-:01de300cb43296f84bd3f4a31028015e3d938c
-:01de40ca53f527926535f4b36ebbee69e150f1
-:01de50dee514e6aed07c2958d7cbb12dda4add
-:01de60c29652d21c4b52a2f81d0bf4abc5fb8e
-:01de70fc7a692543b26e92832f2c2a68ed12f3
-:01de80bf5e2d817f1c7913718374282e24fa72
-:01de90967793b127b8a38e860e5aefa545f2fb
-:01dea09090dd8b5ec501f74ac43a95b2564487
-:01deb0362f3405f1020a85ae6304b2d05d66ac
-:01dec0d36a0546602d72ee4d63693f8024fd2f
-:01ded038ad73d0720e965f6da5f38956527cf3
-:01dee0fe042a957bf87409273fef781d0a0daa
-:01def03fc2477e9762af7a233624f23265b091
-:01df00035f41dde1bb3f5b3a1792c8806cfd3f
-:01df109b974231af153b67595bbd6b25fde409
-:01df20127a7c2c4087848fdda187517b242e31
-:01df30a118cd9bd2059c6207c237d3796d22ef
-:01df40ac0cb78bd76ecb96d98d532c2e11f3fe
-:01df5037eb15b38df9858cf64e6b562ba38889
-:01df605f3c19d7d7138af1bf4b78228bb457c6
-:01df70eb1ac9db0f1748f35b2f695c0289847f
-:01df8098e4a093b75f3c50b65df894e3cb656e
-:01df90f81a187e07b373fc6a8247115d4ba7e6
-:01dfa090cffc952c2dafea31cfb6d0ce3804e8
-:01dfb04380387966643d5b84f4d355875d861c
-:01dfc03b6fe87729d8d4785c5b11c40670fa45
-:01dfd04c26be247a08b3b8c288b299d06704ad
-:01dfe0626951f2037d5d65bc79d85aa4b92138
-:01dff07ae8d97e1193f05d4f6e424f7f77e36d
-:01e00098e9caf8e1b597001270932a9718ae33
-:01e010e133e37d
+:00000042ba9255d17d0c995a2125657e991820
+:0000103bbdde4995b8213b06608c47571ede97
+:0000209f337c1ed6c63c60f8fc3583432a7b3c
+:0000305781cfa661141661d1165055183d2274
+:000040320083906a7fb8a0bb7908d83a599ee2
+:000050c0b373a54f7a29c99102957798af9e7e
+:0000604ecc06a5d57800499c3ca2bb08d7bb06
+:000070d3905cd13ff34d682559becb69ada27b
+:000080a079409dcdd5f677cea9b36cece6d712
+:000090cb57302e950ac55f3cdd3c7214a00883
+:0000a05b7bd76ecaa92b3423c17d556d2d5411
+:0000b04b8842464805555890b9df3a6da714a1
+:0000c00d8f8196688b7798d89b66a478a69262
+:0000d066aee46319b399a1c1aa8ccff14ff732
+:0000e0811fba67fba389f274236badc5eee1a0
+:0000f0166e440bccd712346d25e6421deb7217
+:0001007e48ee1b9e0e8a382b43a51269c00b28
+:000110b6b86bb08bfb7f6bdae62764ba8e3703
+:000120f7dac09f32daf289bf281d3688649fc6
+:000130b4251f1c083e5c58c08d56273f54a480
+:000140a3801afb79f8e94783223ef1abe686bb
+:0001507b727cfce3bee89dae959e0022dd72a0
+:000160caa8e2276566b22aabd52cfde6e9ffd8
+:0001702dac3e464ff59171885b22d3e5c216fe
+:000180738700b6dd7497b6cda41ca5a3c89675
+:000190e5af2f3958eb604334b3a871ffd02963
+:0001a05a93793610f7460ef94557ce82899eeb
+:0001b060641183c51fd48e30a717a8f0a17f1b
+:0001c088fcf02b7bdf28c0b7125e2a437c9e76
+:0001d016e6c42c3c3c571f04547e99512a69c5
+:0001e07cb98203627cbdea148d48d440301913
+:0001f0dc0aa82d40968804d64bb5ba38471a8e
+:000200e7f0e538f9c97755eb4c51d5e8037bbc
+:000210f84cecbdad529a0bcfe0174c7f58c8a1
+:0002204953585cc3fe8e927adf1f0dfa834224
+:0002308cc09acbabecb724b7855b039f213a5a
+:000240b776238e7b48274f5ff8d00af06d5a27
+:000250fb37ece27fb7d1f8d12722413f780a64
+:000260226f814a9e3a0fb93f9a9c8212f10959
+:0002706f1a4b3427b9e7b7b9873bb4eb026555
+:00028026afaa54b158c92de76f05272c252fd0
+:000290f70a56f7d76b2be1b18fe8bc7937ddbb
+:0002a0c06c82e93f4fc1065f00619fcddd5c83
+:0002b0ae20d78baa42619f2966b2612a5c09ef
+:0002c05d7720a27c9e7a7cee7242195b68624d
+:0002d08c85b6fe0d7f054707a46763dbd93cd8
+:0002e0dd5d34d8ca4a873c18ce5b6449ec1fa9
+:0002f04f8df2b97caa7423d6cae892d6a78437
+:00030048a5ce5c06a2dd0052dee3209c03eb1c
+:000310f0392fa4aff5980f44c468acd36c5dfd
+:000320a2744fc78df8f91551df4bfee06e027b
+:0003309c5ac9827ee9d670a5359062b53b0523
+:000340f466af50829b0ed3e7e59d3c431223f9
+:000350270ba0d423f36c1ff26c2d6084c2dc93
+:000360f89b1e431bbd8b54f2fd48248bdc6698
+:00037046b61497b8662fb16c1a19b7e653e013
+:000380bd0877b4dfad27b08c4ec9e701765b9d
+:00039060bd03f51ea6344e5cdfcb364d98976e
+:0003a041535136e4662532f12477db1e2272e4
+:0003b01c5f8a46f640bda5a186b0cd917b36ed
+:0003c00e64964ae97a799779092c72c65611ad
+:0003d03387da29a42c81564a5c83b5a6d20764
+:0003e0cf51ac6646606a084f0c375933c1de4e
+:0003f09d65b9c70c1ce113f525ce0b35d99dbc
+:000400c42340b07acc601ff7ebab7c2d59fedd
+:0004109a8d9228e172d8b44b60a3320acccbe7
+:0004200dc54d0f7b2ba9098ace437a0da49949
+:000430ca253efecb5ac62d50bb4d5352a4bddf
+:00044028d43a6d6088b4134f183939f3ad371c
+:000450b33282777638887285c18a1848a65b68
+:000460628c3952a6253bf9f066f33df11b847a
+:000470cf647dc9cb01e2dc490821efaf5920ce
+:000480b9d2694b1a61f994d14d374916b0a0c2
+:000490b889f53c5a73b3ca35ff50cc1a00cf20
+:0004a01af4ce4742c1a3413221a39a62e24abc
+:0004b015811041ff0fa2fd1013a6e72a1b6cc8
+:0004c0f5712ae26173d7ab3fed8aaaed9d97a8
+:0004d0eef7413879d6e151afea14ead285f4f3
+:0004e090fb115bce0bc0678da8f8f9f690aaa6
+:0004f0bbd927cd07a87dc0381eb6e6604fc177
+:000500bd1c2b80fc414ba4914a2119f264870d
+:0005101841e086144c925c789b60b4b210a0c1
+:000520826208bd2b6dee04c93e78dc56171037
+:00053012706a7900729a4e269ea27c212bc347
+:0005406d86ca69030308b3928b28924dea4bf0
+:000550b265695fe4a51c143ed294a65e22a141
+:00056063db77ee86541fe97fb282eca6a03fde
+:00057063529aa772279846153bb7a2436f8ee3
+:000580de56edf325b003bb62ddc66101b39598
+:000590d4ec737f86da297ab48cdee2881f58a2
+:0005a02fe641f2ac70090c2a5992cf26460d84
+:0005b0eba527a1ec73d7d56d09b6fdb3624f1e
+:0005c0dfd6c64a6687cde19868b0067062c76f
+:0005d005d027630cb5a9d279700c13982d04ee
+:0005e0a7867ad8f36e82cd8cecc4893c54b7f6
+:0005f086137cdb51578ae60572b4701a04b88c
+:00060026f1fd666f6bdb0d21d526938c8781ea
+:0006109b745af5d7a4058da852b34d1f17c619
+:0006208a2985407c74eecd27fe77eb82ab7d4a
+:00063022db3f3dd28862296343292ebed3abfb
+:00064056bf4e91c01f4f7d25e51cdaf7c8c0f8
+:000650d8f4093526709ca42eb7ef841f36bb5d
+:00066037eab698d1855a466b24f792a4df42fb
+:00067082bd071e34386c420b7ff33a70656c22
+:000680939bd4331699f864ad2ad1509a75959f
+:00069060a0e5d441d36f0d856b4b99ff7b2faa
+:0006a0c70f1e5fc207986ce4edcd32d9665741
+:0006b0131487aff63dcec183263b557a0bf48c
+:0006c05c76f0dba178d3bd0b31617109a6c514
+:0006d06895cc4b6bce81c97b95d5e31acf1acf
+:0006e0c56dd258d98b85caabf345033fd4bc17
+:0006f06546c0c831786387f5abc4542c047aab
+:000700083dcfb22253b68514570c805b603a5f
+:0007107f96adae35f04f065be3a774d2a97764
+:00072078b200bd52f2e7e1f7620d01027d26d5
+:0007308292803927f38f60e901c71c8f80ba33
+:000740e8e3105a278bcd7f3fa0ae59c46bae25
+:000750ec836623b090d7a934586a3a44a72d35
+:0007603707e61655cf42a28b0021a498d5c7b4
+:00077016baea6577fba6456f30cf55fb9d6faa
+:00078011117801527b17a143e8ecedba5d4bf1
+:000790f02ba4a57b6e97a2b1b700c8a4d3f462
+:0007a0246f6f1d2c3b940cdcb8fc1ca5b18c67
+:0007b0acea866235ad0edd5741ec14f98057e4
+:0007c0c1861a3e8126f9ba9b926b7d84f41468
+:0007d0a5e62e1dcf42b67c4cbdd08c81865f04
+:0007e07675024e867decddb85f7c192f0c2b65
+:0007f09e9569db1897a144438259aa1a7f87ea
+:000800434596e8b3451723352cdcf7b531cd9e
+:0008104f49e9f87c145fe014be3bc999792e7f
+:00082064414355739db75be0a41d5025d171eb
+:000830aac07d9cdad2e7a0c71d88e25d9842d9
+:00084000a938fcde9f831d895db4adbd7b0304
+:000850e7923e1ce3133e6e502561195499ab59
+:0008607b688a2474b7271957ad5d05baf1f65b
+:000870f53798fe13eeb476288b0b21fbb2b024
+:000880875b84084bac375141380d25d0094aae
+:000890e7e5cab196940babbba3f3bc608eccc8
+:0008a084bb521912fd022c9f3c99ff32f072e3
+:0008b0e3ba2925632930dff82b0fa1be548961
+:0008c0029a989ef2337411fed165c4e513ce33
+:0008d0c39ec0f838a470c2446df19c06015996
+:0008e0ffb49b8ab4fd640fcef1f48d928b15fd
+:0008f0bbcb71636648f39073f36e5d63eb612d
+:00090060c2c13474ad30d465bdb5aac69ee8ec
+:0009101938a0bc5aa62098d3c3569f3a6e75af
+:000920e756046d33b79e4693db694c2528e8f3
+:000930dba0c64064630d1e813a1cb263990df3
+:000940eec859861fcce00c76ab42e24c58df83
+:00095079a8b899b51603166ab030501fb4afe6
+:00096063b4f03fd565b58490b7404e32a3bc2a
+:00097037ceb1f0542ced7a2c6012c799c5a529
+:000980cd91ecc677f59193041364b16544fd0d
+:0009907fbf01227157a0a6e84b72eaad981801
+:0009a0ca2379a419e70278835803f8f87b447b
+:0009b0b8024b3b074c23f10a6793f6c391d504
+:0009c0e5fc994663e673678e50dd97f0ec7d8d
+:0009d0e0bfa60fa892bf8bf85043582ec05629
+:0009e0fa180f2ce32d2acacc425b90ff7ba127
+:0009f06183d10ee7575d6e26ad191e5cca46fd
+:000a007ea570d060278fd5d606a52eeb6d5b5c
+:000a10782f7bf80a9141199ee98b6e2a9318df
+:000a208e8c4e2ceaa376620062d6c5a4ee7042
+:000a301f6312042be02e3f5df6f28bcfab5a22
+:000a40dacb2dba2da9ef89aa647b8fe02446c2
+:000a50fc0428b052da1ea450303185cd4efcbf
+:000a604f4c043a837cbb079abecb0b85ad23c0
+:000a701f869f72ddf2700a0d0464b7fc13b21b
+:000a8073d3754c9e1ba964992a8a4dc5f499d1
+:000a9069b0467cbd81f84a337f01781d87615e
+:000aa0f24a54e10bed35e93c76568f1f08fa57
+:000ab04afc0df18678b2e6695f54b6e78c00c8
+:000ac0029ad57fafba96e2e9587b6ed731909b
+:000ad04e94c5f03d12a04ff5b48c2b90e8c6e9
+:000ae09792f74971f8f5cd9adceb8528a60503
+:000af0b2207d53e9df9a0ce7b962ade1e4b698
+:000b00cfa87b9b4c843d3457e5a80128d77dcd
+:000b109d3fcb44560c90e0a12578f0f6f3e3ab
+:000b2015d3b741580bd28e3d6da6fae35fc67b
+:000b30ddebb2feb0ceab5b3fb159419e31b2ab
+:000b405ce22fbcfb0573fc5aa4a974eef80983
+:000b50193a17c014eb6ceb6a9e3c95ecdb25cf
+:000b603d8907da341e5dc0ad88b54dd48f140b
+:000b70254672372313ebd408e31c476256164f
+:000b8050877622846f84a46cae3951ba826844
+:000b904a83749b43c534374142cef4daae37a2
+:000ba0bdd2aa98cb19060d87e9f76a86d600aa
+:000bb037e323287a14eeaa6002e097a5513073
+:000bc039a861e3826e1f1c74b5d62e50c633c4
+:000bd0bf52ad548712b7fcb66d7215c961ac2b
+:000be01c2af6441794a46a733e3595a4ecba00
+:000bf049996adcc61c697f98e2b3fe64176f7e
+:000c000a6c1c0d76e0e9235864613c139fdffc
+:000c104b4affff4f620777691f827d6e2638b7
+:000c20eb8c68aa69bc29116bd057c60751afd1
+:000c304907f33cee9ecb6f0bf015cce5ac74b9
+:000c40e14329f0b00af079630d53e50b1acd8b
+:000c50007f639bc3ff72e9b95d4ea484a25a19
+:000c607b72a5b554504cf2bee71d8f5292bc21
+:000c70a258607b1e06a23c79c6fbdfe15942d0
+:000c80de2c2cfd92b1d52329a0ef30fcc20219
+:000c903366b3e33ea834ac6c891d549bcd6f72
+:000ca00b549f3eb7ea3b1c76f7398948937ced
+:000cb0f2580beb9edfc1d4ac742707efee2ce3
+:000cc0a0aca54f8309639c0a4f7b9d78a05575
+:000cd07be248068d6a82e81bb4bcfe2304ec6c
+:000ce0272d51b000e1d4e6172a3b68190c4675
+:000cf0cb6a48f2e07a1486e5c62bbd40b4f1e8
+:000d00e014c351192ddc1da1d9857d63f6dd00
+:000d10cfaf052a57ecd014704139429110c054
+:000d20224d82c48a58f1a15733cfde4c4672a3
+:000d306d35845f45238cffcbdbace959dfbe86
+:000d402fb7fc51b74da8121fa4c9b70f145401
+:000d507dfbbeba6e7168bf411c3c3e41c3a869
+:000d60881a4d36571b962403acad0a8de8bdbd
+:000d704704640798879e680763f47f23a3015e
+:000d8024b7bbf83f43720c00fd442039444381
+:000d90e82c784572e29cdaa3124b9272e951f2
+:000da0c4fbc78024d16fbe0fdf6847e66d4f69
+:000db04cd3d0f563f23647045130d3db92c405
+:000dc0a8d8a44f3bad6a256f05a584ba6b39ce
+:000dd01b99158726d91660aa2666bda244aa5a
+:000de0899eb729e43ff04d7097400e4d2159ce
+:000df03684697976e021f3203d0c9c76ff6b5a
+:000e00c158c15d332344d012e7ed8ce748c34b
+:000e10189bc806bacf2e1a83845ff839524db1
+:000e20fc5639a606d88f9e41ccf7a0d89ea75b
+:000e30035f29b7b09dc59e0f4406fd7ebbb2ef
+:000e4062c0983fb027a8f1a1c3cd26427a3034
+:000e50b3fef162c9ff63f93df61f4c0ca1a535
+:000e608252f887ea28dc2b55fc8a2c2b4b978a
+:000e70c47f5f632528b21ab3bbac336e241555
+:000e809b01a8d24629658ce176c5e0d1cabe5c
+:000e90dda89637d977954fc0384692914476cb
+:000ea0f6b5f323130058a7241ee29ddb4ce041
+:000eb0c3db7db9de42f70baf406a8fe004fd44
+:000ec0edabc7aa8971f7255803c4d891b31f7d
+:000ed0bf5647a67490923ee8955f0c57594423
+:000ee07bd771bd95fec3fab8c8e763fc104398
+:000ef0f98fbf55a613a4fdec73ed29dc2a8504
+:000f004b2e923c73467e75a7b8ebdcbc0d2586
+:000f104aa7336b16ff5581b331c44e160da757
+:000f204c3041aad8a9884e81baf23ac2884321
+:000f30942d43608ef513c38bcd07f9a053af30
+:000f405efdf6799fd0506cd42381ca5eed978e
+:000f50812054dd94cc7142958737c129e6b456
+:000f6074e48f3087157101d8ccc6df0a532418
+:000f702d3c3f428175cdadce784a74a380ce92
+:000f80759c1dbffb90db4b23ffd8855df304cf
+:000f90d4d32a3c20cd78cb7a359dd514fab032
+:000fa0f56ade5ea556e532c6c96a1b7bcb176b
+:000fb0b582ee80c1729d7a1626c23332622140
+:000fc05b29cc23eed270275218d13ae6956696
+:000fd06fd58c2eac2e9feee784114ca814a649
+:000fe07316a5402cb1e3f4b14d4a1dd1a96d9e
+:000ff0d3088c847b02b37f13bbf2bd0f3c0e86
+:0010000375cb208386dbe86d24be310fdde038
+:001010362e05454dd54e446fee1ba5c5a7d50c
+:00102011127be91c6033c582cd6800035d00df
+:001030712d9433e63e9ef01501c07959627475
+:0010400b9960884d87454536bfc72c12356861
+:00105017ae7662874090075ebfed05479271b1
+:00106046e786212866007ce0658d000315455e
+:001070f92fc2aabb873670d83a72fa7bb1d98d
+:0010808574e04c450f6593fe465f44491a586a
+:0010904fa68fcff0e755d6ccbe476eda3d1643
+:0010a0bdec1e17ffbadf22da8da250a9d80f5a
+:0010b0de4b5e87feaca942ed3e9ddbf7a140cc
+:0010c01ea9176a4a24d563033299550e66de3a
+:0010d0a9a0eac65dedebf7fbe96e9370b368a8
+:0010e0ac8aa655c38d6c572b248360215037f2
+:0010f0193cf556b2778b94928cff97bd49dae8
+:0011000aee2007466c52c3d41888a19c09dbf6
+:001110d0618adab63d850dd02dacf56cb717b7
+:001120c58cf5388e2d14224dcefa0d38e81fd1
+:001130aa3cf3243be82ff72b68cfa74a8bc746
+:001140fa1b3921b9674420a59b503be8940015
+:001150604a2d28ff0d68b0436a11be2143364f
+:0011601a3ebf861724957266ac5c597c49888a
+:001170dbab5b25eaf114616649b201079428b5
+:001180988a02bf9bc7248a88026a44d4c7c926
+:0011901f263b9a1e183e80cfbd56a428e2a471
+:0011a0225607b40cdf911afd9afa4776a40280
+:0011b0b24164c5dc295e50dc0b9a374847143a
+:0011c04bdc9146eb79c78f8bad18107775d831
+:0011d03e87393eb6459ed62d3fd20dc4877348
+:0011e03b6fdbaf12e983083bbb5b812dda401d
+:0011f03a9f81b9dc485d734c100b00649b37e7
+:001200b21110ad7ed39771e5a0067e37f4c37b
+:001210bf418e6eab1330d104f8d6dc92618fff
+:0012203500616faa612dcebf93c87ea5c7d333
+:001230546b18b054bd784c348225967cd0acf6
+:001240c2ed7c0d7577a54c0f696a64d0fc51e3
+:0012509ceef0b570a0c2e8b9400e6432007e86
+:001260781260f9e9420c46520d1453a20e1b60
+:00127022174f3f9bb3b04f172de214738d20e4
+:00128000fe8bd5b048eafdc14a007b8d59031b
+:001290eb861422c5a41716f386d9b6ed94f255
+:0012a0e87f6504187c69eb7d15627b7d6d52cc
+:0012b06ebe7a88159d2f56263b4067d580a0b9
+:0012c0f227eece8bf713564a8338692dc0df7b
+:0012d0e13c685c06f907775cb076889568ba99
+:0012e0a663dcda39fc60336b3ec5deb23b93a3
+:0012f0452565616b965f5f74be4f3396ad80b6
+:00130035b7331ecf4b8fb9895b6197459de8a5
+:001310ced8d14d32b155ec1f0b199df6dfd047
+:001320490463d092f20b7c2d3f96d91c39c05e
+:001330e36ee6f8ef09128beecc10e2e7fff11c
+:0013406bf13405bc6831ea0d4dade6fa8a4014
+:00135098b41b5b0e057e1759cd120181f0a6fe
+:0013609f192f073ff7f5ef5571bee4e9fd9678
+:0013707f2fef0006763189a50eaf116c4e8d6c
+:001380bb30d83762dcddeec2357d315a4bc00d
+:001390edc895f5134202c042e2156e96771f93
+:0013a0ea3059012524a45f22f53ea858ddaee1
+:0013b028e209e0554a71535ff92ec379c03b7c
+:0013c0980151e7eec437c540021764b72b2e86
+:0013d0878340a621a38ae9570c9264fc172b0e
+:0013e0d5d661a6e9c9422c3ec6884cabc7a6be
+:0013f04bdc676e6f184b33a4396d02dad3e76e
+:0014006c8bca3ae381b1b72d4e24fb4e96ea0f
+:001410b0db17aca95a0656e53140eef7b1389e
+:0014205b3b42cd74a907a85f7b0288f12e05e8
+:001430288e2524187f151ec0be1cff990245e0
+:0014406e574c650240004357072e4cfe7315d2
+:00145042a6a92f5785f260f9b5d89bc8b19728
+:0014608fd0c6390740a23539027edb17c76089
+:001470b45783ae99f170e5fb4877b37ce78875
+:001480df72b680d092fa41bae8e60fad6bcb60
+:0014906d7531d9788439c0de8f4ce0b4ee392b
+:0014a033679b395aa558fd4dbe8c3eb2b82e02
+:0014b0c0aeab17fa00b081cff8c16505777e18
+:0014c0a21ea427afed895a4dee3db5d46d12f1
+:0014d0810c53ad5f78df0c471fb08c84679899
+:0014e0c1e4cb721768f1ca9a8220ce74b2e200
+:0014f068a26abb8964df2ec2dba1411e99ec10
+:001500a2f64b344c358ca5798cede944c4cf8f
+:0015108bb6d1de13f1ba987660f1d138d33ca3
+:001520433f01bef45d9207063a1b13f2563b06
+:0015309789486cda704cf8eac4c900b6c78676
+:001540179105d79bad10d789a147323efa97da
+:001550ec61250ee283b48469bdcc97c82d7e0b
+:0015608ac9af45fb0b9b26c07729df1e3f97fe
+:0015708c3455dcb92148f87ceec11a92f61e12
+:001580eeb6f452cc6f50906a76efda4ef9c428
+:001590e525faf5be56002162386ae0c7489fdc
+:0015a0b55d38dd8376b695374839b9e3562fb4
+:0015b09595f81ce2e655f874ba4b03ea2b7322
+:0015c0fe759bc8d9b4909c7f9f11e3d6552da7
+:0015d03f46f2a9a77cf22a4a18f29398def9ab
+:0015e092e8fca1ab10b61bed9691526e6bfa3d
+:0015f0e54550dbce286fa3873361078dceef62
+:001600f49cd708c17f39ec06d5bb29fa1f9797
+:0016107cf7027a84853d97518a90c1fcbe2694
+:0016207d4e99196825d0c1a509633bd7903130
+:0016307762ec68c2552738f42373535e90f8fb
+:0016408b3d7d40ff467e1c3b51d7bf0a00165b
+:001650a2f44354f130055d94e8f7f359d8020b
+:001660d27c9aac93344654039c0285241840c2
+:001670c617e6acc24cf1cbd6c3fd97176930f5
+:0016801f312974848ff94cab5d1c3dd9c0c32f
+:00169056c0a3d83aaf90dfffdb6691020b2b66
+:0016a0919c3cc2baa0667b436163156d78eff8
+:0016b0af40bee23d51bfed92e33f4a3b91960c
+:0016c0ff38a84c484f2c585ceefd66af0f8943
+:0016d02fd27f53716f5ab55717dca507a1be46
+:0016e05e7c63f1464b29209ca475c4f66a2cd7
+:0016f0976b198ea99dbc52338d03d592b6bf61
+:0017006450050ff9a5ccb342a73678e9c654bf
+:001710669026e794303f5148038338e1d8663f
+:00172023889fd7ecfce8bdf34110edee4618f8
+:001730e42bf5f330fc1ae594b2cc367e558c8f
+:0017402bda58b5563dce5d00875f3d6d1a91f4
+:0017504902e7c6e84f7d7022024459ca60c780
+:00176067a535e2dfb68cd7f486c95c503202c1
+:0017704b014f4ff0f0ec49f889c5703ece2a35
+:001780947514bf6afe14f936f059867e508caa
+:00179060d67fa90a9680f3e390d00f9425e50b
+:0017a0a1298c0a6161db4d6fcd0e4f39725682
+:0017b0792e07cb114e9a100c1d4bc15f3dce21
+:0017c05e10c230bab616de7325a1076d79b608
+:0017d0e3f79b2e8d95000ac66e3dd6d99bd5f4
+:0017e0a35068dc835090158a8bdb6808fb803d
+:0017f0c3e1a69516f536bafc36b790add3fd45
+:00180036d039b38fdb50bfb9cf3c65bd64d622
+:001810d471ce84f8ec2dc6bb4232a8321782c5
+:001820b2dc77eb97b3e5979056c94a1e316b5d
+:00183017bce08d63d2d75e42ae32d5935f5ef0
+:00184012d00492bee30320ed4b059a731cbf96
+:001850fe978d2ec86ca62024ddec1b5e949b33
+:001860807386dda85fc5dcf03db1266686ac05
+:0018702ea7839bd3adeb0e0da380e6d54351f6
+:001880ae5f35338ddd0a034f858ff6beaecba2
+:001890dd11caa80e6ff21ccfd62c3ea4e0a1ac
+:0018a089cc1773376e4838d46717f15fb51d57
+:0018b0a8a38691e9c0be069f5b8142ea5acaa6
+:0018c07a45ee72b40e7d72128ac66c77040467
+:0018d094092f43aadc72af66b4d9494c5c9a81
+:0018e05e1fccd443e21385da83540f0ba5fc0c
+:0018f00599368951a589ccd064e568de56fa3f
+:00190007635bd4201a769f17fecfb9b5a58418
+:0019102600d5b1f07ccfe70abcb1e38cb61ba5
+:0019207d3f23a47257ecfd9939b4d2b49aae5b
+:001930492e3770d1e2353c08ec35d982968822
+:001940757d0cfc32114a4513bfc81f7c494532
+:0019506450887e3dc7f2143a8df154ed9dbd77
+:001960e2d6a2edd45d4c70810a4936b6afcccc
+:00197064a9cedecd3ffa361b9b4cc5803b2d3b
+:00198092a16004c61bcd3d40d8126aa2359e02
+:001990fbd8751a11df4f7d9315eefb36f922a2
+:0019a08f3888c17032dfccb40e06c98ac316d2
+:0019b09e63129c7d0e129951ea298c103ff1c0
+:0019c00c2c5fca18047bd5912ba98909e02125
+:0019d0b14a28accd6e8e0542e52fe04e7191c7
+:0019e051c0be150b5ab60c12e6744369c2a015
+:0019f08ca768b4a9f756f0337f283f106bbcfd
+:001a00edd7557fd69474dd050504273a8a9690
+:001a10926e01adee0929a31e8602b68876fc5f
+:001a20c4e4821a135ec1e59d3f146eb88909f1
+:001a30dde29a4413e75be74835b2d15d48138e
+:001a40c7c65096487c5ca600043378b0cb752e
+:001a50764a74003a1bb8954f3feb3c4fad66b5
+:001a60c6f812c6629947ea34bcd8a5126f1e79
+:001a703a18901105adf841e2c8fa9ffd8cea9c
+:001a80e05d6e1ea4eaeb5e039f0197936670cf
+:001a902a1c8459816629b4be05146b4031d4cf
+:001aa0958d520ea22c7d75c56fe35a0bb7e1c2
+:001ab09b0a0d7f634b7f9a5eab4b5ab6f8b2cd
+:001ac089578f7410552ec6f650c1f69f93ebdf
+:001ad06b543e32da0f5d1adc086a8097003d04
+:001ae0d9536797adc6227126d9acd165a979fd
+:001af079b9092ac191b68b4cf33c9b139776ea
+:001b00b761c0841a976acc7454b72329465b1e
+:001b10c28f4476d1f69ff8e2f0538d6281a3b4
+:001b208b8d3783af78b4327faf9efc7e10c3b2
+:001b30101c712012a13c994547f807bcc4e8b4
+:001b4006b67143b4cbd3107c90ffdebb95b6af
+:001b503b26b8c07e675aa941d741cf786e7763
+:001b601b5d691b5aeb10defa85ee21a21d81f7
+:001b7053628666deb91a5fbfdac42a3985bf99
+:001b80524994faefa2a811772abc117f9b7810
+:001b9042f84c690a272e371475449d085c5280
+:001ba05e8252fad90c8635c9ea1b38f5339fb2
+:001bb0a1d4d870da4be18274b3819f193474a6
+:001bc0b44266f75f4fa691b8bacb6263a32f67
+:001bd01ffeea5eef0753dbd114775ce3eafe0c
+:001be0a16a368879380f5f8da85f62532a6c5d
+:001bf0c1ee6f32dfc4c5903772ce6b6b573a6a
+:001c0063ed9878ee9be674ca5d1771229827f8
+:001c1090b9b13b0b787ea90f94ffb8c8c0d315
+:001c208a278c6a81da10ef1f5c4bec0ddf5bf8
+:001c303b84fdbfb8b2a53c47fa125ca890d380
+:001c406db3eac81e63e8d22a17309f06feedfc
+:001c50bb7605d7209f76cafd4584e449c31fbc
+:001c604b28c6d2f93acdd2207c854c02fc9507
+:001c7010e316fdbcd1eba21512f5eccfe4f077
+:001c8012138ca142f6b7741307de1444a2d2f8
+:001c905d49c88e3f82ec78c20b2f1784f7ddc1
+:001ca026cfcf9d8f692f6bace3e59f5755db2c
+:001cb07502b08fcc54522cd4b681b4bfd4e723
+:001cc0432f0ea3726d4cdcbd7803a3ebe714a7
+:001cd0b39844722a3c402a5539e9680243cc79
+:001ce0094df6f67fc1552d56164bae445e22b2
+:001cf0662f5df4e1f20ca1a631eaf9891a6b00
+:001d0010b9f57718264eb386d2e388a336e4d4
+:001d10dddc24f1a971d1b77fe171fdcf5f2418
+:001d2011462297c007bfaed90c27bff4293a48
+:001d302d93829c68bccb1eac90edce86200144
+:001d40e797caad2e957814a4bc6346d91c2524
+:001d50bb158a9b704cdcd8db35fdf0a35a1727
+:001d6035e31ca761a239d1aa4ef8deabacf7f0
+:001d701e53429c381a32576bc420c146991184
+:001d80b9c537d26c59aa81e757d80de87f3ddb
+:001d90a704764bbbea5d8ef896d0ef512af6e6
+:001da0a11682955977f067e43b0baa6b1288c6
+:001db067ce4620758ac7c381e45648eac34396
+:001dc06731f34887f9c219bdd7da1685e39e0c
+:001dd09f8cf2a0c9c47bf7b852f3f30400cdfa
+:001de0beb2c1d0fd74775c2ca83ec9722d141f
+:001df07b3000faa3b2ab4faf8c1263c0f25d72
+:001e0066ac30e438734035753ce72ad6fbad79
+:001e1040dd1435a9d0f87b99b16a5d7213f527
+:001e200368add6c59f5a403dcaad76c5e7842d
+:001e3097efd479bdb32e9365df2dcfe79341a7
+:001e4074d28edc4f9da9c1c0878b916749ffa0
+:001e50321e6bcd5f063799850ace19b70dcb06
+:001e60a44363048ecfbc47cafba8fa9590125d
+:001e70021e52f77f7b1039ea05c855f6577669
+:001e801b6beaac058c01c2853b3034602a58eb
+:001e903ade75d79721393a199f90ba6770b6cb
+:001ea0be6aed28b94dae780e93f2c31aa9091e
+:001eb0138fb3022c6390db9765111c24b215d1
+:001ec0d3765fdfd5685f3e10bf1de0bbc95fe2
+:001ed0dfd81cb66852e8f0d95e5f0361ddf61e
+:001ee0147ecd2b73da45b61090f3cbf7581623
+:001ef011b03301966f05670a167820da1974cb
+:001f009cc66b411e445c770d161798868c67c7
+:001f10b41ad8215bf34958c7800f6111f31923
+:001f20a3431782a950fee5782901574e748cf9
+:001f30bb0dcc74eec6b55710a1b3c4b70b4c30
+:001f400003c67c7f050e757b5a8c6234a10099
+:001f508b6d9a78475b0d9f73c15d77f29aedf6
+:001f600ce6f66b410c1fc81d2f90a4919a58bd
+:001f70190db0efb7bc9c4c01f64496e557499e
+:001f805304255d72ccb519d48a0bbeb01ef9af
+:001f90849e20beadaedec472f6a3bc12807c51
+:001fa0f3df1e7b184dc5105f3d3da5abe20769
+:001fb0b8081c09f5442af2a4e3e0e266d75510
+:001fc0d97b7e427ef162b771c5cf1ae22f657b
+:001fd03d01ad3caaa3a6688741d8ed2ebd657d
+:001fe0e703335b53387ac5bba277ca35c1a7b8
+:001ff03fa07dd6f4efcf3cc3a22675fc1ae41d
+:002000754cca7c6e498ebf458048294c936ff9
+:002010734386040b6c200f2fd686c4dac65131
+:00202013aec233c647db948b6c773970ffd394
+:002030977dc00dbb7951aec25e2e66133d3d37
+:002040269f79afd40f2e6a43f85d7e5a90bc58
+:002050430cf2d86e9cd865593d52ee9f97edfe
+:002060486ca52cbe656a05d439b8fe8f626ee4
+:002070382b9f7783412308d6a9d8bcced5f524
+:00208079a8c82ee7e5ff3f2b87c1c4c5330a4a
+:0020908ba5883c920aad69b01ac69137719c99
+:0020a02ca2138f94d42acd54eee406805d12e0
+:0020b0ca0d8c29b748df1658a91a4ae3e90161
+:0020c009e5c43f72490a4d98b47dd45ca875a4
+:0020d0b82f4d46ee661380f5ede0012706d28c
+:0020e0a90687361d84ad18bb1d35c4a5b00ca4
+:0020f083d7e5e38ea80ae90412143539bc4e41
+:002100890355dfa55fe288d401b19def6cc4e0
+:002110907080c91e3f54ecfdf24b8e89a55b68
+:0021206fa5be5b393a0613f989674fd28b7aac
+:002130b87f5fb94d050a7b2a86ca9e4341cb79
+:00214061946feef8d7266db28e7784689f87fd
+:002150fca96173737d32fc688fdb1c21c0af74
+:002160d1c2546cd3cb2568b3f8e7cdf2bec294
+:002170d09183ccf61d0f439f601bff6678a962
+:002180b745bd9af6adb94c363a7688e99563fe
+:002190117a7d68a4e78301bd01d35c51d19e62
+:0021a02e6412d26fe37b31c77b42f6e749f2bc
+:0021b0f6ffc95c7e1508311fd8b28822fec700
+:0021c02412e287d4bb2632a4cd62a1fb8a08a4
+:0021d016da7a4186e11ebdf7da62f6dd0cde76
+:0021e0815d9b13bcbf888104f59c01e68d37f5
+:0021f031e8de7c79af2c096ea49dbad9c1fbab
+:002200f57f29c0970512898a54dfdb3f66dcf8
+:002210afaeef7815e9b7a03f9a1d1e092e8f67
+:0022207f50535df95332e5f8d1dcc8f0fd713c
+:0022305f3f12f6d271cf0157f5481a6ac13ac6
+:0022402097d93b31ae75d3dcf49af3749d58fd
+:002250fbcf26e5b2ce48f934415fdf41ce44be
+:00226065ba9f28b3d9f6b8e7455085b4796206
+:002270afd854a24eb1eb5fe0fe5c506aafc9e0
+:00228027cf44cead8155eda985a4a9171de6b9
+:0022904f5416967f6304e16421e8948305baf6
+:0022a0cc51fce71e64ffb4184e489401e8f6cf
+:0022b0bdeded6f9a49c8de06fe397f8e407404
+:0022c0a7776fb35a3c430ddbd3bcfb1f00f73c
+:0022d0c417300bcbe0d502c4b916c3283fbe07
+:0022e0f2e385e7430bb398de2086122b042d40
+:0022f01829971b149b2014e8cfa69c67e9e5e4
+:00230003ef256f552e7fd11b4d37f1aa0da8a0
+:002310fae1988567994f70429765e291e68ca2
+:0023204dc3e4b69da1b02dba2a25ef27b082c8
+:002330b1f3ae85a57a08279177197615a218ed
+:00234070633ee7f3aed4ff39b63600f2d5d91c
+:002350f407964ec24bfc8150129f2a2f35f967
+:00236016766047c3130802bbd3c3873f8e7e96
+:002370565e310ffd5d66fa9ac3ea2cb1b480de
+:00238088f86ff751c7a1599247cb18419e9eea
+:002390e15b6409368c6811dbd952b5a197e9af
+:0023a03c7767ecb293b95d3fe6414d31ae79c0
+:0023b0f0e7f86a5cab0d767a69d711167b67a6
+:0023c08bf1998cb222b9bf0c996f9687098085
+:0023d026e22aaa7526682d9b79c52df3be1eb0
+:0023e08c8a660f5f20557423893a84c2be4fe0
+:0023f0337ad437334a8f411154bacdb8a92c23
+:002400ff401f60aee1a618b85c81271d0ee2b5
+:0024101baa886dbdd4f785123631bc5afbda2b
+:002420d101a59e6f9ec27af6979734d1421e21
+:0024303a3f48cdf3121376172aef8755733e64
+:0024401318328d01234ecd140c6f95367820a9
+:002450bf42cfbc8e71e4863caba81f0aef6000
+:002460d61e42d8b788d8aade8ee10cb1dcc734
+:00247059c882bf269f4ca40c3130fc38fa534a
+:00248094569214216bb0aedc8e458b65e20e5a
+:0024904c59af81b5c593bd778c34fba284fa1c
+:0024a00aae97e74da4b2d5b87e5bca4fa74eef
+:0024b0167ce16f0fa32fb3960767cbe089fbe2
+:0024c08f5e6239a35e88ec271d9d9f3ee05407
+:0024d0613a14c58d1c958f2d357efb0816018c
+:0024e0fc1cebb9eee6190a74bcaed63646d5f1
+:0024f026a27201d5d86fa42505f794fd30adee
+:0025009cace90329363218cff834b694172f24
+:0025102ef8e590959e92e064fccc5db8cdefd4
+:002520098bb66c66159a6f1f6cc48314869678
+:002530a020f3cb7e80770161cc5d41a1e74c5d
+:002540547bec2ac9ed54361a0981b4b6977dce
+:00255055b91daf7620c81f7bffac95e6a3ef44
+:002560b93e3c28254ec313547283bdd1661b1e
+:002570fd556885c71daaf8bd05d565f5405eef
+:002580bd59b961d1dd8ac527a011181cdf0d8b
+:002590acefb78336df3308155dbbf8bb775df5
+:0025a0d75917cc51df4558138e6229359e39f9
+:0025b02ccbd9858e1e1a3f9039e1d3065798ec
+:0025c016d0c3f4a55548672e42537102a324b3
+:0025d0ef118852360fe777e273f41f47aef343
+:0025e0e3dba540c58cb01e454b57ded2cb4176
+:0025f068a81982cae10b62a73d22b4a23a43b0
+:002600fab359296aaba325c86f89ce872048c1
+:002610672a2a6d22694678fcde9b92f8452033
+:00262030fef39ec2efe9ed90a3a5b3074fc6e5
+:0026306d341ccb508d97791145259bebb422b0
+:0026406a569a54f44d4ac679ac3da799e9fa20
+:00265077d905bb2ab50fb496c56fbfafaa1754
+:002660d84e3ac6773be78550030a12218d999b
+:002670e704d137e3e2b25bea791170b515a7ff
+:00268054dca84b2c2b9fd02b5e2c931027fb4a
+:00269088452c7108d9df32026d809ca2b8b86f
+:0026a0780abed8c2386a753ae3ecb44032d819
+:0026b0936c58b3a7fb43d49a787cc4740d2384
+:0026c02e082869cc4d30c1a1be872d41df4af0
+:0026d081e528a439668625b2309903f291630f
+:0026e0d19ae7454c81bf019e2cfbac0130d375
+:0026f034f3467412fd82a160fae084e73eff81
+:0027003451317084af7140defbc54e59715a83
+:0027107f0f39a01ba0e0301aec4421834bea57
+:002720e4fabd66b6caf800bbe2d142c55d1671
+:00273077c243a67432b5d049f86a8f1d75dd5f
+:0027407c64c54ee7186e854a485554ed29082a
+:002750f5e7a6fae8f8eb0e7eef862e3f526790
+:002760fc8742a57646166d589c2032a5c3e72b
+:0027706466d13f8c858c5c81c6621f0c6213f4
+:002780cd7cfd78797dfbcc550d0c24f0521e4e
+:002790fa5ef0506c4b32bb377a2fdbdbf65ec1
+:0027a09522ac4ba464f2636b306b06bdbedc9f
+:0027b02690d35c0a08ac9c5c0dad87a42a4505
+:0027c089a5a1de71162979375717b3d58fe18c
+:0027d015aa8c3178062d82181a6ec739b6cd22
+:0027e08e360a5afcc4fe4eb0a575b41c501636
+:0027f09b1fcbf195ed7cfce763d993eb665b21
+:002800ae266117859facbb424db08d610ebc68
+:002810eb8585077814e436cff1c6a1b6041810
+:00282045d2fecf0f0f9fb2c1fc72128a8291c0
+:0028301a7414c8b748ed0af6513d11f5f741d3
+:00284070f9ea689b57ef6a32f75bf418ef41ef
+:002850cfc61a28369853165e3c2796fe205236
+:002860e82494b2655001f245642980a6930504
+:002870f85d96766c7559c779a01ef674f13d08
+:002880814080e0b19f4e2ba93bde3384d476be
+:0028900f2941cd40d311cd0d7a04034b3d7dbd
+:0028a0c609c17d8b33e52f48c722ffcec15e86
+:0028b01a6f37ace7b328c697a2947941486921
+:0028c040641c83bd79ae572b938d1405667966
+:0028d0e6bb931775be18078824513f80712be3
+:0028e0212d1d194b6b491593df2cbd76816160
+:0028f0f713df219bcd0ea02d20abb0f0ed3608
+:002900b94d3ddfe3d067fbcb3375793bed1733
+:002910b68a6090f6522c5b4e11f0b3ed0d4285
+:002920090c7be47e7cbf4c67d5893b658c920b
+:0029306bf90a3a33c61b8083d4dd947b81b17a
+:002940f41c35778633b7bf1e4bf9c0deaab063
+:00295040d30b0ae3d399adeaee4650c7422048
+:002960afd506940af411079107d632379c707f
+:002970c28ada9075d151db9cd53fb0d721a4c7
+:0029800088b607b7bcbe9288e29e443496f394
+:0029904823c182dadbd905038422dab13d57fa
+:0029a0b6fef940c80e213276f703afd4157741
+:0029b0e865e3d889bfacff119d27d7d352f5aa
+:0029c034e857e792e67fa5b3b269a590eebcf7
+:0029d046a4368d5be16c7bf490eb2113d33293
+:0029e021f2aca1470fd9f3349e387a94de146e
+:0029f0a5edabb1937eaf5bfbecac06bbd63177
+:002a00e29e1c9e4f9e6e4a0f627fdc285ee9f0
+:002a1004929d44e28cf500b75d391af1b6c4e1
+:002a2022a07965806c2ab79ce45bcc6052b001
+:002a3092e0b73d51d77e52c3c6451e44b74bf4
+:002a40f4818912d835701df83221a2bc9b7831
+:002a50b023465489424d676d57d087cfa1f938
+:002a60d9158d3543cfa0bc99a0e93f92f24bf0
+:002a70ec851a2c19434d26de33a4c2034e8d1d
+:002a808aab8a21b7e88d0bd1cb028e92157a12
+:002a90bec677104508b6d44b5bb6487eff6663
+:002aa0ff7c20c6040a9cbb7d18f9be1789c562
+:002ab0a0c207bfc3693d1cd8335526c662632c
+:002ac0b439d844913037df0aba552bc2ffc326
+:002ad043ead27db894c4d2ca18b461d6b3b881
+:002ae07cd909d7b175816e38ff60717aea26bc
+:002af0809bd0706b5ba71e7a7c8e42f5da8c2e
+:002b00412717741d7b6a4661a66ec017551746
+:002b10a927bb07f4d4942169beb5c327aa1e21
+:002b207679f157b63ae1a407e2eda96ac2bd68
+:002b303a4f53d3dad6d01665d431f5e267f192
+:002b40df9d277997e0085079eefd9d8b9786f6
+:002b50fa1dcf932f52afd71ba61438701e5c1d
+:002b60d4cd9d90908d6fe9bfa427b48e08aca3
+:002b700a5deb2ae2b3a7b5fa484ed70b35b8be
+:002b80889fa94f2f0b3d90f4473f675e31b1a8
+:002b9089c18bfdd1b90c93dcc66246e571f41b
+:002ba062d2c72e90f4e3629f486a4079e73cd2
+:002bb070e0cd8990a59da546307046f711aa6a
+:002bc04febaba8648c9567c9dd72f5de503c61
+:002bd04469252c32d37b2a263f9a096c10c820
+:002be03ddc3f1ba0fc5f90cf804821956be12d
+:002bf00367ba25ca92c2d5d58c318175839d5e
+:002c00560b9cfa003d065e287c5ce2431a4640
+:002c10a3328998502f91a41d8b382a33c0d94f
+:002c203ed1058e92f912bbecfc6c4c14108b15
+:002c30254675ddc248e42eb73b6e00e59ec6a7
+:002c4041ce22e69408cc05195851227116ed2f
+:002c50dc56e14061bed3b9d08c86a1f8fec439
+:002c60d699ce56b8ac2ce5e8892c3b8622696d
+:002c70b5b2778868371681d251958124bdb883
+:002c804c17b7e2b1691b609e62502dd5673094
+:002c90c8855ca7f42f781376a65f0b17181328
+:002ca0c0b6eb5496e76bd790e5a4734975f787
+:002cb0c3245a39bccf7d04208f3df7d57728f0
+:002cc06abaa161a5d11cb5810e0a0132707369
+:002cd0eb46ba07564ae90f445f5f2224188bb6
+:002ce07f066968ba157be1d70b42d5cfb17173
+:002cf0b746971afa9a2cc5cdc859e585d041b9
+:002d00b645865f141a683955258ff574f40eb6
+:002d103103c3ec4e610344bc336effa443d9ef
+:002d208de60b911f1e9bf6b02ac579bc884912
+:002d30a08b818e6d268638df699de83bf407ae
+:002d40bb68248acc9abe2eb1cd33b9f1485901
+:002d500da2f953e2a0d29d69b4c18b3b9350fd
+:002d605726b1f224bfdd53543019b7a339d1e6
+:002d70c5ff58723ad8c6fbc63447bf25a69c37
+:002d8035ff50d35d3ab728b672c9c5400fc91d
+:002d90e4035816a06b646406cb0a67ea4c635a
+:002da07710d0d365a79751deebfd1d550e5765
+:002db00234aa833cf3d5f3a6ea10fbf813700d
+:002dc046f6c8f3af5c1877f07867ddbb5669d1
+:002dd05f5e26effc55dea067f916da401d191b
+:002de024ed178ce9d864fc39d3e9bc002a3f7a
+:002df060bd8fae042b1bf0da09f43856180e34
+:002e00c5c563825c97a39c5ef0468a74fed483
+:002e10f53aae170bdb8fa52e1709c397505ff1
+:002e20eaec3e8bb19c88622fa163e7abcfe2aa
+:002e30a6f524e3bab0f73e5928ec9648c95edb
+:002e4082b359a496f8a1820c683f66252afbdd
+:002e50897e032b8ac43dcbd46b160a65d18c3a
+:002e604ba7fe8c314f40924d6e45ae7a74bd17
+:002e7035f0fd7dc122f09ff343432ee864b257
+:002e80c0bb2438f1a981fafb29498247db886b
+:002e9013536d3921c1f9801776702f6220f56b
+:002ea025fc917e915e4d79403d906889936097
+:002eb028848d6305aeda5c9616b26bb3000d1c
+:002ec06db4761af44d0089b34003093b090781
+:002ed0b84cdf4886b3212a4f33b1a0f58906f1
+:002ee02f23047760a2bee5ab99b774f4dda6d9
+:002ef043fdb1ccdf36e8b75dc9b35ed7a726df
+:002f001f152a9e50488aa1a48b8a7e4abc8979
+:002f1047bab81bba390108ce7528f11bd1fcc2
+:002f20a6588547096d8b7831c6cc825570c912
+:002f3018d764e26a2d788d1c3840a55ab83301
+:002f40cfa76ff04949da42825295ce7fd14c4a
+:002f50c9ee2bc2cf56df0918d8fef3c513b355
+:002f6057cc3797db7deb1e05e6cddb38f25d7a
+:002f704f9e4701fe390de798c60b5f9541e2ee
+:002f80d660d5aa67638b0ff9f356f63e7b7562
+:002f902ce5aaa061a59e27798888d57ee37d84
+:002fa0e43d741380629762bc00632d879fe674
+:002fb0f57f3895774523bd8c1265c5ff3e56e4
+:002fc0fa9b3735aee299aca7f4a333ea465d78
+:002fd04058891a26df942f573e0226bb15415e
+:002fe02dcedf1a7dd0cdf90f8125868de719dc
+:002ff0c356a885d7aa623e687ff291c142a4d0
+:003000717e6921cfd647bcbe5fa1743f4cf0ef
+:003010eff48df412128ad4a6ffba3343673b15
+:003020b56f27e988ac8bb940c45ebbad2bfbbb
+:003030e6cf3ba34bd9afb4a223615cd71eefa7
+:00304016b6041c245fa7676be80e6a2071364c
+:003050fe46ae3624748d5300a0b5c62232d556
+:00306034fe19cc3812f21395ea3e159dd59cf1
+:003070ffc04fc64038531a3488fa86eb52ca6e
+:003080858a838929eb0ae881b3173398b7e893
+:003090115b199054cc1dc11ed1477f8066640c
+:0030a0dee7fcdad07546701ea1c81671ca6378
+:0030b0a9d4f2a1595db84aa65e865b8ac3f28a
+:0030c019be25bffe936a2a3bf9846e2e21f963
+:0030d0bd07882cf5d621c00915ee52e1f24691
+:0030e06ba4262b4acc10054f217d3afa19f4df
+:0030f090e9a5b585eb491bc633976d368f6daf
+:00310028ce22a8f87748b0a7f3b88e22f052b0
+:00311085e84b3cf8c84d46ea7c4ed3f927cdb3
+:003120bb6303fe3cfa2c7fd5a96d360b105045
+:00313081bc856cc726f80661de33d7e134294c
+:003140fc39a321003834bd0e9ab35a95f8fcf3
+:0031506a4dcec0865f66dde00184c5c3ae3c09
+:0031609a31aedbdd90b3af9b08b7397585d6c6
+:003170af031b02f6d90bebe2bf5a5e45985011
+:003180d4758b6e0bc7c2c01007b0326275c78c
+:0031905c3c07cde23fc98867f08c2f50a47271
+:0031a0b0b845b554a16c5e9a9384b08c292bf1
+:0031b098a7ff56c39705b5454846c8857b96a8
+:0031c0291fcaa715e08e8cd223866f1a52aeae
+:0031d08e341f55c484630a6ce812611c3bc459
+:0031e01fe89244e9590e336135ecb8815fff0e
+:0031f0a77e08fb2138805da6b7fb15cdc9e666
+:00320084cf714f3d9e6eb967e920dc174d0978
+:003210fc07521f374693c7cf8224a602db43f2
+:0032203ce209889dce7221ca540f65ceae5b58
+:0032307fc5d2f7318beec75d16c4f3f24a7924
+:003240e91a8044058f3f1456c7dac4925e0ccf
+:003250e3ac24c20fd45f792fb92cb3f599f61c
+:00326000767d3bdc67051d621c26f66b9ef763
+:003270e95efb41342c22981bb196668a7d56ae
+:00328030c2cf90f633590065719c16f2f53843
+:003290542097a0fe92522b816cead4dc514c0f
+:0032a0d0d595abf8f24c74e38102faa924c80b
+:0032b02dadee3f2233ddb6096bd5aea7923844
+:0032c0348728338dc0dea46a4227123f8b4141
+:0032d0bb24d278a4a8c0a939e5a210bf596e05
+:0032e07c3f631310150436bccd748da1ba4a52
+:0032f092eab6fc1716ab41a1af1213a6bf9721
+:0033003b5b55bc44d2d0ea0ea41f45c3f674df
+:0033104fc899e13e0014aa26b490154b42a5fd
+:0033208812fd60613bfbf32c63b86b04e2ccec
+:0033305e0b7ea854ae63ff79259557f6c5d350
+:00334089ae3f880f3663ff41bc606f8a9109aa
+:0033507694e97295782332408ad7e4d7334567
+:0033603b16913642b98ff6b7c13d10f46bde50
+:00337027776abb5125257b73eefcdeda6c0132
+:003380a1665319c012a4fcf74baa23f107b9be
+:003390060019d809122d7368539c044309dcb3
+:0033a0b9c269035cbb4dde4ac0349196122d2d
+:0033b06d5627823695c779869a8b7aeec922c5
+:0033c0baa2ea3640b01bb4d56e873d41e9c96c
+:0033d0a2422122c643692396631df1d290b6cb
+:0033e0bb29cd1d4d8c351d30371d5af662a576
+:0033f06179ac717787f03b3023050d9a6f6a8c
+:0034003afaa74d4c7bd823613966ce03ec4c5c
+:003410a54b60d4957b7ca086ec512ca2639ace
+:003420d6b6971420ecafa0e6fbed256e683664
+:00343056cde9ff4172494865b8220d4093d302
+:00344013c56b379bb66f1cf48f170bbf569eb9
+:0034508f5fd15185c3239280a098d4d2938f51
+:00346061a1e2360e64d743fdae22fd6c604b3e
+:0034701b3f0d7ab6fe3f1cc72320e3a25e6c50
+:00348043f3fb11af08323cc2d0c4efd2ad8dc2
+:003490e80d116a7a27053b6e62a6f5d6d6ad1e
+:0034a0cfbc63e71ce1d46ce045c766de954075
+:0034b0f511cbeac800cc159cba8bfd86f5b8ed
+:0034c073119603440d6715c8f76a451d714a17
+:0034d06a16483f4669ff423c3efff3ca8ae3d9
+:0034e03835ab50b1e83014cd17ce3d8a9001df
+:0034f0ad1fd34d180c99007b50df9d9c3623cd
+:0035000f1714e9199dbda0403309373df041a3
+:00351099242dc3088c66b760c87a8cfdea2c43
+:0035204e7b139a2abee4eff7fae9f73d6270cc
+:0035309a1584e32df79c6c0f53b1d60d0ff4d9
+:00354011547cef3623b71b69caebaccaf968e5
+:0035504203f3af743126fb6ff422c1d476f6d5
+:0035603961f48d2ef00a74a98bc06f3b346bc2
+:0035708270c4339b8ae35965d617f8d9e0bad0
+:00358041aa73db6d53ec822ea0645788312218
+:00359097351b59d5c11b558aa6423784681f20
+:0035a080e6c75609203005e0134bc105e75cbf
+:0035b0aa66c09676da72d20048ea8c7375daea
+:0035c035f2d531bb2a8f56cd1454a3ace15b23
+:0035d0751b8204ad22727d2599b42e7a6fefa7
+:0035e086923af5f3ccac985f2fce6a2fc36e8e
+:0035f0eae2e6b8055b60e68e7cf5bf13d7f72b
+:003600572e2e9115f23e2d549176799da42de4
+:003610bd650f75ffb7f4f7c136528be3c45aae
+:0036207fd029296759f175c2b02f83675e6bae
+:003630d2d9878bc5611748d116d858db500963
+:003640dd58b87ff7f1fb1e0a95970bf2759ed4
+:003650d1bc4812fd0f6509470b799cd2a6d78c
+:00366006e4dd16800b62aa87ec1019c76a0e32
+:0036702f50c1253fd2888bc0c20b92c4b499ea
+:0036806e40dc5d81ad91a0c8ba568c94ff6221
+:003690a5e9bec2d574f1196c75751b96ba114c
+:0036a0ae76e59cc281e22d1ec98696da38126d
+:0036b0798b4cb31b1ea48348306ac5fc3bec34
+:0036c09e4452fedb7481e6e5eaec06829c56e4
+:0036d0f668f4a67d25481a170975deda39adfd
+:0036e0ad3f6257d9bb9e6726d09e28ebd49a19
+:0036f0b8b125264eaaafffb183f0304e1d26ef
+:003700d533cf9c7671e61f55594fa8fdff8d51
+:003710c216638bff36e44c779ff82a1a632a61
+:00372031ae82e55973eba91e272f14e045d6c5
+:0037307f1c483d945460763ff27ce19329332a
+:003740f66d186188ddf6322b4770a9e7ba36e9
+:003750081546fd0a5f328c0996f9c7d1569a8b
+:0037601cdf90f6d6160219caf2c986ab6fada8
+:003770598d0346f88a5342669b87dc765b7cd7
+:0037809721a2aa827fc84f08a331ae4be2b135
+:00379053b53bb9edcef6e2faae3f718609c4b6
+:0037a033c0aafa1e93109ec3ede28c61a7251b
+:0037b097ead1c4812f6cfce281e16524aa4499
+:0037c073aa4533d8e1f282d57c0ab81873acd6
+:0037d07621b9e1272504cc11ca859752290431
+:0037e0d8a7065ef9c7c18742c878dcfbe30a64
+:0037f0f141ab8e77333682559dc1fc219833f6
+:0038000fe8e2f55564c2783f9e9a25bc08540a
+:003810344bdd4cc3ce5e59402a8fbf97b40512
+:003820c020b696582f72c40425f769c3c40616
+:0038307ee52faf5048aa584d0ecaafdf926aad
+:00384041f9c1c92925c19fb2f2b7835bfbee11
+:003850ff01dc2bbf80760a742ac48cbf84138b
+:003860e8f0acd39b4a89595b6e662c833f05a8
+:003870c352f155d557ef072c4db193ad8896d8
+:003880df771c87580ba07b70de993e45a1f2a0
+:003890fb0afd7aa772c7101cfea8a2570ce3d0
+:0038a00296fbcf64fc24b1bd37d69cca9b4943
+:0038b056c95f33036b8f3cabcaa91bb717f2ad
+:0038c09be8435c94b1be8a181bb5af4f749155
+:0038d0bc52ea15b37360e05a5f512949d150d5
+:0038e0de21f563ecc34590c8bcc46799edef58
+:0038f0d4f59c50d5fe9f92712d05602f83864a
+:00390053713d9c003eaec7eba1222e2753a7ea
+:003910c9c59ad0650e7877088ad40a665383f9
+:003920467070cc3a3def0064855143c55a9ebb
+:003930a568acf97cc65e8f1b514882b80d9107
+:003940c7f77ecab7460f717ac6cb1a2b220fe7
+:0039502b12cc69f454b8ea413fa0ada733e6a9
+:003960222d0c12058d61353ad56cca601d0774
+:0039701245a33c1d168a1964e64f58d3024820
+:003980443f7844778635a31a650dbfb8db9052
+:00399014f5a00a1f45451481f9f4f4cf2d1c9d
+:0039a0dd1af3f62c9a07162d8b97840e3230ec
+:0039b0a3c352aead5b33acd390a9ef72c2f747
+:0039c03c26e30a6d2de81ab331785007b376e1
+:0039d0e9bc901f782d5960364eacf0c6e0a931
+:0039e0e4a992e96bbefa96d2e413cd2aa9ab06
+:0039f02ff93f4bd7c68da4596eebad6e6efa82
+:003a003be1eb82dcd3e4739105104679bcffb0
+:003a103148117e2f3f7229c63b7ac382ef72cb
+:003a20f09e059dfb9532f41c9f930e8aa73fc3
+:003a301c502c869b4c045ed1ba5e7ac99121a2
+:003a40690d5e3ea3550b58acefedc6810a6a3e
+:003a502f166db0faa3636219544527ce5999f0
+:003a60bd7fb5db346e39ae6756f50532c18b4f
+:003a70b35caf21a13b8ab3d70a782d6bb25d7e
+:003a807d6328da6abb372600f5e376167b802a
+:003a90267a076b55fa4ecf4a2487606db78021
+:003aa00dd32f36085e1a6d15db131d960ee54f
+:003ab0706761a35137e70351876b3e7658207c
+:003ac03efc28e7511d6a04e7e36ce7e0f47ff6
+:003ad0e41a87c4e76bad23f15760c342c85f92
+:003ae074e712171e368e08d4f1bdebab03ee12
+:003af0e55c611c1455835a7fd520b432535b02
+:003b00b75f515342c5009f4b8d3bc3cc33c92c
+:003b10193f80bb82310b166344cb3a3f9255b7
+:003b20bc706d903b36ed5f5f47df0db1142935
+:003b302f94dba8757d6cf27af5fd8989cb186c
+:003b40e4937b2793cfa04589d19d8dd860d989
+:003b50642ed675d9a4579f089e5720da6a5cca
+:003b60ad265d948eb8e65f0507487950efce81
+:003b70d9cacd636b44535e41cbbf7919a354ff
+:003b800703eaae7e17d8a2d893a49fd30988a5
+:003b90e9d4f432ee3abd7b6ed1ab32a82d2462
+:003ba0fad3cdb99adff16c33f2f737d141ca5c
+:003bb04bee58f91d2206862d24e01101c4644c
+:003bc03bc69201fbabb5abd50a50d8aabb4fe8
+:003bd0d6deda9a49cf67d555e0a4dedda94635
+:003be0cf5b7bad3110284c0654a3014b0934ab
+:003bf0da912ac9d2b08f2474b0f7e541fe0807
+:003c00056a17d97d9faaa872ae17db3f350eac
+:003c101bf969c453b60dcb60430292679f0816
+:003c203d5763fca76c7815695779bd2b687404
+:003c309703cdda4194f0bf18fd5ec3cf636ed9
+:003c403add9427e1f0a45b5b9e6ce34de4e288
+:003c50202b1619c2957fa94f62ee5c56c29912
+:003c60ba1a573b89e0fc63a9282b7576977ea3
+:003c705d8637f1e7b4015a5a1faf96de1ccbaf
+:003c8011cc68a0610bc5c4c21c7f0976017bc5
+:003c90251a194fd99ce6f3e3089e61a053ca66
+:003ca04b4e96c9dfa19e45ce91774d172faa78
+:003cb083025996a57c7f4c365e082d7c2c55b2
+:003cc0611813e358a1c8c063da173ce176390c
+:003cd01b05fa2cda945c2afe0ba69635ca3c53
+:003ce02801784e2b9cfad9b846b01d8e619f6b
+:003cf05c463ab9050b38f1f6faf7ebc632eb1a
+:003d00669a28938976e495a951bfcdbc26c1a5
+:003d10c0a18124a2565afd059535771f8e4ad9
+:003d209694da9ff2016508e9b55911b1d53781
+:003d30882cc8af5a28dd9537a6034c65cd0e58
+:003d40c1882d1ac83bb6f113b2e210436799db
+:003d50ea1b21dddf4056881df59a2418e266ae
+:003d60eae48bafc57b701135103412962c6da4
+:003d704e338311d9fed2a7abacb9ba619dc06b
+:003d8092027d988d17d0dd8b98ca2894924a26
+:003d90e51bdd3f43a8fe69623d2a61c4842c97
+:003da05a097783fb639907fa80dc51e6bc5822
+:003db06f735dfbacd0f478821e1acddb98a7b5
+:003dc0c5f52c29f7fc0c4d04403067dc45c612
+:003dd07e95b2f01c2bfa04942b0d8832172324
+:003de0aada10729f257a7448ec9c06dd37a42f
+:003df0306fce9b36870fd4043ae5a3845d4a2d
+:003e00c1c4a728749477ffe748d03406091339
+:003e10706820bc9812d2a6174c9e7cb14000a7
+:003e208985f59d0ede5202c0620de60a95c6e6
+:003e309681bbe3a4b652a8656ec8cca29e5049
+:003e4066f79302ae0ae260eeaee0a0274978f6
+:003e50eb641f3fe331ee97bd30b07cdb178862
+:003e607667d943c730210acabdd772f2b5d5d0
+:003e708cebe65a4341922d3ef5e4194adbe7be
+:003e807a9d0794bf4e0969017ab012dc0543e9
+:003e907cabe650b918f8dc54dfd0b2c73cb1ee
+:003ea0f2004bfbb7c0e76b99d741db0d562e67
+:003eb0d7e080367cebbbaa40f305175b93ffa9
+:003ec07b2f8d73476c498588066b47ca31b09b
+:003ed0be6f9deb2b701f7601439fe800eba21e
+:003ee0c1e66ffa95fa4d9c85bc36c8ab75edd8
+:003ef04de59166ef2620c41d248c332df1720c
+:003f00f805819351bd176b6fa2f8f0c5fadf0a
+:003f10db89c7c501296d588c59f8517f7c547e
+:003f20caf028ccbf654357c40b79a5c0e53538
+:003f3008eb5698935c07777142359cdc1ec4eb
+:003f40c9780c8c0e102bd4802483f6da305ba7
+:003f50456cce5bf643febe5b7dd7a30f802f00
+:003f6000d118b5519a7b36e9b95f2af5d16a4f
+:003f70e828621e623d1809b5937efe159feb93
+:003f80edfda7954ca2ebb3a87772c30be51b60
+:003f90e27fdc37c98dd6adf7a7dac4e809b23d
+:003fa035d54f7a1934916f1abbac00bd8b43b3
+:003fb04025329abaf58bf6d074bd07b91b51d9
+:003fc04b757f3c2b067fe859e7396524769339
+:003fd0a9104c8c5fd8cbb3dd9c0bca6782c5a7
+:003fe09bd1beedd0d562ff1f6d90d745581382
+:003ff04690b4d416eb491b648d88920ff797b6
+:004000aa2157926ca77290a4d59d1a27477b54
+:00401070a9b27b17187478124afc5ce499e3ac
+:00402009183d8bf4231a8ea866c385ae51c81b
+:00403070223d86aa452ca81561a93f6ae00edd
+:00404020853392ecc0b8e0209eeba988eb42d4
+:004050625d15c7d5df434857f041648e638d67
+:00406015ecf06cdc70db34ad37603d65da7719
+:004070860efac74ac393d9c47413d1ee904efb
+:004080864efec783c570668bba102501b81772
+:004090658854c58bf5beb5f52707078647ac24
+:0040a0b870ab35f87aa128491c4a1720b90bd5
+:0040b0d12e5b39059077bf3eaecf98b482099e
+:0040c0181159a371dc60c8fac1c7ae6af4fcae
+:0040d0cfe2f0d4f1b863984168991bb42ffbd1
+:0040e09f13ef18d77551d4c7c621f1d7352e4b
+:0040f0ae5ec1526909122cdff92df1bf81fe08
+:0041009bdcca1ac73cf65e1d97895ae7ea6bf9
+:0041100f841f8ee3d6ca9ec05b46faeaf1569a
+:00412005adafa93f53a0120b5043f596633e24
+:00413091c46db586a07bea01ae9638450a0528
+:0041404a0548b5116ab0cc5e13f6b39ccd46de
+:004150dfc13256d3bd2744913ab72663d5f1ec
+:00416084e93dabe8fcd03476b8a2110145811e
+:004170e2bc16d6fc4552a7721b09665e950ec4
+:004180f43617e1dbf4a2b5b7bd9c2e2319b9db
+:0041900d8c0d5ba66d8e556cde00670d915cfa
+:0041a03f718d9821f4dadac3094c4ec74aa814
+:0041b092c7dfcb4e31a48c63c84b94cefdeadb
+:0041c0da30aad6987780330e60b0a8e235422a
+:0041d0d6bf83961e3042b25bcb4845ce313b14
+:0041e0051f2e2a32e8950c89eb41c3789dac62
+:0041f03919d9e11046a26ca0b1dbe120c18db2
+:0042002fd5a4fc0b759d992bc99e995e6eea56
+:00421062f1a29f053cff49bb2f4a6ddb722149
+:0042202a1cb6182055e5375b6e8528ade93653
+:00423096fc5b52f2a4c149e723b18412f1824e
+:0042402cc0e01ef79e5d3d9e144c49a1ba3f20
+:004250a1746f85f2298f6a11fcbefcf181f485
+:004260acf3b31ab9bce2776003bee98026abfc
+:00427052e5a0be7f11ed14630b7da6d8cb50ae
+:0042807e86ebaab11b6b76110fdb548db6e65c
+:0042902ba2e48d8187762b21cdbb918d55b14e
+:0042a02cd9e1357ffd00943671e3a2b538b34b
+:0042b0ad428d482197b1c241d874b9097e5be1
+:0042c00e6b7271a60c6f5482edaed4ba76c417
+:0042d09da124be1cf17d40101df0bee7fb4dc9
+:0042e039559543cab14e2196b8e533d49ab8af
+:0042f06ad229a116f26a6a7212de996ad15ad3
+:0043000d7feac25ef3a65798d6c5c2a067374c
+:004310b11762ed7bdeeb113bc5f034537a9a8a
+:004320b615d27760ea2cea9501798e793cc726
+:0043308ff8481b81ae8b02049313fcac598e49
+:004340175483432d0fa77905a030955477c151
+:004350965b758c704a43e2279fa47933bbf9e1
+:004360564697777c4454793bb60a4ea6722255
+:00437042b4426e0530df1ed8b431267caecacf
+:0043803ec485567f179a4a098156d771aaa04f
+:004390629d0ef4efc250397b8dd034527f5ec6
+:0043a0184fc02940bd61c5a2b9f5f560e5b42a
+:0043b052895135f8f7bab282b9e0ad73538f79
+:0043c019ce5b28d8d8fea213a9a28f1eb9da1c
+:0043d04b81eb87b68a0774c8621737fcd913db
+:0043e03d19d72fe971af03518bbfc20ff0f29f
+:0043f0a711d026c4bc726735bb0576febb3371
+:0044001b73405e9e7b27b8ac47a921d1967cef
+:0044101771354ad6d86c8f90dee1214f49c634
+:004420f380585bc3d36593322bb69198da6e68
+:004430b2a2ebdae8005c6997067cde88609a95
+:004440a818aa017bd6ae5f62861334e9645944
+:004450421aede6701f8ffa55819610346d6f7c
+:0044602f79558f1a8e69257908230141977e5e
+:0044702b8b8e9d015e7288fcb0d47e1502ee10
+:004480b74a5a8fd1c6b2a7977161e7099d4941
+:0044903dfa65c43f9cce9f81638e1344e50e58
+:0044a00f2e35df978ed5abbe0591f1b7a4ff66
+:0044b0b960c8baca358573b33aa197181d263a
+:0044c0c48f6a10965c41df8b56b140b8343978
+:0044d00cdc9617f97bd880e439ee1fd9c2082a
+:0044e0acb16624611694a05e606d6a84e07d29
+:0044f0b27bb336476c8daade6c6cf840561ea3
+:0045003c62ad144ed587542b1981ff0580a53e
+:004510805d350a9be43aebe93355f5d581b15e
+:00452045dd3dc08b222a4d038e787390b68c1c
+:004530ce851f6ea912f8ae6ab2e1862a151554
+:004540ae7a74ffd5211424c58b3bfd1a60fd1f
+:004550e64696f1cca759cc255b75e85b6cc965
+:004560e21ef04c5a0dc3a417122524f4ddc2f2
+:00457020850fd76b873a1ef7d257e27c5b24fe
+:004580fbde3f0582c74f5269d876f05735839d
+:00459021f103198c66e190ee9a849246e25267
+:0045a04d8ea33be313ef1323f37daedc948a17
+:0045b0ba76f4a41cfc1689a3961789df11993f
+:0045c0eb0b1b25ce6360b95ef866816374a962
+:0045d08ab444e2bed1dd533eb0614fa4f17535
+:0045e0a52df01fae37dfd4b8893aef42cb907e
+:0045f0374b10f1769359abff8273d20d709d80
+:004600fb9262840827ad9dc42c1a14a8d84c97
+:0046107d678ac90e80f54150d416402020f183
+:004620362eec918a7d1981202ca1941d36e2b5
+:004630321940c72bb5c851f000542bfa5094da
+:004640448bcacefa7a22cac499005fdf359368
+:004650983b7fa722cfc11658d8a3a85c4e2ef0
+:0046602d0be0e945deffa1cdc53a3b2df48b29
+:0046707caee7fe4d1c9d8ec077a8a4cc8aa2e0
+:004680e6c6c333327269bbebc60a4225e6d058
+:0046908864d4bbfda0219456e09bc06c6495ab
+:0046a08474258e2a95d6ff790d82956708496c
+:0046b03922c568cbfa89d7446e43c3753f0e71
+:0046c0cf0b805775a240b2e4bd8c6d2342b8b0
+:0046d0764ebf121c83fe80eaebc0e1de25686f
+:0046e06ab28d0c700fdf1a8bd63f251343fabc
+:0046f0b0b4326e0fb3f6bf561189cfac7b1750
+:004700288fdab3a4f06adcab1c962961c7182e
+:0047100b7ea76818c56642dcfd255ee4dc781e
+:0047207721cfebf67f833b757f52a245efac74
+:0047301e66efceec5aa7d9439ccef314c7e2bd
+:004740d26f8246e8790c449a2f5c9071995688
+:004750e1a6857d43ec6971da9fe87c0fb52a37
+:004760d7363b68285114d6d8c317b5cd5dc0cc
+:004770d41d27cab89bec04d678ed8807352fc2
+:0047801b50f87d1abaa751a21146b5436d6d1b
+:0047901ccc9d926fae4fa13a004e59ef6077fc
+:0047a03f9ff18d66e255303b4a689f4fd44b13
+:0047b015601b979abe17f8b97421cba8fb8f98
+:0047c06df83303d850d4fe30677fff0453fa1e
+:0047d0b268bd8832d07912abe95773d491f00b
+:0047e0946e1d1d510f4d6e27841685e6efce7e
+:0047f09cd0ceb7d005bdbde6487ccf613709de
+:004800d5938f3921ef60e90f40efc0c51b08e0
+:00481017caaa33d3067294b0ea03757040e5e9
+:0048201742244a385de2c207b0c577165e9477
+:00483010fb907dd8bb54b15cf8127301454344
+:004840902dc3a84774355596159576d0a42243
+:00485081edf8dc18bf0eec4751fce7048d7e73
+:00486051242cc1754193fdcc8664ad0a5c75d6
+:004870845685891fa750c0889118749773555f
+:004880f4aa745c6760ab91f6e0c1b24110d4c6
+:0048907569cf971643bd66b2e89e84cf1311ad
+:0048a037c99e69c36603dba6346b3308de179d
+:0048b0e2667eb20a4ac2bd9e548a242329e9de
+:0048c0837acf7bd80c27ee7dc816317ba791a8
+:0048d05243ceb8fcc3ad5e1756e5e058a5b561
+:0048e0b175837d7d6778a2c4f4c2bc0022a76c
+:0048f000cc54070f26ffec5cf68801b7e6cbd2
+:004900f08a661e60635a5d188c261b5aedea97
+:004910c5df6c125b1dca6cd76aa51e31123da2
+:00492025133da77c5458455b71ff3180655d21
+:004930fecb859e457b8f3f3513d19eabc44c65
+:004940c655154172b89989f08425942d99a539
+:00495016f04e8f284a88ec535c5813c48bf8c1
+:0049609c0e6f65db58614cd9a5829de1387901
+:00497084d04cd2bd472e94ce97fc85f29d5bd8
+:0049804e96b2da89eeae7a790b877f4d6e87cc
+:004990ce184f5965e96bdec722110d962038ec
+:0049a06d85625cb774b566292afecfd171d33e
+:0049b0614b00c4da4e970a49a32448962d3311
+:0049c0ab62e50ebbb042b9d5ef618b1d911932
+:0049d055d644c64482ce2a095cf791b0aa53e0
+:0049e0197dff25a7fcd9148603058196ae0934
+:0049f061b47842accaf14135fc56b4db82fb2f
+:004a007aa5570dc46db2a5d1dfac3ccab88119
+:004a103a586141baf77c4b7229ae22d2b08870
+:004a200e8c1c34d8be850439f3cb738ba1378f
+:004a3093ed046ffd8e95070c682635b2b68fa7
+:004a402d0e93fb21fe72f9bf0d792c3530a67f
+:004a503d5ab69aed7616647078453e76a915e5
+:004a60a412c2fb1f6757fa72b14a1fc288d136
+:004a70b765b09ce3ab65dc107b94d3ae19f3dc
+:004a80f7597b30466370a01e919fc15ed3d42f
+:004a90ffa26a8f537d217c0ff2eeff08214e2b
+:004aa035ea1f611ab19155d6827301abfecab1
+:004ab0af5d479e27c3354110d2ff07fb73af99
+:004ac002e67748238bd62fab54526fd86c374e
+:004ad0a15b925346a57e88f10b067294e3d6d1
+:004ae01e0a24e5d05d348f02caf468019b54bb
+:004af08a3d6268356e78d732e947d1078728ad
+:004b00becb95f2cade19c2fbd9b39511d20fea
+:004b10c3822257bf39d71970dd1c159d05724d
+:004b2055e4ee18f3dbb2195db0f8d2d6a8fe94
+:004b3026c98f5e44925550ab6c3b18f679b0b2
+:004b40e1603a3dddf3466be72187079041efe3
+:004b508be73bdad6bb82e21a9d6670310dbe86
+:004b608b3a0aa5947c238f9de731e0e65a20cb
+:004b7054389b788680eb8c02679e1b653cb468
+:004b8082eccebf783768605c417b1d3cb3c5c8
+:004b907daf3a790610e9dc5a9db57a7008c5b8
+:004ba0b234455463fc22e1b95991fe8d195cfd
+:004bb062ae6ff0a1778d8ea7a3b3639c3f4d70
+:004bc0fce0e6f79254e6f02523e6890159b7a3
+:004bd0888b3e0aef0edf661d54e4e6be4785d2
+:004be0c7872543498113ce36cc8a60aa96bb1d
+:004bf0dbc0af720031c7c22cf4604c9b0a4bd4
+:004c004aa0bdd6f81f94ae0dd4e6bc3f0a5ecf
+:004c10fee0c98eb7fd39653f5806875fc322bb
+:004c2074159ed0af5f58634af780de6e1b5cbf
+:004c30e2bf09df40b59774e0d431a3346015a9
+:004c4012018ac9b05f59fc7cf9fc24c7cb7c8a
+:004c50be9b84e0f5f0d095d7136707775ad551
+:004c60cbbb002b4fdb6189ee5f333e6916af6d
+:004c704d0457720f4b4efcc2a8807c35c304de
+:004c800ca0060c607d25d2db6012348384f585
+:004c904d2b41a0d13107d37b633be1a0f33f57
+:004ca0333f430b704ea4b09bbf560e662e659d
+:004cb0dbebbfa7b120a6b8fa0a0d6b60e5c991
+:004cc000cece4584b04b9823c0bf625e72033b
+:004cd045c4ef29b61101897f57739998b97448
+:004ce0bf49827763ba9740a2ef8bf9e2b11927
+:004cf00c88d4ef95cc2ac739e13204fe14b475
+:004d001656a50d1dd67c34da6252072e04c677
+:004d10a7431729c43c01a2c01f63ef1aa34ffe
+:004d20e0a042165b84cd41a3ee8ec6c5b1839f
+:004d306e675bedd8eab8e297dacffbafb90839
+:004d404200dc632c575104b73d50f1f71f5b85
+:004d50549dd5fd45440f387930cda728359283
+:004d60a1fc9d5703979320d501c8617968ce84
+:004d708054c1e41cb68b83ec1ddd92b8a07093
+:004d802d49101732ef396b5c1a1523098da926
+:004d90256fb916e967f9203628146699230211
+:004da05a23dacdb434c5f393a0dc4b6d23535c
+:004db09d328879e52e897f3e4046312dec6340
+:004dc05e08e1fd80f2cbb7bc4af845916d3e63
+:004dd0c8751c9062d07814545da50108fc5dfb
+:004de05dc814efeb7658cc3796f8ff1c1598be
+:004df02e3cd359c6f4e6beba737e9d0b0d3096
+:004e00820c3913762301bfb7247f206ced8f34
+:004e102a07a0e27aa1401e0a6ab008d44d3b28
+:004e20fd88e577a0b09a24368267444fc45e66
+:004e301a86ed87024f2097a5a072ff02eb19ba
+:004e40264a6c977b459f4419dbdf64737b2d3c
+:004e50b6ff800eb9e23eb64bc1e9a5d559d519
+:004e60b5239759d10a0533ed08df323ba0a35b
+:004e709dd22000bc223138817b43bd68cd1879
+:004e80e381d423bd0fbce105515f2e2483a640
+:004e908b664ada25a5abc09e27e12c8cd2e58f
+:004ea0c949fd902f793c22dce1d23e7fa7ce0f
+:004eb0fde81a7273362621cb696dd7ad32a580
+:004ec0c1314aa2724eaee880fa7aaff2dbea8a
+:004ed0b69442989c01dede6ff5acd97d96152f
+:004ee016c08b10bba5dd1fce12c21f7c932456
+:004ef0faff125d3a1711665093d3fe3a651062
+:004f0077ea199a6226158f56b385dee2b11e7d
+:004f1066c5390b81b5adf9b937d3ed005eb578
+:004f20d0101347751602aa483fc811f45d15b2
+:004f305d773f0dfb2f2fe112c125c3a861ff21
+:004f40cefd73dae7727fb1f2a311a89a21c18f
+:004f50118c85599eadcd2bfbe8790131941383
+:004f602ee8cc290ef9dffbdebad228913f0c51
+:004f708e0db6b11e42fc4ff2b2ecdd46ef8113
+:004f80021d1ab164bf96a8e253acce1a91843c
+:004f9012220a0c370c5b115291c6ff0ee60063
+:004fa0faf2c064337a65b5e0fc01204f682421
+:004fb0cf3adf7ae60d578fa7e763eb0f325d89
+:004fc0bd73fe6fd92900dc8b2fdbc1a94cab94
+:004fd0757b80f8121ca71770cc533c26d74c09
+:004fe04a1b73d025f31650ff12df70c933ea6b
+:004ff0381bf0e27c210c20a62b4bb8a0cee608
+:0050001158c70e8b8a7069b7554a016d5909e5
+:005010d6942ad691e43ccb36de01622348ddbd
+:0050201939fcd1b0ca6a5388fc1d6a4bd520cf
+:005030f8c64679e27afc471c99f71a4622312d
+:005040dcffa758a287a55f95481e27c5536e98
+:0050501fd7065632878949efd4f7d862a2108b
+:005060049a6a4067844418555a5f86ea2c15ae
+:005070b014d7004af4bfd0945902e6e49ec2d0
+:0050803d8058cd1331b8274d6270748dbb3f82
+:0050909b3b6f7e998330f7acaecaa2273a7f8a
+:0050a03ba5f2e59afc7664f35008288ee01d5e
+:0050b0ca248294cfef0f59ac78b930d047fc23
+:0050c0e42dc950309b9daf08f65c974e14ccf9
+:0050d04c9159a4b357c60cc58968dfc37b9cd0
+:0050e09e60ef648dab029b26ec50a129f32c69
+:0050f0739b1aebf8f7f531f917daf42c2b8b80
+:00510064b59b4f1b484382d928ceebeab4e8e8
+:00511098d5de79965134f27188d14a72b9a2da
+:0051209125d3f7ca8074134b46c156296c1cd0
+:005130a39dfa09e0f3e8003ebd6cef52c27bac
+:0051409345a7d82c3e211ec821d22bd8b8474f
+:0051501d31e3207233342efa2ae68dfc9e8651
+:0051604246b1fce8ba18401fc3d94f3c77faaf
+:00517009590f9aaa4a51c878a5c090d5a7e34d
+:005180533616dfdfe25f81eaaf0b29000f3090
+:005190af93546f27d2690a6a8a03a658865d76
+:0051a0bebce77cd352ee56b82248a849687dc3
+:0051b0ba71a529bc298549dba6158da1770810
+:0051c02c303e68607e313b461768faeb04101c
+:0051d0f1ec7de2edd67db4704bf45083248f36
+:0051e0a5eb09c896b6b5800cac88b63e8facfb
+:0051f0375bd47750abbc9c5eec00dd4b3c4619
+:005200efb0e1c384e8c04eb0809cbd651bff85
+:005210bb0d7de25c2d0f6253f7a41aef63d795
+:005220d91965f6b238f57f7a6fa55a751d60e7
+:0052303ecc1c7f6439a1e49dc0644cf903ad57
+:0052400b0bd6fa788cdf6a8979355fdc84084a
+:0052505f7bdd8367199caa3d342837c6a8786a
+:005260691c9652b701073f668adb5eea55e8ef
+:0052706229cca11565aecac720b2ca7c5f086c
+:005280b70786497b5691926f53bceed5e0034d
+:0052905cae1c53fa3ea8ca6614135b319ff892
+:0052a099d5cb397d37b22c883753b8c99db09f
+:0052b06668e13f8be460e260310b25640b4480
+:0052c08fd0d6f132b85a8369e295c7b91455cd
+:0052d0b6a11185aeecfb64167bf1ca80aeccf5
+:0052e06da573424f359c0da70365323828d4c0
+:0052f0abf884f8610f72cd77d34036b131b2b5
+:0053007b319eb87e2b028e19e39ecebd3579b2
+:0053100ae2a5fadd96f0578179da971219f09d
+:0053205d5e757f1668ae67fedd6e80dabfbd8f
+:0053307b2b6e8466c79c33416bb805e7639179
+:00534096f4d5c308f0f5bf79622554fd6bf8d7
+:005350be8a56d47e2492f8000da7168ae137f2
+:005360f9dcd0a04cef593a3470bab9f1f17856
+:00537073dba1c63c9448755339f90c6a613ea2
+:00538073016b1fa03ceeceb1e3b23589c4e115
+:005390c2ab7d2d412bc8d7231c542d8aaee800
+:0053a0f8d0a59627c474f7f8193db94f9b7a64
+:0053b07e94fbaeec393939dd7ec0a9a7d429ae
+:0053c0a6ba55b6ac8f21c84fa0de91c1414d6d
+:0053d0611c4385f0f1488052abdba724a69404
+:0053e0fadd93d7879c98ad96b1bcc7783ab73f
+:0053f05b36fea6115d0770dd0cd0daa58a078d
+:005400d3c4317ed1b35370c8544deec8bc5dbc
+:005410dcf79eee8ffd5226b6a43ee1cd3b208b
+:0054202e2369382621ba2b746e0599deabf8dd
+:00543012aafdfdfa4bbdca692be4b2af95df8c
+:005440211c5f7023f16c1b3a5409fd1a2e64b1
+:0054502fb0650217b48e2b943ecb94cc17940b
+:0054601b517ac9c3d1824b22df76256b3ced14
+:005470e6acb49bfb9ad14edc1f9c651e2b7812
+:005480daf4d29aca8da1db8800306b5e67501e
+:005490f42fb7ae732b49eacf021f41f87d9e78
+:0054a05298c9b236310dafa85f719ade55071e
+:0054b0c4a2228ddd0534648e5ea1331e2ee8d2
+:0054c0edefcfaf2964b48e2beacd58ebeeebc8
+:0054d082b483a2f0dbd2de8b15824ea6af2d76
+:0054e0f1b712973e2680d84713a5959c8a2080
+:0054f0d86ecb1e3be7bff7e470dcf88e35d810
+:0055000211047885f3083526fcb206b1183579
+:005510ba7742d0b71e58dd003824fce9d31a38
+:005520ed1711b0cd3d857371c11e6577c370ea
+:005530ef94a6c3954a0dd54c26ea27aec68dab
+:0055403df1eeee2d4666ecdb6365b2f0372569
+:005550c1f5b14be3f4c0f2c2af4d7783fa7518
+:0055607462067e00d832399163783e0517324c
+:0055700a1a145ae4b6d49020df9b1986590dc9
+:00558000c5d49520cac4441025dafabdc3b971
+:00559069ef6e732f7d60156990384858bba8fe
+:0055a0bf5dfbc7f494c4816adafe2827c35fe6
+:0055b0698968255a1a0a9800c64219efd57d78
+:0055c0f133be8f16acf050fcce3bad0de33ed5
+:0055d0528bdc7e248fc3f87eb8f4f4025efdee
+:0055e01274def5ba04a068e0eb6b3c85ac19cd
+:0055f02c1cf9944eea6b2d6af7348a29b803cc
+:005600e2dc723434c8ccd4fca570d9920ea9fa
+:005610ee51ca83c5593ee042060da0ebc6859c
+:005620e4a1f89c7a9b4fc17ecbde3ad4fbd90a
+:005630e1657f0035239cd98db305c2ec7de7d4
+:005640b1f24d45773ea6bb808d83384d231c40
+:005650c1aa7d2e9e185b952d3ae4de7a672fdc
+:00566057bd67c892e6b344cfc9aacaac71408e
+:005670b7e81ccd8c6ce047d8b3baba6950db37
+:005680d2aca41e2fa5f04afed891d93e38f63f
+:0056907c74af3b7c0b626aa1cc83193e0578ef
+:0056a003bd8b5901e19337f9d59db9e69142cb
+:0056b0b2caf9b6646eda543f5620bec1607b73
+:0056c0750a02e5b625a6c8a2cba00ab728cd1c
+:0056d06506a79c614736d24fa182a9b685fab2
+:0056e0d15760c667ba800e8e372c7a2e54b9bd
+:0056f018ccf63dc36850110d021418a2fd7c71
+:00570000d566728bdf223b007595747802eb47
+:00571058e19d725e0a8bbfa4b9e59f9bbf5332
+:005720558debe73efa721c31888fa03e5df504
+:0057303edae6b3cbc0c415b8e6d6d31ecc96de
+:005740eb1be3d6f0fa9ad6071e677b1169cca5
+:005750b673b977106e79385469ce93cde15e02
+:0057606ab7ffc74c7079e1532a0f9902b7c1e4
+:0057709bbd870258ca22ded67ab5515c81e720
+:005780fcb570d87cc07df7a3ac1db968900d97
+:005790353744f6c0d79542a36e4920a8470e0e
+:0057a07584f1083d917201ed1d4c83734bb553
+:0057b0b582962b046fa876950fda6b25dce622
+:0057c030e65ac665efc1b983e22f9f94baaba0
+:0057d0db7538d82a7145bf71c8b5a4f2e35308
+:0057e006d3f3f651891bd6a1354dd2fe297718
+:0057f0c403217280e0bd3dc9f33219a3cf3874
+:0058001df6c3e0ee6f9c91019b4a02b0e40b9f
+:005810616a47c97f13911529cee96bc3f0a076
+:0058204665b8217a929d862883c436ac83709b
+:00583066345a00eed20fbfaafee22f5e6cae2c
+:00584057c3e934a26a40ca809773653a1eb02f
+:00585044d190c8fcbb55690e3eec606a0b833c
+:00586096008f1cde4340089561f316ecad8bd6
+:0058701c9950f9213518e281224c84d9205406
+:0058809beb4c6e64c3df6a0efb16a85a9cec37
+:005890257c5c0d1de59667bdc49daed452dd44
+:0058a0ecb2b024206bd7e46cb03e3391a37aa5
+:0058b03cbeb9303e39a5b7276f47e5077d5911
+:0058c073fc01912ec6412ed08f76ce5eb9fc12
+:0058d0d3fc4a934e2a8633b5cd750db6a2b2df
+:0058e0757a95ebac6f07f97057b5e364abb467
+:0058f0f76cf6908a4da4714f345d3a39042d90
+:00590038f0f1ad1857d7b33a259b38fe31d0cb
+:005910b8b3f792377d4dfaaea36034fc1b56d2
+:005920599e7509d2495bc2b3036dd0185ab11c
+:00593011657f659286e397f0592edbdfc5d28c
+:005940a6dcb92df9fe23689376d165bc336e27
+:00595044b887687d3622a2372f9f43c41cb3c1
+:005960a6f25d1594621384b033c1e74dc6dc78
+:00597021ec43a3316ded6259aec9a00b442187
+:005980b71cadbbc2a9202f8873af22034cc546
+:0059901ef5e55437ae3d58d3c0ec70022aeccb
+:0059a078dd84441beb428cc9a33bcbd321e1ed
+:0059b0ec8b8e22ef237fd7bc6d31f4b0113686
+:0059c0b9cc539d783d2641dd349147dbf20838
+:0059d094551ad8a17afd146542b664d5a6cfe2
+:0059e080e8cbed488150a5c7a8c33a96c847d3
+:0059f0448ecdf8bb099fa42832cbfc287d4761
+:005a005be2c12c26f84e1648aae5e926c5fa9d
+:005a10cccd9b211dd724b47fba173305b14b3a
+:005a20f987c211b82f49a1f9606279171104c7
+:005a3098eeb5707685aff1259a4cce36794a9a
+:005a40caf793742bb578119d2efdd553b22d21
+:005a50f58fec205f0ec280f64396fdf9e8abbc
+:005a609b1d15af9e68349b434f20ba963be3d9
+:005a7079ceb1752aee53c0fc7dee8d7d96e8cc
+:005a804821b9bb72f0b708c08bc537ce2c968e
+:005a90d2f7de34fcde4ee60e67848b98f8418b
+:005aa044e63d745e002d5b9421f054926bc8af
+:005ab03f44e977c6428e9516756f2970b32345
+:005ac0fbe2ca78f53013098b3ed5ce03be77ce
+:005ad009b773f6778a5d6284fc061e5b3c250e
+:005ae036e581e6fe792500517c33bcabf13e87
+:005af021a4e887dbc3b7e23e1d196fea5d2d5b
+:005b00d1ea4d3e2bb24119b0e5a874524042d7
+:005b107e13fed60fbea3d0c8f018198b9ce59a
+:005b20f9a2ee86639375ee314839a09e6d08a8
+:005b30289966ebfb39a5dae7e5a8292198d165
+:005b40e3f9cd78de467e4e38e2682fc74acf1a
+:005b50ede9c1e97627f76464dc5c25d7825789
+:005b60cbd707c3e71af9b35e789a40875846a3
+:005b70a8d4263947cff0450c362cb3d0a6efb7
+:005b80c665d8fb1cfae4905a0b1ec654d86fe9
+:005b900938ba6c75852c3359321f0b6a776130
+:005ba0f67708741e1b266b8eb13637f0cdc236
+:005bb095633c7bae239881911b87787844c091
+:005bc01b6272b5a4261c6edbb2564645f66b0c
+:005bd0dd2ae5629383317f2dfc435a5f3fd17e
+:005be06568aa2dcf72842c2f9039fb05f77218
+:005bf0af8c1adf77175f0986719af49aab88a1
+:005c00ae13e57beb5437e6ad8d289b5e8a3b92
+:005c10ca15712c79003ee9afb01fca8a3217c0
+:005c20647e44c03571a3b7a9a1ca69680c8b4f
+:005c305c4edc63dcc84fe604c9169dcdf906b7
+:005c40fadbd3c3bc9b4138d1c1252c9ebdc43e
+:005c5095f11436ad89917b7fb3ad25e31401c4
+:005c60cc9abc0cb0fb436f3025bbc1a0535656
+:005c70a4e25fd02c2df5c480e343b9a33edba3
+:005c80f6cd7236ae159411d145f5b5c6c15023
+:005c90dbfbce0ec13b59e4a3e271ff2c80b03e
+:005ca0c5d853bb79e39a8d4397e7a13d98807c
+:005cb013ef2fa3eb103ccbe1d165a9c9c4a29b
+:005cc0290bf0300c7fbdcc698d104919905925
+:005cd0a0227e5e3d9b990be8e8e105b6be6789
+:005ce0778d8b283f6342dd7c5320d07e179c66
+:005cf0d5513fa9474e49ebf5837d427e3147c7
+:005d00a22feb9dec518c9d85280668a13fc679
+:005d10817964a6c5dd1fceb03e866ca4cea5c0
+:005d20888053f92c2d3c6ab85275e628cf2afd
+:005d30c7d6413ebc9965a1b9c4516dc576297f
+:005d40c589b8b9d03f98f9d5a80cfc23eef620
+:005d50c54252a17d334fc70400765b16643e9f
+:005d60eb69bdafd739933344013f3c00a06a0a
+:005d703c547ddfb3da5aecef6f470c029ca0c0
+:005d8017eb5caeb305640010793908899540c5
+:005d903a642aca663de6f4b9853212a8925764
+:005da0cce0bcd71b49dbb8a4f58063adbb7fe1
+:005db0b3f19e1d8731672bcfbb960cdb6366bc
+:005dc05ce880088390fb1532eea7a237b6e021
+:005dd0a7de2915cf60b65b6124a60a15ad35bd
+:005de0c12229ead921799182db6ba8c6b14940
+:005df0f2b6019aee3e408b4049a248eb66c898
+:005e00a5009787fa9eed6045dc32144833b426
+:005e1051d601588af9a68731e3cc79f50503a3
+:005e20356cfe849ab1c614735c895f9dc2008a
+:005e3097a41ae63729913c6872e56da31e6191
+:005e4049e7aaf336994b7c4409d6b9d96603b8
+:005e500ff53601f1e7560e9999c4d09fc29222
+:005e60d99d728f35c0abd2d0a990c809ff2b9a
+:005e70dabfe71c45d1e3405941c6f6d2b79954
+:005e80da563f76491897665c1e00851d0f6cfd
+:005e90cf18a82652c91f7e3a2b44063561d58c
+:005ea0cac2785ac048c9fd5c2fde8a93655263
+:005eb0af0de866c6a6dd2ea5cfcd0136a55e4c
+:005ec09f734c304fce0a4b17398415c8923728
+:005ed05a9ae274c662a434e3955810e8d004bd
+:005ee0694bd052f543d188a6c6de3c0eab6994
+:005ef0a2370a22575900db2e49090f87a0f766
+:005f00abe6371f642193bc533f4e4835e06d56
+:005f10e1b5fa89db6d39bbe94dcc7a9dafe44d
+:005f20b6e0bba432f0277dc45a4b11b2fe1946
+:005f30e66c88321b63682fdaaa548f82b4df02
+:005f40b390658f4b54d81a1dd7e60c29682172
+:005f50e1eb597d7c2d30549a1592a59f4c2768
+:005f6090d2766ff6f95b11a1086d460aa65efd
+:005f7050857583e0993f5df939018e4dbb57f6
+:005f80d7ea9a6105d5a2bd5f956867bf22e407
+:005f90a16461938434905d5d5244d27715d986
+:005fa05325a7b0335fa8b9e8037725917f5bef
+:005fb0d89cf77007132e2556e4b49c2ce46a80
+:005fc022c826e018fcec121cfd1e877f3a2682
+:005fd08bfd8b7cf869160d4cc1035118ba6369
+:005fe0a742a1ade29d823c7aa6c80f5337e333
+:005ff0c00b97ae414496c566505435f613a2c8
+:00600052ae1f17fc583cc8a1fa9275f093adef
+:006010afa63aececd44ba538b045f40759f5ec
+:006020208c1e7e8f73fe3a4461725aa6f2f09e
+:006030f0339f989c011015607be28c1e7e275e
+:006040dfe242b2a92336694a336a7018ac3ac8
+:00605034f17e8e4465b05ec00739b77460d6aa
+:00606018fb9535f321049c9baffe7c82653c2c
+:006070386d58d642b582f9158c40d0cae5d776
+:006080e1827c3c6d905aead90188c2cf82f64a
+:006090f2b856e06a9f73cdb3c3da339b47f4b6
+:0060a0dab97f9beb94b211fef48e2bc5329206
+:0060b0694d4b4bb5ed6a8937fc9a1759cb3c2e
+:0060c0f428bca45b05a4c95465652372bd83ae
+:0060d07e58d49db81d09f31384645318f4b094
+:0060e0927535fef130d4d814bb261559412a90
+:0060f06080da62be77a902d4bd22a6691a034a
+:0061002ddbff2082cd0812cea6e0268d8d969d
+:006110293ce8c5184204fbc141a0edec7d4b5a
+:006120ae5dcb511a88298f20cb38688e5aab8c
+:006130be083ac39915285efe59ce29b2252647
+:006140842c6d71321f0429476da6d20c446bf8
+:006150f663fc34fc2bac8843ac00b67171ecb6
+:006160ddc7b00ce4e3be8a88699ecf9ef22b83
+:0061706878854220b2e191c5402ad666b494cc
+:006180b14689b696bf6b7560bae060035fb705
+:006190883fe697ce310011f7ecd739abcc8f88
+:0061a00c5aa00f2e494c6aa5ff90c17ca7cfa3
+:0061b01e910406543d8dd95147d61b9c4ef8ef
+:0061c0ebdbd7e67aa0ffe4fc1ac81e67c4a30b
+:0061d035649c933a100c69167d5085643bd479
+:0061e0fb7817344d5790ee5bf94e4b1b1927df
+:0061f0457eacc3faf1cd2216da60d9fc9f675e
+:0062006fcbd2571124da83765622f187dbc6ea
+:006210344784ba08ee6335a17a213b358f0d51
+:0062206b09c518e721a70e0a737f6055443cc7
+:00623036b906e5719351f62178b03687e6c38f
+:006240ea073702c06a11dcc5faa921b4997a7b
+:006250108bcac52954009626e3409dcb2fcb8e
+:00626063bd7f98a811e5f381c836f0bc42c349
+:006270787cdebde2bd149143982efa40bcb476
+:0062801949f10d2dc4ffeedfe941ebabb6fe7d
+:006290f616f113bd9b5a8939ef364dda55b8d2
+:0062a016356b989443bd173b8b530fbc408272
+:0062b07169f03ec298df0f8990f997024bcc18
+:0062c031dcec860ea71281a13c8af8813825c2
+:0062d070ac9dfb3897dc2498809756f5bb63d2
+:0062e09689388a68cc3b52d0acb5bf1cb7ad90
+:0062f07301c26ce784c1f7f7f0ff45703a785d
+:006300a8177af48268eaa17066614180f47ace
+:0063105f32aeb033016418493b4c1c17d51832
+:0063206573c22e6b1f41d7bb3d71a09152e2a2
+:006330bf6cc15e14374ab7853e7ec4644ea83a
+:006340f56830337242cd4599a684ab59ec46aa
+:0063502e697c65fa5db20ba32d14a511493f70
+:006360ad31a613b9d23ec8c2b514ba72a9d7a6
+:00637074b9da28d46769a9a2e079cd0caf531e
+:0063801f5c83dee9429acdce4966781d3732d3
+:0063903365ad66025240a957f9fd1215c7b55e
+:0063a02201b215753ff6e8cb48802c08540227
+:0063b02635e16f69c6e09187f02072ca9dc2e1
+:0063c0c0e9587f69ef000cf260e78057f5afe2
+:0063d04b26be0e35f58389411bf51f1182a408
+:0063e09906300e8a14048f004979c24e56528a
+:0063f0ab38bcb78ea39cfa65dd85f1208032e6
+:006400dbbdeb54a32bfbbb6a8f6d2581c75cba
+:0064102f5dfda210a4bd3ec2b43cc108a90e44
+:0064200cc4967edc4f3d2040d31c9c41b6ec0d
+:0064302f4fb6d7df227b5d298dc70c8c9832cb
+:00644052565d47a5f3f0d2f9d43d126e48a281
+:006450eb37938c7983937510bedf48e36603de
+:0064601ec6473fbb575e2e54544d08b69a2d5c
+:0064703bc244c888b596cc769c96942db05b47
+:006480ad5a819bc402f29003bd593bca5c55ca
+:00649031e2a5b32956ff1196ea9e12d9dd96b4
+:0064a09a96a6a4358d39dab697aa4c4f0b399f
+:0064b0ab34a7825199004f960228cd42dbb501
+:0064c0eda3348830032b9f414c637dc75c6538
+:0064d0f3b708620324220cf4fffa961c5feeec
+:0064e0fcbb2b3104e1f033ba2dd9cabccc0e53
+:0064f0288eff26d8e1e878cdd2b99470478ad5
+:006500a118b88698fd55e039a4421c60493268
+:006510b390c9d5dee3c53c34714fde3ae665f9
+:006520f78a674e160835da2bc1d362dfec65ea
+:0065300b053dd2775dd352be7573cd3ee85fc4
+:006540f94f141058f6dd05dfbb24154faa45f8
+:00655024b49deb7552939b3e864978249b641e
+:0065606f9cd26cf0406b6b2ba8b74a8804a6df
+:006570ca3f99535831d0035006dbcd0f86314f
+:0065807425636518b21becff2cf82be847001d
+:006590f4b332e8069395989f8a7af9aca5ba94
+:0065a070263d6e31a50ef1e3464d83232dc7f7
+:0065b0a983c7dc00325e8d5eb7cf30a75afa64
+:0065c011b111a3b800873e887049464eff3950
+:0065d02f753d5270bd7a12c76a6c3c26596ab4
+:0065e0d3586aead1b892b79898ea2df1ec1869
+:0065f045aed50d28de8d5ef52437b085698ea3
+:006600ae16f55a5544f2c11368d356d078e236
+:00661086916cca00d94d905dfd2b9e4751a3a3
+:006620d86093021967347f5d35d8838e5e59ad
+:006630e15da67889c5aa3d21dc201c488f7a0b
+:0066405187a1f0cb08393b149609368e04aa11
+:006650774434b166133dc8fc7d18dc8aed87bb
+:006660b344567748a8837a3cf174dc5f16fcc7
+:006670fd3584427531569903170326288eafa9
+:0066809b622f254cd8acd1807b06e4c6e9f368
+:0066903649312ad638d1024dcfdefac7f80906
+:0066a0749e6aa12b66dd29a38eb6d8321323db
+:0066b0a0f64bb97fbd4a87413aaaaaeccd19f5
+:0066c001336daaf0cfef48b4cf70c7e583ad28
+:0066d0385a81455f85c1cabe8ea282d71ae42a
+:0066e0ac417bce8a69f856803428399ac9dd00
+:0066f025970af402f50c6997d22ea11971f5c7
+:006700079037763d0c42059a123ad3e7be5af9
+:006710d02aa129982b67bbc3d1a384bb14f24a
+:0067208f925bc03216d27b283b084560dc5bfd
+:00673051a02c007e14aacf7646b0661fdd07d8
+:00674058ca23b8c507371055d84e706edce211
+:0067500071336ec0e99c92abbaa8da1b45784c
+:006760eea451abdb7ab0950c8fad9d4bc9cb2a
+:0067705cee967697e265936110815238a082b9
+:006780fbe299547e67216e0450357521afdcdd
+:006790615983998727aa9ffed517b2294e623a
+:0067a0a36065cceef367edc683328cba23c1c5
+:0067b0c818706f82d45a83abaed4d7a0344f23
+:0067c07c6d59782d3ae7259cd21e95f705e661
+:0067d019153468dc0aad880006b2490b981d48
+:0067e0e95d4d9c5b5b0b5db050cea6e4492960
+:0067f0f8aa862dec52932954958dfe06f0859f
+:0068005e45988bee9526de400ad85b1e143876
+:006810b5439d90db6be4f141e3c381e55d8a57
+:006820a2d475178add5175c217aec639259816
+:0068309772c49a2ebf086b86371b78493fc18a
+:006840887ffd77f5c06fc3d580993325de90b9
+:006850d6a52c6c32e141af12986d18a5088e2f
+:006860dcc55931c9a2e05bdf3b8604fa1c0cec
+:006870132f53c707cfbf0a7da45a243bf32b2a
+:006880db56e7a59b210fca666f28305ff86eb7
+:0068905c90b2f5900c645eb5a200e378c91749
+:0068a0331a7c139d76053f8f65d1b5db6fde65
+:0068b00669a5646e954ef4b0410600521e7610
+:0068c0c326433e989131446321600af9f40914
+:0068d00d347d3b72e18b8f685f730595bbe955
+:0068e0a61f88490749060b0607c528456169ef
+:0068f0475dd0e68f55e3dbe66a44b4a1249f5e
+:006900363b49ca22a37ac1938c65c83ea29760
+:00691058393b309f41f66cb1dbf6d313cefc7b
+:0069201516671e95f6fca72c6679fd82661084
+:0069306394f6c4b3b696240fe8a5163dae6fe5
+:0069402c91b3d716d93df756593f3ee63f3729
+:0069500a2c8821acb6842856696f6156095e63
+:0069608337223dc153a497b65d32e8a681edc5
+:0069708b0767c0bff7a54cb7424e0e55839efc
+:006980681130f597baa3a67c1768ce5304bf06
+:006990a208f0df1623c2b3c16710c1ab6e901e
+:0069a00a99a45054557896cbf3c8d7f0ce593e
+:0069b0e38dbaeba06d8de7ba41a4ffc1466a06
+:0069c05e13385463308f853d4e12264e41f48f
+:0069d0f0559cf44c5f680a8cc39f036e0e99c8
+:0069e082f3c8e10c0be4ce7f7eb4248ce095e2
+:0069f0f96fbf5787d158cc3a8f8f45ebcd9b4d
+:006a000c0f191ccc0713cf13cc91fb2a09fdc7
+:006a102af53f64dddb067c0b2bbd3aa95b6fdf
+:006a207c2bab4bf0652ec9e8eb164d0b11c6f0
+:006a308d8c320cd4f0fdaa0b0f4ee1ffdb0d76
+:006a40eedc8ede6347a2752ce51c61556bd62c
+:006a506f764a88a2cea66bb2dff5c5570d6a41
+:006a6045799353c3bd05a3aaa8b7f8d06f193b
+:006a70667a84ade90925383f76fcc7aa00c540
+:006a80135c9ee62a77a06d9467c43ac252bd8f
+:006a90e1fcf7f703b698f67d542b49a631f8bb
+:006aa09e1a9f5fa9930a205c09e0afa33ef2b6
+:006ab048857dc8b4da2dd459b78f5fe7f29e88
+:006ac0c4e0a2b9d8dbd38c2c0893cffca6671c
+:006ad08017907683822f2c54bb98f30a6d3404
+:006ae06d3bae3b4b53c2a94d74985dd93d60cb
+:006af0dbd9e1e879d49ebb38b483723cef7426
+:006b0079e35f261eb3a50d82645a1675b802ba
+:006b105ba95431212ab3c35600ff85ca8de2ac
+:006b201526cb7610d5513e89755f608ebd530b
+:006b30af6acfa0a156d7229e9e274706439ced
+:006b40bd84232ee8d882769058d22524ff6aac
+:006b50092c53e78f4cda9de20f28d4ffb2c53c
+:006b6088396ba691efb85eb73acec7b4e466ef
+:006b7034bde4215793fdec41562214c4f6c88b
+:006b80b76901230d0297c88eeef1c79f077f93
+:006b90f22f56ab28be12e8afb2ecaf8516f93d
+:006ba0402ffea8dcb039bef3334985b5d60404
+:006bb0689bf80ff6f946c6c54c66b4ffc881ea
+:006bc028bf99dcb3a335221f610316faa1e124
+:006bd01aeaa67724172b993940ca3e24116ed8
+:006be009bd9fb9eb735c447402dbc900985512
+:006bf0dddf7033b3532b57872b29320bf10be4
+:006c0098423f579bc919e078c799e1b99feefa
+:006c106e861715410780e362428584c98c2411
+:006c20624f21f6e6820878dbe8a418cbbb7f22
+:006c306380480c64b688fbdc6054a1f85171f2
+:006c40ec88fe350dce2a753cc06f646f064504
+:006c50cbc2b921a5165d7cb719412f3deabe8c
+:006c600d1d0f51d6dedc527624691d5ce9315b
+:006c70c4b8d5dcb8f5641fa3a01c05d98a108d
+:006c80243943b91dd2265864b1637e25c8dea5
+:006c90c9b19cdb77b60bac9b18b6d7f0102d57
+:006ca0c7b8cecc69fd820885782445710a871e
+:006cb0af556ea251bb11e2cff0aa085bfc04a6
+:006cc0327454537b12983881c84dedaa0225e8
+:006cd0794e227890bece7e3380038d263d6d7d
+:006ce0e02d8de94f255956f3b529460098f8cf
+:006cf0e46843a36e1b33de4d8466068d64a432
+:006d00a419e9171e671f74978e88b4fa0deefe
+:006d10c72c68871348893f265cbcc9075ffa5e
+:006d2037ba09d90aa729c188ee700fc1bf8327
+:006d3048ee1a66c6855abb273bd8dc56cae513
+:006d4035ee8af13bceaffddbb7295c64bfb7ac
+:006d5089912cc80a033a2baebca77edf2457b1
+:006d60632579cf65d7cf0922a2606553060bef
+:006d7035c10f769ff12ed082a65f716ad44191
+:006d805585c17b206bf4643d8bba7ebdec18d1
+:006d90c8ce7c3a685c96004cb4b6ebe313e410
+:006da08ef53a0b164f65b2eb52af08d88e9f1c
+:006db01a05977af06091903c7130480533187f
+:006dc0aae703b342fb5b0dc1299639acb9fd52
+:006dd095f6ea68e8915c8f05305ab6d3d4931b
+:006de046771dd9ffd48695c38682c08b3234e2
+:006df02e89031cf382e96c11f4d27b2c833ff6
+:006e007c6b6edb9e6dce72371cc0a89485e717
+:006e1027b1a86ec5a01ddef0830218006ca469
+:006e20cf74f3af27347debf66c6583ff435440
+:006e30c2143aa5defff53e140ae612ffc769c7
+:006e40087e1a689bb9aba3f55e33000f8d1675
+:006e50277a0271b5e02a2cac91fea3ad2c5a91
+:006e60aa82c8ef7e1c259d330b84954efd5588
+:006e70e3e25bdcbaaf09764afd43f690c6ce08
+:006e80f0a3a886cf4f78a3accf8e7d8c563492
+:006e90e2a7d3f517f2c4ce3c4a2080b0b61285
+:006ea02de4b53256098e39e3796d4155b5b197
+:006eb0541d5bd8ed207e1be04da11f0e460d89
+:006ec0728578b5b254fdce51b998c8c20ad2ff
+:006ed000d1d80afd007ebaad915d3480334274
+:006ee0406927b91f6a695bcdb6d3beffdf9e1e
+:006ef0acc1095210ece79226bc84f332c34346
+:006f009c992b3fb332eb3345011796db080e4f
+:006f108844589aded60eb107408f24505b8a42
+:006f20c71c45d334999b3adb5f9a7e609ff8f2
+:006f30b0f94177876f9f862243de53d023fd1b
+:006f40c13b18f34721b731d5b912300f504b80
+:006f507812ae040d3f6377c40067383c99c522
+:006f605d387d1ca53606d46679e035a1486999
+:006f70a20f389d9eb953a049160560dbfe60de
+:006f805d9c8776621ec71cb1748eeb5cd6cfb0
+:006f909ef327f206058f0206b82588c7a24c24
+:006fa03f1017c5ab3160fa29c322eadfacd105
+:006fb0ca0c9529eade6ed7cd8e8c96ad25939e
+:006fc013b9a5999f54c59121dd63688139c6a6
+:006fd042a28c59ab9cc3307787303e5b8d27b7
+:006fe0eb9fd50b911fced981cfb467dc454ea1
+:006ff050eb83123bd264be8a72e67fe5af260a
+:007000cb9250d345ce23a87c1f84aa24776b1a
+:007010deadd020dddefe4811b7cd98ec59e333
+:007020d3dba7129cac7624d0cb38c0f4f70ad7
+:007030b851b8357349b06f810f2892fe9bbe68
+:0070407cf41edd38af8f39025e1d937170633c
+:00705022460a69d2f24bd4ac89cc311f96e9a3
+:00706020b3b6b7901c33541cd3e0dc7b141dd1
+:007070e8aac9500e6901b8b3374ad9f8415beb
+:007080126790a2aa7ecf46f65f303ccbe4eccf
+:0070900b0b3a65c0a278403059200ac76c2d67
+:0070a07d45902167bec362fe2a686ea4a380b5
+:0070b041004bf2e6e06218604871442210f012
+:0070c097ddc2ce2118e13ff370e60633ed201f
+:0070d014e1b8c9f481424a0ccff41243ac982d
+:0070e0d43a42108bea11607c00dc40ffb70c8d
+:0070f0d524538011989b22d5294276bb708ad4
+:0071006fb5bc53cb8b77b6bcb8c277e536351c
+:0071106fe91155b711a83a664437a42878149d
+:007120f94d365eeb2478ada67e274721592a95
+:0071304f8c73434b12725e1d4d3548ba7caceb
+:00714031096844baeecb09655c20432dc376d0
+:0071501735218f5ac20227ea306fd2c3f4ddfc
+:0071604f8f68b6a894063973b1a568dbf60cbd
+:0071707585e4b24169d996058186c1374442b0
+:0071804b1b346fd53f7b50727e883bbc1d1863
+:0071905095143488b46e66177063075e954f41
+:0071a04c0706304bbe3f64f0305b409b5db397
+:0071b0a201a03b2d54b243e919d79af0c42a04
+:0071c078a677534b90d486ca85b1bc8413818b
+:0071d0047040946e477826a8a35380bdf633ec
+:0071e0fd09b9608ba97d2d22c005b454d516c3
+:0071f03e66ccca1c683864599052188a68efc1
+:007200d1cb78d8ff1da757519608a11d71b1c7
+:0072104ff41a2ee7e1ca15ba967e1018ddc3d0
+:007220be58d6a50f45f9e6f46f5e2ec20227e5
+:0072309ccf91902a18fb7b99d73443606efd69
+:0072408a49b62e8739188cb7b7a378f68b3dc2
+:00725060e2a0ec084479b59f67d3580c48bab3
+:007260399b118b1e27d0f6929dd069eb2e214f
+:007270551d7afa20fd9a57963dc1d6b866b923
+:00728039274453c267d2f2cb335daf1c9a18be
+:00729052bf4a081c3621c28003909e0507610e
+:0072a0922fb48a246ef71322e5bda9e2ff65ab
+:0072b0e96b9ea421d59a909cb4bd39bedcb9a4
+:0072c02be5878830e4bc5048a02bdcefe397c1
+:0072d0710e927f414ed31a30d6dba2ac7406ca
+:0072e0eaccf03b35dd94c74c356198fddea41b
+:0072f0cb0700151c987249ae6428c7f3cfd0e0
+:0073004baeed451989f2cb46c8445741abd354
+:0073105afed21991d4ef80fe90b1e54c90cab3
+:007320bd4a1512a58c13aa4a7eafb14570343d
+:0073307c00cc02ca785d28fa673502e914cc43
+:007340bb21e4274b4f60d857019999197ff537
+:007350abc0af4c7d51f37b999cf520f2d2fe7b
+:007360442a4d7830964e9dd5c8418cedfac32e
+:007370fdf927e409b6f67e17bbbab4c8294feb
+:007380fa4d331cccad84df5adf7289fd4aa0d6
+:007390d4e4bad56bf690234f5dbabb996ff2ee
+:0073a024107147f479738145d71e3209e3add5
+:0073b0842b572466e52609e919b25d836ae382
+:0073c070051fd19ca806256a7795f40706d591
+:0073d0c3268f933dda17dabcf0fadca8d0e5ff
+:0073e0b83b0454b88a77fd1aa6ea7af85b99d3
+:0073f0657423239dc5e39e0f3c528a32631f8a
+:00740021aa73eb58198ffd56ef5b226a165d98
+:00741045ba36f03cac89c4c1756f5b15400b2e
+:0074202f32748af89a31900bf7b82a5d25b84d
+:007430baee5f392632f967ca1bef7d95f9804c
+:007440c828d7b3613d76e12b1b017d9c96a2ac
+:0074508aa6602f461e666eef213318512c9778
+:0074601b66efca46897dd2950da9dccd5d3993
+:007470c0e84991b0291729e0778277e714aece
+:007480da1850841fac5d62dc048d3e7e40bf5c
+:0074900a00e09ff8751036757f5c1632bf6b2d
+:0074a01d35c0d717fb4e94223dd27bc1050245
+:0074b09356387d1f2719de04cb69d4dfd5df76
+:0074c05f09d3c449a313f3bb4373937d877297
+:0074d029ca29ee041b06ca621dfbf0a40800fb
+:0074e0ee37f0b3adee8e97a53d524a0e42dbf7
+:0074f0fef6846c101ac358882f75dc7d0408d6
+:00750074aa0411cb533552c11a5a06b7d48a25
+:007510685030bc300d3dfc1185a7cac67f8cf1
+:007520454be6b13bf02420df3cd47279bdea63
+:0075307030a412648bf5032ff4e4219974f52f
+:0075402c1f666e2cfb94ee98ca4f4390c8fc61
+:00755006203bc80137952879990d25f545c485
+:0075602a08d99474b050a38e0e7212b2b122ce
+:0075707afd38b29fa2225e3b8ed61bc6950a29
+:007580f232277c50692c2d2dd7679d1ab46c8b
+:007590165fbf647f808af3da6d3fc3eae1e002
+:0075a0a2f4eb4834e4cd74e431c30d84fffdb0
+:0075b08543a1e81c3fbbfadfba788842b968c9
+:0075c0ff055487cea4fd9c63ddca3c7df28d09
+:0075d000fa5a45a7982391dadb9ea3ae324b86
+:0075e0380774659ca9d7958eaddeac156f9a33
+:0075f05a113a3e58b6b6b5097a23ccc27ad0f6
+:0076006e2df1bd08ed85bf579cacee181bba65
+:00761076c88244eb81bf662979a375e4b1bbef
+:00762054ecf2b8c916af514926fcab064e0e47
+:007630802ac50767a3493f0ca8ee3e1ae4701b
+:00764042d02d5395be9ef9c2da0afc95f7bf8d
+:007650a5ac629bada36181cbf1bc33b046cbbc
+:007660980e79f84d3005f3e018badaf28cf705
+:00767015e68b733e6fa8f3c4f97bac13ffcf3c
+:007680970ad7b32876192c69d404e052ba583c
+:007690ffac9ab35ca9952cf282bda9c8832570
+:0076a0291aa22e5317c0e3138c379574afb322
+:0076b03af9c6acfc73423d5e8d4e84d8609b24
+:0076c0b1e0e07c060abb54b1080ee271eff9b1
+:0076d04341a43f5ffcb3248f0d907d736da556
+:0076e0b881956f512c4b09716254767862806d
+:0076f003003982419f93f4c72f077df6838c6d
+:007700b1097df9ddbc1e93e3295690db649d56
+:007710ecb73a19c8e67591b63b1d2ecc23e438
+:0077205736c176c86ea82a7402cc66eb46111a
+:007730cd5b379f7cc8d1853963f81a08314fe0
+:007740ecc6833e6bfbabf800adb56c040f7211
+:007750730cc5861f4cd2deca2173dcdc6fcf1c
+:00776014f26164268a72094f48b10d1267f596
+:007770a1ce39aee6a7efa8fb40de2811a1ea27
+:00778021e3e8f46170f46d2e50b83aee22d177
+:007790ccf938e0ffcd4a19fcd6d52515038367
+:0077a02ba9d25223a6f36d4b752c1d857c79fe
+:0077b0f773183f7937ef94f42047c2a50e7e92
+:0077c0d8b79b66025dca3c631b738f7ce9a8ca
+:0077d09eeb9ee946eec43de285017d5f89230c
+:0077e09e557a54b4139cafb1626f875c1c6b68
+:0077f00acc5d2a42a0ffa08f8017119131234d
+:007800041c6cbc0e7b56688ef22871a35bec81
+:00781072bfbd302e5b4860edfd10ee0d589730
+:0078208f405d5379660091a28c83b56d8e074d
+:007830f81e027afcfe20ec4e9d2340c644074e
+:0078400aaa555e577795efe77f216465cd2211
+:0078504ab4515477c7aafdfbc4a17d29ce2ecc
+:0078608615cdc272a290eb35da29ac23240cdb
+:0078707967fc9a6a7cd95e58322f41846e6abc
+:007880304917a7d38002fbbef4721f5418ad2e
+:007890c7fd0e90b3b0e6d1a69717d22144f30f
+:0078a0820f0caaed7d71e6d567fd349601e8d0
+:0078b035ee8d8d17de5dad76c293f9ae0f6b03
+:0078c0e7bf4b3f00931439cc94a135db22001e
+:0078d003dc6263c50b41cf8c15c6c402e15020
+:0078e0e71b94c7e3b92857eeef6dfab7cf01db
+:0078f09cd82f8817e5b20acd5f89d86139c623
+:007900c5d5c008f21f9f8f91e5000cbb370175
+:0079102be84cdf90c067fcf7aecd9fc4f998af
+:0079203a48ddd9c1bf7eb1fac26245ca0a7c67
+:00793023a6ad141df11edd07a64dc044dcaeed
+:007940a5228cb4ff596d20bde849dc54dc3edd
+:007950749a4f2e4b68e870b80bfed263e2823c
+:007960f6f11213961266fc415585f256f25071
+:007970037d16490cdc9ae143a517ed4902be79
+:0079805c8616200cfb8fb371b3cb03187e3b87
+:007990efcba904a2f7196a578a904ebce5b410
+:0079a0851cb95fcba5a7a5cd86411169a50ab9
+:0079b006c59732e89212debc0fe90243efed86
+:0079c01b73b5d08326fd74d0c98fda80034a34
+:0079d0604c6b02ef8dac6c6cc74a56d408d6d3
+:0079e014c8b75cc025ef7279e608078cb40b59
+:0079f055e846577d01860b78f4dd632aefd8c0
+:007a00724e3252e208511912497cc960beacbd
+:007a10b9002fe50198420abc4ef19566e2a4cf
+:007a2017299cf7c746061f23c5555c71335a66
+:007a30af6c95728fbe47e036ebfe300db87d92
+:007a40a18d747edea63e4b716673f39ec6db1f
+:007a50072c5ba3db31a3048bfdea36b0865fac
+:007a609014c58fb337ac14319f06f75f6df7cf
+:007a70ca590d1d508e71667be2a9b26bc9a080
+:007a8031d47aa73c41a9b3bd689aee79011069
+:007a9082949d9bfba907329236b51cddc225a4
+:007aa049ac27739805a9b7604a3f4d471e5a3a
+:007ab0ce4e164c415900fe5f26295c104569f3
+:007ac0511e5c0a2d921172a56608541ef99e68
+:007ad064796598bf00b8994d0b5597ed7cba7d
+:007ae0f055603d62b964259e98304d98784820
+:007af0fea3457a8debc3f6deaecbb59f1f18d4
+:007b00e4c38ff4e7fa8ad4f08cf1d02e75b473
+:007b101fbf4ec56c7ab460f1fe5f5270d04398
+:007b20608cdd22df756c2558f12876acd934d0
+:007b306c54b21d2842c0cdb1379421e2b2829b
+:007b40ecfc26031ce49f33f1e472c555d939d8
+:007b500b98d3bdac6a3aa46cfc1e3ade393700
+:007b6012ca458c165fe88fdb88cd5c39e52b8e
+:007b70d7e0592f33c18d36c8110392144656d4
+:007b8036bb30f0628310824981cda3e7a8a6bb
+:007b909bf9782c2dfe50a2f60d0baaabd204ad
+:007ba09be38d5e145102f68673c3b7020acb56
+:007bb0cd45f38ce5a406f3b0424d09014d12d9
+:007bc0834cad6ee3314b9e921ce26d5b86bdc6
+:007bd0c68a136a396d1e59fe606090646bc717
+:007be0216fdf90ed6d0c00ab4d76dec4c62168
+:007bf09acf6209c4d6621036aecfb7f3d4af2c
+:007c0047f853f52fb6805e6a4dcb148f369528
+:007c1046a81965b2f99a4f92ec0933173c445f
+:007c20150fc41350939c6b831d9be9c7c33a3c
+:007c309cb8ab8159cfcbc6a6310edd9acab9b3
+:007c40c65b706d94f5c14cd6becfc166ea3ae1
+:007c5040c6ee2b12d2ffd7fe05a1367461bd2e
+:007c60e41ce8f0572fb316d6adf58520d6c316
+:007c70caccb7a2bc888e34933d5261d1863d40
+:007c80a79c71f697b9bc5df0dca2f0cc96f717
+:007c90af0ef254c11af9ebc535f1d55136f0e7
+:007ca0d3f82242bc28284ce13bb5895038a3ef
+:007cb0595f9fe2b6e7df5d316608e672ca6c47
+:007cc00d0d39fd1690f7298ce456b49d3f1f44
+:007cd026d8911573eff041659cdaa4beab1116
+:007ce0b531efaea832b682a31c2cff63931d69
+:007cf0c01051bfb4d18ef9b501967d57533573
+:007d00dd4960321172824a3f5e195886b280f1
+:007d1007bebc226cbffc4c25d82d6f4ae0b373
+:007d20ec0d2e1afdf5d8db96c250d720250178
+:007d30b8ed3c6d7311f204c530176e0f04dc46
+:007d40e49877b3036ca532e1a46e89a8369552
+:007d5022cf5f083832591f6ac5907afe47500d
+:007d60d5c69f647a8897c7143dc0992598af3f
+:007d70eaf45c921b3d1d2c18643c8e745a1333
+:007d80fb769cadb27885d4b3078434b96ca3ab
+:007d90861d8be5ba997490f77b2872b8d704f6
+:007da070a2c7a1057c3fe6e64ae0653459899d
+:007db0fc60d3c9d42ae081e238e4dda3a1ca71
+:007dc002741a80fc5e6c7c650b17557544c499
+:007dd06ecbfb74aaa85964b7839b6f82286bab
+:007de0a7d410118075e618e1e00e7a2d0e4e59
+:007df0a053abd0a20a3b90795857149d26fc5e
+:007e00cfeffe2bc5320d357403b03ff9be3212
+:007e103ffcbc8312969773250f78d82d4758d9
+:007e20a9b7f5e82594e9255ad8440add582d46
+:007e306ae4be288c4fd0f7fbe25bc27ed2b453
+:007e40a7d4fce21473a2b1339afb7478f979c0
+:007e500121cafad8502d32d94365128249a0ed
+:007e606cebf19f0ba8db04d2860859e7d87832
+:007e706ec9d549720dd987043c2214573c278c
+:007e80d381af5a336c3102aa41e2ed38a3ca39
+:007e90d5edf01e0dc8032d7f7338b2ed10d7e6
+:007ea067257f6b38a5a1d749e9c7a92769dbf1
+:007eb09d76279b5d966c225d054013cfc22c84
+:007ec0c6a4d4ee606ff86d7beda254618c8f05
+:007ed086c4d17a3fc4dea316e94f141cb767e5
+:007ee01be9b58ed5b17d21cf9bb2a9a7390df5
+:007ef0455d5255a237f5ed2e30f765130cddab
+:007f00e03970795cecbee54b408696b60fe2de
+:007f10ca79ff1cecb8d4e56a78fd6accf54887
+:007f20de884ea947785426c9878e13b8dbfb32
+:007f306c886ee08a874df7b5f985aac752f848
+:007f40a5f8cd3f293b8cc71c90acbccbf1bdee
+:007f503a315c5105b8bfd86d9cd8cd19a9ff66
+:007f6008d5d6b09e757fd864866eb3303fb5b1
+:007f70e163fb416cbd08502d6d71b34f91eab0
+:007f804ca93c7ac588804a4690586df5e98730
+:007f90b5aaae8a300acd3be3519e41573b421a
+:007fa0fec2d49809ee32a41eec460cc2170fc9
+:007fb06f7db5bfb274099981b3d488bd39921b
+:007fc01f0b28348b7dab3152cf6402989e6b70
+:007fd047542ccfcac62e13e692ac33110ce8c5
+:007fe05a17489537348ff543af3f462964e948
+:007ff07a28293adc286a39a85f78a83823b316
+:0080003adbe07809e5d690d193d4c33a6a3007
+:008010acf1d162af76b4a6d59144296ee8266e
+:008020572c58c6df11845bee39dec2d467b7aa
+:008030fe8585c5cb0313051618c9e55da4f071
+:008040fbd3e49c8298b5b0aca2015a95015019
+:008050c2d666dc6651b3de14389b7f51e6ac12
+:0080607a8bdc2238d01319b2ac5f61dfe3f0e6
+:0080701bd118edb3e4a8b503d04dfbb34963d6
+:008080ad8c4e3d2c81e4b2c253369494c6521e
+:008090e8cf5fd1f6690da247ff7e2905447201
+:0080a016475e4136238bb295aaf627ab4b784c
+:0080b0a03fdb20b00016ee798806e2828e3cf6
+:0080c07141d611dd8b80d377e4b90d98a76a91
+:0080d06eba0c32d753f03d9a011258471865c4
+:0080e0fe153d899a9000d2bd44e03ad48af836
+:0080f0e9dd4a2c9eb73681fd2f038b316cd762
+:008100d89759d81c9a7dad5ed660b3f20ec5e1
+:0081101608d11ffe616ec0265ed3273c5807cb
+:0081200b74776f2c770787dba78a02600b565b
+:0081302c9ea0e6a158261f502b515a3d2bc3be
+:0081400b3491752d7573d86e11addd0b20c97b
+:0081509921e431e5a270f14bbfd3d21945088e
+:008160d8751a1dc1ef14d636d1b45984a48327
+:008170fa6b0e08d018d2e534a3ed767dd2da07
+:00818048a692376d73af9d090ff8b0d8643a53
+:0081906fefeb5311e3baaf9243d315e360a6b4
+:0081a02ea388233a56b5da6cd4fe9cd3b667c6
+:0081b0c1ec5028bc6f7c9244f06cafa0bbda08
+:0081c06a1e9fcf99c76eeb8f2b405f63c7fb28
+:0081d088e4f7614df1cd84b7ff8055fa6b6fe8
+:0081e0e5c39ce0326ca8226d34a8f493abba12
+:0081f014c57436b9851ae2dd6b53f439fcca6f
+:00820064b070d04c99d48ee5624c8aea80eeaa
+:0082103ce9a5570a3a096fb048e05214ca0026
+:00822052a1058862ffad4a713f3c6e087c6e48
+:008230462628a9793471a16526766a26ed3b60
+:008240d3f427d709e8a88b0d0dce577bb2038a
+:008250967933b56f82ca8c1207c55ecdef8d69
+:0082606b1ef571b0e6a457aaf6c642a0931938
+:0082700867c1cf76e3186d0e7f7bde4f04623c
+:008280e932de3520c7bcd04b606d2f9c1b1a9b
+:008290170201b3c8ecffb29e7fd7c4caac57a9
+:0082a0475c3d7df9e4ec62d7c25114ffc9bf9b
+:0082b0f6d72e6a4433fc01765e5caafdb14aa1
+:0082c0f0d38c0e66b59d4c1178d4a50fca6ad0
+:0082d07a3940013014511d95d8d39dc84e366b
+:0082e03072554a3e04b5eaf52486dc39f374dc
+:0082f0f968384ffc1c86ddaeff8ab850b2e611
+:008300c7c467ebc9e467043baed238c583ac08
+:0083101f1e0a870bc4717ba47551bfd94700e4
+:008320037027f99786257eb7a1f00d68c39ab6
+:00833065be2b2a4029cf33a67b3ac4f549f94b
+:008340cdc26040aef79a9c4b9d622cf10e292e
+:00835048156159b5621cb52e3cd7698c1924c8
+:00836047a628fe4a44150d4a472add454aeafe
+:008370fef0eeeef1777142def6eaad908a36e4
+:0083804866c11f62924f89af69ae1de225485c
+:008390449929b34a3923587394a0276ef6052f
+:0083a0fab7ef274fc98766e65e2cb780113252
+:0083b01cdb0cdd0ac74a5d98d80032126fc1d0
+:0083c05938a105f53ff40297badf8d9de54ad8
+:0083d0c55172611b37aaa8f384a6eadabd4ae4
+:0083e06a39f6a4bd7fb897de120a0c1b1116a1
+:0083f09a25b0cd05d6c2edf5f47efc6f0e0215
+:0084005db367b575e2cda7b7062ccdc2372f18
+:0084109495afaabc7ef575e7cf6fcc265ad73b
+:00842028e6d2ef1a6e5f9015aeb24a7422ce3d
+:008430d9f58dd09532b5fcbe85275b9d067d4f
+:0084403dc9e163a477e7a3d16f8b0cee454c80
+:008450132e94db5e607a1f67b2e0996e70187c
+:00846093357c14a8fcfc64b0c984412e1656f6
+:0084700f94c5bfdfea1a90dcd669f49a7fa203
+:00848095d6cc05583b42e4b0e3c785cd19916a
+:008490147ee47a3b8756ef05286d69610dff9a
+:0084a0ea7f348b55d2bde8cb6b8f0eaf77d810
+:0084b0296d505f950bd6bf771571a84af8e1ee
+:0084c08d16c510856cef5bb220728a00c4e318
+:0084d002648005f43b7d308106d08edabfd8b5
+:0084e0dad5a8a1b8d17198367f4ce163e3aa71
+:0084f0fccc5bc385a7bb209194ab52744446bd
+:00850027fe636350d1074f010675c87e101f66
+:008510ec77203d76584f415a3ea83bc87dda8b
+:0085200433056ebcbc38102c5a0ac9fe94cb4a
+:008530204f093c6c67c070b8c761f205534963
+:0085407d34d17095ade1cc5697d83c10575b00
+:008550a46a930c79aab83e5010e2d670c743d8
+:0085606117990d0dde75f394b3a27c0eff6828
+:008570c4d7c871e1ce2b67f729320821b536db
+:00858051229f7f54d1192f8189f2426b9da042
+:00859022a9e924a8d34a5f8ec071ce94aef49b
+:0085a0f9f563fada5aefbb0c70831f6f21a115
+:0085b04d644d9eab98ce36b386e53db04a43ab
+:0085c0ce631f28af2f8118b9df96a09563f355
+:0085d03f88dcd9aabdfdc7a700617db96faf70
+:0085e0cd93623185fc2e093d21d331eaa6259c
+:0085f0ec39532b2f0efb665662d7373e788470
+:008600cafe013a3715e7021ac3d73d568c759a
+:008610c754fe36c53be8e2822d45419b331848
+:0086200cb9ebcc5bf9d004dee9f2d8f7ee0d2a
+:0086302822643ab0472d19ccc84a0416fc7a27
+:008640f70147af8e67b9cfaf19f75b552b4edc
+:0086501c85de5a0dcbf24d2722d73da3147c07
+:00866068ee64c733e8fdc7ab7c82ca8da958ad
+:0086708893642b1071f87efe0d8aa3e59f8d7c
+:0086806513f84afb0b50e08c444801018ba493
+:008690f9cb233d2ac3fb61d8951e111994b5fa
+:0086a0c542deb79a880e03f1d57eedd3698a1b
+:0086b0e992d1799a866f68e0c2b1033ec3953b
+:0086c060ec84e250bc76ff5f252023ebe29c05
+:0086d09af48fc7fa941fbf98947aad181204c3
+:0086e06cc157ee5dea5b2fca56d2919dc508b9
+:0086f091b84e30127c805c1dbb92685e614a3e
+:0087008d7b797a44cbe28b09fac180c33e8acc
+:0087106a1ca660c03122433ef1999823417a20
+:00872050de83baccd68b642918dc0ccb40946f
+:008730a35f69fcad6d827902fa2fa09399c32f
+:0087404c04c2b6ffc8b5742a97055ed2d64940
+:008750f7af16f38087cd9e5ad77139a2c3c83e
+:008760e3c2b2cac2e76c8f7870fbd6f6aade93
+:00877076dc12e2843637460420aeeb901c17a1
+:008780b3548361203327bf928bf78444fec685
+:0087904b42e0a33b95093ac5a5fea2a6a1bd9c
+:0087a0d0793bff61e102a8e5be19c9cff8ba7a
+:0087b0296e691828cf8d026db464ea0a3e8675
+:0087c056ec1cb94d5de7614882a69552c16159
+:0087d0a448c6941a51e012c8ffb4a1b0870609
+:0087e0cab8268cf8431e54fb2ec9ec78dc864e
+:0087f0a30577c4d55bf0017f5bbc1492d4b017
+:008800039b4413952db6353d673e5929e7637d
+:008810d0b40b69543fb569d8bb9d0938e75a80
+:0088202f43269716ee5166de291dbc402cf94f
+:0088305fb9a1e20449e8a56945b019ab529897
+:00884062982f63cf5985f12f058b0112b1c60e
+:0088509f7cdc088693b2e983e41af3356ca699
+:00886093ef0694a713a3e8648b954de43bf36f
+:008870b60d2d42f62c2ecbf109342854986920
+:008880fcf0a7c0e9e1351981cd0f3bd515eefe
+:008890a02f74c1d2cf13f0bb77a6d812b1f4b1
+:0088a0a9cfbfa77c5eeaf7ff70a960086f6251
+:0088b0f1f2580b15f77dee513955596d76f78c
+:0088c0e8842e6bd94a6ca9fbf2568730cb6018
+:0088d0e0cbc8d537292a69d108be1ea8c3ef60
+:0088e090b30745bde337ab6edeeb976b86ce62
+:0088f005bdafa55cc16caae53fb82543f3121f
+:0089001f378f9050e5146e3ba4d0dc55f0a1ec
+:00891045fe8378bcdb96962dd77dd97bb382da
+:008920465f9994e326922643b66a0abf01167e
+:0089307627581dd52355e6bae27b8d075a9350
+:008940ed2da2d1c105cabec9d43fce835d2614
+:00895073fac2bf6eaaac6339b486a6236a2afa
+:0089604248b5a79e89db0aa3fa09045d18d1b6
+:00897095e7c1f2087084d8db33f039f4a32fc6
+:0089803c2836c22c616c8313bcc336ddeea9f9
+:008990f66aba8e2d2c83b5011a7cb99d8b3a76
+:0089a06298afaae44aef001c0c34fbe37cf6a2
+:0089b0d594b3deff14fd1abc4b4fdf827a1313
+:0089c0a75aa10f940737607d59b5aad29a1524
+:0089d0ad3bad3cf38912d5dabdf1714e752316
+:0089e05826bb9d2fcba2cb21fded554d349334
+:0089f0fa025c4eb92986a40924ecf47458512d
+:008a0035e609f9e490414c710ac28bf692a451
+:008a1028b6ec6187c1b422debe6b2dfec02eff
+:008a209c61fdbacd7a1ffdf32983de61cbb671
+:008a30ff84354128c6be4f77f3a9e1fcace6d9
+:008a40ed710324109b4ef7cf2dc919b2b4e816
+:008a50962a1351d9b167fb9bdb20a9cf1e917d
+:008a60c52f8c5f5bc73704b34ebed6471d2522
+:008a7078cf47ca769a127badf9618fcddd4a0f
+:008a805864da43b9edc57be6d81e1bf263ee19
+:008a9013daf3d961d567bb6e4c6b69f6cfad91
+:008aa0fc1eb5c83b7998ac94dfa1fcb47eb8d4
+:008ab0adc77600cac2ae9dd5fe8297ded71cbd
+:008ac04c2d783d34349e4f154152cd021cd5e2
+:008ad028db5095da1bc551d83766b33904d33f
+:008ae08a24c5291928e7a6f3d2f7caad517744
+:008af08ab5d00e3bc135471773bdf5f3b8c83d
+:008b00b89715064dc4e55e4ffaf971f951ea2a
+:008b10e9cec824e434ccc84ed4eb3489163ce6
+:008b2053e87445c42b2fa4883736f6ec7df812
+:008b3093d0e4ecb2e303ede8c3244339a66727
+:008b409b5f536e26bda61f3cd9ca5e84daef90
+:008b50617c8976212c202b2791d3180cb11a44
+:008b60540fb1a1a21c701487cd2c2fd1799f77
+:008b704f5ceaf1285fea06b36dfaf566d30ff3
+:008b80a2d2df35ecea3341cb5a8b9a77faa1af
+:008b903d4389d4fdc30f23a093168edaa6e4c5
+:008ba040db07e9e462b52e2e1ecdf8bbb8fff4
+:008bb0e46325b342c21ac3650fc09138c832d2
+:008bc0918fa1696d3176a75362cbf5e28d0188
+:008bd05d519b6d9b14d4bfefb43a8c9a12384d
+:008be027e749e122b26ba3b9b00ee8dd3d466a
+:008bf0fc2295575984efece2b42a2ec74fff49
+:008c0059ac8069490eb5d4553e8a5cfbddc9b6
+:008c10d4dd70f4c2b4c7caa98bd7e820e5a37f
+:008c20ef1726607e4ce8e69f4bfd88cc3d22f7
+:008c30d298c61815d02daa356c3440b73744ea
+:008c40778ed7ae8c6250b6b094a2a9e185a93c
+:008c503197e3734184c49ab7f04b099bd5ab83
+:008c60fa31e0df41ad1d16cf24b9e5a27da7eb
+:008c7010e20aad9a79b4a218f5218a562051a4
+:008c80654f4f3a3474f3901e5cf216cb03bf8a
+:008c904221b982a26e76aef4a4044ab48c5c81
+:008ca03aab57cb3d5732cbcfefc3aac4399bf9
+:008cb054e2c7780aa572fd11b44c8b52289490
+:008cc08e3ce79a92e4533abb625fb0d82ae888
+:008cd01013a1bc0a6ef0d9845a10b775c184b2
+:008ce04a1d66b82e94c43c2c34898ec862ee94
+:008cf090f031b2d1bef55181a593e0b73f9403
+:008d00aebbc6f00df87d0710f0b850674db704
+:008d10cc0592877e081ab6341e4a31c4124801
+:008d2031fae77845bc4d0d562d240d7d98f591
+:008d30dc8a276e8466d6d311daa909352c19e7
+:008d4067f42215879e847e46d17cd00ece0d45
+:008d50537369e5091aae0ba76a5625a2c51ca7
+:008d60973d92e1492ae38e09968c1580253c66
+:008d708fa4ec280f282dca506a41c9451dfe87
+:008d80fadefd43c1eb903ea6b946fe128d14e1
+:008d907462e95334d9fb04896e43b7688f8f37
+:008da08214c52d5430858b57595298bce20ae2
+:008db05dc8e9b7bc5799f7c3f37c5bf516aa30
+:008dc0c9019c8f3689205f7c37d31eae2c14b6
+:008dd0335921f51956e92496604639eb8f8c40
+:008de04b2389328526e5dcd08a2b7728037bf4
+:008df0e24996b8b96b731c1cb5734437f18462
+:008e00751138098e7bd5485d671abcc2433176
+:008e10f85447585044e0a88c89de49b30a2036
+:008e20882dcfc4c4507aa923a8baf35a9d8f1a
+:008e301feddc78e3ea82be93ff03e35273c854
+:008e408d82680e24a44ae7c3d4a17ec9a6fa98
+:008e509f174ae6f5281396f0c9797a1b0c4d6a
+:008e60d366c4f3e3ede72522c6fb7e59364003
+:008e706da99d83e8c39709c7a56b014033f2fe
+:008e80e85ecb99e97b4c369c9e637d1e5ab779
+:008e90c81af5a2a16454ca43125e999941f2fe
+:008ea0c220954375f10950b6608207b2416a92
+:008eb01938ad88fc730ec6d19a27ec4349e137
+:008ec04848d5ec47492f1533089641d944ebd1
+:008ed03c1ef96f60712aeb7c0946b6905133e4
+:008ee057028b182d91e186d8dfbf4779a392a3
+:008ef0ef7b6c600d293030aa025e119ef46510
+:008f00ef2391f745c3f9ecd9a8062bc1c48803
+:008f107f5b651093723d83aecdaf63d7f0cfd5
+:008f20e9fe85ba7ca88abb2e8343fa1e9d1489
+:008f3071ef0fb9dd5c66eb1b98e3350652335b
+:008f40a81c774c73f381a86507496a2c209864
+:008f50045caf215fa25c437df5d81515f5b05b
+:008f60a18c26d9951787b75bdea267ec9e7d88
+:008f70e000072cafe385b8090db66fc7e128c3
+:008f80e730aac13cb38bc396a8cf16c63d09b2
+:008f90c392e36728b264420bf2093b88e25116
+:008fa0a343fc94c0261332c198e06ad9eafb52
+:008fb081ccfe7fd4e9e9aa6e129362c9f934c7
+:008fc05a3212d611c3dec2b315f8b2b89cbdcc
+:008fd07bbf236ed86f6b50accf806ee4fbdcdd
+:008fe0ab55a817fc591db19f81dfc66646b071
+:008ff09683c7637796668218aeac7ef7809a50
+:009000b3b6bf9b60a7fa429a3bf0df51ad3c45
+:0090107a97831ef9d94463f8c4c745c4849a1f
+:00902026dd546a129117bd2804e01affbcc0ad
+:009030b310d37c9fbc3e31bbd046d55ba22421
+:009040287b74bdd6db8b212deea4a3b97760ef
+:009050599875ee74d5de7ed4b3e1f86038fba2
+:009060d4140d9b9e7b346d5c51265e8b5beb2c
+:0090707c6f9ac34028a3f3c257c6beafafe3c1
+:00908034417878a3096c1b3fa0a298b6700f1e
+:0090902cb0d2b4783aaaa464afb22c35c18839
+:0090a0c6a4b01c4ec8fd996331301fccd69c7e
+:0090b07711d192f12ffd6edd2358dee20ea425
+:0090c07de07d31d05ab55b07569af2c7442100
+:0090d0a3a1d812ed05493d48fc30fb5fdac817
+:0090e0b1a1886f4c1a4881dfdfa4b389cf248f
+:0090f010a60e13d485c8329ca3091cd84692ad
+:009100297f5c901a0ba93422ad68c1c0587ac8
+:009110e52251702d2c5c00068942cef92cda4e
+:009120238be85e824dc43cf1ad980fbcd962b9
+:009130ba6c3236f3ec1d10e6919e0c349b6a71
+:0091406d91b336234702feda4fabab85d56b0f
+:0091502266a2bf17f899c201bb0983f9c5750f
+:00916041139e51068014b74933938c849c12a8
+:00917014649368335ebfc1dd1272bd75dee3fd
+:009180990a093ec4b0c4f865ae661e5d52d6dd
+:009190ac3071cc57129c21a53e8aadfba10ced
+:0091a078ebb9efcf5d9246be34bf8472e0651d
+:0091b01336e9bfb8074602648d0a230fe49bd0
+:0091c0db593e65f17ae3ed4124b581066d6153
+:0091d00738e212d780026d7305b54ccf7f2018
+:0091e00dbec314f09ccbf4f78b739078c482a7
+:0091f0b7433af2817540fe83f73fe7826a8c13
+:00920032ca2e6c122a33e219e7bb54078aee76
+:00921005d6dafb294d39ad3eee936baad29d9f
+:009220aaee6875f18699a71d39937ddf68d8af
+:009230aefeb4c800a209420c8f77e05b1ee447
+:00924018e44881d6e5f4f3e91e1b84cad9081a
+:00925018111dc4d68f4b39f3618c76aa639c74
+:0092608fa6c90c0b3dc3fb1e098fec1f823a50
+:009270d688df08e12f37069b288d57126c6e9c
+:009280610c606b4ec131aa746e37914b458093
+:0092900958fc0e33417f1d56e77a86094151c5
+:0092a0253f26414e7d0c478c9ccd469541a178
+:0092b03873fba4dfb30bd8051cd906d4f1addd
+:0092c07a0a9d0c39d23f28fb97b3b1d959e9ec
+:0092d0f3fc363f30fcd1c09d548b774ce7932a
+:0092e0284218bdb4ba1189812abca8d1626e45
+:0092f06b458beff549a1925718fe65ee7a8194
+:00930007297f6cfed2528842b2185da3173888
+:00931050b5065a8035b5b3b89c994e147c22e8
+:0093205d011d64fb64b190a2774d756185012b
+:0093302805a1bb6e420feb47221ec092ba9d35
+:009340a70b7393853d5966a9e98c23da36cd92
+:009350e6557b7b4297dac24f12637d7cfed2c2
+:009360b4593f0055c7fc91586722e2e30b0d31
+:009370379f37bf0adaca6f961772bf252574fc
+:009380bc715d90ae0f01e504436aa076b60494
+:009390ab26430ccc75fd86a111eabe726fdc7f
+:0093a0bc9dc12fddf0d86b3005d2156278d3b0
+:0093b001d53d3ce163e067d539917d662315dd
+:0093c07e0ce134a2c83f5c7e45c3cbc84b9352
+:0093d098e77395c43546c8b4977c19e4400e56
+:0093e036f7856a2580d200c934afbe21a18893
+:0093f017fa2859e922851a4658b87c499ea612
+:0094007a7dacb4ceae1693852be7070dfc2bbd
+:009410eacc7808d1a00ade92db8d694c70ad1d
+:00942095bcce3fd29aaac6367825fb66c215b4
+:0094309da80ed50a16be88570f9b0fbc968b9b
+:0094402558161bae5cabbb6e1a4099fc1d2e53
+:009450827dc7cb965d1326e7c33e7789d93dc2
+:0094600793f665fc6abefab62058b908645abe
+:009470cb8aa05b111310791f7061525fc5baf0
+:0094808296c07b8d02ecf7e52a8a5469bf4e06
+:009490041c640a916a648742559c7c078d1965
+:0094a050384c3ff2e0480076a59845afc3b274
+:0094b016fb6f137e0275fc25d00515d79ff473
+:0094c0ec46ffa8cf136d0531ba5f085dc5acfc
+:0094d03f4c18f769121564b58c07dad9ab983f
+:0094e06e2efc6b76a24c56fc7dae232ca8e0fa
+:0094f04fb7637bd9f6a92e296096a076248537
+:009500d1481836dfc250a469c0b9bab3604d17
+:0095100105de2778ee5f820f86efe30fc61e9a
+:0095201e3c01dc43868940b265282c98480b9b
+:009530c0ec8f70bd995394c32a98ae4764c39c
+:00954085af326b79d9438d839e8d3589e5967c
+:009550008cb740d969da1aba3ab4cde7ad6c9a
+:0095601941c49614ca3d65ab7a2cd770ba081d
+:00957008610df61d39b828751415dbf3485988
+:0095801fdc9c7500757c2d85b76f57aa61dd03
+:0095900be6f688d352da21dbe01b65bebe1bcf
+:0095a07eecaf4528dd1b27ec3f0a10127cdd4a
+:0095b03003872f36669fa7ee359ff67220a40f
+:0095c0015f492035533cb8c0e910929d9f6f42
+:0095d0770def83edc765b9f7a1145f3cd7e2f6
+:0095e028b65ac38d1570929c3718e61dd1a6ce
+:0095f07ea202f87b76f9396f28cb25cfb1437f
+:009600dfe2be5da6b54d51e9680019e230a429
+:00961021927042125ea05442a27f9fae4b79eb
+:0096206755125a77f87343599c6266c235b435
+:009630b7afd57e56d93f372cf0bbf953f15992
+:009640c949f8e934c736e320a869542aa05724
+:00965053444c4c3733e4a7a8ad92e1185999f3
+:0096601b2119cc0b8da2c81ec144e55d6dd94d
+:0096706ac424350a962e6197e4039e119e693d
+:009680ae634739cf96c32ee899292cf175b984
+:0096903ac132fed229bc8d7a141269d1331729
+:0096a0da9e3c02cdcd09180ac4b2671b073081
+:0096b050887aabfdf1dee88e1106fa048bfcd9
+:0096c0f585f6c9377f167d4925275b0d0b3d8e
+:0096d04201adebb21524011a4f2ba3546777e8
+:0096e0ef2ba75dee515b39828559a4c725f515
+:0096f03968785247b5f82d5c323add80cad1ea
+:00970051239e2464588cf07ccdf0762d1d7d80
+:009710a598dc064bf7c24dec313df019562e20
+:009720fa8305b16f87ca7a961c974c618fe907
+:0097309663d344bf15c0bcf71874d1a0007767
+:00974071ca7375273537ff92db5eec745b174b
+:009750779613c599a3e0e13b2bce60f04b1596
+:0097600fb51194a75325b4ef564c7d21b451a9
+:009770b891c47fb615e8445c20e642a0c4a3c8
+:009780ff8ba042171869291cf137d5a3dc0393
+:0097906795e788378d02344ee58b682b77629f
+:0097a033bbbf191ad85e0fa67a642f567ceb02
+:0097b038717dbe641c811d65ab7df19be234d2
+:0097c02bb472e06b7718eee154198be37f89d9
+:0097d0120c8710463d42c7c79baf6c8080c976
+:0097e013631c1a1cb034f00dceb489f7835161
+:0097f08b4d298a7b7e3fee29da4a4e4daa3355
+:009800ff46956ddf3ec359303fcddb27e95a64
+:0098104715439e84d3e831f8c938093d62883a
+:009820700c9ef200ccd52bac8b73cb4716f251
+:00983056a8849635fb5fe43851f5a6cd488bcb
+:009840a3aaf6f544df4496ece89db6494d0ad5
+:009850163142a08bc66b102a184760cc074b7d
+:009860a3909e79b411b3967e9b2a4c32adf3b9
+:00987027d3fbd31a023b3b939d6370f126addb
+:00988013d838e3fda654ed2f43565eda7de403
+:0098905468e1a85ff6a620c4ce5c35652f54ec
+:0098a053410c70e558b4fd084d2037ea16a21c
+:0098b09c4420582395705494d8b1b4cf35612f
+:0098c09c4581b2d90584c1c7774c6e208e4ca1
+:0098d0d503d0ebadcddab5488a988082bb8c23
+:0098e014edbe4b7004e2e411c7865198b90157
+:0098f08a7949b7dbb8c4c958b8052a6d737541
+:009900776313930441b04a3415710d8f881fe9
+:00991062e141917f60324d5b1e8aa14016efe1
+:009920a740763fb96ba00af675292dcdac4afd
+:009930008cdd210b19c7d205f1eccdeb91de74
+:0099400388d5ed75ea58fd2a3734d845cac77d
+:0099507d20f5a2323dff4dece230e30416ff1c
+:009960f2a5ded503b1c02188cfd01b5506d4ea
+:009970ceb2665b37efbd9a5beab0f801a58eac
+:009980208bc5b4872225c6daa67a8ea049eeb6
+:009990be4056d62cc500071877232773b5b15f
+:0099a07e675b30ac0980a09b957e820c3b56a1
+:0099b0f9bcdbcee79d9629b374d09b3d4bee10
+:0099c0dbfe40a2859edf3389532be362672235
+:0099d042bf20eefd07e4267ef269b1ad344616
+:0099e03aed878bc697428998fff6d98e8bcb1d
+:0099f00ba5da4965130120b730b7a751111439
+:009a00d88b64b7b26c54e3834de8ed4e960d3d
+:009a10b1be889441017ce1cb0f37bd18c07802
+:009a20f5042de46a2e7555eab050fb3c01fbb1
+:009a30eb233319397fa0e80f3f1b38e10d8aab
+:009a40df09487dadb2580f7875fe5db3101842
+:009a50c88d77a36d1a61f1d3b7cf9cb718f8d9
+:009a60bd6714f324cf92b63fe2ea90d4990312
+:009a707346e69fed9128df179219a514281329
+:009a8097c8df4ea9495800fc66d501d7f1907a
+:009a901617a727b5f49c7cf45c4d0fa95c5424
+:009aa0e0b2f65204b85c0c5423c1ec41de48cf
+:009ab00f066e70af046233b31884e9c7486d4d
+:009ac0320376ddbf2721ea20cb955f7bbe80d6
+:009ad008ea916ab6e050076840c45f4a2c90cd
+:009ae023ff9e1b9c13fa5717da9bb717056267
+:009af02e0688f76ca46733e98037e1acf17c6a
+:009b000f8d7c2e20f8f1316766f738b37587ae
+:009b10a0b1d01970ba6435f363a8d1f83ee80a
+:009b203d65fd59dc35614949dbdfa01c557463
+:009b30e6796e8129178af9af3aa591b5bec4fa
+:009b4094b2ac1f15a3fd9255a08dfc6717bf9e
+:009b5045d6140a946fb067e66d8c8185294e81
+:009b60ace715dd52314e93988d54e7ffef4ea8
+:009b7083015495b5eaa4cf1113c695d5cace09
+:009b80b7e6a322bf2fcc38a6e8108d28bd76d6
+:009b909fd8a4c09cbc4d36e3e83923b739b3c8
+:009ba0fc1ca03fb5e13db074649f81aecd7d22
+:009bb027dda9eb5c3dcbe8165662ee527307ec
+:009bc0385c00879ba899ce2f3e356921eb75e0
+:009bd0cf9fd86b50e69ebe7e18cc695171e4e2
+:009be078ec19d976b2242b5014040e06c09fb1
+:009bf08973617cc941c871e3637996cdb9f28d
+:009c00c186a5a7e351d68ff4dd7c9a61830f0f
+:009c10a0078a363ad4b36bd6ecb8d4b004d3cb
+:009c200b1a1e1060139edb69d52c0fe71bab01
+:009c308f055cfe669e55c4d103f0f80385aedb
+:009c4029bf0e18c216575d93d49a7b45456ea8
+:009c50b1f0321f6194e9dbaef38887c2edccd6
+:009c607226bcdc6a47cc19b459c201c2de6267
+:009c70d7d8a7db5c048704a9b021cd45384ba0
+:009c8045933c84983626c04c954f3dbc632993
+:009c90c1fca75edcdd58cd446632bd15c26663
+:009ca0f91028824a7e5bb4ce36402396acc8c5
+:009cb0df20b47e7f126890a8eb0fc614a5b2f2
+:009cc04c90617c65df58622b424ece87a35bff
+:009cd03906501d4ff14b4cc1e2120806992a72
+:009ce0e3e8e304102b1880f0dcdcdc742673d8
+:009cf068544ac9b2c160ce3d2c19748325d90e
+:009d00326cc32aeef1eb18364590e8ffcfc4ed
+:009d10971629d2bb8b67d4dfc6798a31ea08bc
+:009d202a8fdbeca82068b6f32fd593f6039b6f
+:009d3017cc0875224ee4dee43cf2bf2ae0bb62
+:009d40dc16440a5a663dd6ca596d9926755c38
+:009d50d65a0be74edba93f57f1fcd1e6a65958
+:009d6095570a372a5d1f405e48ae593fbc537a
+:009d703385707bce603e394a375b4ffc55785a
+:009d8032012f0f3beb6826f9a53a85eb5b1c64
+:009d90b212cf0607df3395741abc6ebad864a7
+:009da08fd0502eee5aaba6a973f41d750033bf
+:009db0152c51d837a4404cca33b6ab016c4ae4
+:009dc0a41254c44142854d00b47ce99eb28e7e
+:009dd02197d93427d43addb69e1161f0e2dde5
+:009de03f8f5eb087de28e0293938176e58cfb4
+:009df0535f382d9d1a8ebf444682f5faefae4a
+:009e003cef34c6c74cf684b669104349085a07
+:009e105f029d1ab10fa31d379988d1a552b76d
+:009e2052929306aafbcc49d1e5e47028fabea3
+:009e30a30bea8355e14630e713f8449e434faf
+:009e402da3d6e43df237016408d2faccd6779c
+:009e5025d15d582a0cf8be3494cd4f392a5f46
+:009e607facc0202d3ab75992da2bbf1f3bc894
+:009e7070ce77d1ecdeaef41031cc2de16d4084
+:009e80752fb793689944a8a2be4fb6dd7c522b
+:009e9092bad5e197b956a26c19a83367126362
+:009ea0af008fede58fe087fdff73e036227baa
+:009eb0f5feb2400dbad26b6ad830deaecf62ca
+:009ec091e7ef83455c02bc064fd56cc1b0c9f0
+:009ed070f7d09ff423d6016d3c0fc54ad47726
+:009ee0784d2e2d1817a89e2c9ade640669c4ab
+:009ef0a1f11fdf3cc53246dac17967adfcc57f
+:009f00667806a33652a41f267ae807eb967aea
+:009f10f4a8ac00d470e83cb585143755aa8249
+:009f2093c95c8ebb3740c9c15db99e7d723ba9
+:009f308456a57828e2e2996f80d74fd7a2807c
+:009f4098ea912f748f738a50b02c89fba65a7e
+:009f5019fa6be670415745213845f575b2eb1f
+:009f6067f94a3b7d9937f61d68deb4f6c5ec68
+:009f7073f892c3e6911de0dfe29f37d6c17ebe
+:009f80251975dea92f5c63cd3d8bf342e7e1f3
+:009f90e9c1667d8cee6c91cc251f8d11f00511
+:009fa07953cee980f9e74cbc2aabbdea29d900
+:009fb0f254bbde936d6ee31abde2d38f520c73
+:009fc0d80ba240723754c05ea71d244ebaa256
+:009fd0a34e35d8cc5bdb2d3306f22be2fe97d5
+:009fe09083832887ca3935e3e2894473751340
+:009ff0d48fa440eaf474ae4750d3b479a331f6
+:00a000e47be6d1ad25f7c72ccfc51fa76a6661
+:00a010f0c0826261d7679077fa0c5c55b2e4af
+:00a020d41e0f68a0f99778764bb51ef334941a
+:00a0309a1f7f8b6a10f97b9db95e7601105443
+:00a0401570a1583dbb58b7faaeb1338190b4cf
+:00a05049313794a74ea11e583a3beef22e0317
+:00a06085e0f7b35e1d119f994ee7c0a12aefe9
+:00a0703f537d9e7b92ea9bca137bc90092d250
+:00a08050a4fa8c15dfc24b1f0e259183502f5a
+:00a09023d43cdf59c6bd1be22db6da55f4c531
+:00a0a0deb21f55485cc52ea17e2e1dd7e05d08
+:00a0b018647468810bc33f7159c33f63f7e5e1
+:00a0c0a41cd21e54b24bc5cb1150aeeaf8a85a
+:00a0d0ae4499254a82221a82ab395169b18fe1
+:00a0e0ff769c4ccd35f5f1505932ca8a1a403b
+:00a0f018dbd75b0334b9b0edd7a64451c5d501
+:00a10021b48ebb5025471d173e00a2e8abb189
+:00a11069c02fe6ad62dab60f6e0f9be6d22c68
+:00a1205205b3e7c021f1a375e1776493f2af0e
+:00a13088c615cd1fcfeba791fd7cf48fc3d622
+:00a140013074c7987e9e4f85bfac36ca420f6f
+:00a150eeb48ca9a349f2e723689690ef7ef099
+:00a160e73f39d3ea88184f00ab650231ec0004
+:00a170043243d28518ca5fde046e96c9dfb5aa
+:00a18022f4202dbea8a0e567a86fd2c62ce4da
+:00a190262795e99d322483404f09dd5768d20e
+:00a1a07a49a78967dfc513977ada2e5a65fd5d
+:00a1b05600f2502b95b58dd3df4d2d4a40b43c
+:00a1c0526c86f8aa99b12390d5bb4db4d97f33
+:00a1d0ecb2229e3c1ccb24c3fb5092a0b674b4
+:00a1e06c35049dc9446a7f3f51e62245358010
+:00a1f061d1993de2db874cde588794fe1437ef
+:00a2003c7e9c32f8c39bae7c657791d34f903c
+:00a210606eb0108b4ec8184f124f26b941d568
+:00a22037bc007ef1783234d8ed52c2efcced49
+:00a23014d37f4200e26534279737914c87e599
+:00a240520f17edb2b690d9d0be88af30614257
+:00a250ae15c6dbb14ca41771b96d384473fc62
+:00a26061e84898b0b71834ceba9e7bfb105641
+:00a2700de65a383f369564b89728558ea78194
+:00a2809e402919f6e9afae6ac57ccbcf26a892
+:00a29094a615b5720157df24f64dc10a0252d9
+:00a2a0090e4cd1b5f8e29f7720bbcaced46316
+:00a2b003734f3e92a680fbf9d28b22618a98d7
+:00a2c01354f8cbbdf3fe7355b4c89e659fb54d
+:00a2d0f34f79a44aeda6f6514851bf48ef840f
+:00a2e0c3f043d4fad8cdc1719f145834a4920b
+:00a2f07abbb639ee913724f1ec64650f1f6d3f
+:00a30063efe7fab6e3092757ff565df8e109ec
+:00a31046ca2db099d22f109e62d74eecacc03e
+:00a3200bdf46ed1679db76a37431527c8473b6
+:00a330fed94fff3a73fecdede5fb34a27cb80c
+:00a340c6ba200a199eb5569756df10e90af3b1
+:00a35061d00e87c8a7a069a65dbb758789481b
+:00a36099b8ce6138f4b62fbf6bec421f7d1187
+:00a3708731500c5f5a2134760bb0e33321cb82
+:00a3809d2f65fdfb2e2e7c4d3dc750f9fc2da5
+:00a3900f41582db9cd4816782885c4912a2e28
+:00a3a09700ae5aca58c7f0322fa6ca265ea644
+:00a3b098a692bfb2440948fa6c280f6a10e434
+:00a3c02c838453c4f4398c0ceb7412c6145c75
+:00a3d003d3094fd34435c04d0afd805d17b9e4
+:00a3e03dd0c52cbb06a9e310951d98ebb8923b
+:00a3f0a14f7559959ffc2b29b9be80ca9f87e9
+:00a4007974951a890bb3a6e51709e8fafd0d37
+:00a4103ba2b136f1e54d577ad1c70560354211
+:00a4201050e520bda1273fe7c42b10e23f1677
+:00a430dcbd2d58add62ad766092fe81487a4ee
+:00a440fad4157230ed4580d02f8d6a9624e20f
+:00a450d35389e43cae8984bf2936980b7c08ac
+:00a460ee96e42e6777feee4da0ccc943cdb700
+:00a4704f4c88533d459a15eb66d5a2f8d9312a
+:00a4808099ad87aa87121b220f195261806c66
+:00a4909fa2e42906059967f00ac32783a52593
+:00a4a07ab50be44fb2591400b8e21527994c79
+:00a4b0818262c15371084b0618ca147ac06aeb
+:00a4c016fdb05c20bd03161c6b4f95d1344b51
+:00a4d060a4015b68e1965eb0decfd970bb037b
+:00a4e0d319d0b4e89d50a7fbc0f222816a86f4
+:00a4f0a02e55817bb67c2ece332f161805f42a
+:00a500109e2aa717261fe0be22374498758048
+:00a510592dd6c94a98d52e19c77918334e34cc
+:00a520b84a02bf0a10f580c029be57d0401be5
+:00a5309141c330566611c13f841b14029ab206
+:00a5406a5c513ba6b34c0a33266f8d28f337fd
+:00a5508e8e1fb44b07657ec90b51cf0ca9af8b
+:00a5605cbff1c41d890abe24f30581a9763cdb
+:00a57001d96b0a499c96333bb62d2b73b1aec5
+:00a5801ec2450e6a1b60ccf3af97ba03b01dfd
+:00a5907a1d1466c617920e96de1f2846ed93ce
+:00a5a06bb0b793b5fa3152f471912afd38cabc
+:00a5b06fecbc4b37bad37b39cc4aa35048773e
+:00a5c0e4ebfdb5cacaff3be366b27241d0c0d1
+:00a5d05f46278f47f941e110e84def4cba1cea
+:00a5e04016d9de360d0bbe03ae9fa7eb476ffa
+:00a5f0eb280ea8e1d8302c909cbfc19df792ad
+:00a60011b5e4b1db77a461cec3cc5ff671cbc1
+:00a610212d93cef44a2a338efb345bf3b8284b
+:00a620f444b6c23195378617b1ab6611e5f642
+:00a6306c6a94908f96bc71523c5b19023b721c
+:00a640b300a363fff42cd4107d31128f7e4cfe
+:00a6502762fd25778e23178bf72dd653ee93b9
+:00a6602300155d7f22a505b28e69878fab97f3
+:00a670bd0bab09d178013394bd455fa0d92d31
+:00a6808a7ce8f15b6dc51ca6ab5a51b37a30d4
+:00a690023b12a59ca7ee8e1bd0d146da8facc7
+:00a6a0e06d1b08a227affa03e5629c6efc6b63
+:00a6b0948563acdeb606f8c3be16b27457efe2
+:00a6c04fc6374af74084f0549ddc85feec44b3
+:00a6d0eee5ad649d17e57e548172533f10e117
+:00a6e0861bdbd0e7e9d9559482e3ab2eec8bf9
+:00a6f0e29a78a91a35715ecfdc9c56415be443
+:00a700f4143db9ae50b86f0b995c5ebe31c25d
+:00a7105d671c40af14c23bece2dc2bdfc6393c
+:00a720b3df09fa0197944c519bb261d2793a46
+:00a7309cafbcb93a4204f8b5844018e0533a07
+:00a740ccb64317a29c17441999f995236b8d8a
+:00a750ff2924a169d54648b8650e638859fc5a
+:00a760c4011d888c8f264a2399d18f8023aa62
+:00a77005ea29bd2ada03e8acc2d6c7d8e6d407
+:00a7805216a0f1e3ee8dd4aedba8d8a0f54eed
+:00a7905b509d312de1373aa3f6857a7afce774
+:00a7a067091206cd22f7b9df0d6a86e0662dbd
+:00a7b036843b927d500b659fe2c6e1951f67cd
+:00a7c0b7c7f9e72b6702abab1063d7be48d6a0
+:00a7d08b71acec4f0755a8ed30f0fde8c61eee
+:00a7e07debc615d644fe27a0494db14ddb9fef
+:00a7f0d9f66d94d525d435e92741e436f58ea5
+:00a800dbe0a56b33b27f257bff3b379c340a21
+:00a81064700e62a23bb6770bac2f5329f422f2
+:00a8205a84a1738bc306f39d8a962cf84acef1
+:00a8309cbbcdaf291236cdfd8bbabef4b5e540
+:00a8406a0c6f557296c735a7f073ce6c3fd50f
+:00a850cafb81ecd03d643bdb1ef1abcce690c4
+:00a8604c93589505db3971696a660bd6fd9b1b
+:00a8708c530aac709d732eca685e76dc65c379
+:00a880f7a2af2c24e4264963743f6b0f406512
+:00a8904604665fd0e8068c736c9835983d04bd
+:00a8a07c11552839ec98a2e841dcba77e15e3c
+:00a8b0eaa178ab9189b5848d4d3f71d247b1a7
+:00a8c0468b19d3426ddc3223f315c559336aae
+:00a8d0d086972127f260bdad3fd40171a940c9
+:00a8e0fa0d37ffca2696219ccae3613c3db838
+:00a8f036585bad8fc974b816757b04aac643da
+:00a900e4b4720b557b6ac065364d25249f5074
+:00a910cc3def97d57a695e7f5d53145a950a7a
+:00a920c332a532ed1b9892669f0bd87b9b7f80
+:00a930557e41c56f4076d4d200f363af1e6aed
+:00a940c47fc972aec32ba6bff12979f0e242f8
+:00a95089330bd4d7350b9f70a25b2ffaa19642
+:00a960e4aa313999019c0e84d131f6c237ed63
+:00a970f025a136daeefc80403493df0bf79c72
+:00a9803c219170734d2cd8890b0e81875f661d
+:00a990e36710c5381b0b8e29bd9839c8dcbe32
+:00a9a00a828275c4d7409ff7749fd759004ce3
+:00a9b08aa32a802c8f78aef5f2bba21785c657
+:00a9c053e270edd42c0528575e3de5834fbf5a
+:00a9d07da7803e8e44973f1f2a7d5aa73f7d42
+:00a9e069b0e252e6233ae33e88e3f699f70a18
+:00a9f0cfe798394c79fa6caef2c6da90bfe5a8
+:00aa00a34b567f7010cf69617bd2229c8b0d9d
+:00aa10c8fb857149c1c82d70a59ea5024b65a3
+:00aa207692be91b7b8a20b5391ba4fb83b598f
+:00aa3077e7917db016890b1e162dea4b8c0ad5
+:00aa4089cbe2954ea1626d27260cb33d9c7d89
+:00aa50b27429cab3292a70c984bdab8eca4c08
+:00aa601aada0628453396abac72defce240b7d
+:00aa706dbc79d846fbe2b225e3352356569517
+:00aa8074a15a833225388039cee2c6b4aa10e8
+:00aa9050463648a882e5bd4c71c31ec7a65cc8
+:00aaa00ef62b191792fc651685515ca7441075
+:00aab0930e7ee8e14ba53ed7144408cf28f100
+:00aac0eb31267f71012bf61c1acd6180a45ac6
+:00aad033cc7fc59e27ac2e4998fb1e329f662f
+:00aae02373d7aad2d8d62d958b5e4eb8b01757
+:00aaf0b20fbf39d13d040c7afb396272f2c8ce
+:00ab0097b200a2ec25af09814aaefd3c55b9b9
+:00ab10ae77731c8380f339eb43caf9a150fe5d
+:00ab20635e9bb11c345ee5433642b19e53d999
+:00ab30428d82d7184b0f846ab1f0ede9308784
+:00ab40ebb5137ee2db13f040ffef51ee140c9a
+:00ab50b4c0b69e706574387bb4950b15db3a14
+:00ab60dc279e7594b1d83499c178d6abe7e976
+:00ab708ca8f853890e1630656c4b3cb560517f
+:00ab80eaf9970e0c7afd8cac47f0b8ed41681a
+:00ab90a0305b6cf4a67e71d730b475c2187287
+:00aba0d81c00b91a3c9dfcac61435877efb659
+:00abb086c80b24a876d4e9f5bb40a32751881f
+:00abc032534b4b2453c717bf09b446dc7ef5e6
+:00abd006e4620be19be48ebdbf0e8671712ff5
+:00abe09a9b50b39a96d2bf2a7e3d2bcdef46ad
+:00abf02fa8111528f1204290c9d5f8e990bb55
+:00ac007f6938d96a24b13f2c6e5fdd357a554c
+:00ac10f23810bac8058b6f266f6b28b8902260
+:00ac208fd6b0ec6c49b2c8c000c905083d99df
+:00ac305fdd9ad6284a21913e0438a20aced133
+:00ac406a2befd27f6caee107c3e8aed2a2053f
+:00ac50782136dabcb2d2d0bc22dfb089e8409b
+:00ac6000f2f17d0b84591758affebe180742fc
+:00ac70d0c1ba81c6a8aff9fbd4451894566b4f
+:00ac80b8c05b93a3c65bb89520ba673b7d3b3c
+:00ac908a07bff3ba911414c5096af2c7710cac
+:00aca0090f27d2dcde284c14f4a6b43791a720
+:00acb0f910180adf5bb96c5c1b7a27971005b2
+:00acc0f932d1b378fa4308fe77b240f0f790e6
+:00acd0c2df761f7fc97c7c3143476d64c03542
+:00ace0d53b01519d5ae859c181a8f164ee3db3
+:00acf02045198c7395d1546dd061d2598f406b
+:00ad000ef21a0a24304a958ac15f5dac5c3d6b
+:00ad10bcfe97a19a13d04233e31442afa0a890
+:00ad20253b04e030efea3eb029a13cea038ac2
+:00ad30974d3fa62c0137febd5c98d77a5ea002
+:00ad409846d040295b6919e26eb88e5c0a7d43
+:00ad50d6705a35a1edc35c463f79051b6eda3e
+:00ad6074bf02d746fc3c390cbf26f64d0ceac4
+:00ad70681fab647b1a93c2661de6873dd6aa37
+:00ad808157f79b19ec6afc5bcda1051ab1c697
+:00ad90f385f8593097c5f83758194f58fc265a
+:00ada0173b49ad689505eae2ad1be327039d29
+:00adb0307487fe29de0674f185d06adcb8b101
+:00adc0d01acc4a5e1fd490eea7152b01bbd4ef
+:00add0c8e33cdfebe787f9b80463ca48a18c4b
+:00ade02c8bf81c35fa1f690f87a4a5c38b770c
+:00adf0a2ec5a0d19b4d51ce0492f19dc734d91
+:00ae0095a3bdcd8933058f701d29f544a425fc
+:00ae108b699504cc86d067a00eb82400225d2f
+:00ae206d6eafabff0eb4ef567f52a6b0f4fb0b
+:00ae306f77780513515a22db83f70a15643821
+:00ae40e86da8b33daad90fee2069ad89aa5507
+:00ae50fee67e632124d3f5dc5d7404e382cfa8
+:00ae60549a38f552581988fed3ebe8830caa28
+:00ae70cb341b564234a1ddee40e7cd3027b59f
+:00ae8096a0115bc141a60b71bb72995727712a
+:00ae90a47d51619222a45483dd97d69ced836d
+:00aea0ea4593f4ef7941510b3ef238733a2e16
+:00aeb00d54dfbde8d072ad388c59814b916128
+:00aec0052bec7d92f82f61fad68b69b9ab2a1b
+:00aed0ceb5bb30764539f23415c1d632c6c2a5
+:00aee0906322b74b3ab1c828bcb07c87a2e318
+:00aef0a8f44409ecab10a411d9e090dae300fe
+:00af00ac3c80c9cfe1abff16eb9a7459a3177e
+:00af10a1590813a6d3e37f8c4dd0380390c1ce
+:00af20cf1b0a866d76a7009d686432df3c2c8a
+:00af306a23ae28912bd8ac0d844b01fca5effb
+:00af40d8676c0f6cf592f7f97590ee51b5ae31
+:00af505c28030774fca0cbb28cd3c8ca99d766
+:00af6092bf598bc247b1bd7830d2d2e0d2ea66
+:00af70275d823c74daf7fa0723851b73b5d4fd
+:00af807649b0c800d4d98ce600d61dd10a82c1
+:00af9027d1fb9462fa18eb613ce85cf8cf336a
+:00afa05318bbb0244ceeee044b71ad77ba01b9
+:00afb04ecf1478c02766e8c87b351c248dca95
+:00afc03f0686f4597e3c8b50daa01ff2a8716d
+:00afd04caf20ff2539b30f6328bb01a1187f5a
+:00afe0b9c901ab1744bd35988099be45977822
+:00aff01701a5832c5957c60f2f9ce2be34d3f9
+:00b000ca137edf90bed47823cc5f918be86292
+:00b01039a1aa1ff64a4ad8d2e6092c005843e8
+:00b02073162cb4b4d86010fb2902cb0a444808
+:00b030af3d571a706cfe0a75210ac52416c7ed
+:00b040194acd2812e25f44d34cce7622ddfc3b
+:00b0500d75f617922bb703aa897d98ce083c4f
+:00b060b728d3d472bcf93c2c29dbed2336011c
+:00b0701247493628c41d694a03cdc764928460
+:00b080a9217fe62634db9eaebcfdb1111808d4
+:00b090c52cde90ef43b74396cf5a60093b0f6e
+:00b0a0de9e7eab539fcc730c01d6aa381ecc87
+:00b0b004a0d21d2ab19e5332f5d26fce1d78e9
+:00b0c06d714d3147f57d96114a5696610279ff
+:00b0d0859d2f017b6e578befa6257bb6eebde4
+:00b0e020ae17330e59bbac3b70b0ca92c74599
+:00b0f0ff2634d356f13b1648ef8e52ad9d662c
+:00b1002f31a548cd1862aca51587cd812bfa73
+:00b110c2d815e797125cebf294b0e0f6759658
+:00b1206d1b4fb43067cd267e34d8e002deff74
+:00b130b654cbaa083c39337c521471a1946a41
+:00b1402d0a00a54b3f8b8416162270a1e14888
+:00b150365fe558db3767e3da84294c321d1a02
+:00b1608299c5b9a3aa4e5efa68715122465924
+:00b17007bb649852b426dc76d46b8e5462a3e3
+:00b1800f1f3d1e1bb03d3e50e3763a1c8f1536
+:00b190d52bc817419c52bb358a996a7b7d5c4a
+:00b1a07bf733646e852bd678c755ee33137bc9
+:00b1b0de5a84b5c22994852cf358f7f760a234
+:00b1c011b57916bd493ee8e47a1e9d5825c7f7
+:00b1d001ae88ddc409c488eeded54953bac89e
+:00b1e0f77ec7c1aa9e70d311cb4cd02697b01e
+:00b1f04c3e635bf473ffb9eae2416a4c7283a0
+:00b20057f812bd61c9deaf2d532fca684acf4c
+:00b21045d316704efa9acfc2bf11e6acaeb958
+:00b220ce25cba2e5844f0af09fe8294dbbfc56
+:00b230f6e2c87cd9831444a6a5ee058d1bfe48
+:00b2404ab648dc576150da3ebbc6f234c357d3
+:00b2500d3a05d9314a87d1c175a042ca7bb650
+:00b26091fd41097674ae2095b533c984a97416
+:00b2704f29e60f52e636f4b7bbe582e1bbda01
+:00b2808eb590435032c0573807fa702d398f43
+:00b29063baa3d4e825135ac0911e70d1a5bbef
+:00b2a021c550c7259e8976f2b5dc9257ba3c23
+:00b2b0471694232cc08f59aefb96d00ab38c95
+:00b2c08e8a17115cfbde26edf7ce771accc90a
+:00b2d09b49647c790cdde9559a10357c6b60f5
+:00b2e0bcc4884af8d413e9170c803cd844935d
+:00b2f048706d4028323c0bca327fa8b7ab5cec
+:00b300d6f7cd220c835b69864bf6ee3a831c34
+:00b3104f926353dd5328c23fd53ea3a8c0286f
+:00b320c6e16c97ba867568b7d346ef28420316
+:00b330b7b6504b118142abff569715b815df19
+:00b340e95cec4aeda029ea48421b33bd8aadc4
+:00b3509be3f9e563c018fb151015f94eb0f0d4
+:00b360b6d6b071119ac7fd44ba66531f625ab8
+:00b37051aa52e1ddd1dacbb85b27207cd979a9
+:00b38046fbbb16f86426566b6a0923a55570fa
+:00b390570a9e93ca1c55ff668241e83da0ea8f
+:00b3a08240758f350c1d57e58d8a6c14199b37
+:00b3b056b0119a2f81729801acb26fb5a94cc3
+:00b3c0e4d4d45398bd8b19bbf9ecfb5f783d64
+:00b3d08e37a94765a9f8665e166aac26ce23b0
+:00b3e04501461f1240c01da523e7352e750bd3
+:00b3f04caa1b99a0d3fbc104cd2bcfeb3965a8
+:00b400a0a134c31bfe26ba0ece219832dffe78
+:00b410aa0ff495aa205614f98f4729cf4de476
+:00b4209c829b4518a8a064bf2047188ce57d24
+:00b4307a39046944672ea738cf98f7511674b3
+:00b440542a894848e683a98c0b21b90c785287
+:00b450fc0c583f486249379168436e6b72f360
+:00b460693b3e66598f5581896da650d27b8dae
+:00b470fdf1a2062294c1eb76d571366a08d5a7
+:00b480d474cda7b90d9b1451940bcbb5ddff73
+:00b49047da9aa95f99db24fa598fc24a5c0faf
+:00b4a0c5c48e341f5bf3fc3a31ed2e0ecd6036
+:00b4b0adb94cbdbc0a7bd7895fe289dd66dda1
+:00b4c08b7d5d090b14bd2c3d0ed74dd723dea2
+:00b4d039e14207b97b2c30f11d8a69205d379c
+:00b4e0530da5f3b394c6dcd7e0bd4b4d75d3df
+:00b4f010c25b1cd313e46c85e68f830de33beb
+:00b5008dc9070c9569b5997f5970119379397a
+:00b5100f69401440d1425080f36155fbe642c3
+:00b520662b1f5b3aea68b957d4a8a995ba5044
+:00b530ed9145c6d1d18f3d8c2f806be6518dab
+:00b5408389c623a9735801f44c57e633e20219
+:00b550c1349cc7fb6384506852d228e5c5749e
+:00b560b282b2c1bb85cfc6e274daa52203fa80
+:00b5701bc0b7278987978a2b34bb239707e4b2
+:00b58008dc426a61f22f3630ba27bd707dd296
+:00b5906beaafb0e955ea9bc5bc333013b43055
+:00b5a02120f00b70812bf7438de8a3e3d12602
+:00b5b0c6f756f2a44ba08a0c42f780e3a78caa
+:00b5c01932cb034ab29c5080fb62a04fc493a4
+:00b5d0d22fd87d81c695ffd2b99baf3df6875a
+:00b5e049ae13d18b979cc2718ca586c418bde7
+:00b5f08ee34a4a634a62e86c4cde3a1837395b
+:00b600d5d8ab1095090da56957c47d221d92af
+:00b6104fd3ae1e2cccc087ae952019f5b03afc
+:00b6200bad539828115c4b1f2a20177ec4350d
+:00b630f2f5dab6c40d33db05178e140b497bb7
+:00b6400450f85f54933771ff4473fe65503c8d
+:00b650bdb16e69ce11fc0ab8eda78d107fb4b0
+:00b6601758074a3b2d2f1114daba4a91356502
+:00b670be7acb27324e42d7f0b0f17da1fad54f
+:00b6801cf908a6afe031443fed6e854a2f9b18
+:00b6904996682a5445a6f0e46589f2fc8a95bb
+:00b6a04abe529121ff8bb15627cc0c48077def
+:00b6b0f670728be939ec0a7a6db724a0777ba2
+:00b6c02fc3f25480e1ff0e51964ff57b6e782c
+:00b6d0fbc9e80c4222668a997eb16e4feca470
+:00b6e0b63d9587229c7ed75b71cb14684e35c8
+:00b6f0039a1557d3d333821b0203658d17a13c
+:00b700dfff7c95762a352882bf72029368c2ac
+:00b710deac7c219ffceb539bc6439cc311972e
+:00b72042e27dd5ce800146e04edfc97c922bd3
+:00b730988ceae1401b9ad2a3981cc1588d0a40
+:00b7405c99aef872d5029bb4bcc79d9c3dddb2
+:00b7504c98268fdcf35e77fe57d7e51340741a
+:00b760eb0bdf4110a735f78735e18ce56d8947
+:00b770b48c34effefb3e047b024a75cd747f0c
+:00b7806d3b9bcad5fc21e73d4769b430425a5a
+:00b79047693cf3d5c6c9599cb9d07323ee3e45
+:00b7a088d1742870a087ab820c24d01c74d1eb
+:00b7b0c36dbbb2e0607bbe71ccd8f0f176b4e2
+:00b7c0ef127f8c9ec3db055bd6fa4b54150d81
+:00b7d093643fe8efb0891c01f0c8849500bb6e
+:00b7e001c52a14cfb268c6d9f0967409258a52
+:00b7f0e35554cf56cfbc0ad44340f8b7e219a0
+:00b800e4de6bfc824ef2f447e8e4fd852685c1
+:00b810e5d5fc67c9bbd363febd740f2ce2c702
+:00b820ca215716fccded30c1f72e660809b847
+:00b830780970a131ede72a7b63cad4406adcc2
+:00b840128c6b82f69b894c56579b9a37123723
+:00b8503c33a99a805e3b71b439973887cf105b
+:00b860ed6bca0f393b95469b38800559ee2c5a
+:00b870701bf832a6c98bb30a4f84339fb53046
+:00b880761e807b19d5355d2f9bf8c9d6f9d305
+:00b8907454af22cdab5c20042207107ba3116c
+:00b8a0365011c711d0e365aaf1676d0447cd11
+:00b8b0c316a07ec54f69b6d5e2cf10bfb3d68a
+:00b8c06237d257f1a24336de919439ff6f114d
+:00b8d09b8fb706fba724bbe0ba6999254286aa
+:00b8e02da59c0c90e909dda5b9e9940659085f
+:00b8f002107588791cd9d493c0fb030ff83d3f
+:00b900c906fdd70655d136f14033e8e88b9b6a
+:00b910dd6ec523174f9e646c365da2a1a8ed91
+:00b920e7e1ac40dfe0edbcd7985294a5deb2e0
+:00b9308546ccd613558ef7d1ee7f97f0325949
+:00b940b6c3d11f7fdd13f5d9e3adc94f5ce9ff
+:00b9508e2cf927ef6eff4711b9808bb12e6f85
+:00b9601816f4e08b990e2a5bc0998a8df36601
+:00b970ace089510493b8bfae0b69665cd75365
+:00b98064328594d9bd2f2ee3e35a69cd5186a0
+:00b990d98c677a58b8b0e8e761c8651b6cb5d8
+:00b9a0ed4f89a11f4f4e6deaa5ef87002d68f6
+:00b9b06fc168e164a5507059fcb10fa0fd2222
+:00b9c0b4abf1ae9947d79c1b18344dfdb67348
+:00b9d0a70b0274371a398628f91f75df9cc6e9
+:00b9e0db871ab1a54d714283f9ce6d2e05691c
+:00b9f0f1587fc6142a6e21e8ef20994ecda3d1
+:00ba009d2116f9a21f76bfea3d7b68c57bda45
+:00ba10e578f5925f136a1aa67eae6981352e8c
+:00ba20a05df43000f1bbe913e39e9427142a27
+:00ba30016e74a031b726be5561399eabd5ac94
+:00ba409e27d5b090e40b434a302f1989ff0064
+:00ba50059e621a7801f462bf63f0bf917423f1
+:00ba608528e2b692ca002cc857b813e5203759
+:00ba70f178979b73460c11d9576a80260d9055
+:00ba80c9c2c514232f39f4e3cdda8c5ac7fc1c
+:00ba90f1de0d6377529694617b4f1318dabd9f
+:00baa05a677e87532b8ef5c0f63b567f4d638f
+:00bab09e11a9d28e26a09b8762ee0ad5f6d4ce
+:00bac08519cc649a0527e22767f3b85e4793c6
+:00bad0309bbdb42e2b5c6ebf2d6bc70a784efe
+:00bae0690a777882949e9c107876c465f2afbe
+:00baf04b2665648bcc3c23af262e37b26c3ad5
+:00bb00be06c5b856c52a77077c9de2e28b721e
+:00bb10a59fe12581de56b64b043d9e2e00421d
+:00bb2092e5ded3b5cc6157333e94313e6f8186
+:00bb30d287b3bdb36a6c7779f997ece8dc00c4
+:00bb404b67b317a7e0f658fa9a4aec9493c60d
+:00bb50092d9ee28f9989e8d798f73aa83d6760
+:00bb605779ebe97e1f19dd2aedc8ed1a09cc6f
+:00bb702a61f3d6a86b4631b89a7f04bc872487
+:00bb80e355f9d0cd1f529f83cb25168569762a
+:00bb90cf0603fa854995e8ed8b0594d4bb197d
+:00bba05599fc4693b80bf41d633ec59ab71a82
+:00bbb011e13174ed8e8957b9b813b75d0f78a2
+:00bbc0c1a2db1568909af8baea78b4f6e0136a
+:00bbd09169abfad5da4b81542a795a793637a6
+:00bbe04416504d2123e43242b3581ba558b593
+:00bbf06954f96ae2d1c791ebe95f7e4c70cb3d
+:00bc00c69f58501e606abcad6d9e16737f0ebb
+:00bc109fb8da57726444c40731b7c08751d5e0
+:00bc205a2b276d88b40b0e8319a2d6ac0d0b53
+:00bc30c681996465510412a5732b583ddba1a3
+:00bc40b22cb2d2db0a48d970405b9210b48aa6
+:00bc506982a27d53f3151c8641a6b42ce6ca45
+:00bc607f3b82889a60f8b4e3e2b455b621c4ee
+:00bc7006ae31f0051875bc8b4d678d07a2621b
+:00bc80583574e87ff8087db259a5587431cc63
+:00bc902369b6847849f49cd2479e7ff0dcc4c0
+:00bca01dac1655a5098adf6abd9fa9fbff9368
+:00bcb0863b7dce0dd9e606d2f6977bb6ebbd2d
+:00bcc05aa1124241de68f1da551b70e542b5a1
+:00bcd0550528fdb303cd6d925ae097d058e690
+:00bce0e40f09d73c833ad49d4103b8bdad1321
+:00bcf098f7d2e6c85af5a26ad9bd818f7aa4e0
+:00bd00c993b1ec15a59b3eb1e690ad2c545463
+:00bd10f639461fa6cf61fb2387a703e1079881
+:00bd2054eebc271ebd44f4e9e0a98ad27275b3
+:00bd30c98caeeb7f33ccd90e13586423a7b545
+:00bd401c8e1ee5e896d430c4a4fecc550230eb
+:00bd50e1b5f01122e6dbd378e96f288b191baa
+:00bd600412ec39c5e47c5232f25d8774b286d1
+:00bd706cdb5a4cc2a574dd999dfb676ebc5e25
+:00bd8014083e241e06e039d7d374496548cb1d
+:00bd90c0e9fe7f1b23669da40780ce92210964
+:00bda02163b04ee66e9432a6819a2d9d87f392
+:00bdb0352a01c48d652de19f67643e73243663
+:00bdc07f4ce69ece404e0f185b7792001b5f0c
+:00bdd0c8a347502250899e2f30ed62fb1cc110
+:00bde0c11a4195efbb27aa2446c34f94369bd7
+:00bdf0703d0a614d5c3dadddde1b47a1d55c23
+:00be00e288f756d82611f66c04ebc85a2dba6e
+:00be100e676262b55a1513b85ae6a8253b737b
+:00be2076cc2032d6d8788f9f317af350c94786
+:00be30531d781fefe175c92bc990b2a934ed9e
+:00be409e053cc1e35abb2f97e169db74b26b17
+:00be50415ecf8f592e93359874f301ecd25fca
+:00be60e996d3028405dd69e35ea62d9374343e
+:00be702c8be9243050df0f8e94b73fff77dce3
+:00be80cb7919baab0f9f723be025ca7eb6b580
+:00be90020499a9be6f5958fd27833069d4154e
+:00bea0ecb206b381bd4a499a87ec4ee361a656
+:00beb05eef2b48be31196ff427abc447c52a49
+:00bec0258937a281b8a499bd86edc5a5ca23af
+:00bed02e59f68c10c8e826993be0a139962ead
+:00bee033af8df4c8e7bed19126b5bf46c734bf
+:00bef03097c80ad702189f08b853b4bfef6f7e
+:00bf003d7214c70049679d7ab569abcccb1a0d
+:00bf10f47532fa4da4d1003e2258e0faf24169
+:00bf20f403c00c515cc66e6efe3ec773d11e08
+:00bf306d93b90eb994210f906baa95bebbed0c
+:00bf40ab5b224a54f8c242a68bfff47bd2c479
+:00bf5016111d5b74e5b0b74837e43a53f935c0
+:00bf60895caf98d5f0c77e336220338565adab
+:00bf70a741a65b3ee23c8746952d0896ca7233
+:00bf80fbc68560b718278a13c626734cff5f6a
+:00bf901012345d93964d5e3a7018a663aa2051
+:00bfa075d02968a67c34804c3faf01b17220f1
+:00bfb00f8049ae754a2a67e2a33e9523711a5a
+:00bfc0958cf0b7cbf8d7a002c3c2a064d79ece
+:00bfd0072ba72e004d360b53d113b64329ad8f
+:00bfe032dd81030e6c956c5d04fe9bc18c3d0d
+:00bff07bbc4ffb4d0911fa4d27f1e2992e6ba2
+:00c000313116d7466aaf4041404927cf72cbc1
+:00c0104c1b4fd4f359223e160ca900143cc5fe
+:00c020972dd9231a01799d3606606032965021
+:00c030e4375b2ecff392ee531acda4be03b95b
+:00c040081bccdae7769dffd090829cafa3481d
+:00c05054d78527c60870ce9f642d79f37c2124
+:00c0600c2fbefaf94ec368813b42f57f4db80d
+:00c070504820384a55e16f517d5e2b97c22d38
+:00c080bc86da8cba53af6886231e9e96e0dffa
+:00c0903292c77af098a45477f72f0c0dd6ac59
+:00c0a02cba1afe331d892e981b6c796b65a824
+:00c0b0faf5c6774afade23b3b6fe8cc848e260
+:00c0c006127be0356ce92c8b9166a6e8946944
+:00c0d007463ac5602b45956f8a669d20da4a4f
+:00c0e0e96257e89c47151b28a34ea6debbe3c3
+:00c0f0b6b9dde2df4339a336674157b3a9eff9
+:00c100df90852d5792d711d9a7b682a1a1c47e
+:00c11037906fa91e1f87bc426f5a55b97a350f
+:00c120cb538322c56fc724cbc75e6264382d11
+:00c13064010b81187f0c4a143d5b50d7104240
+:00c140bf8976a70b873e60f7958a77fd4785b7
+:00c1507efe8f484330c09f5e2576a484e07def
+:00c160c431ea809c0bab460627b6be60abf978
+:00c170c72d532a80e8e84f3e49322ff50384bd
+:00c180029c56348571d8f9cc42088c449c6d1e
+:00c190f103b88344c0732ae94ae26bce3e5767
+:00c1a014f29c2b3d0cf904bc1d8f3ebd8545f8
+:00c1b06ea8dcd410f05a57098618d6ef9e28e6
+:00c1c09fe04618c66fdd2b202dea980d57b507
+:00c1d029a6ee542799250124daf74f3065e254
+:00c1e097b8717b641edb6a8a05d4749e63e0d3
+:00c1f07a16083650c9b1670f1a91277883a6d8
+:00c200b12c31952e522c108b3a18b125c4e77f
+:00c210be51fe63de8aac3728ba59fb6abc33a9
+:00c2207b6c7dd9e998967b1e78a249546952d9
+:00c230b379a3a1a0bbccbdba9dc94123511aa2
+:00c2408901d830360b7f55a0b20811496fb2b2
+:00c25016b0ddb8b29ee48fc99e94b57d5ca7ca
+:00c26046ff9fb81caa2741f53f7024fc15f42a
+:00c2700b4286293eda40f5a985f8d9de777c88
+:00c280385a19d7c9c8533aec0f81701125fe2f
+:00c2903acc8aafc8efc0b18a7aca3100181fde
+:00c2a0ca0812f62ca6f46722d6ab0fa8e03fba
+:00c2b0687121c822f201abd57e72f7e8bcf9d2
+:00c2c059f77d5215468029109db2b5a1fa0467
+:00c2d017a0011018cf6d063d2e0fc26c4b30c3
+:00c2e0f2c8e7dcb50dda4b6679323bdd5aec98
+:00c2f0173000b2f264e09e6291e17e6524a349
+:00c3004e5e6335c64df08804094325eaa5f428
+:00c310af1ce821222cb59efb153fa3ef752656
+:00c3204e9315688240f008819c128177cdaa58
+:00c3306355be45fbff5a4993b390cdadd0f585
+:00c3404fc57d6bca4f112959584cd460a1993d
+:00c350cb7077b2083f864d3708629f3180fac8
+:00c360990df55c17f8be740f50e27558dd068b
+:00c37058f8f2b1988fe84ab480aa4f0bbf9a6f
+:00c380ce099d45478de035b06f5efa0d9ef4c6
+:00c3904b966278819d3efc95ea16f8324f44ef
+:00c3a0c4969f24fc6a2125d0111a3f2925f0ec
+:00c3b0e6d94a6b59b7be16d295d48c3dd1a68d
+:00c3c06deb27afa9e157efef856407ed120d7f
+:00c3d0b85d8a2f88e4c5765a0657d86ba6e9e4
+:00c3e0afb1aa56a84f3450660257bf25672755
+:00c3f0e20dcb821f582b7f0ab619e0b19248fe
+:00c40078dd428f2356c652f315a19da4058f19
+:00c410d55149a1e316167e82c9b4b402f156cd
+:00c420f9f22ca639fc58673c455263664b62ab
+:00c430c18803e6110a18c35af87dc950b144e9
+:00c440204dc052f305aaa2aabaf6a070a3d432
+:00c450ca57377abbaf1af4e9c3449d64d0ba70
+:00c460066f1bfb8f67f4f43fd9fe0e87f19e84
+:00c470d8e3204e6453b28ab289e622d4fad756
+:00c48006b355b61e1d6fedc57dda3f3e6fbf4d
+:00c490a048288ffadf95d5d2aac21a4ad61196
+:00c4a0dec4ac18b3e34b1d23642b424bffbd87
+:00c4b005622d832e0338999bb24cd63542e436
+:00c4c0b55b883dcc42c4026a70ff08b5a702d3
+:00c4d08a808ba650d238114da817fdc6f85f8b
+:00c4e026d77118bee2857618aa4528b60d7385
+:00c4f0689f9244b661009a35713f5c97461192
+:00c500e92b56427564f6d85af294b81b2da729
+:00c5101cd945e0f1b958f0649ee2957848ee20
+:00c52097df7638230991461912f9ba0bbe1c70
+:00c530511b1aec3922fe034c96f6cfecd56db6
+:00c54002b8a98afd0398f9df5e12db9b168363
+:00c550ec4aac42a5ff87b6ec70348213393737
+:00c560fa1d61cbe98bbf26eb666f1a3b58f6e3
+:00c570acad46f5195affe5d748d5ced7a783ee
+:00c580fd6c8a190f0bca817db11a7ee759c6a8
+:00c590ac7878072825bb3a3b58469b33607979
+:00c5a0cbfceec66ced06bf4606d30e415b8eb6
+:00c5b07aa501785ab9c681defbc172617026e1
+:00c5c08646ab968ade0f2c15580373d4787ad5
+:00c5d0e1df73573cd394f12579ac424fb77d07
+:00c5e01c8fba5e3606cba707b0cfb990f7b1f2
+:00c5f0f8c6dfb0fec391d127c81752dbfbb04b
+:00c600e0f48b5eed0df6e226fe717763cefad9
+:00c610a0f825a5705c57082145199321474570
+:00c6207f15a3a68c312b5bf242a354dd4badb2
+:00c630d51e4573ce65ee5fbdce301315242485
+:00c640656ee8a182e224c282335ac8d0ceaf0b
+:00c650dc7b22b82b3a5f684adcd88f569fb504
+:00c66096ade7e80a6d13c23567b3ae363d624a
+:00c67005d25c3ea696298f0a8e46eae99c6867
+:00c680d835413885ec5103bd4cf3942ec082eb
+:00c690b8755300208d780ad303f1c4af2e09fb
+:00c6a0c6d762dc68e71f21daaabc439d2609f8
+:00c6b0e2a2351d6dc02f625b1865e7832338ab
+:00c6c0dff57553ef71380f255c0fbac08a1a7a
+:00c6d09c53b8d6f95b946ec21d067f28dbbab4
+:00c6e0d811ea098c004285a455f4841ac29784
+:00c6f03ec76345c2da0f57290dedd509ff9b45
+:00c700039722767c786bfea9d809a85222513b
+:00c7109d7a67e07f3820dcdd9ab8a9bebc0b35
+:00c72086dd414d75a9e1821eb45671c7348c18
+:00c730a0e8161ab578e665e81b40485abdc002
+:00c7401be865dd14f4c857d26338c9cecfa551
+:00c75077c4319b205235eb6fd6d91733fd5ec6
+:00c76004264b4e4d171f8deda7c193775b391d
+:00c770205b0f8b089af2cef8e3e182755d6910
+:00c7805cb138a6cc93fafb92ca20f720fd82b6
+:00c79057fbae880a31fd4f6396e712ff427268
+:00c7a0d8ca5e90d6c41dd559e0c7b80028d5e5
+:00c7b02ed348a7b940980e59b7901ff7f5194b
+:00c7c022ec9c5e714053a160c5fae353d50e2a
+:00c7d01bf7f36ce5855cb1074fca379f47e234
+:00c7e0ec91a91576facc8f6c68a5024d4777c8
+:00c7f0eb82e57c9a8b8dc11691ab8ca6f78eff
+:00c8005ddf99733b671d273c3d590f844b4f74
+:00c8105d11d66bac94ff099169a5ac21c61fe9
+:00c820c6a64d412ae50467d0e560aef85f6ac3
+:00c8305baa4755937bf70b91975e8c06d04c8c
+:00c840960918972bf07829c01876986a17541b
+:00c8507165037f0f8a2f486992836c5d90318c
+:00c86075df3d3f5fd5c63da2f50a7fb8f9920e
+:00c87005cc5e5be90a19319a8fd01b0a62ee0c
+:00c8802989052d00e5ed726aca84e241dbf095
+:00c8906d467ba2b440de1c5285bda07b5458d7
+:00c8a05cff6d64975962c416181b1285238e19
+:00c8b01e9c0dfa9562f91192432382d9f52095
+:00c8c04e6826fbf3a66c7aa440b21539d1aafb
+:00c8d093b459fe079c35d2bf7cbdea327c783f
+:00c8e03deef7270a74b576dc6f99422f66ee3b
+:00c8f092de8110fa07662b3142d0edf066422e
+:00c900ec417bfba49842d2bb7bf7261fbc8148
+:00c9105d5f7a0a5465c1dbe27f705e498235cd
+:00c920f971654317527f4850cf506ea8ec3ca6
+:00c93008eb4eba10af175a0a4167aa2dafc596
+:00c94080b1a198a459baef114ab62c145541b6
+:00c950ad4b32bc2029fa42e34752c6319ae3db
+:00c960857474b97436414fea28b6ddb553f7d9
+:00c970bfee4835c5245027bd5303af9616686c
+:00c980939c92ce1f3996e52a7c3ed5b9f79203
+:00c990fd1e0449ac229c44bee3f942e6ae7aa9
+:00c9a075cdd959abf4079e77fe1b3854398f6a
+:00c9b0ef3a0e335933880a5d38e0be2da45d48
+:00c9c0f7bcfa25ef9cf98a166dfec01d9a10d1
+:00c9d050f6fda123aeb9915d3e77c409fc3876
+:00c9e088522bdebcaebf72a2a499fe875a5103
+:00c9f06810e952d4b41732659cb6948995f72c
+:00ca001e3afef7a2004d67bcc00721e9a60620
+:00ca10fcd66fa0ca20ff9524cda229e25162bd
+:00ca20c76ed8bf257fb7fac6cb63193ffd86fb
+:00ca3092ec3cc52e85a0697c6e653024edd914
+:00ca40e564d5cb776ebb3b2a9374cf8dc84966
+:00ca50852d9a25e3aaa5fa2a1244e475533b39
+:00ca606f3d0648b660c5cc91834b3d997c2653
+:00ca702987937adac07beaa6c0e820f37fb9ac
+:00ca80ccb13a67f3368fa621fd59923fec7c77
+:00ca90a0fa2c3e0c430243d081fe7459abb634
+:00caa03576f8c44c2b4611fbff4a1c6a9d0d99
+:00cab07443fca4cac90cb8c3c43cd269c48df5
+:00cac08f62b9c6a8edb2829305818dc56fd79b
+:00cad01d8ba90c77db83ec0d4ae5598dbb3922
+:00cae06f3b6d50ba1b426244ec31eebf9f14e4
+:00caf06ee54df7b14e0a0e0495abda54c60dac
+:00cb004f17134f45f80410993528a62db94db4
+:00cb10c1dff7c60f34c9bbaf7cf0cb9b0ff458
+:00cb20be0fc8ca74eb2e64bc7a88b6226167b6
+:00cb30ec077238c1c1be47645d84ccf27bcbb9
+:00cb40468cb1dfc03e4c6f160dfd3c20b3381f
+:00cb508c1ab97896d491a7c386cb7e63816bbb
+:00cb601df79560e5ebcfd2d15c4f80b4f1d62e
+:00cb709e8f14eeabf3645f3abc17eb1cddc696
+:00cb80cd30a2f0bb7f0cf6481fde8fe6ace263
+:00cb90c847a4906a0a77ad1224b11d984b51d8
+:00cba032a56430f6c03e640e281ba194296676
+:00cbb07f47399a99e72e614d6c220225446945
+:00cbc0b889c8a9ccf54d97dc0aea9081019da4
+:00cbd0a0b642e818727ff7f003cf307ebdc80c
+:00cbe0bd8353667c0588d8f319ff1e02d84e3c
+:00cbf017050eb44383e27a6ff8760285904c22
+:00cc000eefbe2687238acd03ccbba28e0e0f93
+:00cc1098cd9ebad618fcda32b5c6bf91e7110b
+:00cc20e9d6dcab6fea5731dea553865dfaae2a
+:00cc30a491aaca32d5ac1a991508a9701c98ce
+:00cc4016692c614a7d6c5c80edfb151627b0b4
+:00cc50bc4b19fd5f2383b496abcd6f828a28d1
+:00cc6052eda1d79d7f9a965489c9adea9d3042
+:00cc70d5135c35aec3bfb7cc6ea8ea7f3db599
+:00cc80e21ba8b2cc5707b8b97d81260c7ea72a
+:00cc902de7416847e2d3d2195e1356126d9af6
+:00cca026529e38d8fa4b2129b069c8893d3f89
+:00ccb052fcd662a1bbe53c04c3d43e20c56054
+:00ccc08d86766dc5c7c8b1a6ca3d368cc5760e
+:00ccd04003845a1e25b2913d490ad4004b054d
+:00cce0d8a27760b75cbae6a3bc4171e0a96c4a
+:00ccf00bb97cfc791c100486f65f9107faf71a
+:00cd0014bf93bcc23581da6542d86c4b7519e2
+:00cd10fc6f4dc57b695dc0c51ef7a462638e74
+:00cd2020ed902696c7739fb6a5567723110a8d
+:00cd303fb7b14450517cb043615b7a1596ebc7
+:00cd40e144fcf44cd53cef03ce74018fa7207e
+:00cd5015e27647e8e7b112274c399146e01e43
+:00cd602475886544cf5d20c1a87e36584618d5
+:00cd70351fe0aaad1964613632ebacf33153f3
+:00cd804af57dcf84bb2ff6085a8b74cbdf96f6
+:00cd90d156592908f02170b1b638bd6afb518f
+:00cda0e02460ff6461094cf2696f2a1bfc0269
+:00cdb09146817be3c3424117c7fe0b69909a1e
+:00cdc0a748b3185973403b068f4dabb9835aa9
+:00cdd03d05a45ee7f3c0451bc43235bb596386
+:00cde0d641ebff149a892f05fde962af750560
+:00cdf000192ef2ec6468224f034c67b8fbc732
+:00ce00c6856018cd3d9074e43c3653828f095a
+:00ce10c2567d137b136679e2233edbcdaf41fa
+:00ce200858bda4126eb440a1330dc2ec08f6ed
+:00ce30aeb74a595bc96f121f7c53839456199e
+:00ce40c2b7fbb417548ea326f75ab6c8ad1e41
+:00ce50dac52dc692ca9fcbc8ae58c23850de3e
+:00ce6011e78ba3b2cf2f8ca380d3b12d2948ed
+:00ce70f2beec003da58104b7a175c7b825717f
+:00ce800f076311c0c198d85e0c344a2b805a82
+:00ce90aee64d32b4c6ea56c3a60701a026e62a
+:00cea0aced052034bc6e6f9ff882c3c94b3679
+:00ceb0debf69785c8b909d0a6d78b827636568
+:00cec06eb2665bf133ec424db2272035699551
+:00ced0fd6217f649113c28ed34f7b155d186cc
+:00cee0ef2502a4ee8d5cb2a6af8c2e2d6cbcc0
+:00cef0788c6c002194aef1b04f01337f6ccd50
+:00cf003e40a83d36a9c3fd7c2fcaabc40bb4f2
+:00cf108291d40acbe99ac65e33bca59298ac24
+:00cf202f9ba53ebc69bdda398cd44523f8a3a1
+:00cf304823f1615adc86746ebe61e55be14858
+:00cf40a3cd741cc43d28755a7896aa1621a0d2
+:00cf50c9f23119797c6d6e75075a37ea63d383
+:00cf6089b44af03d787aee4da13177fead18b2
+:00cf7077d11b57199867058686708d46de056e
+:00cf80f3116caa678434662e092562960f359a
+:00cf908c1a2b12137f394885c73bde45b07c14
+:00cfa013b95ff240e5a9b5a506a03712cfd353
+:00cfb03dc291266c5c152446675888da062c5c
+:00cfc05288bff8e0771d96bb949549233cc699
+:00cfd02bc06ff783745ff1b5fc2107bc177fcd
+:00cfe08acef1d32284ea43cd275461e7891d40
+:00cff03a47c662f54aa7131cfa17fb8774dbec
+:00d00019b886e11d62ed74ce439ea00978d4fe
+:00d010522ad00276e6fe52d1de4fbac6ed70f2
+:00d020aeab12aed9c3a122454c55dde7eba825
+:00d0300d90196b7fedd650941956b14b0c81e3
+:00d040e2c1de71b11e55bc2dc8cfcce178ae65
+:00d050a2a0d2e48925d1c5c5c60efd9e724bd2
+:00d06017d3659ba5f098cbedcb4294bdb9c57f
+:00d070b8777673e7823bb93452d899b26d2ad2
+:00d0808170e9fa000286ea2104cb82f773b91f
+:00d0900d01749db2afa66a0f799d7559c67f5e
+:00d0a0d29b567650b6f8060ace97bff6c762d0
+:00d0b0db3fca225bdda62cb4148ac1741cc576
+:00d0c0a669c0e357cc99888584d36d1a188587
+:00d0d0b54008b724e8263c138682cbe87fa50f
+:00d0e0aa59a61a31b4a2cef2d58ee4f5654c06
+:00d0f09374c1cdd28fda3d1e80702a9be13de1
+:00d100a73da203d8fbb51503cc8d88e3f92c23
+:00d1102beb45cb271be4e0dd0e50b83693d247
+:00d12082bb74725a2cf5f09d7d1afd51e69c2c
+:00d130657c323bf13da65b9f83c8dce209a2a1
+:00d1406d3ea6b2391bf33ece1fca1a15dada0b
+:00d15009ca34d9d7c80001b519796e3e0626ee
+:00d16094b8c4e9b3cd668f2b2b517a5fd72f7a
+:00d170db0e44adf88e3eea482cf4af695bf5a9
+:00d1807924f5f50a5946527138ce679590699d
+:00d1903241d97e66475e1fbf26e96d611df024
+:00d1a086e1d5c6c2fb185fc1e2313d6528ea4a
+:00d1b0864da554e6e0ead99e1abcd092ed69fc
+:00d1c04f78672b203fd76e2e20b299b1f09972
+:00d1d065a5d320b9b4b7a10f3bdefdc95375df
+:00d1e05ab7f07b91b3dcd56533819424b4109c
+:00d1f05ba8133b2620e2af85c101240603f0f5
+:00d200b2dc164549eb4daf475309b026adbb82
+:00d2103aa51f123c485ae628f5cec5252bb715
+:00d220b60d36e10a9eff369ed3efd4394a6261
+:00d23048d09e1190b2b1ff86af17b58c87bf2f
+:00d240dfba98a55db42e4c745249dd6fa0d6f2
+:00d2505cd5fee03ee0185f92c04dba1b3eb09c
+:00d26029cf6fc9858642f605da7dc6f9a8ee38
+:00d2709698522b6e35412a6b0b503a0be8b972
+:00d28098b3eaf5e566bd8712821152b1ff61de
+:00d2903999a6d04f94ca4aaaef6b59c61c3695
+:00d2a0721f737d7eb94fb0ab93089a34bcdbcc
+:00d2b04e7051b830c25407594277fa284d7813
+:00d2c023126dee8f20a37d2b3290a80ee22215
+:00d2d0f7bc0e8c789948ac74d09b82c0000430
+:00d2e018c633892dfaa101a43d7a0efd9e2c1c
+:00d2f09808e35e7fdae3d0364df057ceb14035
+:00d3009cbfe3b2e9efdfeefede7da5d7bef28a
+:00d3103ef452c417fd9629ad4cd2d0174700ba
+:00d32073f28867290056215c6c09c030552745
+:00d330209cb3436a1d4a6bef670614e72f073d
+:00d340b000797451379b8f166feeb6223adadb
+:00d350844db31454b28ba3bef2af4daff0b9bd
+:00d36089880a36f01696d269f849710eea47e8
+:00d37003de229ac4a75ccac1fdccc89c0da057
+:00d380dade1b8a704cded17c5df6aab4bea578
+:00d39089304dc784a890efdf12883e2784487c
+:00d3a0c1ab7c5480d651d002216b1d7324fbd5
+:00d3b01edde00117d5643dd2426d4d3c923c3b
+:00d3c0898aafcdc9544032bcac3b842ca4d582
+:00d3d0cdd8f5ad70f0c8373b6a64573f91da38
+:00d3e00f0bb2dc88bd7560ee705566b0dd5b13
+:00d3f06c529d0cd900f613ee3ab78168cbe0df
+:00d4007425d03fd9fb558cb83f6758fb228c92
+:00d41004989afd6a688d2d276ea1257649556c
+:00d420122bdd0e5f0eb496f648c664037b8671
+:00d430e11297881e7a56fcf28a64a7b006a5cc
+:00d44053b5cb99efb169b59aa1e79196600765
+:00d450647282df6c06d40bdf8cd8789e0338fd
+:00d460a8eca0f6204c97ad2f96b05f1537c20f
+:00d47049036bc3b5413c734e9d17b903e5b60c
+:00d48070e000e838bf875e3a0cca5bcfdb9c5d
+:00d490530a0f4384acf14633530c49fe01129d
+:00d4a0a12af313ff4e044dd28d320b772e83da
+:00d4b05bb2ea22c43f656afc14307b63d86008
+:00d4c0e263c61e4b808af24d0513a21e07b3d7
+:00d4d00a50d16dc29cfd70fbe9405fc964bed6
+:00d4e0b506e2774ac80cd45a72d882efaa49d8
+:00d4f00f84111f6f7c60dde7fbcf6fd7045565
+:00d500c9fb1b8f33af1fab7957a43896a0effe
+:00d510812cf69f6567e49318257ee83158a94e
+:00d5201abce87b0538edbc33ffdd55167eb553
+:00d530964c29f0c5edf607083603577a875ed9
+:00d5403b977d488d03fd8e9bd5e194b1cd619e
+:00d550095188122ca2183dca0442def76118a3
+:00d56084db63adb171e2edc8e5067d2c730f4c
+:00d5709359d00b6dd99202b5b69bcf6c70da68
+:00d580b1d2eea9aa46c11c947886d1d60be6a8
+:00d5903435b6acbc81d31acba7c3d8ca8d9c06
+:00d5a029d469eff8fa3622a28c957c883128c0
+:00d5b0b7122a69652154f6b8cd0d9b189d5458
+:00d5c0dc293546eede212b81da842613183466
+:00d5d049871c5f6dd80f3bb05d97180243bbe8
+:00d5e03fe21f4fe23294a4b802aa1d5e077d2a
+:00d5f04de1137f578f001b66d5d97e3ca8283a
+:00d6003a2600736c3e1269e03c22b067ac3be9
+:00d610824804a1a2cdac775afbbc3c2f09a92e
+:00d62098f01153d1f692deaab613d6e44f8a59
+:00d6304398a4e546be3072b2c3ab31312556c9
+:00d64024d4d962e14c3b6a7f5b6fa76e216368
+:00d65027075241500ec92b46794ea0a269551b
+:00d660f00d565b096d18dcaefb2827aaba5d80
+:00d670185cf0729c7727565772fd9303590a90
+:00d680b132c7378abd7c3dcf80154ba7f33336
+:00d690b99f920835b1f6795fc7e5a67b7ef5f8
+:00d6a0092ce0a7848f4181a45c1866f563f939
+:00d6b063416e557d612fcba365c69e963cf685
+:00d6c01376135d135bed5a6d125b5c1f5e8495
+:00d6d02f57a08eee1d034b09a9838b9f814d1d
+:00d6e0787fba5b4a2c4e8dd9a8b447701f8985
+:00d6f0a6998d90da860b0b7112212174ddc152
+:00d70089be41f583c15571ce781be93fe37dbf
+:00d71034fb7d2ce5b233b52171abbfe842c012
+:00d7207f726bc409e02742da0bb2be61056594
+:00d730395f786b7fa2ac64f11f471c92a791a4
+:00d7409f7388d0daa4ff8fc527fb53c41ce6af
+:00d7502f64a776bd3012c9e99915a56f4f6a0b
+:00d7609cb8758c4c8246ec22fdb05e3a1a1e78
+:00d770e04561228186b4c61bdd63ce08bfdf73
+:00d78014b82c445bb29f65c76fab4b28115f66
+:00d790f6472d735f9176e30f0be6e8d1299a93
+:00d7a02fda2d3bf86975e03a8caf467c392729
+:00d7b06e81496fab9ed7122b89ab5d036e4b0f
+:00d7c024a9005c4336fc42cf08541df88c1bd9
+:00d7d0373b9a9e91f21303a18775e6d1b3c2f0
+:00d7e09b678cf097c403d087d2b64f418f71b1
+:00d7f01531cb48994afdbe1ecfc6352e193aad
+:00d8004d7e3516247c014e9a5a3c4fb10d5e42
+:00d81017bacdf9e0067766d61babd35a0470c0
+:00d820ee15fc6ff25f6357d1dc2c70bbc4ba2f
+:00d830a2b33d0f29ed61fa10c6d828235fe605
+:00d84080438f6f9dd79973f6af29547bcd4ea8
+:00d850cdcc01c634ba043b7da1cd0d3e6eda7b
+:00d86099a882a874378d50b77fef5f56fef76a
+:00d8702e24ba26fc379a47b5d0dc5b08f6fa6b
+:00d880b3af369ed509f7c6f1d2eac9563d3d52
+:00d890292a4f0c090597d79a85dacb28a8aef8
+:00d8a026dfc0cf6cf80a7eb2399ab97e05e921
+:00d8b0b79eda5d128824d011c65f10cdba1100
+:00d8c0ac858d4298b225f0031096b342c9a92b
+:00d8d0c0a748911e4759e11f8d56a40a439177
+:00d8e0b8eaee8e8616378f18435197a4d90c8a
+:00d8f09dfde283105e03a38ba5f2600800fe58
+:00d900959908fb8d128f60173b0e7e63d55801
+:00d9105db39a6713d35febdb6652eada05bd79
+:00d920f4250e03b89019b65532b24bffded9fb
+:00d930c018035a1e41f8bfb1a344a0a62bc735
+:00d94017f48432f00fbbbdabaa483d3a7b10e4
+:00d950764be45979c8c8b881a6eed1cf6199a9
+:00d9607e858a616e1b90935bb5463e85fa118f
+:00d9701e904acd285fc7f8732a4ed8fb2ca2b1
+:00d980028fa18dd4819949f76463331aba7e02
+:00d990058c83ef7521064e8f376cb2e42ed156
+:00d9a0c83739ae53eafc493b425a5e8df1dd6f
+:00d9b0e86ebe2688edf0dafb22dda88d72f494
+:00d9c025be14a3cdd04b6bc672f698f8c223d1
+:00d9d0c1cd308555ab0dbc295246c0dab91052
+:00d9e074c4b146e07d2748992c9fa2dc5952b2
+:00d9f0ab72c8de3928c0b2dd2ee596d863fc3b
+:00da0083450178a1706af4f8f6cb871c901015
+:00da10b51fb19ae8c4faf9888c27a59b8a108e
+:00da2080aeb9eda938efbe031337993fea5472
+:00da30accdba7bd3f747d8fff0ed3c35b1e3bf
+:00da40e9de0e3098947e4460269a5b0b79ee44
+:00da50572eed0963731a1f197438e1e794bde4
+:00da604b9faa26a83eace5f7c7fda723d6f388
+:00da7096f527136fc7c9514e6f288490ef7400
+:00da80c60a7afe93dd45e0400c30471d7b2c38
+:00da90ec502f92f4069e10ecf9617a08f3a1ef
+:00daa014a7431ad982702bbcb6dc4a602b3401
+:00dab00ecd52b7009a201945299872d16e0737
+:00dac0f0011519fc3ea543ae7013cb32e44b5b
+:00dad08c298e060320bf5501639a21334007d4
+:00dae0ded2d3b61da688e966c830b5e50269f4
+:00daf0ada65b7b622c6561504bbde6159e5fda
+:00db00adf1e27521e016bffa5f6a47b40b0234
+:00db10bbb923cd3fe81bf93ea93a416e01b773
+:00db20cfc61319a4a731eaaadb656838ec2f93
+:00db3006fffe0b64504fa86122a6d31cbb7e4c
+:00db4062c049585459b93e12617d881f6d6e84
+:00db5095c7b2088fc7a81a822cc23b473d8741
+:00db60c5a3763e492504bb7469f72b8bc73973
+:00db70f52ccdc9c56565175789ddf47f8c0056
+:00db80ace74d9e7f74e4865e600b497738e883
+:00db9013f23e60c060a8d599f3bed104054014
+:00dba0e4758e7fb3d8219064838081034c92e7
+:00dbb0c9a630ac56f9a7a76fcada2eedf0c7b1
+:00dbc0b90c9dcb0f64d426c41800a43a1e8024
+:00dbd0e638b2f60a24d7e1d17d9fe9d9ae0d91
+:00dbe0e97ca52ba8575ecdeeac43b1542e19ae
+:00dbf0de289d1b46c91a02260758cb015b465a
+:00dc00998f3b94d52eab5e40c65651553492c9
+:00dc1029baa9099f29d3dc6b4785d4ad23ac8a
+:00dc2004ed6757693bb11cf112ba662cafbb3e
+:00dc30bd5cb921fef5ddf283028937b8c7d54a
+:00dc40382d4ec08d2a5231f47c6b654ff8634f
+:00dc504afc909a3206abe700730a700168f03e
+:00dc604a74c659bad96d65068d7c701b07b814
+:00dc7081f9e62a43c9c23a5f965209d6a4ee53
+:00dc801c627b488a74b8efe1bc974d6e506766
+:00dc9083f0ef2e21e769d677e6b598152e0b4b
+:00dca0aa382a4320f0054a6a393a743750f0d5
+:00dcb0ae09b3256bf561088b69a99c560195f7
+:00dcc04d0e5382d493ece0ed04e9b982695808
+:00dcd048ec1fa10a6f16929a811f7e23da1fde
+:00dce0cc7b510fb34d8821d836ceff090e977e
+:00dcf08fea430fa98d10dd37b186447a686d7e
+:00dd0012abbcfbd2b7af376b5673f4c6446cca
+:00dd10e175b61d554fba8e3410c0c0db8a81ff
+:00dd2082a618ff8ed6f3809d8f655bb00f7aa1
+:00dd30211b7dbbaeab60277694ad5d4f77313f
+:00dd4014277c3fafb5a1ac3067ec672507d38e
+:00dd50c76093dec6b2d27f47613704aa22d363
+:00dd603fb99b92029830a202bba9608a460690
+:00dd7048e27b7c30d0df4ea9716671b1cedc1e
+:00dd80cfd7620198be5fa8d842eeb8938b3168
+:00dd9001490cf7278d872a91a43a5dd832ed9f
+:00dda00ec725cc27d296833aea14977dee244d
+:00ddb0b3611c9edb0a1c1767c6830bf3f3b0c9
+:00ddc0ee22817b1fba7a0a1fe3f49eb8c5dd88
+:00ddd0e694415dda917b6f1e8b956c21b7af4e
+:00dde093c216fadf2e1c5ae624fbe5e9007cef
+:00ddf09b110ef4bb589b6b116be7f2299fb1dd
+:00de000914a9a2b1243efbce1da80360951032
+:00de1050828b570b6181b0568f591ef7338438
+:00de2099d50bf18652ca05c5996ab17c47ad03
+:00de30f921389ac17e4fc3afd26f46854828da
+:00de40b2569999d95a696ec06626ae73bcc0f9
+:00de5008613e15ccdb7ba16d167ee310690488
+:00de60798052ca66fed3d304bd212f74c23b8d
+:00de703bfaef0e66deda06dc906da7f65efe76
+:00de8046b1f2ba49b00cb63dee8a33e8caa4f2
+:00de90df130d3871b7c8e79614d4bb7ccbac67
+:00dea02b8af7ad5d1dc8d090e97c68f62255e6
+:00deb03f619548b66ac15d64f3642f04481d4c
+:00dec0e8133e71792aa3e285c676abf614559a
+:00ded0b75dc5c7973bee8c46b344ead9a76d7d
+:00dee0ac269ad1604b1d257da90124d33cd472
+:00def06ea0382d913191e387e2350d60f980e3
+:00df00425e0943aee7d477fe0db980486a4ebc
+:00df1035d7badb12f9f842d69392c1df6b6aa1
+:00df209e5f2c79d775f14ad88e6f2d2e651fe8
+:00df3081e520885dba8fe27808fcad659e0216
+:00df4002f2afbacac43ce68cd1330b851fb4b1
+:00df50e30c889ddc60523bdd3acdd874aa6d35
+:00df60c5b1e2114d56497d11e6baa56484757a
+:00df7081f496e49a89794050e3ce08c2ff97d8
+:00df808c0cca3f32e33a03f46230406daddd9b
+:00df906db2d0d9a38a2f1c9026ecb3ecbfb0a8
+:00dfa051947eba4ec72f88e1a0833b0fe1af4d
+:00dfb0b1714292f15ce66920c90173f3f33cf0
+:00dfc0484a64edd7cbc39f96634295bbacfca0
+:00dfd0c2470e90c7bf3810979029fae2fd3aed
+:00dfe0e8bd71ac5cc16c6c4bb0bef03031d715
+:00dff01a162a653a40e18cdca196282db089de
+:00e0005bc83fd47e2871ed2e7145200141ceb3
+:00e0104c84ae91dc4468c8d27524d644fa2e88
+:00e0209ae8dbfea5e991405fbbeb7fc566ac27
+:00e030e64fff3f6dc56bc019f15a6dcbcbf84d
+:00e040f32f2effe035d97f71aeaab11be55a50
+:00e050cc76db6b88899c6954329c08d2500dce
+:00e060093bcf3919568e0b39fead2d5f92e74d
+:00e070f141502e40adbefe100c6a65e63904d5
+:00e0804eec3ad3eb8d797f38ebcdfb15763a6b
+:00e0904667309e7cc18fcffb256557e75ec3a7
+:00e0a0fc71c6232dc763890cdb635caa1bae3b
+:00e0b0af88a3b70f046166bc05a765f1325853
+:00e0c0cab56dadec651dd62aba7f8f5ca81410
+:00e0d0c01c3bf8896786b8c7338f2476dcd169
+:00e0e08b554c7b8ca80f8332588a96e7ddd95d
+:00e0f0f0a4bb549148b9b17553cde93c8ba274
+:00e100778d1700a35f9a40a4891584cd19d437
+:00e110dafc96cee69e2117462dede987f7a5f9
+:00e120cc192830983afbf0f2e643ce1b59c5ce
+:00e130558c366da1c877c331b5b8ea59116679
+:00e140c8785391f898903c7a35dcafbf45e60d
+:00e150db2787cb9fbc14897549531373598b92
+:00e1604367ed31ef993d0295e28524539bdc16
+:00e170692ad84141b6d24a7e28b0a152125ebe
+:00e1808a8417327968e9a0b3857be84227189f
+:00e1905baf863d213fcdcacb86b7737fda0101
+:00e1a06033d207da9efdb08ba1013521804a67
+:00e1b0eb790642cf5e2b4ef9dc8ac32bd59a60
+:00e1c0455bcca02bcb4916d19ce3e790f1401e
+:00e1d08bf586603a619a9fd405598228d26d27
+:00e1e0bbfbd605dd613d18ec37d354bc03ede4
+:00e1f01c86b84beeb73711a6ac962e32ec27c8
+:00e2001db6037c14f504f53a421c4f5d800f37
+:00e210424761ae1145820047838ea2f03cae49
+:00e2202b507d92907ba3c8611f343fb2951bf3
+:00e2308060dc1f59934664fc5a0f12dbaecdfe
+:00e240351f5d4399a82256c9bf12002e874bdf
+:00e25085a5e2aaa7723c7500f2f46b1605594f
+:00e2606cd62a590867e9b61929eb04f0a7f370
+:00e2709d9b1424e795f74f0758b866560c3f93
+:00e2800a1981529e5201c2350e28a0d377b054
+:00e290adeb3356d788f0f82337ded707f86962
+:00e2a09682fc4aa570811462759e09dae002a5
+:00e2b053a03dbc72b67ef4bb88e35ac97d3b8a
+:00e2c0331adfa1094f39ef9edaa90a4c2ebbf7
+:00e2d08bab7e00faaeb9675fbbcb93e5bfc9d6
+:00e2e0a2b36c7655e962f44dc2ac4d49d0aa8f
+:00e2f02b13586d197f313898567018cf24ad11
+:00e300c7a467839b3b3a78946849ca6fbd62ba
+:00e3104d9238d977f2671dd78908da5b44fecc
+:00e3206c8601d8905ce96112dda5c2aa50485f
+:00e33044600aa6d2ddec77550b080be3d6ed75
+:00e34091d40716f634215c8fc4a452b4e57097
+:00e350d0b15cf5000b0c93953ded951c63edf5
+:00e36082abe0c11e9eb2c968f724afcbfd27a9
+:00e37026e7d21cb843f719a56aa67ebe7f724e
+:00e3803281d93d3c22eb601e2f95f6b0c8faf6
+:00e390b08d79563646dc174702a1dec4da3fde
+:00e3a07aec0b0e8ff57032472d7d3e19d6359d
+:00e3b0b11c86a5a620aecaf5792e826861c0d9
+:00e3c0f5b382d4810a5ddd26711fb6f57dcfdc
+:00e3d066258b855fca637212a04bc8e4ac450c
+:00e3e064714fd5b3840df5ff54acf85796a5f2
+:00e3f0be7875c28c556154bab0a4008a0b988d
+:00e400ff9f5b0d6d7f741730346a291d0325bc
+:00e410675ab03f61d8800fff93a7baaaf21427
+:00e4202c6422789866bf803ec3b49dec0d391b
+:00e430246f189d83a166ef7d336376c8ef4ca2
+:00e4408b4177a2e1914c54d3e6bc823b612b06
+:00e450d1887758b31c2406dc6ef04ebcd80f6b
+:00e4609d895334f72bfb5d29d23bcee7ce5d35
+:00e4703463785304ced01cdaf320b3ebf28359
+:00e4808bb22270b16d209306191a7af076fa12
+:00e49020ffa1f1bbae737c5bec51a9a33c71fb
+:00e4a038317d2aa1130739dc0a7cc235dfa424
+:00e4b0249a8bbb22cf11ce51452b6da7d609bf
+:00e4c0ecf9bebaa2bc174e82b918333d8e26bb
+:00e4d0f56adf38a806c22d4f347eaef09502c6
+:00e4e003e42ebc1610c8f70609c839bc337508
+:00e4f05bf89c96f51950c5add14a5f94074fb3
+:00e500ee5c3b98b31216099d4d40361c9c62ff
+:00e5103f8bda110d99dcde872eaa10c0b8b0f2
+:00e520eb07d7984f63e2754a49e70e54ad9f93
+:00e53091a8992802f58723825e18f60b35aeca
+:00e540057d9e2c4beee2691f0a59d72db7bdf1
+:00e5508a087e3f14510384f74d371901b0d490
+:00e5609b69ac1bb9a7df01eeab561e91e42a44
+:00e570d33371964c980d4194a542f864e5f982
+:00e5800afd6e287317e4be0e7d6e519150b60f
+:00e59052828ef1bf21e3130284b2a9b7952d0e
+:00e5a001ec400671d8a44ab76f6504bab2a54d
+:00e5b06a8ac0b9af0b1d8ee0efe503df4ec08c
+:00e5c01f345328c47c7ef1eb64db07a50244eb
+:00e5d02f461d223206897fa75e85def46ff6e7
+:00e5e071f8f1518e599f55a7891596ebfc8f38
+:00e5f0bc19409976343e835faf4139b1d07353
+:00e6007bc17c4f4e07c813264d5624fc2e9bf1
+:00e610ff80d484f564f80b57f659c2222a546c
+:00e620987b18615d1b5eee11cbe7b69ca8ff56
+:00e6300661d51280cdf603c7b7e968056f4796
+:00e640defa7a51360c2af0e5be48af892656d8
+:00e6502d9869e4432e345cdd721be7f7d85cd8
+:00e66017cede863852bf45f2202d3e9cdc3e1f
+:00e6704b6c338fa03a60d443ae4eb6d77122db
+:00e68092befac8f3556f508161ad7d8e8df38b
+:00e6906e7f278860d4c84bf23f64c42a59e142
+:00e6a097469c15701e415668307ac765900d72
+:00e6b02395f33940c45ae3bfe0e8eed9b0da13
+:00e6c001f545761a279e30c425cdcc728611fa
+:00e6d044e22c5179b7b85c511e5cd9bf611cfe
+:00e6e0f25f441d72cdc57013cb371c1beca967
+:00e6f0376fbd2b630ee09d9857c8971ec5e9d4
+:00e700720f840565572b7f4c0d7a46763755ba
+:00e71044f166a49af92386bbbb9b83ff5f614f
+:00e7207d078d15b9f565706c135143070e63dc
+:00e73079e37c29aef6c88e65e3a64b7c87948d
+:00e74021878bdb70931b72cd7769eae1340b0c
+:00e75051bae55c7bba3382e062cddf54c768ee
+:00e760ccf756e67e999785df122c49c20f657c
+:00e77017a2e529346decd3b571da260157eb6f
+:00e780922bf492c7289de78252bd44e871575d
+:00e790b19398413368eb99fd457c3cebc6e244
+:00e7a0233d3e1c57865aca74e210c0c877bb20
+:00e7b007dc35f5484d7844caf6b79d0d1ce0a5
+:00e7c0465768d7785686827f1d77730ee8ab1d
+:00e7d0a2a884db1acd4be536be119fd9f7e69c
+:00e7e0807a9374cbc0121f9cf8022f809c7c19
+:00e7f047a7ccb862493091ae147f982fafcf19
+:00e800f92e03367d61eb02f503ba4f920cdbbd
+:00e810af07138a5faa01c1a3568fdfceaf8d96
+:00e8200afe4e8578cfed57d6cfa7c5138c2a19
+:00e830200d7e2a1bbc5fb026d0a62b82cdaf3c
+:00e8400a07ba761c8eb005fd6074df507bd8c7
+:00e850de800e4262618492949f876108fa07ae
+:00e8601216b7bbd84602e7ad7d4c1616beddb9
+:00e8701ec77560e4396c5f482f1fbfc1d22745
+:00e880f4597a6949615c3e7f173752359065bd
+:00e8907c4f8234ab2f4fd36ecd788e07602ea9
+:00e8a03bffe38a5f2fb2276709b2ac05b51388
+:00e8b03d47d4aa8b7cbc50bb59fadc5071dd3c
+:00e8c0142078d388605780294737e95c16bd8a
+:00e8d0bea800b1aaaeeebecd1beb5b79eaeeda
+:00e8e024fc1e7806522ee9b56556df39f15fd9
+:00e8f0b80a3c3f923bb8661b0fdcaf9936e0f7
+:00e900d81e19ed0d1dae9fb24c6182dedce49a
+:00e9101bf0c454b934dcc28be52f2f8a5866ea
+:00e92067886cc735bdffa3dc9155f71e439fab
+:00e9303c94b866d46ab561670cfe99c6ed224b
+:00e940ba4a2e34922b2adcf2f47053bf0d6ab3
+:00e950e8f31debde6e8bebce30a98813b64576
+:00e960667f2661383548f2f100cfb735daa2b1
+:00e970dd8e034583eae7bda95cc26076116c27
+:00e980d86eeb5156b1e323232752cad181b8a7
+:00e9908bc3bbb682e6fc56f4bb7fe222718d2a
+:00e9a02757e21792e0f4580054701fe302bd77
+:00e9b01f46db8698a83916a460e7478f5758ec
+:00e9c018014c426ee45544a35463cc2fc5557a
+:00e9d05428d8d22d4cc8d243c82cecfada4811
+:00e9e08103b0d669b502f3525155f567d4aad5
+:00e9f0b258088c861ac03d0612a5616c5ae5fc
+:00ea00284e3eb1fe60bed17fb06d723b66763b
+:00ea1035e3171ff3a4cf5155bd5a8bd36eaa66
+:00ea20b7c37d1b80307a097b16d49c2e67e78d
+:00ea30ab8f173d1595132da6f8125be72a9098
+:00ea409a1080d1fae9bbc3dde9c14f7a90658e
+:00ea505fe763321c65f5a4d059cd59acf9dfac
+:00ea605d246cc1048f9e5ebaed76e97495ce0f
+:00ea70c86e3e031ad788e2a13e1c05000da77b
+:00ea802ff4691f2c69511a55a92a0e709774a5
+:00ea902c379397c679c0064e3995a90156ec00
+:00eaa00634fd706e325e586412c16633516801
+:00eab0f55f225dd1d3d16e87db1cc39b351e2f
+:00eac005fef2dade6881fae8123670b3c456d7
+:00ead0fe76d2ed90c0678895c4952639046ecb
+:00eae08adca8a18d0268762e8416a47e2ea73a
+:00eaf031f0a25a03d496538f7912f920b7110f
+:00eb00726a13fd92cd7cf9600b0c5dcf111613
+:00eb10a38e58856a3f0172629f128fa0ce5f5e
+:00eb20066ea23d8d3e9efa7d8a5eb875df10fe
+:00eb302cfddb3c1835a2bbcdfe5796b165654e
+:00eb4035008404a26d08ca95d9157f1c97228b
+:00eb50bd16da191cc5403bb7c62cc400b4f362
+:00eb60d1a53fe5481c3f6001e5700996db90ce
+:00eb709ff0a7549ec7f6277ec5c94ac7a2acb4
+:00eb80944e5339c1a76f7c44541131ce72fbb5
+:00eb90eb71a658955fbbb1f59036632992aa35
+:00eba07aff221ae254e0b0b5a2f157f0ce8415
+:00ebb05828e5acd1150aa6deeed9a6678fed9f
+:00ebc0a9736efc0324b7920d1fdd3c8164fd9a
+:00ebd05a2c4e1532a1448824c40a8a5d19c2ac
+:00ebe00bd1990b4177cfa11f69116ebad4d87e
+:00ebf050e6b71905b019f07d144d2fed55be5a
+:00ec0028282a64d8725ea1b0a5e8fe984481d2
+:00ec1056c0b83d21a3221a27479d15e00d74f4
+:00ec204d0cc607413de90f92a3b6ee92afe443
+:00ec30f00fe08bce8e2c395a7d709609838681
+:00ec4026c2ff9cd5ddf332b538b7f6037c74cf
+:00ec50c8a90a8512be741633c66502d70a9448
+:00ec60e42ce8f00381beb864624bd4e75c311f
+:00ec70e5cc8b72ac7bf5273e8696f5789d4320
+:00ec804d971c0c0b180236eb640dbac013e493
+:00ec9089b07f8cdc53a091f00f64e4fa5f2491
+:00eca070d27b1db722f2995f010d21d736b223
+:00ecb0a5e0c76775dfc03fd880cc70679af864
+:00ecc0cb27bac99d95606e64cfe19fe3976bf3
+:00ecd05e27d78d26a1f299dca99b6f6c45ef9b
+:00ece0fdc42555ffdd1f5d37290c85d5a749f6
+:00ecf0ea967ed37583a9d8193402dcd7a6ca7a
+:00ed004a239bc5348328215c781fd830ae26cd
+:00ed10e16d02ee7833f6ab8a372fb0d6b40ff8
+:00ed2098c72d69fbb2f1ca0506d50ab6357e64
+:00ed301c1729f454775c239b09fbea73afe4b7
+:00ed40ab20159e0a01eb3570a9a02d9d460a8b
+:00ed50be63d2d0257199193704a7af6d68631f
+:00ed605d383fce50b77f20f2a63c5f90435735
+:00ed70b2a8fb003b61118a278f4e1bdd3c08b3
+:00ed80adca251406542d0bb47a064a6a160bec
+:00ed903354943221fc7c50bf6603850e89db4d
+:00eda0f17ba81f6139e2b1b29c46a24e2ef906
+:00edb0de415938fac4aa9e79c34af5d7fcf08b
+:00edc00d7de63be3356df032c40348d42792cf
+:00edd0dd28a5d74e4474c880667dbd95be9412
+:00ede06fb036a13c30dbc0ae52aba06c7aaf84
+:00edf04be5fcae1cb5547c4c1c1ce02584a84a
+:00ee007f6f1b9a754c9c89ef68669b7c415cc3
+:00ee10791307541dec8aaa5be9a0f232478030
+:00ee209fe6627697dff50f1e7687e9a82ea8ca
+:00ee3051c351ed8740a8ab1721c31b019279f2
+:00ee40cd283d4376727a3153eb89969a2f1540
+:00ee507e35812a8e3b5f0e36a17b8d2ea03de1
+:00ee60c2a45841744ee0177297d2ca5878be78
+:00ee70a7261ed33ee71c36d6b6cee5b409129b
+:00ee8065b40161a028e8d665dd88f918088e19
+:00ee90d0815dd5619b8edfdde21331d5b24287
+:00eea023976800e9b49774833335b975b907d2
+:00eeb084be3fc262f404c66fd32486b52884c0
+:00eec0da8be31957feada6b57afaca46195a01
+:00eed028e81f40d5bbb6510d44f94c1c96cfc2
+:00eee02620849eb90cbbd3f213d740a413e126
+:00eef0b72e17013e09b694270a6745ca74ffd4
+:00ef00db9677f53e4fb140862950fe25f973f0
+:00ef1041773a6f1949230a8f6b573a5b150bc8
+:00ef20043ee9f4be55ce808bafcc101652c850
+:00ef30a913f0513a0e08c2e1c0cc7bb4f208c4
+:00ef40e70d405195ca24f5f0b2b352499a7920
+:00ef50998b01153f9253eaded3cf2047f10832
+:00ef60a78f7f4b70e30d2cd95be65b65ffc703
+:00ef70c70a7d84d3250eefe03344a488e8e0b1
+:00ef801eb57a08a9010710d7f3c36f1e375b67
+:00ef90096fcc4c67031a40aaaf0dea09b3df96
+:00efa0bed3d9b64ffac304eb4bedaf0e51727d
+:00efb0cdb8889fb674f42a72d282f852e16eb7
+:00efc0ca3fa8c945bc20ad821dc0db9ca71743
+:00efd0d8e0760aa7ef5033954f98f162044482
+:00efe0b7575f61ba9572b46912ea0feb6aa157
+:00eff059f7b8483d8b6fea8edaf9d0dbe9d904
+:00f0003361645687d5c93e1abf626c05c90604
+:00f01035b8113287edbb8b399ecb8a3db01739
+:00f020edf637430b321783c0b8b05e7a981dea
+:00f0306a50064c9a36a4b6373423f6393dc2e2
+:00f040bec1a35e19e1815a8857800c68b98e07
+:00f05011b4e0cd08b1b5657b712a38e7297613
+:00f060855d26b66d4ea3ae17dd6988d6edca00
+:00f070b9ea641cd0bf8d055f4bd1f7987f8e66
+:00f080621ae9ede4f4ff05181e92075340e491
+:00f090a848149f34083c10f2675ab55b9abe65
+:00f0a0402e8112077230a5d720cc18a28b0b45
+:00f0b02c407f3904edfd9d4a9aa12cc6e9496c
+:00f0c0a416734b96998391d3e2e59142a869a5
+:00f0d0fe05360fa68f92a22d012d68db4e18db
+:00f0e056d8df88a0e83724b5e51f94046cc652
+:00f0f0ce28942e42066db7ddd500a0db727d35
+:00f10022356b924be6bc0e22a339da99bc5794
+:00f1108aab0c0bbb85da8fc2f560dff37dc25d
+:00f120ef3c581361209e26e5921d7fdf659263
+:00f130f7ae30b3e845b539f3e48be1d2e86511
+:00f1402b3641641328e33dccc2b0bbf79c005d
+:00f15094943b0d41bebe0b4e1d5c86e84fc966
+:00f160e9ba9318f43c192f8d5e3d6fa828bfeb
+:00f17057ff260ef5d065a36326c7b82d77d1a8
+:00f1804aeea614e9c3b6e325a37b194b898c7f
+:00f1901109b3e5d000b5441bc41aaeb29e813d
+:00f1a0971ae932393c54cbe6ecd09e0d5f8c30
+:00f1b0b4a38d030356b2f6a61469998e5f8a74
+:00f1c005129cb0b5a340d5b0a9e36189c30fa7
+:00f1d05f66eaca3ca2805f7c31e23fe0e2f8c7
+:00f1e0223c4f39f5786a369ee1153cd8cd143d
+:00f1f0184e622307458c6700723865b8b402d6
+:00f2006a1228a0cc1d0c2d661d535c913c5f05
+:00f210098f539d07afd5253bee73ecf16da56b
+:00f22085b74bd190b84214c41e6d6c6d9a771e
+:00f230d1204b93c46e6d994bf76934c68882d9
+:00f240660c2168425820c36883ff1993f69b4e
+:00f2500801e5eb9f76113b5b24f3dee602e4f0
+:00f260f00478626a527c26764b2d25bff5de53
+:00f2704f81ce4d2fa6296ba28a855319356c71
+:00f280c4f25abd55d5785a6d81e0e64e309a25
+:00f29049adb190336e621c8fd5a319d6319661
+:00f2a015206b3c3b4527e789819b8ca1098656
+:00f2b0f898098e46822e040a3506ff96559889
+:00f2c04a1de18620117bf8005624e7a936d1bf
+:00f2d0bfc594324102e00db4b136e2a9f21961
+:00f2e016df498295ca849eb661a3200aab1225
+:00f2f0f8276aec90978a27b6b34cda039ce10b
+:00f300fe0f473ca19e4e989c9bfa438f06dde2
+:00f310b4a36fc4df40618cbd54ca4370fc1ec7
+:00f320fbd9f2880f39e6724ef71c47e9439f14
+:00f3305c9c3eb53d7d0c77024f79e69d6f5f5d
+:00f3404964805372885279da7c4c8db3cb27e4
+:00f350fa2ecd2f870918ea210b9ab949695ccf
+:00f360090ed2faac35e22a5ad21feae7a44a60
+:00f370c7da273205095d3c274e5235e872ffd3
+:00f380ec521c8c1c8e0fb98f949c81c087b459
+:00f390351f61df8830775e793f52a7dd8b486f
+:00f3a0bdcf6a2dc046bebca17b7f65edc88a78
+:00f3b06ae896d1e5ace87980e05fdae324d708
+:00f3c05b054b3c64b272963ac676260d813570
+:00f3d075e50e4b7bf23154b735d3db536a91d5
+:00f3e0085994f47afc83879ea64102aad9ce1c
+:00f3f00017d5d309db5e743f32a6eff8e62065
+:00f40013fb4b799cf1af826777f906b242848c
+:00f410b1f88f40bd5ec855ead1f154973316a3
+:00f4209044104df152fc704e9b57b2d28aa356
+:00f430c93c0083f1acd1a7027744d236d87b37
+:00f440a6962fdcf94d2d789e2b1fd5df3bc6e5
+:00f450afef5b0c54b90f545c35aa3bf481d64b
+:00f46041e38a235e017263561a29bc320fd37a
+:00f4709b0395fa93b6c2620c97a14654429064
+:00f480ab7b35776a798b7d5b48ecd91d1dea0a
+:00f490da4e19c7fa1901130c4e5b57a84390de
+:00f4a074ed32155f8c73a4284aaea6ab0e468b
+:00f4b0a74601c293d95abd066e47c1fee1a27f
+:00f4c0ab499feef2247eda1e8bb697e423cd19
+:00f4d056a0e1e4fa97dbe7d6e58e55b832f870
+:00f4e0ed74969c027e6a0d7a1748987fb0e94e
+:00f4f09d7da3b9116bd1e7dabd9e29551da908
+:00f500a61114ce7d419effaa472476fee71d3e
+:00f5105cedd38ddb9022fbb00eba6cd2349a18
+:00f5205a2ac6aff7777fde7ff38812d063f7e1
+:00f530f8b089b1a5dd0292f61fc3dc191625d0
+:00f540e338c58d2c5e43c02a47d41c740a504b
+:00f55068661c0c8c0a9cbae52bf6679484b5ca
+:00f560fabb633dc33d36299dda9259e273ff91
+:00f570b7bb039d0f5dd37a88d0dd41750bc23b
+:00f58067ac672997f34ecc120c3d2ca2417046
+:00f59085e173225c7e4619b00f5976bc33be79
+:00f5a019491afacf99ee4d2ef3f3d844064838
+:00f5b04b2b19370072cc6d39421f864a119ca7
+:00f5c0ea229728cd4526f9f87c31fb4ceae832
+:00f5d0e750d919de813979bec736e485c8b59c
+:00f5e07ee4fcb67ba781297a94ea30b014cbff
+:00f5f0d90d4a69e678a6a3dc076d7b8118cf0e
+:00f600f69de8c30d08f62702b997ebfde7ba8e
+:00f6108ce623ec248497732b1ccb6b4ac5727e
+:00f6208b35d6b5962de9eaac5bc8b4fcc39f93
+:00f630ee5a619b0c24f3cb06259a9a35052f80
+:00f640b4f873dc8f261d17403bca83b9f3753c
+:00f650ada637fc96a3fc1530a416b584e811db
+:00f66001b00299f9b9e32c187d707a1bc430ad
+:00f670c37d7f8d82e42d9415cf5afa976f7e4b
+:00f6800c43b46ed6e4c62439b7c0998d0d20c3
+:00f690fbbf01b8e40693b1aaa471686080fc8d
+:00f6a0b53c1c8f8044beba7b9ece4a1d8ea99b
+:00f6b08b186413be016c3c6cb9de5d8ba0872d
+:00f6c0c3ce09e00b58ad8744cc3a37f200d3b6
+:00f6d0815e55c26da4c8419cd376391a5f580d
+:00f6e0ef2f83e68509cc657460a86f032b8592
+:00f6f065c79f622d8c215ed566d7960e5d85ea
+:00f700ed8906249b17119ec843342181bf4abf
+:00f7101f4183dd82dcbce0dbbe45d1c2f0ec60
+:00f72036374a1bd5e73a3e9e1eccdf8a21cdbd
+:00f730198db82a691f89b24c795f21d2c474df
+:00f74045f6f8e0b25810c9f2d9dec86c04013b
+:00f750662174648c95375dfa4a2b18d7711aeb
+:00f7604046be3e38d0952bf55ee33f66635e68
+:00f7700ac8987bf9050b302f66d60fae0fbcab
+:00f7806a748b65f6b5913e8d4249f06db55d62
+:00f79003786005517796f721dd7967c76f027c
+:00f7a071ca06bde4ef63eb05b9efc1cc0838a6
+:00f7b00e52d98771382f34c1146334c770c73c
+:00f7c02cb45bfdf7acf0d79ca7bf4be1706d02
+:00f7d0c4dd5b966d6aaf4bbd5a6fcc7851dd3b
+:00f7e0559871e95f3b9b86c9f31b8c4f15e9cb
+:00f7f065c4815cd2aa3128c0901573d6dfe3ba
+:00f80018fddccf7e4308c40452e201d26fd20d
+:00f8102562a5ef963f0b76977f7941c983ff4e
+:00f820a54af04c2b40597ae916b55f2f73f7cb
+:00f830fde5ee54296a6d9085fe7738a0c7a7d6
+:00f840e6a997d9550d42e47f0675cf27e3fd90
+:00f8500020010aec1f69e8a818114f5ba0df6d
+:00f860592504fa8fdf79878464d3d77a660dfd
+:00f870906b3c7924393dad0be5623d1cce628f
+:00f88095c01a15091825df9edb5f69d9da2141
+:00f89002e0cdca814a04f83bfd68f5e0369886
+:00f8a0584520b5d7993238c5381e6ec959a927
+:00f8b0db02e7e67ff01493785b88e7389af173
+:00f8c0a08e0c859ec615cc64bc33fec3c1a23c
+:00f8d0e8262247015155e589a70cde8a68c924
+:00f8e0d96c7b2e8a9836b3f64027bd096b6e0f
+:00f8f01b6b9ede9bad7d559605ead2a03f52e2
+:00f900ee20ed46b463772270c54eb2722df29c
+:00f910fa0e4b08752bf10b7e6ce2eb1574430c
+:00f9203412ef8dac101cce4df320b8ea67eec3
+:00f930cafb1e5da43a926883b4ccdde2b80d0d
+:00f9401ec94aa2ddbc58690f3ffff28b4e5ab2
+:00f9502fa2c529eb2383fdf8cc8946d4610183
+:00f960625f45c17909dfef576621ccc062acbd
+:00f9706e16ce30f41083d9ef9d94e7e6d5437f
+:00f980de9416993967e31d9957651370b83776
+:00f9907373e7606fa02a75c6f7e9782a1d6033
+:00f9a08c86659573e3f54e055b179a34fc1664
+:00f9b0f538170ad33700298935ba453a2afc13
+:00f9c078906efba85a923aa8aab14b9b84582b
+:00f9d05a8624b3e30d6726c6c52efa9b80e119
+:00f9e03e3c486507cdc2b2825d311c9ffc0b7c
+:00f9f087bff6384abff17296f57a1fc9385f4c
+:00fa00cc60927d072ea14d397196cc459f8df5
+:00fa105b7836d4a74e09b8874e1136a3e2c3f4
+:00fa207839d321ae3c8e529d61ef0435b2994a
+:00fa3064cee306a227a43e44ae2fe508f2cd6d
+:00fa406fd3fd993f25c8cdad9d1965ddd19487
+:00fa507d01d05445e06b3b3f5a5bfabfe8ec47
+:00fa608b4aa047c5f99618ada0f3f8fc3c0db5
+:00fa70512657f01abf4f084f3d08d4037dbc1f
+:00fa802b5efd665d7d45072b50390ce326ff8b
+:00fa902e7611330714e1e10f4e09074e1ce3fc
+:00faa05009a192ac7cd498748161ad20efc02a
+:00fab0406173e1ac4b715a7377b6904b60bfc5
+:00fac0f3f4ffcd335f5b200a55b09698deb9fe
+:00fad092b89a4698ed516f2b7fc3ecacd92860
+:00fae0818cc0e1a4c98a8523eab27d2fb80b8c
+:00faf0c867342e64fe158810e321dc54a12720
+:00fb00cd428556033d8738de48535e12d4450e
+:00fb10606100e549088af47a33116f98da4845
+:00fb2008b7329e56a2a5ae539f3122b6848f1d
+:00fb30b9624fe3f0e52191c1541c0da87a015c
+:00fb4088fe3ac1e8f8d0751fa8ee4841eebc0a
+:00fb50fe2bf23ff81630a6878d0006d1ec0b84
+:00fb6020789038637956cf79f85376efdef384
+:00fb70371749d3c84adad187daec92900f1fd4
+:00fb80735452ec05702c9f876c65cc84b7112e
+:00fb90bb355d3c6138f6f00258e878bfe2fc6e
+:00fba0b921f15e342ba246a7119cb4a271b062
+:00fbb0d546f4c07927fc3c3098034e0ebf90c7
+:00fbc0c81f5c9cbca26b5125ab20ce4bfd01b5
+:00fbd0d0ef89db0c87826c91fad257997bf380
+:00fbe0f987a9796024dc095cc3757bdbed8f4e
+:00fbf0f9dbf8b94d70eaf98eae09a293273d49
+:00fc00211a00f250f2c4d434c3d229943124b5
+:00fc107f301079b00c76a2642a413ca785c86a
+:00fc200d525c6a6bf5f2a031b43f3226d1e3da
+:00fc300c109cc0386e35ac5682b39ce3e13ec9
+:00fc407129cd9fc988aee44e892345d48d2d95
+:00fc507d3bedc7e71df55731500124403e71a4
+:00fc60a0ed37b31e387ec7059869c2602cd8c2
+:00fc7063cb16e891d3b4241473f8ea604286e9
+:00fc8072a3c4711f0e342225c10e6cd970d720
+:00fc9089b204f6143ac5a1888d08c0645d2dbe
+:00fca0bf3d16534ef9214b4427803b4fa15f9d
+:00fcb081c889bcc46481171a25c39c971dde51
+:00fcc0134f9dc6e5d54fbd67f5ff5e40ba216f
+:00fcd0de7ca3a9c0423ed1b18e517e0c60eeef
+:00fce07a65af7e43cae5ebe825762961f5a504
+:00fcf0e841b6b1b7fcd177b12c3960668c59c2
+:00fd00346c1d49143e794adcc59adb32b5527c
+:00fd107de0d71a63f0430b973c5575daa36e6d
+:00fd20ec8143210c4b470696cf0019992612b4
+:00fd308d4853328dd226092396fb7b2d6b3ce3
+:00fd40a4ba66170ea385193449070e1e1ba44f
+:00fd5055b115de31c95b2561cba3512ee5d02b
+:00fd60377ba54db17176d63d2c6f96d94167a0
+:00fd702412dc018d3266c1868e3635af927f6c
+:00fd80e6dfb6f496e17d61ed2def1dd7598e8d
+:00fd902678f2eab4daad010a879e49f52dee8b
+:00fda0195e93ceff11fc108cc782a837eb6591
+:00fdb05c3f44cc3a43707357b5f17617a085b4
+:00fdc000b7b5cde0cdb727bb000f9398e7b975
+:00fdd04a1f3fc36cc253e8700fb8c72c7a1c43
+:00fde0f7f756442cf3f3a001ad2fac4dfa54aa
+:00fdf02828989be89d933fc1cfb440e409d0e9
+:00fe00249aede7366f358a90cf0269341d1822
+:00fe1043de1c8ab5d14a0d581006d9bfd52114
+:00fe20a9bb05894eeb6b331ed0c62436f22a4b
+:00fe30ce904b2fc98186f165b1734a042b1281
+:00fe40edef8b9f328fafaa2cae4a7872ae3cd4
+:00fe50ad470a1c99d5e68ee2f5936d3d6a2a4a
+:00fe6048be9b4ea53f44063c18020a107c8126
+:00fe70d3d166bc96ae517dd01ea75b1c5670fe
+:00fe80ecc7556af6a87c51ad3994885021b9cd
+:00fe9071ba2cc7b5c286de2c36e20205605ac4
+:00fea006395019b1552c2b11589db26b5f0dee
+:00feb08f9deea82f2de9cdfad06e1e8d164ef6
+:00fec036631e626e2d63cc88f42eb66e14e3af
+:00fed0d34ba1ddd4c9b764066c7ba52b3721f2
+:00fee007e1f1780a23eb058a5029036e99d33d
+:00fef0f683724c51adb20251156f2ae7c7567d
+:00ff0048dd751e1646075690371cb920d1bdea
+:00ff10a88b6830fbff3eeff082a608cf1ae7bf
+:00ff20e63af429d9b0cefd9faf41dbb2c1904f
+:00ff30295b1cf6ae63a59b83cca30ff986ad38
+:00ff408e0e10386a4de6625f7adef271bc3ca0
+:00ff50be5cd6ab2aee451d75bf1ce0632fc12e
+:00ff60a129d9a09dc72dc7556bd882bfee9855
+:00ff70852dc0afd3e5a5f67285efd8e12664ea
+:00ff8012675e1c1d7e7c2a54f5f49fc88a5ae4
+:00ff90c7db9af92077fe2d94ce07e58c0cb92a
+:00ffa0487c0ed2cf7b31d3c658c5bd1741d1d2
+:00ffb0fc31387804010fa9a481af1005552814
+:00ffc0bbc71701de7d58d7a37907daf6bf9393
+:00ffd01f5e274e5b6fd6b264ed804f211d2e6b
+:00ffe0e1e83a979308d789c8033d81777f5909
+:00fff05737d2edc5d3e7326d58f874a484cd67
+:010000f1be19bd0483d83463e1b4a4bd4ea887
+:0100106cfff3e603b89cb5c642499ab2fea46b
+:010020488546708d4f0ddd2069d69bd7db41dc
+:0100301d67614ca27ca5ea596dac1ee50e6dfd
+:01004003659a881b87ca509c81e7b2f42f3cd4
+:010050c7187ea48b5f437935d2db0bc755584b
+:010060aefa80cee6b777c97150c48229cdce21
+:01007045715c5daebf1f71ce6a86cef3c10c45
+:010080326911c6541a620d9b550ca69f068053
+:010090811c195fcdd2e747c5af5826f90429e1
+:0100a02a01c263208184d8498c938d11c5bfce
+:0100b0dc31a4c48cb641d667e8844713a7e67d
+:0100c0cd9c3d57fd04c8e9b097437c6996b5f3
+:0100d051d22a16f3c02c064e50af0bd9092519
+:0100e09f8a18cfa42a79703deb3a816fbf09c6
+:0100f0e969dc6d0f3a0208b6c510f74381275c
+:010100309fdd43874d411599289f9194f3d5df
+:010110f8cd70d645404b3882f3935a59b870da
+:01012069e4fb211cd6282c2fc5756d7019ddbd
+:01013061f8665f505200a69d9ee3c9a598a5be
+:010140b8321bc14204d9c7acec4dabd48f5ff0
+:01015010910dcc208f3023032909068ed05021
+:010160448764f9bc56b7535c7eac053700b481
+:010170428c50d108de6197fdc60bd41588964d
+:010180ea3bdef8598e195c8c11bfa90466ea1d
+:01019033686b5f37ecd10108eb66cfd6807fdc
+:0101a04fea9a0230bc243c1c036c46238f841e
+:0101b00ded71069960e9b3ea0da22e8f10c343
+:0101c08733efb8e989a83690af28fc49b18516
+:0101d02dc8249693b5e83b07a2fba8e8accac5
+:0101e0313a1d09b73393629ed4815140feb153
+:0101f063e0f6699e84c7bfab71096689fec09f
+:010200e9c3f55ea76c1b0d59f678ee6b62979d
+:010210bacf18b3c6d471e9e3eb30655cbd45fc
+:010220723b2e6ae9e13cf7283d0eaf84bb0d46
+:01023006282817070cc546d17a0c5450b5cce9
+:010240808c477f9545ccf35f8b7fbf8b0143fb
+:010250a4154085c839375ce115394606431d35
+:010260c6da52512603509750a0bd91cb841ca7
+:010270bc658643a223dae7c0f7cf3136a0736e
+:0102805e70781d4b1ac217349aec98021bed48
+:01029013d9c7a8619ea46637906b3080f67d0c
+:0102a0e0c0ed864b3a30d954a439b9212b9797
+:0102b0b9e5e529bc5ce219c5252eec3d68a0e4
+:0102c0cc880e5559bd22f950b5d516baa26111
+:0102d0a05122ec9943f49ce336e47c04a73f77
+:0102e0fcaeaa78f39b05292c0589940ad954f6
+:0102f0fc0ac7e5d8c65a28ef85f9e32558e2ff
+:01030071da6218f8ec9bf92694d24ce214f5db
+:010310357f96921b16fddc086d2013c6e351c1
+:010320b6bb98352aa74fb00635b76d230e6a47
+:010330879685533742bfe89928ca6d9ff53d05
+:0103409b8664fcdb57a8cb10eb246a24e49f8f
+:010350a1fb4bc157661784191d56d9c2afe2fc
+:010360ab21cb494d0c2284efc0db276fc88c13
+:010370a2c22e683806e8d3de46075eaf83a452
+:01038028b23e72dbb05d059aa7cbb0feb40e03
+:010390e54eb6f119b944f890c6a262183c83cb
+:0103a040a8b624087a4280cfb75554477bf87a
+:0103b099dbfc53d783382530ae3a0fa3e91b00
+:0103c04468ea91e88c0efb6a4a1ffd2a910aaa
+:0103d04c0a97bd2079d8da416adf07650cd178
+:0103e0e6913f6113e2ae9b151d91d67ae56a76
+:0103f00d6ec30911487c3729a590ab0c5ef223
+:010400c880ee034536ed64734d7ac30037de84
+:0104101009103089a9fe81661c186ba7b25aca
+:010420474904c6d49c6bef9477553f90a5d5f5
+:0104304276709016d6bda9db48d632b5a86582
+:01044097d30c33bf2ee01c698af1c655fb430d
+:010450cb1b2f51f6c78154130151bce4e08213
+:010460c248b049d22816d32160b1657ceb3f45
+:01047066e44ec3ab98c97358086ad3fd4b76bc
+:0104807533b24cdee60dfbf8650d99bb52e5a1
+:0104904248230c3b883a0afc3490b0922db532
+:0104a07bf6743adb2e06dbe2c2c5c5263973d6
+:0104b01eb4a441e4120701335a7d669dc30f11
+:0104c083bcdc8e12bfb25025cb9424accd5e97
+:0104d0c065abb6d5e7c4d9d94d025cb0e7915e
+:0104e0ec4b2ce75c7817e076cd1e0455ddd9b3
+:0104f098883b6c513daee812a5806d757a0547
+:01050004827277681a23596e7029211c690003
+:010510f8a8c1ab939ed9b0aa3ce271a7354578
+:0105200b6158abb5ddf607734051d40d5b2e4a
+:0105301eac677376d96dd6020e7bb9b669200a
+:010540559b43b2b74dd61cf0f813c28be6a341
+:0105507158a367ba2b5351563801945f06a9bd
+:010560c8c7ff2774b658f44ef1b06e0e808bbc
+:01057022db03b453f8b4d9a3cea10b10e17334
+:0105807988790c79312799d00484574b6ce760
+:010590a9eb30808f728500afd4687709eb0bef
+:0105a0ae9f137b21e992cb766b86453afddb4b
+:0105b0474237835764f7423f6050d087170119
+:0105c0d0db1a2484317d073657c0433b1692ad
+:0105d042ada8cad9eed905957b6340dad96efa
+:0105e0ea701f8b36cbd1b263b9b19b521f0664
+:0105f08728f506453e1e7d5bea1a2c773b24f8
+:0106000ada2aad8375b4a5107f5eef9db4ab48
+:0106102020cc461f443afe6795631e4e31c7a0
+:0106200772e6cec6e9caee5f97d16229f73681
+:010630042b5bd22d2eb13e70f4f379e224f269
+:01064026954f897f10b2e5d8aad39c0408f2bb
+:010650668609cc094deb5a4c58a7d045563826
+:010660d6757df17b8f6cadd3d1ff7899a16292
+:01067034e092588c175c9a91cf5a8133e563ef
+:010680c5e543f4394b21baeb66133d9483939f
+:010690f6313c1dc0dc4804c2fafa5230360389
+:0106a00fef37c2da5e688a4bea71a32f88e3cc
+:0106b0c80202c73cecf62482b6ed2f54740ef2
+:0106c07de3788a950d55f407b851ed73a9fa40
+:0106d079da547386c2abec3b4ff73ff247d3d5
+:0106e06d685bebb3e9f8c74b4ecc3cc6f20b96
+:0106f00832d1201abbe4833db7c0e0f6a69e25
+:0107006b455982be18e2942ac8ef254dda6257
+:0107104e215df7b0bb83900849c28db78b1c4b
+:0107204af7834ae61c9a4fa20d481d2d187d88
+:010730dce349edf89d4b1b5b370492083b49ce
+:010740e6486a8ba64b7733352d546f83c56d4f
+:0107503c6e0484b5c32143532f8a27ebe81c88
+:010760ac4e2a2c72edc538b5413b72cae7a163
+:010770e1b552dfee1e3e48376deee659a88651
+:010780260156278a38ac192d356b022cd44630
+:010790490f764fb7fa79685af565d01797efe5
+:0107a0de990ea6f7dea20ec80c1429256e8df9
+:0107b04389d1ad45cbf5eca694b27e6418baae
+:0107c0597db44599c01d95ca10cfd4ff059079
+:0107d0961aa6884c89e66ccbf6bfe8880457a4
+:0107e0335f8a7248ac8040b6e30d7f8cc7ba0e
+:0107f028f8b9118834effc2c3414676c4b296e
+:010800b3c4b5a8edd867fb5d03bbddb7fdff39
+:01081062446c5b36d697735455e02ac9aeb995
+:010820524a3da2130223084368ed3a27a8a402
+:01083083aef419b0d411b1406ed7111b5e2f0c
+:010840129879cea611e608d59f3a0f85cd30f5
+:0108502d636238620c0541fe7aa4fd79182a00
+:01086078f30ecc63edf3d6440fc27f0f74fa52
+:010870bfc4963a69b2bacc3e5bd6800c7d8650
+:0108803ef2fa5a21f2c51ec28a4ca4a3f25466
+:010890e6e4b46081b225916c6ce98c71186b15
+:0108a051e4b94be5c31ce220b0af17151d0e7f
+:0108b06b9204026df08f704965b0d54edf9069
+:0108c08acba8188fe267785eb100f0087d3d5c
+:0108d007018b010b4054978366d9e55bf48cf4
+:0108e018d3cd5b7814f535c2afa3a0c8e54988
+:0108f02fb28d96ad72b5e211b5f2030b2fafc1
+:010900a41ad5baf2ad79f47b8919dc142165a7
+:010910627034dfafc0d187d11fd9a8caac8358
+:01092047840eab9f7cb8c4534b52ae72068774
+:010930474975aa54a1ad22e6e8472617a41835
+:010940d859f7f6d15bc83402f1590e2d4bc003
+:010950d64c57bbe6fb97845a811431f71dbd04
+:0109608e607e15f90f5c92be3210760bd03311
+:0109706e9897b315ab519e6d7d8f904c152865
+:010980d0254ddee12a4c6c8c16d4810d893d90
+:010990ceb5a405dc52b3277452962d39070d45
+:0109a0cd5d61b3fed85efb474856836472bed2
+:0109b04bfa0604e14ae54db53c40f879a66400
+:0109c0a2e2f856e660147f861fb320e74a23f8
+:0109d07b0f6fed1ca60d7a7732ca381c676215
+:0109e0b96d18ffd60f94302479a05b0bf2f330
+:0109f082995b3a1fcb0bf32288c9ca125a4910
+:010a000a0400d88e0b858d7d9ff51892ce56e5
+:010a10c44f3285a25db7931d1683201db3ac2b
+:010a20700eb0cd824965a51a990180423752bd
+:010a303bef19e436c80e482b15a7d4287fcd19
+:010a4070458ba5b9692b6743702ba56bde2d5a
+:010a503d72aa19171e2e8c9e9771773a482f6e
+:010a60460ecb00c40b366f83053d22722ecbc0
+:010a70ad4e59d58ba6ce602109e80482db571f
+:010a804070c5f7a41775134740f2fc350dbe65
+:010a90330d41aa0d6cc5542839f76eb8001e74
+:010aa050f777a4cd1f3f4fa613f99465d5ae1d
+:010ab09837cb59301c76c4842ab6b111f4f2e0
+:010ac04043a8ce83e6b86ecb2396326c7e36cb
+:010ad013c78dc134a9a705a53a661eeb888d0f
+:010ae0b5995c3b772a10a95ddabbc5964fce4a
+:010af03cdb72bdb7f87e7342e069d9011b3f83
+:010b001183859f05ea2d5ed0a8f2b4cd0d13a5
+:010b104790aa7f0431d33405599f955350925f
+:010b20ff1e29b928e791287e61bd2ee3f26505
+:010b300bb90c83f255972ceb9cfcb56c327f75
+:010b40b55eccd26ce80d69707bd249a3626fe9
+:010b505c4674bd6e8c97efb1b070b70cb5c8ce
+:010b60c9e8858a6b7e7cb1d036f68e29f5ffb4
+:010b7047579be17ba2d4067d868d61220acc24
+:010b8085197042a2a6169f08904bd7e827ccd6
+:010b9097b1a940dd9950ac212bae8617390e78
+:010ba020b8bc870ea293018f602c8a853a1d00
+:010bb010d8a35839f6fb8e1177c5b66acb3f74
+:010bc00c8393ccc2a5bf4b154144e019de0482
+:010bd0e883a62ac54b5b7bdd8ed9b79a5bc151
+:010be03a049a67a851bc0a82d95603335d7339
+:010bf01e7cb94a17cd0d4768b6b8f35db709c8
+:010c0059196b218d76f847574b0dab13e44023
+:010c108be59ee0ecff9e3de913a6114b2606c2
+:010c205be91b17fcaa2b26fab18ffc02b75ed2
+:010c30d14d94d969c92f89b34ef356700e3d4c
+:010c4068cd40f4ede76d8065a5f29d2896cf34
+:010c505a9936be40705fc786625888cd3e2e77
+:010c60b159833e3def8b228116b69f762fb690
+:010c702740767f6dc54df83620799746610a03
+:010c8056c35f0f803a9d6bb618fbf8dfbadbda
+:010c9011b0979070390b91eed4d8dd916a3b2c
+:010ca0a9ee7f5595922d8c9be468abd065a97b
+:010cb0ce98099ce4f7c797c2755091479bc2e0
+:010cc0ad191a805b943f33eb29cccf69a6c670
+:010cd07b24a8d2f9d88366387cb6d7ca2f9139
+:010ce032a703137acd84919f5cc8b0cea641f6
+:010cf0e396c87e47fb9b480e90d6f64ea0415e
+:010d001916ad7293c9c8445076831da1a4a595
+:010d109187606c1daa347d349dd60ba10dfa24
+:010d2035c3683cb1dd0825e356d617ad6f1eb8
+:010d30ba0b4fdeb638f9acad1fc78ee58630d9
+:010d405fb54f1b5e7e9962b42071cc7bc8b58c
+:010d5022d9001683ba673309a9c1c2338644cd
+:010d601dd64517d62fbe9a2dec6d14a0b73b90
+:010d70a5ea8e1dde5bae60c71fbe81f92c6485
+:010d8063ae89cea20ed94b4cd28cb2284720b2
+:010d908d501f626838f3d8b7aa2cf894bb149f
+:010da0f5fc64e6bb5ae58e465ef0eb0787ff2b
+:010db032afa3c22ce503838d22dfa81803bab5
+:010dc07272cb354db836767ce38f47d506b6ca
+:010dd0c7395d23553872276fa81a7e2b10d012
+:010de0bfb9abcca46770806246c12245512d7f
+:010df0b5cacc96ab6affab4b0c36ea3916c3ee
+:010e009642d164dc84b2240cf326bcbef12186
+:010e103c9b53ddccf092bf08d6b91256001144
+:010e2019e84567b7c2e73369ee91e8bd3629d5
+:010e3019fb0d8a5f57ac6cfb2cc3aeb523b83a
+:010e40729bdbb3ead96e543e5abfcc952a3ac9
+:010e508cabc38c944f55d1d89fb43f364cd462
+:010e606f8cd526033f56ce89508ce9889938b4
+:010e70319a3fa06ad70115df8e38e041a740c3
+:010e8056183eea88b92f7c4deb5253f0ef9cfd
+:010e901776e085c09bfc6c8209dc1e0a26e902
+:010ea0d8f73a6d0f1a0dc9cd359ef1ebdb4e2a
+:010eb08f77db2c4e13b06e0f9cc10465587f7c
+:010ec046e8bb39f9ec6473cab3002d77dd3c33
+:010ed05ae45e6ca4cfcd68ab9f9c59217c3e13
+:010ee0d7cd61d13ad2cac4f7a8e4a25b703dc7
+:010ef08439956c4fe3be60a6fe878e86e6e27a
+:010f004345ba65af9cdf9f9bd39d591ce9e5a5
+:010f10c7cc3c6c8aa64f5e5ea34cf2812b5422
+:010f20b403c2e3ea017dbf5705aa4b400a03fe
+:010f3024d9d5bbc26bb5e59a0270b1360cf752
+:010f4063a9467e8ab7e8f0f9d6072924a05e81
+:010f50eb547422defb77855adc8fd12de040a7
+:010f600147235423893597700ce674c139480c
+:010f707ef393ea7686a02f5b635d4fec9cb4de
+:010f8097b65b6ae8f093ff9172a10470b2f2f5
+:010f90077858c5c8d7b80d947186213c05e817
+:010fa0cde7adb39032a55b12d0ec2d6942fe08
+:010fb0c3b70d957e5018cf0f7c4baf52a051c2
+:010fc06d39fdf9990454b79960e3a6460cba35
+:010fd0ba0e433e3512aa6083c03fa1e7e7b459
+:010fe092cea6e2add694da2cc2034d11031c94
+:010ff0063a41348366be5d028c34a52b397b27
+:01100000de41e7e93e5cdcacf1c1e4029cf61a
+:01101079375533486bdab261626f973c9007d5
+:011020c43dfe2a825fac4dcede6f7a6094054a
+:0110305dcf16ed30160f5442a866080bf7fc52
+:0110404842782f980de07a2c1c1fd1252a6092
+:0110503d73a8c94a48899361ae3c91abe1be18
+:011060bd5b47b4c8cd9502bf90ab91394e8372
+:0110705847073d78fb869cf284ee74c98548cc
+:011080fdc165286ec4c6422035ea4d2afda990
+:0110908866819582f1e8e1335ceeca33fe41b8
+:0110a0e0719de86ded51424f478cd5cd7a9157
+:0110b0b61b7199144b35c2ae3daf6de970c3e7
+:0110c0ed7623b204c7249cabdb6a8a1dc81f26
+:0110d083d6369e16625dce94a61e1ef1873d36
+:0110e01aa0b7a8f74d0e7d4254955239e0290f
+:0110f05d7dcfde42cdf1267afad19c96b54e83
+:0111007dc6dc3c067f90f8a87511f55093ac75
+:011110b34653af8cb02beb1a4c6ebf3178ae20
+:01112092ef54f3383ae1b397da4daa49c9374e
+:011130249be7666690ba9edd005f079ce6a124
+:0111408bb62d2052535f40a9d1838a8fce72e2
+:0111508c57103666546f29ca59bf7dcca22f90
+:011160bf50172c063e293cd99bf6c688410f7a
+:011170b2f523cec3580942fb2d573a37b1a759
+:0111801e0950bbd526ee68f284c64493ad14fa
+:011190cffd29281f9732480e8b34c296c5113f
+:0111a04c8609becd3b418467a71104e8229bf1
+:0111b0c89642c85703d5f6eb5f552511e8ef7a
+:0111c03193e7156d00381cfac0273a7b9ac9cd
+:0111d0395c19c12a05be29ffd4f7221f2891f5
+:0111e04ea93bfc662a69cb7f41b05b4bcdedb9
+:0111f06827f9cce98ba512d07ea7431b47cf8d
+:011200cf426c6670371d7660c0abc517a67675
+:011210d78095fb2d74dfe10a74ae61dfe70a1b
+:011220d653e6ca10fa83ddc9010465fc984508
+:01123076095c1e4cde063b2b4aa9e97ee5a853
+:0112406c2062a9956ef49789e95d3b99d0dc43
+:011250295f9c807a1d167a3c21790dec7698c1
+:011260a005fc3b77025a1ea0ffed5cd76c2038
+:0112701ca4144122a2024d40eab0ccd3ee8907
+:011280a6c40f105188370e2ed1d7157c7c305c
+:011290492928e9aac0668ae993d90b870176e3
+:0112a0a85987777d00acd604a990f505c51122
+:0112b0c78a50137d19534b7260346d353aba43
+:0112c07247cc1a29643d9c9171592227eaafe1
+:0112d04993f101d1f83c0e21c871f24dbf013e
+:0112e0ee85b2418700a6d100ab8a70b056aa60
+:0112f01fc9651916b4be6063b98831efa00b31
+:0113000dc8c750de9fe7607880d53c30802541
+:0113100e924715137c5a3ca86f7a076148413c
+:0113206c9d079acd2580a9c216f5e5322f29f7
+:011330499853e75d90455e84a21f1e189bcafb
+:01134076b9d0a5f6a3794a1cbb4a15c624cd17
+:0113504d80293083863e7840066138a66cca5c
+:01136080ee5bf1add4fc38178a157de7658a73
+:0113700b93928e3a8f7f1d341365a213c387bd
+:0113803ea5676d7b2a70a911083f11fa0faa80
+:011390419db888cd489686c843e5c344fb855f
+:0113a0ed72d1207fd3c08f48b0e217b22df392
+:0113b0d916c55160cb30ba391118e8aea41153
+:0113c0ce8ab1c3dd3bc661fd08df07ccbdd3d6
+:0113d02d94a084a62b570cd4533eaec26905dc
+:0113e02cb87d7ada09e47a24991a4a51821ddd
+:0113f0ce923dd5c2c717c7bf5d5f678878bdad
+:011400047f0e99641cc05d5ff67ceec1c1aa9a
+:01141000dadc41d5ca1189bb5c91046780babd
+:01142016dc8739bc7f9f1c9dbfe3bc44996670
+:011430bdf2f51b8b7f4c1408f4f1347c139b19
+:0114409b329c710fc748b9c64ac0bb551652a0
+:011450b4ffad87f97073a3830c5aec26430728
+:0114608adba6be6cbf6f5820c9be1dbc0d99c6
+:01147085b431dd325a944588d9996576d86824
+:011480cd8136e2d9c69136b89ae05d776ff198
+:011490fc2d61e3ba57862dfe36cd4a8282d0ea
+:0114a04b286244eb737257233cc8b201382a60
+:0114b0d10a30aec5041d833737d4c499740777
+:0114c048637a4e2cea951e4b0d6f13f8247c90
+:0114d0a29a5dfcaefb898767070cc302e31771
+:0114e050cf28912427ee082747bfd29babc4d9
+:0114f09e8db3d96d7fe0dab68802f76a434b37
+:011500e8ae0daecdf2114433b418946538c656
+:011510e5db4dd98ff80a0f19befc5c240009a6
+:011520ba2c4f44d701b128ab59d17eb672183d
+:011530da85a29e1ae53788b2b7cb618cb3d35b
+:011540afa2d6ac49f6fdbcd0f974fcb54e3827
+:011550cf6efe8382fd82e9e973f22e6512769f
+:011560422cfd9875f57b80ed5451274e8fdd7a
+:011570c3e6f426d4d8bde31085bc3d3b599705
+:0115801e46221112dc0a307a587ed173583e54
+:0115903212c91f47d2e6c5a4076239fd7f3409
+:0115a0ab20277d495149e2be020cb34c900648
+:0115b0cff93b8391260c0c2713f2c44ea4d93b
+:0115c0fcf173f9a5125e84d270c0b9ede0bb5f
+:0115d0452174d1efae14c24e567843aab55e12
+:0115e0a997fb2b301cdf35cccdb9ea1d2990b1
+:0115f09ef691d6813810e05c916a7d9799412f
+:011600aa14944402bce28d046bf17a7c9348b2
+:0116103ffdfae0add60d4f423a68f54a27e7c9
+:0116203ebec48683700dc2f3252f3f44a7c48c
+:011630666e3e9948cc73ddd0d9b3b0c9965475
+:0116407bc3a470838404b44bd0e4a4b4592171
+:0116501857b61d8c0f3ce80b901daa615409ec
+:011660ed8372bec325f98f6628b0d6ed08e76f
+:0116706f2c2e5ef2b24127630b9fcae246cc0f
+:0116801387d7936ca51f5e27e89b78138dab0a
+:011690aff80d110e8b9c059871384c67f435e8
+:0116a01c3453490b3fd40f3b16d931b150dd04
+:0116b039cff5bc725bc7d87b96a79d0e7ed1f1
+:0116c0e99923826ffe5e3ebb068e90f79589f8
+:0116d06d13b8efee740c5ec15e5a1fdcffe4bd
+:0116e038cc8b1b43a8e9ec1e56a68ce208eaff
+:0116f070c0839df84f51d16c8c8de34a499a49
+:0117000072fa328fb736f02895db3e8e07d44e
+:011710f7c1f9e8e6c1429a35d31722e8a847aa
+:01172013a8afb78e46178a5111b7725936d0d2
+:011730648a792e1bec36dcdb75148432153b73
+:0117403db8a618b34de97782fc7c12c893be62
+:011750ea821a3a6558d36034098bbf8bff0297
+:0117608c3d3f51e2e40cd74bad4ed9cf2415b5
+:0117703dbd3218cf29e6a6dc96975f45e9f980
+:011780516694cdffd7da908bfc97227d198463
+:0117901b3887a6a9cd4d0196f9acfbac1ea210
+:0117a0a2842fc393e6306920820476ad8cfe4a
+:0117b00f00e94e848493a0acb45c9a2bee54d6
+:0117c0db4be3d4091eda3baa88fc334e94428c
+:0117d0847e79cebe5565d28eea6ee7c3b93ec0
+:0117e0718e852a8a4132afb83e7e1ae747116d
+:0117f052c95c20cb79508abfbdfbb566908b56
+:01180037b1eb19569aedbd0116764b39963be4
+:011810a07aaaff3a3d736ea0ca631aac397b74
+:011820c3f87a34b2a70fe2785ce8e80b117e7f
+:011830b254ce8fd6a0d04e08c4fdd6e972f6a0
+:0118407dc9fa48d44327959677cea02abcf4a6
+:0118500873ed9171343f6d1fcc3cc69dc2948c
+:011860a0f8824ee9d32267dabdc7cf6438b665
+:0118705b3a591362b1de93f3eac8ac452776fc
+:011880f39952a5f03dcdb4add98c823a9ef96b
+:0118905681f7729db30049598d3915e6619995
+:0118a004d7a37f72863f11311bbd443ba0057f
+:0118b08d613975ffac551673c775dabd272c27
+:0118c0b5c7466460f28682542ec7d0175e94c0
+:0118d05f9452304c0d57c8a9a53a2871d9f666
+:0118e08a467f10be33815b5e6526b9a9a66a97
+:0118f09b589debbe66e85b185c06f1555ab02e
+:0119006f2c398f7febce6a1c3e617d7f771179
+:011910c88b4b736f598f9017246431b65b548a
+:011920b2e42ac8016060d95d9c545ad455ec32
+:011930c12204300a2a9fe3efcdf134e1bc1486
+:011940e1818c3b2e9235644d7349b432d90116
+:011950ca66a3fa56cd4552acdd9345cff554e9
+:011960ad09dc797829cce7b0c75e1ad94112f1
+:0119703b02b982c225f6d775398cfde1355cbd
+:0119805972e31b9dec1f23bfe80a956b29a96c
+:0119909ed668f3b779ff328aca2212c9bc3d6d
+:0119a06b2c8ea6d34e5bdb5fe3c0fc452f9953
+:0119b0df66e6d2f27842e942b653565bf88de2
+:0119c089ab29fa71d6b0a441dc448b54fccb38
+:0119d0d081c9aa45cbdd229dee05ff7a6430e7
+:0119e0b2e7123cfc1a75e652703db2bc8731b0
+:0119f00677305c012708ef286c1df5078bb6a5
+:011a00d79c4c8fa3769087816dfda3c311c650
+:011a108f5257feb98c8c33824697a7e3e41ed7
+:011a201710b142a82316df54ee0686b3fe0127
+:011a30fa68541c32d7c37455de5460a0585438
+:011a4042b7d9ea8d05ffe98422c37ef6a0e9fe
+:011a5035c00c665b22519b53d4dbcf033b1e1a
+:011a60e439eef9757e4639248fdb38eff29fe4
+:011a7053fddee8b81566e470049e5796ff8e3a
+:011a80bc9ec840da56d887979a84c373f6aac8
+:011a90c352fc24f1054b53a4f07b9d6e5812b6
+:011aa04d0895c42e65a05771734a44a7c1f828
+:011ab0df9fb3435fee3d9c7a02e3fb7b179a92
+:011ac0933b37fd2d4f22f4c0393dd06206dfb5
+:011ad05b090c2f1352487d508a3d583059ef54
+:011ae05b9a1d4dcae9d824b6e0518e5f785c5f
+:011af0aa7d1a9de02a5fc56652d9620b21f26c
+:011b00fccacd056082f749d0c83dca535d130b
+:011b10063763c2cb42baceb300c41f59f9599d
+:011b209de3d8cda1d6b9a18d53e4791e406c99
+:011b30dfa4efe7a47ad790e4e383f160fd7d37
+:011b4022fa914cf68a463d629b77e7941f0e6f
+:011b50124465a87163a6a29bf0f9c7fc8be122
+:011b601c598361bfcaad8e5ddbdfa7c4a0e703
+:011b70874c2ba26c31120b0db758ea9cacc945
+:011b800c1ee7922db7c4ebe64e337aae5ab718
+:011b903275dc9e3001dc8f7564942517310be7
+:011ba0c37dd1af5a283f0db0d2d277f1547d20
+:011bb01ce10e310982eb520718ef510bf45b9d
+:011bc042cb9705717b39643992c642b532cea0
+:011bd0bf3cc1f3ee3e91a8a9303280822b21da
+:011be0cc5becf57a306998ee05a953aa9fbf37
+:011bf029611ad839e9cccd5a860ecbb4eb6b32
+:011c00afb836c54d8e55255df31e310134ae4d
+:011c101e3328871adfc0c30751abd9ce6355a2
+:011c20a9f1ce29ed7531330845f5f7cb700bad
+:011c300e6f0169057b80d04fd4a572bfa1a4db
+:011c409c7f22da036f43ab77befcf5a0e0e506
+:011c50a700a87c287934e2f8f772e49227484f
+:011c6028600dc6ccb23957404368542ce36671
+:011c70c6106a3b52fb878c7c1428e930906b87
+:011c800f0e6ca2b58bb394c8f0ab2c3dad0953
+:011c90277f6d9a7c55da507c9374bcff317b4d
+:011ca02858df9962f3435824bfe92d5f50f423
+:011cb0b516485afc855453fc8a2565ff267022
+:011cc0b3e2ec3ea98a53a83b7a2b8803d8c48b
+:011cd0c33f89576a3a91c846349e7b5a9be635
+:011ce063d1d56799b7e58a653e3ac3a785eb02
+:011cf0c7c0f2a63d3b841478434508bd3cccd9
+:011d0061c1c7dd32a9b60d188ad527aeaffb5c
+:011d10bf470c8365f420528ef427009d7a31e6
+:011d2025c32fa0ce7dcc048a774b729c0c91d2
+:011d307ca43122c77e3858e776dd93929548dc
+:011d40f2c31846a98e7580e1bc0c78e3791e98
+:011d50615c3f79ffa816bf21516cd0f0230082
+:011d60f8ebd303e3a7b7719ab3c138b5e598ff
+:011d70670f7ff9dfaba3b563a0120a0ba50b0f
+:011d80ddc17bd97f68ed6a1ef7fa9833d65e14
+:011d900ab159ba715222bdbb68d8e16f4e9313
+:011da0f23f53835f2fdac351f4b35c9ab87d85
+:011db0e916e8c03157e6ccad781484e8e43bbc
+:011dc0aa055cc1621cd5c2092160992de10ff0
+:011dd0a4d61ee17e6741eaf79b556d90ecb361
+:011de0ff01b79a1267836985f7c4cbb9619f59
+:011df024a252588422cd588965cc7df6cbff03
+:011e00ccbbe1c3f949ade7246dddfcfbea05bf
+:011e10daea0e58838292e6ba02da4030b19fe4
+:011e206ff282a74a94b87b01e69929811575ad
+:011e306d46d69038f54fc4cffe21df7bc3dbf1
+:011e403e973026cd99795be366e7bc159214e8
+:011e50075fa9e30255aaaa3c2170dec86566d9
+:011e601671a5143ed2df9b94961b8b73109856
+:011e7086c99477e789e222be86c213acbf0608
+:011e809d4625a98c52ea3b0d63ef1f0b19188a
+:011e90912e530022f6f9bf090eca618e1038a0
+:011ea018bad99c7738c842685c80532a681be2
+:011eb0d619247f2f0cede7cceda77908a8ff58
+:011ec078fa76a4817e76afcf914e052f39b842
+:011ed0e6037deb3851b2fc4622b70184678402
+:011ee0dd87994f44986da160d0065224dd9371
+:011ef0b3a8c40447607f55dbd5a62e34fee587
+:011f00744bc8b26938e144bc40a53859c8a38e
+:011f103e37649994d811d036959af88a970912
+:011f20a8f7d6348690e5cf8e7b37b5db967bd1
+:011f30b07c570ffef66851660112ea09ed4160
+:011f40f76025c0425d81d27c51f59f0e01f2cc
+:011f5017b4211a8eb1b995bf5b1e9dcd8a2c7b
+:011f60eaab0577d44ac0a02936d1a601b0d416
+:011f700b14f034ef55e8d8552a337359f153ea
+:011f8008ca0e066ed998e958e4f97d58ccb8e4
+:011f904ff0a9ee0cb4a6745ba5f82b6b486059
+:011fa039c13396b210b53b383c45d9a286bd2e
+:011fb018c57e43ccca2a4e1202f6755aa02b8e
+:011fc0db56252054ecad3e7b4a3185888231c0
+:011fd041a4faf6257246f767be0674bdebec09
+:011fe03223341cf2cef9ef52335aa382cc2705
+:011ff021cbb6f3f4de918e58a54a59b2e59b0e
+:01200066d173db04b2fb29bac4b304f1dcc943
+:012010ea02f265eecbe4f5e0b6aba12069043e
+:0120204a9c24210e7011f5f1b433cd34e32d6d
+:01203014575b3cdeebbe4ccbd71abbb60b1779
+:01204056e0af538e9f1bac53361702fce6ac4b
+:0120508d5de6b584f9ec483ecd18715a5eb708
+:01206094ce6a17058077f9e225f338f3ad58b0
+:012070cda21c67a88ad8ccfabb58335275a733
+:012080b75040277f4cced0ecd3ebab7f08c7e7
+:01209037f07cde876f8f4506415cb87ff87e41
+:0120a0e22c205e5e8273df66774003c506b001
+:0120b0bedd8897d39566415f261884a5269fce
+:0120c05761a98ff3b989495540ce4a60514bed
+:0120d0fa97eea776181c77246afa39e2dd1343
+:0120e02c505f92e70fd90e28782d61bce17d54
+:0120f0196ebd24738aeca4e4ddf60000f0b268
+:012100a5f86ad54d6b39c301c555e30fe6509c
+:012110e5e3477ed564690ab16bbaac7911603f
+:01212024d4ebfea42955c784901121a5144a1f
+:012130b2a42fabbcd4e7a6d4b0ad454c0c3f2a
+:0121406e286eb668065edf2eecab11b40ae0e2
+:01215004ecbaf65700704c2f7b9c4dea5de712
+:01216055fbc05246ab7c9fc1812810d228591d
+:012170b44ab9c2829fff85561e57e15454a7f0
+:0121800a06f128f16b6eec2ed066974adb1fd6
+:0121906671440e11b944e134fb76ffae40a7b4
+:0121a0ae0018d9fd9c88b119826f8c6405eeb7
+:0121b030b04f34ebc6cb1b83aabd1845778af2
+:0121c0aaad80e59d82427a10b2de4a54216742
+:0121d056c12d8f16b62f4603fb60d20ca0f0c3
+:0121e076dd3568cd0142280a2048169aae2bdc
+:0121f028f368efdb08a76cea50df6753da4a3b
+:0122003f16d55988c90ef65940df74fcc456a1
+:012210fce5f01bf73e09913c6b98e381cf4f1e
+:01222069ca7abd5acc8f5c510edd3a08428a40
+:012230eb8210729afc9d058f10739645f9989b
+:012240f746495fab9df2c3a2e37616440e68fc
+:01225008000d0745a72a11e9495dfbc8e1c467
+:01226011f4be7168221ebd46b1aa49e632a303
+:0122703ac21572494d05ac99234d0205c09b2d
+:01228066fe5a53b37c211caf7bc7337c8916d7
+:012290431e9af9319672b495c3e9d9bc130ceb
+:0122a01ef71bb46579a5fd0055384608c26f15
+:0122b0b987dc9a5cf93446de8ca0a68a89acbd
+:0122c036692ce6ba3f8ab79e4d53ec3eb8c622
+:0122d0e65671bcda430ebff4aeecddbedd09d5
+:0122e04ce280e26eb5cee7934918fdd942a064
+:0122f01a08f21ed87a1b1efa1f8ac733a60e12
+:01230083905fff508b8e85a4d67a1cc1b608b0
+:0123102a20e7d98385d5d86cdb083ab5adc75d
+:01232089c9c982f17d3681e9d8171bddc18be8
+:012330ceaf3e24d6772571d27c7808f7b30676
+:012340621e51981ee353b7ee2ec3fea9d0b253
+:0123509b211bad51bb8d935ae7fee49979f494
+:012360acbbe5a691757e4d45e9b83d2d913132
+:01237060c44be68a139a0906be3870e256f33c
+:012380ee1a07f32279280e58a02d703f7bd424
+:0123908f2ea8dbab4d708a47c471c7841b4422
+:0123a0bcf44e433ce584aae4a3940716e0cc4f
+:0123b055dca9988a75e575c42067882495120f
+:0123c058617a3d6aab4580ca6975b9f856cb7f
+:0123d07ee820c625e9ceeca061661322ba0ead
+:0123e0cf7d65fbbda538ecde6070362463a940
+:0123f0c6477273b8e722218f0eeaa1148d5360
+:012400ee18bca37b8441021b452c4d1dfda1ac
+:012410ebfe7cea9db7a9a7e401ac3671ba51df
+:012420b9afee5d8f0d39ff169f47f6028679a7
+:0124301bad01ed9f71ad6790e407aadbf51c6c
+:012440ce768a32e507245952e0a0456f644d76
+:012450217bfc93babdf43977c4c044e9d82dfc
+:01246074d04bf2b04e2bdc30d5f2cd560d671a
+:0124701e570cf502acafbee1393fcfe9bedea1
+:012480078426995ca8088c678f61378b64a498
+:012490a7616d4589636f03f15470096863d91d
+:0124a0e862f1cb1f0b07ca353b725c15c91dea
+:0124b06273555dce4bd3fe6f1804c9a3fc5910
+:0124c0af946fefb0c164843783715994c41254
+:0124d0cbfb34a921f334be7aace08ea8151ac2
+:0124e01d3bebf6fe7eb0310793df1fbab166bf
+:0124f0038db2d0380d354be8da0e631f891b64
+:0125000e0f39d282e704014d129b2d3de2fab7
+:012510eb079226159053c9cf7137e05f7ba418
+:0125200379b1118356626183920ca43043ed78
+:0125308a52ed556f9cb45147176a3ba22606b2
+:012540406bd39e09ee7aad551bd27da217763b
+:012550b8ce73a69c38183935edf4be279b7642
+:01256082486852c86a9689cea155986144abe2
+:0125703d7ce2d7355e2cd28a3447b2198f4968
+:012580153f40892fee81f81e31c4ae2a9ef490
+:01259066832dca0327f88eeda977915e34cc1b
+:0125a0a4a3190ab20589ca6413ca321def92ae
+:0125b0a8e203b0d047b1cd23ddc3cdcd23aaa5
+:0125c06d2e003df4dccb89d0a7e96ea5ae1cc0
+:0125d0ad3772c84b4e79c68f0f32a79587ae2a
+:0125e0c607e3bf68d3e14516eec3ec92d1614f
+:0125f00111868d570a4497456079412ed67e1f
+:0126002b2a375e44b367f19ec0f76855bb62de
+:0126104992b964d8ae66dd133c2d3e53d2a300
+:01262050fa9cb037d212fd2b03f5b0e3fb4046
+:012630b30b7876b45284f5a4a3eb1d805e764a
+:012640404ca795c4a1c64e4346473cb7ca95a9
+:01265008f17cb633d511ffb940bae4a7b2e953
+:012660a39af6313ea6b748f1956f093c91919a
+:01267069d92fd0830dee5dc3420043dea45c57
+:012680916ba698d373428a5bccf39267bebaa9
+:012690d17a3a12293a3a99ad078e8888b38d04
+:0126a00e71f3f78891dbc506ae881fc17f7eb0
+:0126b01c9489b98dfcec9df39a0d49c6a62d2a
+:0126c072913c1df807785755c3160fc2a92f6e
+:0126d02def9748cfa3101811dfcfd10b060220
+:0126e0f0273ec44e0d00bad432c172b6830dfc
+:0126f0a360106eca1d75f4af553de96f8b6509
+:012700c40a32bf67259ed573640e29bd5c75c6
+:01271043904d54cf70d1ec78e0e8e5e12e7dd2
+:012720d7e53ddd6691fd9554859a8859a25068
+:0127305e1ff615e9089a1b5114eeab1f634973
+:0127407e5c852c1017710bf2b0ac084d90ef13
+:0127506c2fb1d0d08d088393670a2a67f8af12
+:0127602134184892947d8caba6517024585a00
+:012770dcdaf8df467f58f22f0499db645b080d
+:012780b25824b896c4ce5fa424247fe28bdb8d
+:012790ed87ef75463d9befa0103a4d57949d9d
+:0127a0b5fef6ff7add495d4acc50b285f4d22e
+:0127b0903b750a77bc57c6ae0c975d8eddfe14
+:0127c0c3914c764c5aba0f0a4361301e8485a9
+:0127d06451656aef6222a30f34d8e6bab3ba59
+:0127e00e51f324425f27f4c287541b6c63957f
+:0127f04ee9519a12daffe25e4e003f649d7b1b
+:012800598534a268121a3cc7b17e494437a376
+:01281074e400fdfe03a1f1504f60268f602f43
+:01282059fad1a547246fe010ea3a6a861c574d
+:0128306ce0ef37412d11f01f2f1fdc0ad3e00c
+:012840771e0afd95fabed19018ef683a8a6a35
+:01285032e120d21208dd3b9fb9cf2e456c19b4
+:0128600eef4e6c8e8781a6530f777d55240add
+:0128703d4e652a388409128ec08eb289624bf4
+:012880c6bb1e0d93d2c644daa25e1069ce2521
+:0128900134650263d74047825defbbfefca074
+:0128a0b1c7af1ae635d38bab1cd68e5c71483e
+:0128b06270ff2a9675a3d6426f2a65af420430
+:0128c06405851878879bd4a1d0540e48d67e80
+:0128d09cc7c56ba7067cdb0820c5ba0f0fdc79
+:0128e047525300fed3d629a025d3e0feadf7bd
+:0128f042a00a11bcc7de1c11da2d58b0087747
+:012900acd3390b3142cf2c5ad7c09b39aa1054
+:0129105f83cbc295e42b1710353501ac3a1293
+:0129200d42dd5476d912cebde1d3529aae095a
+:012930fd6e9891bf41f0f159c51dbfab9f74a0
+:0129404b7118fafa1d60e8853834e4fd6edcd5
+:01295017de47583e7c0ba36fea7d2bee84ccba
+:012960213812a1e061b8b2f975d5ca3a0d10a7
+:012970860b6f74b898161b2683fd941520cf15
+:0129802816f99e6266f8fb24bd186cd1451398
+:012990b49a4de1eb438ad4d5e7f5e41e61f08c
+:0129a0d8124139004b840b844b2de492978b6f
+:0129b070c1f48911f4fdaedb6a83581766f876
+:0129c0b0bd456c917572d4a107fddc456f1601
+:0129d05f9bb9ce6fd13ac0c40b15eeb3b2fecd
+:0129e08f40aedc09b86b8a3f5e0818a72a6dae
+:0129f00ee5da1cbc53862f0693f76c10194e50
+:012a0081792f156e3527be7fbb71a03372ed4f
+:012a10a9c308abffb4da376d1e0caa90b75a96
+:012a20392a6539daaed5bbd84ca59ec6e85f26
+:012a3026ea3955fcb6bc3bac23fa60fc3a33c2
+:012a40af079412d9d97999aa83615ef20d6845
+:012a5062a5e3cad841bce2f7e8a84ae67b74fa
+:012a60bac912b0d83655b9c771a730e24ab841
+:012a708f44bf22e191505ec6e055a5b1ffe5c8
+:012a80396725273121d66e7221ab97ce507c70
+:012a90fa84f3cba96bb17980c02d5cc2dab02f
+:012aa0868c0fbfa0550e6459af3c2a2daf576e
+:012ab024fe6c75fe963d29cd5168ede3f9e88f
+:012ac01bfda89f894f82464905452ed1a90543
+:012ad0b9dd289e1fb3ba054b04b63090fd2349
+:012ae03b929901c1d70f0787c56192465f5315
+:012af03d17821db6417f44f3115fa01fe62cdc
+:012b00084879293a9fdb69628260bdd7e491b1
+:012b10be8e8b35a96cf28408910d7be51a083d
+:012b20a5c72381b20c7216a1a11f0741eb9e37
+:012b3046fc5f0360700acfe1690f35f6da10e9
+:012b4083cbf22621de556da4cc9c6dcff5b129
+:012b50c6a46bc4582bfd758b3e25fbbbba37ef
+:012b60fc623f2d1f0b327711e922946273c4a2
+:012b70581ccb7d6003ea355eb62b0838511c75
+:012b801a30ca55226f263f001acf86e7dcc8d2
+:012b90d656e28fcf6c41fd7f1be016ad5c346b
+:012ba066dac87c987f6528433fc4adb97d0c85
+:012bb0cfca9ada1417393563733b1415631493
+:012bc0793b97f0be0d6a146c51f682af5c7eaf
+:012bd0e7766b817c9b5d598fdaab0d04c017ef
+:012be047a829f750757414aa1db994ae41af80
+:012bf0c64658534ae969249dbd88e9aed83a6f
+:012c0076e8640a9d482841de1846b16f871554
+:012c10bba3677831d3e32d0a5f8e7e53ccb1e3
+:012c20b1f94f1d03f78d7ee5ba7c5db8c2d02a
+:012c30f5012de22a4c89b53b54803474c73db6
+:012c4083b8c45d4e43af226a68ef8093390d94
+:012c5065d666da223f142fa703e3f74e5b27de
+:012c60a3c8180059d8066e732ee3d7fa2b4763
+:012c70836b966d7c7a60e0bb46ce928ab47573
+:012c809fcfdc0315546bbd8160f468305deb6b
+:012c9065c73c453fd43708f00de167793112ed
+:012ca07a81c6a93033f4f064d60706b1e04b9a
+:012cb0a3bcb8bb71ab7bdc9ba3d1c1a5f15205
+:012cc0b16730a8ef960d1a4c2f52a73b434d64
+:012cd08919b286d2aa5e1f478f83a9a9e9fb01
+:012ce0cd70e5c72d857a302c15383392a37f75
+:012cf0e1e47339a63d9ed18142520144ebdb71
+:012d00ceb0b67d14e5100c6a0745ff96ac3563
+:012d107b934bd1f59680faac1656dc69e95b62
+:012d200b79b95a39693738576b2ca42aa529f1
+:012d30f35d0d571a7c3d52c52f4719cfe93b43
+:012d40b2f0f6eff3c0b84e2705d6bbfd2a24b3
+:012d50a0013927dab1f97ccd0cad5186166d84
+:012d60513f80d8d46b0398864d637eb323fbe2
+:012d70156fb1044ff218c461f153701824e979
+:012d808d09f7bf535f1ce769cc97791542a276
+:012d90564596dd121ca36c8397b5fd9983ad36
+:012da041078b555b5eff3e7c03fe6db8ef89d8
+:012db0bd74ab37e2b47ac2499fc963843bf75e
+:012dc0bb329a3e4e65012d518c5f6bb2d40856
+:012dd0add12a7ff17a788e523b9bae49edb60b
+:012de0f81e1ccbca871fe067184308276300a5
+:012df00bbe9986c4959fe74979fdf2ba0c180c
+:012e00a050c5320e0157b7dec9a96bb68908cd
+:012e1056515646f12259d80dc36c22fa177495
+:012e20098152275db3a48d8f5ff66f94d89f97
+:012e3074793b8494f73f423eabceef224c162c
+:012e40f847b9c9f3596557c4eee3f2fbbcaf0a
+:012e5071a39e56a008d652db2aac7dd6cbea73
+:012e60f3e0f3fbe52696363c02f49f90a017af
+:012e7009dcede01b427fc542e12a4dc41bf7be
+:012e803ec1214bf1b6f89caafacba37512c0d5
+:012e903b9b5594561cdf9781f4af0e372041a1
+:012ea04512ff6825b2f590dd95c71228988fd4
+:012eb06a3819ef50c6b943847a37d578f70b68
+:012ec05c5d00100ac15a0d1439939d46f4b6c7
+:012ed0bbdd5b120100e67fb6b170f97a942b9f
+:012ee08097109bcb2c8210048a50042a62f4c1
+:012ef0f8a9022aacefd81222e39f72c873081d
+:012f00a27da22c139cef21d2a2d8ab09f4cb8e
+:012f10df4fc7761fad46b23c823941437a9acf
+:012f2024baaf8a696de5373f68ec8b4c9b03f3
+:012f3059e0e7b9d63380b3fd9dd4bea23d3f4c
+:012f406c2a31ddbfa0c78b5adc840bf2c9ca8c
+:012f50a6a7dbb692077dd6ecbf0555781fc7b0
+:012f60e30d09f96bcd82a82a6adc1a286aa9f8
+:012f70465d1004e567221d4aa6c8fb5c9c75b3
+:012f80fef8425041f6ad060770ab19f52cf033
+:012f904b3da9dabf40bafd4f061f5ff34edd0e
+:012fa041038a9fea9743cce62500e88b7110d9
+:012fb019ecd990e320f595a1d467c643ece006
+:012fc081dc149d5f467ab047500a891db310f7
+:012fd0b34fb4ad9ef1d86f13581dfaa1dd85a5
+:012fe0e8775dce23806d351bddda29c8b79496
+:012ff092354ed6b0fbd6d324f9b79fb9a590c5
+:013000087c76043fa4daa590cdd7ccbed7dcb9
+:013010ab58f695710f6a778ae7c5f43827f005
+:013020b19ddcdec3d7c1e4f5ed79092f4dc30d
+:01303045f0533ba9fb9e17d97f34b4ecb9491b
+:01304006ec866d4d04e7c415f9efdaf3ba191e
+:013050bdcf5500f7fcbd84f8596fe01e106962
+:013060d0078d85797445926e6d9bfa30eaad68
+:0130704b9777a161077586e6eed704cda489fc
+:0130808efde6d6a872894c03814ac9ca17a499
+:0130908305d2de27047c5f9d4fa140c8780c1a
+:0130a0bde270209252e1e5e2d312e68770f615
+:0130b0c76751612a47bc50d4cc3192d92a8716
+:0130c0958d1f1897391379cecbd845d103ec6a
+:0130d083ae13a89df68fe0c40a2fa93c02aa40
+:0130e0c3fc6ab8273d1a90112d17e5bc1706dc
+:0130f07559f1d11ec889c60ab96ac2da9da141
+:0131002d910e9b45ec0244de188b57dad826bf
+:013110528fa81de2a895f94daacf2912beb963
+:0131200b29288c93b03c9a000a19ba9bfde32a
+:013130d48f6501501965747310775c5bda59c4
+:013140fff1610e03288bbcd8401cdcc803c6ab
+:0131507b3c3136c34183c23bde7fa679629433
+:01316025bff0759949361ac10beb0a98d02ed3
+:01317020d5cbab1f0c1c3e6a7086ee10332d02
+:013180c8002576fec3103c6f0517f25f4a1364
+:0131906cb2db7443587f899f62efcb1f33e625
+:0131a06c5080641e2d262952def7967a102bed
+:0131b0168858d6e63082f678f66715ff53b442
+:0131c01fbf7ff84778d01f9475b610dd66ed93
+:0131d0d41fa0057f052937a21e15c9ad1b5411
+:0131e09ab9d125f0a6d07bda1be210c8f24ae4
+:0131f0b7a568495e165c95689bc9fc842080c2
+:0132008f531eace5d1ce9087f6d2a8d8626357
+:0132107ec332b4974d80218d099eee01b88145
+:01322013089a5f4b70078f3547318e97257cd0
+:013230f610797ddddcbf2a071a3d32279da06d
+:013240623052398adba99d0c8b320f72ae7087
+:01325082c3fd805fcd5819091039bec2ba2c44
+:0132607bb0abf71f3b3036e42c708fa614a593
+:013270a0f9906b618bf5cd3c881dcf293dc256
+:01328038ab1e11fa605b7b7a2dcf17645172a1
+:013290c405d446cb4e832f308ee9f300b5b7cf
+:0132a0761920e695cf1344458cd59c6cd4e434
+:0132b0332200890ce3a93f5730524a72b51d0c
+:0132c0fd773bd0e1509422cc337134fd3d7f15
+:0132d0a5b179bb8edf768a379614b32384674a
+:0132e05175919f3c46c870a6e48302f33f1503
+:0132f04e3a52fbc276ea5422ecc59d8484ab09
+:013300bd93a3ac5e9a8eb19431696678fed354
+:01331082eb7fef77ee656fade533dfb2139a55
+:0133205d6fe805d5bc625b8bca4f5ddeb3dc2d
+:013330b7ecc94eba40b8cef3585fa1f95aa34e
+:0133409fd0cb711cf51fc6f9643c20d286b786
+:013350471409a64a95f9d10c3d62368e9e84ef
+:013360cc1f492fa3734db325d7617ab5f58fc1
+:0133701900afbf0611e6bf8269c16c9ddea286
+:0133804128a9996578c55aa2ab2ee0bed7a6c4
+:01339008186ba72eb3f70508c049e623cbc29d
+:0133a0f934d024d2ab3c5dc09f1fd706904de5
+:0133b0449e25056750625c4ba9c8c44be4eb89
+:0133c03c4b32ae8aa799a5f59869604ee337ef
+:0133d0836bbc300a07f75497c827a1c39bd0a0
+:0133e017396c45c068641d16c296de2cf87ab2
+:0133f01837830901d75f78fd703dd505e6d18b
+:0134009aa242c3d2ee8e40f9d28a5ecc88b94e
+:013410aeef16d88f25d60bd62602533643e0e0
+:01342047d77178ef47c22eb109bcc7a1a518a0
+:013430d093a622063811a659368b12f0e94c2e
+:0134403771a503dbde85c402ac9b4a2ee37d14
+:0134509054e994f7951a31bb3abcf27a3aed23
+:013460acbc3abaeee9f19aec408923e9260684
+:013470968f882b2d653885c177b87e16bf9738
+:013480a28b8388c52d3dff98a3746030b183bb
+:013490b7d547227f4ceca0f859af0bf2e30bbd
+:0134a05852f0c2ed44b2440166aeb75907a7fa
+:0134b0df0996ba7098193969a8cae841d967ab
+:0134c0b9dc6742fc1ffb2568acb0cea469663b
+:0134d0a5f4d000ba0ac32328b6925219f28077
+:0134e025c2f0518ed76118a65b3e5fbfaefcf4
+:0134f0ad6c8513d484452669dca1d4ec6092d6
+:013500ec97ff03d5a4606a5efaad53d817398a
+:013510fb0a361b775ce72604a1763531bac1ec
+:0135204f54355170a7847527d2b5d2294747e4
+:013530da3abf57f4f49c9015831bf0d5611799
+:01354097ac089353af0ebf4b4dafe15e12129b
+:013550bd6ae01feea4c6873d151b9a09e101e1
+:013560acb0f9480c7a659acd8ec63e26f135ba
+:013570c51f9a26127797ab92e2df7796e0914b
+:01358016e0d8173919e74500169e8de9d2091c
+:0135909c3f667ed63b63802fcb5c5377d082c5
+:0135a07433f99e5922de84099675659165d273
+:0135b0e2ea7b95685199f211229c81e6f7a94c
+:0135c0c6aaf28effa4e6a65e111daf1b36c885
+:0135d09cec514c2df82a9d8363a043ba06ccbe
+:0135e07e551083aae0fe4b96a5f6bb87f73204
+:0135f00fc632860c892106cc11de8d8726bf00
+:013600e887a57262814e690b93a1a040894100
+:0136105d27749573c0d4c0addedf7f43fe53a6
+:0136203e9ec577afadb7ca09e66a186b0607da
+:013630d1d2b3e08063d270a29e433e202c5894
+:0136402fa378c5a5e59a019bab17f726601768
+:01365078e531d9967e28d4130d749540d9d612
+:013660da618aaa66b2bb5f35ad6dce7fc86497
+:013670fb1d4db46815a1734430b0c514170f48
+:013680fd702fd2f91d8abba2c931c1b8d63a60
+:013690c124ec49dfd981fe9bc32622bb5029e9
+:0136a0c1b8368fa7e82ddd0c92e69c86910efd
+:0136b0e99db0b38f8b45ea6570b1224b0fa228
+:0136c08658cd7a650096c42f3ff21619420b8a
+:0136d00b7533a3b2eef619187c15c3d9829d65
+:0136e031963136fcf5536ab55266c8ce153d87
+:0136f01dd43daeb2f303c1e38083c6837af470
+:013700126174b68d95e49eb8cca32b96c8a86b
+:013710c9d3cfff7e0c85c17b9935494d6cd9d1
+:0137209fe6de525e546b13687901bc84c5993e
+:013730c8f741f15ecba43f0a725bfc66b68a18
+:013740909f9c3cf7293d7216956eedec8bbbd5
+:01375070092d57b3a86dff452972557be2af2c
+:01376067df0cd2f80e4a6f0b80d4df139fe0c6
+:013770feaefffabadfef93223a75f761db62f7
+:0137802e0ed88c4332c90b051630a385aac6af
+:0137900b4dcc55c90d08a741680557e2c3438d
+:0137a08f6ac9329fed3654893b166e6640fb92
+:0137b0965f87285f79af839825ab9fcd2d369d
+:0137c04be4538f4a5a2c5e18e376756c670417
+:0137d0bbf9d90fecf430f881cb7933609ce4e7
+:0137e0d934e235285017acc61f66850881b17f
+:0137f0fb557d153bb670d139920c5ee679fb0b
+:013800aeb12e9b8790c722385e163830caffab
+:013810814db78c954bb914404e07e044646b91
+:013820843ca223de8eae6a7fb4f910ab2b4ee7
+:0138302af38907d3ccf2a08d2334a549296aa5
+:013840f715644202647138728332afee12f1d8
+:013850a855479a2c04e9b46af5aaab9b2a1058
+:01386003e12255ba1c5d2ea74a5d50e88169f8
+:013870d6651b82f3d59637c4b725d5d31e5ee5
+:01388080f334451871d0dcbc4722d76fac273d
+:01389065220d9e5fa3b218edf1b06704b2f1a6
+:0138a05b18a807a47b41bc6cd0e8efd1d2da44
+:0138b09870ecc4a21e98c8a43b24e87113fd2e
+:0138c008e4411265ae1fe9f65eeb5982b1b9b6
+:0138d0655f7cb73661e22db2fc46c94518d9c1
+:0138e027bf87b45dd7693ede2dd050f73b7380
+:0138f027f340a1c7d768253a7db17f8fd28a69
+:013900817f9008f23649733aa5fc54e0da5f16
+:013910a30c6b18bae45bb115e8e2d5cc5fad97
+:01392018bfd4c1e08b62f614b7e5b8d8e94bc7
+:01393040100c67d9f83eb274e57c720ba8f5c7
+:01394002f12f21ee5d9e7241f1439bf6deb3d6
+:0139500f0af0d6b5c237ef429c6d165d915de1
+:013960bf21174edd68cf51466335e608e7c022
+:01397053aafd6b96f88fc528800101f186dcf7
+:013980dc489133b695591223b6f7996b134b1c
+:01399010bfb9f43cad8a027739a62034bef5d1
+:0139a0bade5d4704aac4979e9f50aebb8cd342
+:0139b09b2409858702e3917e8787976879c0b3
+:0139c03df137a65c2c4d2783cd59d50c665869
+:0139d099f62a37d28373219d739f4b3fc62975
+:0139e04f804b94beaaa666350d683c3b860003
+:0139f0f8916893237342f97deb55c5f788c705
+:013a00611a6f66f81f4fa04273e98966e93328
+:013a10030522581660e5e02dad06425b8c9bb9
+:013a20b216693a997d08b28b5fa9ee63a19172
+:013a30012bac1442089fa00c6cdba0b53eeb25
+:013a408955a5c6f3446d92f15f0cd320c780e9
+:013a506136278f07010c265989e11ab94b4aef
+:013a60b07ebdf7e4257b7260e83a2a5a4c09be
+:013a70cbf4b638eadaada94cad0e0f001fec73
+:013a80949b558599ed50c8a79bb3a4ffb3681d
+:013a901781c0d6fa5e69d5c813aa854309a25b
+:013aa019ab7a7b3ed865ab12d0a2152282b859
+:013ab02e43519104320589af5f0e135631aca9
+:013ac09d9ce5250b77280efcf4cb0ad2179ea9
+:013ad0239b13a1181feef9150af19d2b774e21
+:013ae0e85a8c5c83a03a126d7c7e9e2fe3e76a
+:013af0c0554ca757a9bab60bf546770963cac5
+:013b000268269626a88c98b195de8a459a423c
+:013b102504aa0c788f6d4fe036aa1f9644bb43
+:013b2008ec13052df5ec972f2c9f29ddb01926
+:013b307103b24003693b52b5d928a66355695c
+:013b407dffc51ef2862ed0346f161405eab2bd
+:013b50233a783d9117d33ca413b292005c74db
+:013b6090678b29f093993c32f708628dad97e0
+:013b70b6b5ffe8348f5037ee041e5dd03e9c56
+:013b808c84bc2a44ce3680c4da9ee4abc64eef
+:013b90bbfc1664216c9c01f4fd7c072754c68b
+:013ba07abba7f907226ac946ebdd67b395cedf
+:013bb01ddc7a741a42a947a0b29c013c691625
+:013bc059fe9a7e574a054b7489a729ff0a90e6
+:013bd0e414fa01d074380cd065cc9d0c5c1765
+:013be0f4e1d9b001a593e4001c39aa15dce18b
+:013bf06579ec4abae0edb720c886f33fa88b33
+:013c0025e59b9eb24cca6ea3d0899d762ea90a
+:013c10b97be374dea5f97d3ef5e28359cbf52c
+:013c20d1c41685554e383f8accaa9a2f5985b9
+:013c30c517dc0261366833d4fba8fdfa04cb2a
+:013c40acf159d3e5cdb1ea5c71c56d9ae8a91d
+:013c50bf327d623d7c03bf531695d7a7ca1338
+:013c6007102909744b7c0758b53f4e7c2cb206
+:013c705502c144c14ba4845a6f131344b87607
+:013c800397de38efabd8c82c4fd4298a296f7f
+:013c90bba73f95b043472b36b2cedc1b17a641
+:013ca00e6aa948392ad5d2e4628e88eb80e3e8
+:013cb0f989d0c5a580ecb31b6b51d085954bbb
+:013cc07b143a823e29c06345f4f9dcd60e0dc2
+:013cd0e34d4d61472ec3dbf8d2d650b656b6c5
+:013ce0cc207ef5d64ccc2e104d3ceeb8ce04df
+:013cf07d3fd1e6ae526d672222ac740c88d3f2
+:013d00cae2524427421e7aa9e404b9a6bcda8e
+:013d10c5f75a6af6f5b4186005f37ff655b417
+:013d203d981119bb90c6d0229c71bbc3f6320d
+:013d30772becfd4748815fa48689c9833cbe97
+:013d4006f5755d24839ae9490ebf95ad5bf530
+:013d5035e9a206616cad568535a3e6272a818f
+:013d6043106445978d70a42d0f05395da34b02
+:013d70c8bbdda72769078b3f1696e4c19034c9
+:013d808dd2f288fbab6d40c784dbaf3c4fe2ab
+:013d90c596abaf374a55e5ff4f0493f53f48ed
+:013da07af238b6fae520f1c5a8013445963790
+:013db03f856781b6b0a99b3c32d021e3a5caa2
+:013dc02e929fe0e2d8b321d6dd57324eda6615
+:013dd0420492d2451984ed9fffa1beb8f0b179
+:013de0a7b5666898688f8e9e60ae54feb0d6cb
+:013df0c0e572af110608d8d032171ceea4f36f
+:013e005253d5693377adaec77799e72f98697d
+:013e10f4c7d3cbc0100749686433efb8037ad9
+:013e201bd20a37507ce4db888eaf5d34b4ebb6
+:013e307f906fbab705c95a9b882f601288dd45
+:013e407288dbb11af1e6937dc20ff89357a43c
+:013e505be12532e9b93e48355c8313d8661f21
+:013e6054817956f16f908bd83ac29c8d9d1a4e
+:013e70f41232f40218a699e0daf71578da8cf2
+:013e802fbec9167664ea4cd1b8c5fbfe2dd16c
+:013e90acf4c82412d3929b23cfe6c1cfd5e403
+:013ea0fc2433bfc5c5a190af55317e34fcc914
+:013eb04039c32a6a6ad5029f78f1ce44e8d7c4
+:013ec06b7487d8a831865cd4efcf73aaa65fbe
+:013ed0a403c65db780fd53331a4dfaea939684
+:013ee0de32a99b16097e28ee28f99731c824d7
+:013ef01dc32ff838b4b1026ab7a0d9692f7285
+:013f00665b1e17e1797a38310c3a82d9e9f0e6
+:013f1077583e71a54bcd687c37b8b202a61430
+:013f20553f1271c69119682773983b9c36c30b
+:013f3015acd540800f9b85aad386b2f7928f39
+:013f402aa98516653eb7ed4f3d44d7eb21d036
+:013f5004691e0b8aaee71dd948acbac0c399e7
+:013f6096eae342c2656d80f52f66f258e81556
+:013f707d49fda819cdd21df4bec8f2b26fe7f1
+:013f80b294698ed7943193852724fbcab48fd2
+:013f909faf32c7c420e273539af8c5b0ce6532
+:013fa030b8d2a708951fa3a09a46be6cb7279e
+:013fb017b0f004696a35a14edff99ef7121855
+:013fc08d384aea161b4859a0fbdc3fabf44adb
+:013fd03221adab314ef89964715a607c4181e1
+:013fe09d38d0a534524c1d7e656d5435ad2d63
+:013ff0468db35e539f980782d5c14ea8f35eff
+:014000d67811ef3b045c37a9096eb857ba1591
+:014010b33b579244262b06a3f23b6a878cf5ad
+:014020114b3986d65a761adf5b6c069727b1d1
+:01403066eef1267c4bd2513b0106d98fd66f70
+:014040f83e135bf62326b1363d357336e12163
+:014050e7e8919d6d568cf9ff39d2d056718de2
+:0140600684cdd644865a481e92689cd2b40e0f
+:01407081fd6355931a3335cf88642aea2f0c0b
+:0140804966331405a1bc391c83ac032d3b1258
+:014090691b14995579dfc586efbeb647197502
+:0140a0e7091a4d4886015d7ecd988f675ae916
+:0140b0c73fa1b8bda9ed7355dcd773b3286505
+:0140c09b92019f05de153aeddfaf6b9b00418e
+:0140d0d4ca0e74c3415f1072f2f70f7d7a1371
+:0140e08a797672dd1935f1c4850ff2215c75da
+:0140f03a77a85c363b5c7ecaa7c94bfafa3b81
+:014100f1c57a76579838208b55a4d26a0c21d9
+:0141105bc6702a17f5bf4c0f5e5262c0b8747c
+:01412052d64a37912f0222bf5ddcff4b624dbf
+:014130e66ef2b974f981d7c1b158cd1521f088
+:014140c3b02b9a86305136aa5712de212fd8f4
+:0141508c1844ba1867f1e5c97c9bc8e83dd531
+:014160f665b26cd682372dea9541a15cdc50bc
+:0141707e00d9706ee85b674297723f06f58506
+:014180d254caa84047cdb027685d0a216e1dda
+:01419070eba21b7150f6ea3d95bcc0840e3118
+:0141a0f4975a8435f49dfa56dc7734f9d01ebf
+:0141b0c00697ccc7fd890ccc3122865346a2bf
+:0141c0f857f312dcdb5cd52e15be04e3d6a8d0
+:0141d075c262eda180bc0a086c420e94ce001c
+:0141e09a48c725307d1cd56f820a09d50e2c6b
+:0141f0005ff92d7dc330c907a83c619da54ef7
+:014200011fa4e612789bb590e5de200825ec13
+:01421061992f5e0465623ca5db4e2a1b9ca244
+:0142209c2a6dc41f30c296160000c6dfa1988c
+:0142309dc356d67340d8a5c273a0de70143fa3
+:0142404672bec95291895d7349778b93895a51
+:01425061326ac9ff05171ec133cdee79459bc8
+:014260328e61c8f5d54b1e7dd17aa8c5b6679d
+:01427022a8b6349e3579c4ffeddf4c6c5c21db
+:0142803468cd47eed4befc016f83d619ea8b53
+:014290a978feb9024040677bcdaa4188cea575
+:0142a0660c05308511be589759a2a49aa1e53e
+:0142b0fd39faa832678e031359dc4fc945b95e
+:0142c06e085c8ac93296d8b3ab4ec99e18b515
+:0142d01ee020237edcb96fb79b65ef13b979f8
+:0142e0ab0e90ca6cec37a7637727eea6a7642f
+:0142f0e0e413113af5be75ce89f901b9aa9035
+:014300f15df67801f63899672269cba03b6b28
+:01431073ba920fac13f48c1dfa3ed342919808
+:014320a7664ad4586394c78a6eed760d30e67f
+:0143302737e020954074809b462efd459ceb97
+:014340b9dfb2234f83a13747b83787786936b5
+:01435046ea14282c10a1a91a407b647a3348a0
+:014360eedff0650bfbcc3f81164f0851d6580e
+:0143709bf15383e2bc51025f3b3e884fecefd7
+:014380adee99c095697f7ff2ecc6ecf63cc959
+:014390393937e19def04a38229ecd912d40ad7
+:0143a0fb6e440c9fd6e2cc1b5ff7c418b776dc
+:0143b0b953de32e7872be04aea9e5eeba7c743
+:0143c0685d77d6f9b5098f402dad3dad476e74
+:0143d0e4045718bcefc28d394c8b86b10ef29c
+:0143e0f39f17c3cfc218a659fbbeca6f71feca
+:0143f0b8b2d72d29b02a9c2849aee9d91ce15b
+:014400d750e87b1b313d51393a1943aa5b1c7c
+:014410b0a4795289bf807d65bb4be81629fb3e
+:0144205d280a630f84167c4dadee6210460bd4
+:01443035e8985c2711e4f6ea59c970d1312919
+:014440889bdfa1648a918fccafe3ebe124955f
+:01445082bcc300e64b42ab4c6ae78daf4fb582
+:01446053ceecdcf64bfeeeb17ad592b486a9a8
+:0144704415c8f5db1805651fe8f387035d0c93
+:01448029081f886bc9f3a2c722d8f3abeef63e
+:014490abb417d74d1738f4f30853bfa4469520
+:0144a09a65713e6e9ff48df1d28a5957457a9f
+:0144b0b702126183d1418c505699ae3a76c25e
+:0144c000b79c93149c37a9d6b577e47bc2a20a
+:0144d007539dbeb5780eddb9bc26c5e2e05645
+:0144e0f7e2ecb8dca7cd99548f3c9cefa79987
+:0144f013566cbc7a424440058d673805753cac
+:0145001b1d84b38a2d723c6736f7ca92cc658d
+:0145103fad357be87a84bc299a0ff4d8d28f3b
+:014520a1680f7354ad4217cfcde167032a4ae5
+:01453089c8c451f3dac6339443c472f7563e0f
+:0145407d59fff63147b74896138e58274f26a6
+:01455057dd12614a2edc222ef4fcace27270d4
+:014560137f10d84726a24d742292e43f766109
+:014570ac97335b633818f075f17d0ecb3b2b14
+:0145803ae14444f2d64c7a4575d565da85a790
+:01459029d6d5f93ec0e7381cd8b9e162f93b58
+:0145a01aa3330be590ef1a22dd099b3fab47aa
+:0145b069811528828d245f6929c8f19fc28047
+:0145c03694aa1108a43c0254b8eefcd7a8bbde
+:0145d098b3f44282003ea5f7f6e22b4bcc83fd
+:0145e01b2b1845b023acc2cfc1d5865d1f6daf
+:0145f0255c2aa134a930eeb78c39e15a542ae0
+:014600ccfdc4c1432336459a796925605c07db
+:014610ff8a7e7a981f5ef0e1d98259db782959
+:01462048b7626912a88552a78df8544921f1d3
+:014630040adafc558b9a8798787401a3986c1e
+:014640f2d019ae72a4f2ce7561a3408c1fe2fd
+:0146507f7ec854361381eb1356671873b94024
+:014660119cee38eb228f4c0c1d41762e576b59
+:0146700b21c6171df97d872d9cf0285243b9db
+:014680e80edb8d46c5a8da163ef8e182dd0d14
+:014690995564a397202d04b1051eeeca0100fc
+:0146a06499deb6d7d19b715d0879884fdedfb9
+:0146b09edf50fc02e8873880c8721fb74c146a
+:0146c05489a12e67d7a5dd995b41ea5831c09e
+:0146d0e47e0588c878a8d24b153ac615221f07
+:0146e0cdef07eadf7081065af0903306fd08e1
+:0146f0a566e76a9f342a189f9fc20d3ca1ed5e
+:014700709a4f97f241a0004d2f87482431f479
+:0147108f3dfd60fb0144676c4caa00f156d125
+:014720e513f3b8171b91a5f8dccbc3828a4e31
+:0147300edd8289cb7369b891ea9aab8abc9500
+:014740f9d20048f6211621b43398a7975e1ded
+:014750d4438ba1ab3a3fdff3b10895060ce1a1
+:014760708f257cbba6b8aa233ccd3ff0db1d3b
+:014770dc171e792685143e77d7c007e4093b93
+:0147809e3487169999495026d6cb98f4e4fd08
+:0147906a1c1c5293dc76ae43b05a139e99a5eb
+:0147a02a903f604b621d45317c0802642f90d7
+:0147b08d4714eb804d7ac5ad8359dc4659cbc3
+:0147c0d87732721dc4bd22ae54581cc2501355
+:0147d0753cf1302373631f351eaba03032f969
+:0147e0e07c691cb9b87e27223776be23fb892f
+:0147f0e9a78606ff392fdf8c09a5b01e85fada
+:014800d3647f77f04c48b6eb22dd2d93174830
+:014810563212692d03705d6a019982271f0e30
+:014820caed03fbaa8055d92117a8c26930c3fb
+:01483068898cf703ec3e1184a90d066fe896b4
+:0148402be1fb8783b92f64ff1e3884d728e753
+:0148503936224bacb079e6d20ae3de6ed2f24d
+:0148609275493cd728f37e867aacb5e08fdc53
+:0148705caf504b136f19032430c40d91131eba
+:0148808bdcc739d3f36b85212edee944ad4460
+:014890c0dc6a6527e06cc7c2c163736533af77
+:0148a0b6c3a772b99b5bec061b36ddf8620d2a
+:0148b0f3245e18c9e34e24fad45ef7365aa24f
+:0148c0a609ab717daa09862a1a4c3d332e4d01
+:0148d0ce8b163f41f3f5049752373dcfa813c0
+:0148e0f82d456f9cce843fc57ca60f79b24bea
+:0148f026f2562a7683bfe3b0686684ed6df49f
+:014900d55a0d98616ddcf93bdabee8ae7c4286
+:014910441bfdd96d64fd5cbb8bf83dc854a21e
+:0149200e2086e87bf080e158d997d05049b185
+:014930bebeedfa15efb322532ab9c95e9736f9
+:014940294f504b27fccd2bb4844030bf8ffc20
+:014950cb6eeb241896b04fbb30ac0fd6590d6a
+:01496024b94380381a306932b2c08bbaa390f0
+:0149701ead2dba66d4b90258244ddc8cba8737
+:014980439feedfd675609d3c5ec4246a1ce2cc
+:014990b24ee6c074f6fea1f710d6012b1f29f8
+:0149a01e1392cb9b10c0bdf61d94f0c489aeca
+:0149b0ba52d1d6da73a8734c533f0721e7b75e
+:0149c0874af6a9f7d46b287337268ebed1c4b3
+:0149d0429ce246f55498fcbe6d60955986d85c
+:0149e0466a41ef138c67fc40f4d5e4db4436d1
+:0149f0512efcd40d7ec2517b2ca6da6d35b360
+:014a002604f56e21d8619f91e2cf7c065bde99
+:014a10702eb02654c909ae1da42e073f9ed00f
+:014a20ffeaf229dce14b074731044ae16210bd
+:014a30c9d0150755bfddb1c63fe2d3265a2296
+:014a40a7100041460b093b007301fd9685278c
+:014a50d6b4f482082d6027f137b1ed2e489b26
+:014a6056b645c69cfe86253aa1ce7461eb8151
+:014a705d7abb9acb059bd503bda74576a4fb7b
+:014a809f815a2e158a58a45702efe4339368c6
+:014a90c0ea93866895156bb803b08c52ce405e
+:014aa0e0d66d0912108cda90a2f68d289d27ac
+:014ab0a0d9309ecd23950dd52a3b0364343145
+:014ac0de2d6cfbb962ef58f3be68f3ccbf407b
+:014ad01dea27e6fc3d6b1bed6f6206987df083
+:014ae03b1aad4a69d8ffd0b07e9a6e435f9d7f
+:014af03d8866ea45271a156f870cfc1f449c19
+:014b00c800ebdf35572459ba3d349987ae0a3c
+:014b10c271c87a11336d1f21b3ad12185304e0
+:014b20ed8b77ac514ff19f237455a886376c47
+:014b30ca7e3adb66b0ed7ce5dd0c248bef22ed
+:014b40a7ba4c1ad82ae6147532e1daa1422354
+:014b501585ce0eed8382b508c1d3852909bdaa
+:014b606157034ad3dfaeee46557145689664d2
+:014b705e75289e5551dda92237060f7fe1dc64
+:014b80b71f257f5a5e60eca07f2ea51d7afcf5
+:014b90443e4ac2098d41e80d3321518a94fb95
+:014ba03f5cfa80cfd0b6a39755511c4c022022
+:014bb01879833cc58dfaa7d8cb90f4fb8ca278
+:014bc0c61e9918288e04e77ef21d3796deb6c7
+:014bd026c5e5b746dca78c279d9c3e5b9312fc
+:014be009e6ad973d14ebd45df58eeab2fcfdca
+:014bf066ad314f6838c38cd34a6ef60b391995
+:014c0081fd311dbec8989ce291bbce8b2dae81
+:014c10e8b0125a57e0ced071086e4be0759838
+:014c201a6c526c79bb18c4df3099653678f400
+:014c3020fada8dd91a4bdcfceef8ab2deea6b5
+:014c40ed93ee48002cc2d94472fabb59155286
+:014c50ee8be4af6198887a0f8aced2eea13bde
+:014c60c6495b2c2e5db568dcd71f6ff8631ec3
+:014c703b1c3ba2746182ac962edcfb929b0815
+:014c80bdee742eb48cf6453359ecaa3026f7e6
+:014c907ca784f53b7acf47584710600e12fcec
+:014ca06f9737d2c48ae4dfa147e8f8875a75e3
+:014cb0378b815534e2c993d3ff3a8afceb2536
+:014cc0b93fed90d7b7f188560ef3927de0d6f1
+:014cd0b92d4683686520075137c5eb38a01156
+:014ce0e9860ae640dff64bd37a973f4d7516b3
+:014cf0df68db43c1869255a7cd648bc62c1df7
+:014d008fbcb3d6624959cb83bf29ede242a3b2
+:014d10b95e986f89453532166de55cc8b1ebab
+:014d20c08c51c7c5e93ee7e548c6c3a1a207f5
+:014d30ba7d3b6c8d8c21ac81de6d39843d476a
+:014d40b8ed6ca21ad68f04fcee2acc846e1f0a
+:014d50d8c1ac0fbb61f09b9f1d23c56ee69f81
+:014d60d00d57f3d6eb049ea9bcd71d7cd91688
+:014d7082d6248f5cb262fd7f228e9b10005ff9
+:014d80a146aa81f403e7f5a4b0734b69ce266c
+:014d906e11378e0c91ad6391962921cc81316f
+:014da0d1e17f138eefca3d9471a84cc5c6c18e
+:014db019e4eaa8c31bb8b6a2153976219fc92a
+:014dc0d5644475ac1c9bcf6abd5d1e647a5498
+:014dd0a923f8ad8b2f7967ab44a559be11ab2f
+:014de05804d6d1f4252e26c6cbccadf7000dea
+:014df0694c22b7f2ec6116b7ea64209a598f11
+:014e002cffa527e393c5fe1082cf1430bf73f5
+:014e1059654cab150b461bd189168a898df03a
+:014e200bc6cdf1a0aa79dad71203a82662e2dc
+:014e305e363b4f0d443696125e60816f47b838
+:014e40a6972fe1c8ee409584de532da7b6e504
+:014e5027bc3d935d1ff5fd8c668a86f1aedc25
+:014e607058af0dabca6eb44545d79bdce2c5f8
+:014e707185392f2240427802f378e52cf631c1
+:014e80a8e35d8f9d7aadb895f1a2ff77f8e3b4
+:014e90c31a2e968d07cca361d9c9549d8854b6
+:014ea0065291f687188a0d3492e7c1ef456296
+:014eb0ff34b52d388765de0f304e191229cd68
+:014ec0cfcf499a57f591c2c5c9310e751264ca
+:014ed0a4b98fdf2e6006531af1ea4186b9a034
+:014ee03f8a2451a8d04cddcfb86d4599c5a117
+:014ef03ff77b0dc7cd68c76b5714d102db151c
+:014f001ef97000f971dc3c053fb1adf5b12360
+:014f101196466e568cd1ce3e0115eba40597dd
+:014f20ba12840548fbb0cdd1de358c7a85fbf8
+:014f30c7058f6880a638e65b0fe54019041425
+:014f40cb6d9d9ef6ebf8d9749cfce42a7b7851
+:014f50d6684cb42709e9a4f6df3ba384170085
+:014f60198dc272bbb2bc239f214d29bbf1f5b8
+:014f70b7a03bfd30ded330800de1ceec3e79cf
+:014f809a5c52e5d7186682b415043e62eab396
+:014f90842e386ca7380b03c75adf0946a36fc9
+:014fa02cabb6f657efd6a9d4c8e92e3fc2a0cc
+:014fb0b7479df83fb4d027c0c7e43833861b1a
+:014fc0ec64ef41d5e9cfeab181a424697161d1
+:014fd0d6173f3902fe0f28685ca2307397447e
+:014fe0e0c46407af66e6566d6c18cfb1d343e7
+:014ff054a05fc3590c8f51179b6a244812803e
+:0150002eceb98b2fde1d4956248d310a16e460
+:015010654f5bd6510b8ff3faa38013e6c59408
+:0150203ca3fb19b1f3fa1caa2ce68d2264659e
+:01503029dfef8a2de01dcf01ff987153492733
+:01504084d4e6da21ade83c9b10f33b9206b806
+:0150506330447597a5a3a953842db536617bc9
+:01506054c3720f05a2929b006578567a322170
+:0150706c79f53a93f257453d77bc3a9f7a99ce
+:015080f3975cbca6552518aaf049170110c658
+:0150909fbd843a2cd90ab8259268b971f755db
+:0150a028cff5d1532bcc7f809508711db8211b
+:0150b0e5e0d792a74a9b2c53cfef3cb16fa49a
+:0150c0d60e89f428efd7343f230251a999dd86
+:0150d01d3e15d516279ab3c57157955b841afe
+:0150e0016ff9e9ce490907ac7cb5b269f23bc3
+:0150f0cbb37d45237d8595a52c1413b176c75b
+:015100c2ce2314cb6610dca41d06083e5cb461
+:015110d493179e58632330bc7f09f31c09a6e3
+:015120ceda673560c6d57ee8261f3184ed7e5f
+:0151305479342d383afdb5495b2019901791b8
+:015140fe9f9421bfa16e465df765125fcc3d46
+:015150a3870f521385ffe642552e1c14ee2edb
+:015160920f39704596169133a23183f0e85dd1
+:01517090a3260d678f823b11bea789f1758613
+:015180dd89162035aa29deee9c61b2d202c56d
+:015190627a82a841d789813cbba97029f442c4
+:0151a0527086063408a8efa585fb0e0ef35364
+:0151b003e8b85a90c3c0214dd390365ebb4084
+:0151c0fc21b725cfa4eb8477d450df14b4f475
+:0151d00ea7e96dc3bf53000516aaad39f7a910
+:0151e0f8f0f92ea9dfe73e2021c336a4ec8a90
+:0151f00e85e41e62ddb43c4a8a0ce2a57b729c
+:01520088c32e9b7d02542b89c2960e02ec37bd
+:015210f19d48ac94f82aa0e34ff0d6ddbf420e
+:015220974befee50fb89032cf901910077eefd
+:015230927e4cdb9e5739491eeec81527d0b571
+:0152405d7eae2d55a70a238bfaf863a56eba7a
+:01525051a2f4fb9e510ef7fbfc02b8cc236d5e
+:0152603538634ebd937958890a51de652620e1
+:01527072ad2ce6fde58634535ada610aeeb9b5
+:0152800cda969be857bd82fd99d693a39667b3
+:01529095f1e37714b58cf254c56c489d5beec0
+:0152a01f8d4bd2caf9c0486c7f2b0016a35581
+:0152b0449613fe45a716a23c925436f55c377e
+:0152c0f5ddd7719dc548916827003294f110fc
+:0152d0ee8c46be8a7bf5d8989007558ab65ea7
+:0152e084d9ace2a8b5375fd52a8b267805b7ec
+:0152f005257e95feb011cc1e0db1ecf00f9723
+:0153007df699c15360599a56c55d0b43386077
+:015310fa37d8f42ed5f5364acd566bb00b2b3f
+:01532063643fcef070be05d8d05b3ef81f7117
+:015330975ed2834019bb47aa85580c24c5797f
+:015340a6db6497ebbc061b700733a9eadd93b8
+:0153509e7c6f4e040c8e4946a79a95db87b0d3
+:01536059e14e256af539494c7ce24c534077b0
+:015370fa0441837eac547f7bc174f789b738a6
+:0153803f08139d04efce2cf6e5502a0041ecad
+:015390f6d6c9f7ff49e7d2fccb9e3500cd5d13
+:0153a052222952ecc1b87f09d231c0714b3adf
+:0153b0eca829871617355545a03f0a10a95ff3
+:0153c00ebb1c66d90583d14c00b9f2f503d96c
+:0153d0fd7e2e48bb1cd5857b098bf1ef212000
+:0153e050c85f2c7941517c592f6d0ee40e20c8
+:0153f05e1ce2ab6dcea6dacb1b66dcb4215440
+:015400e552e4e550b012fc10aee70833883bf8
+:01541057bcfa6d821675e77682b7f4d9d5d69d
+:0154208ddd1623301be1481a359eedb20120cd
+:0154300bfdf51f90d7d1dd262e93bf4f6df8c9
+:0154401806703a66f76c3e27eee1743ecd0d99
+:0154500535fd2b1ac42485bae4c58c228352ac
+:015460d5fdd5888a739c30a02a2002a5ab2b0d
+:015470ed59b8b7f7714ee08cb6d2beea2fbb1d
+:015480ee489d5d9e1b85063d2a1c9571b56eaf
+:0154907503a180f2f14dc957c0b5c663c1e457
+:0154a0c604f42c8a17f3c2ae2a4fa4a2b07268
+:0154b0298121439d24f44ef4e3aff59ac850cb
+:0154c0a03255bf673fc5bc7cea00b3f5471954
+:0154d0fff9d2d326889f3bba53baaea5eb690a
+:0154e04f98f41dea3a927a73017edb347e973e
+:0154f05c49f09002a7fb14fcc0ff97b2e956b6
+:0155003a1caa20b7bb1b22304d078f6db4b3dd
+:0155105daf088e6acad35df0928513eb7de8fe
+:015520b53bbc47b991a327fcde7d46ce0d838a
+:015530b827164d081cce7d0b7291ea409230c7
+:015540ae6dc188c73f951eda8ea734ca565c75
+:0155500ada69c3a1ad816d71e7914d63e425f7
+:0155604347f89a8976ad5f528f846d020e84b9
+:0155701a64db4fd3e818dc2ed3aa4e37e7e5a8
+:0155805158abc61cd0bd51a477b3cd4039c25a
+:0155900955e17a1851016132b087537e4899c7
+:0155a0a47a84b702ef8cdf6da30b00aba64327
+:0155b0bef52c33f07216e87c4d6e54c4279826
+:0155c0054be52a0b2d09076727fb18c0d17ecb
+:0155d034a8113ca8c55a4f69af7f6048f443ec
+:0155e0bad8e8c06f788dcc4d91493d777469bc
+:0155f052181923a4a7442bc8a7a422c2807ee5
+:0156002cf2ef5a987eeeb7b7b33cc94e62cc27
+:0156102d9fff39ee5578db1bbdf373522e7bf7
+:0156206e9edab0d9a94c21c76312415a14e332
+:0156308613553fc4093b69773be9d715b8b2fe
+:01564037d2218e1e774b440b4cefbfbafb15ba
+:015650d56a218384d225e9f9f7ccb91e1b75a5
+:01566001c0d2cc72106f24caa8dca9bf560aa6
+:01567045b16e494e094e2388a989541312e9be
+:015680095389759feca2ab40f1e99baf18a830
+:0156909393d3bddeba4a27757b3102fcdafe11
+:0156a0b244055759054490f1a6e0fb97767a1b
+:0156b0a2c4cbe438c9db95a21fd773e8a9728f
+:0156c033409125ab334eb6fa52705d48c0e511
+:0156d0d4344dc6229c16f0bbbfa8379ad20deb
+:0156e03b11131a0266f82b5b0f8eb810f0b717
+:0156f07147cfcfbaf20c90d87aef83b0dad1ab
+:015700fa277a10a7bf3743781bd567617e6065
+:015710a40053196f33c2d9de74e3d738310f8b
+:0157201e6d8483caf33bb32edeeb44c6498b16
+:0157301874e678da23cc6ceb569b4a5f07f2ff
+:015740bd05729afb6cbf438fe9cd0960308251
+:015750ff4c9fa7fc1573ab3c9fd1ad797617fb
+:015760a624d35b43d6a3b3fe1faef60951365e
+:01577040ceafd83ae9f47118b4d8bd7650b7fd
+:01578086463cf731b98d832c6581f4b876329d
+:015790797c6cf34bb51a6fde8290fd10961398
+:0157a0983b3cfd7fc3013cabb923c37840cf52
+:0157b066db0f9f279a95b66c6f33c1470c7100
+:0157c0972edcb4a7f85e19a04a62f237796589
+:0157d0275ec2f0f9713178c0cad62cd5fc2d91
+:0157e0fc75683321f9a50db8ef218fd40bbe20
+:0157f03760e1a6e6a0acaa115b3466955a424e
+:015800624210cb0471f24bdd687526f4f960ad
+:0158107e736e6f32cc1e28f1a676802fc12724
+:015820d32e20cda5789138eeaa8318182c7150
+:0158305b6ac89fe94e5c992690d3835987756e
+:015840652b1067a46f3d3c3b17481520112724
+:01585083ad3ba87f7e8341140c5f4d472233fd
+:0158602ee7bb6c7151286383eb675e34f3592a
+:01587039e50ea8aa3bf95e00ba29358c238898
+:0158807c49bef14586717693385804917bcbf7
+:015890f965fcb3765ea5079da0238bfc031a1c
+:0158a0805b6bbe30d67ae319179687e66c8a50
+:0158b0cfbbc046f91d0cec9c59dce1ae3b2574
+:0158c0bdd5510c616fd12f12692c87d6c7e6e7
+:0158d0fbf4e0984a4da6fa8df4d8e8f5519290
+:0158e0b84fcbb647c61667510a145cc0fe2f43
+:0158f02488623fdf1fa9d0437481351741760c
+:015900930a36f29f59bf4fc97eaf450ab88ba7
+:015910639f98e2ac09e3f916a711f1ffe49f09
+:01592097f8c6e43f9a0ea05d6a2e6cc822ab47
+:015930e29d399deeee791aea2e1fc724601866
+:015940ac0bcf236c68fa224b99b83b1a8315ef
+:01595061c78513941307e028c10c4919dc1727
+:01596033f4768f6ebada5ab3ca6aa714a61ea3
+:0159700827a00f46bf0c11f853f6462caab214
+:01598035ffeda10c560b602b8d82f7082ec4c0
+:01599056c52a449fe0827dd987e9791bca123c
+:0159a0a252f4c674130f68d362c284c2fee22c
+:0159b0f3d0c12e0a41644b2ac4225d3aa584e9
+:0159c08c2f5a5301f67f5d57ac174c615fb4fe
+:0159d0d928bd05c2fc5dacb3c8651b050ee6ef
+:0159e03e8482695d014d29bea16086de88726b
+:0159f063f9673ee5db5b57c3ae74a1aa3ce8f0
+:015a00f77f90e2d286ed91e1b798ef93c49a39
+:015a103badd919f7dc56c2940b506771059c29
+:015a202898b6329ffc181331248f2de08d00f0
+:015a309f0452c8a363db0386e5fb9ff8cf50b4
+:015a40f056851930e93b08e402637dba6acbd3
+:015a504166dcbbf3d0d587b0dab2eefddbe5fb
+:015a609af54d4aa39d1e532d5eb9e2cd3afdf7
+:015a703a9f2bee264f0056f99562203d740fcd
+:015a800d9ff6be36501e43c350506e36ef1eda
+:015a90eec69bb398e078341a9403fbad37709d
+:015aa0d5f523ae0b274013551c82f7aabdea62
+:015ab039b8313c897c9037c13f3c58cb8edeb4
+:015ac0d2beae39893b12c47aaa88b037b7f479
+:015ad00ead5080159f0ef93bcd0313053cb10b
+:015ae0dfe16a550356965413d73237d0431260
+:015af04c847dc920ce78d228f85ff3c42bca26
+:015b00301afb722f7eff418a0ff2fa22ee8ec4
+:015b10886ca685436ed90c43c9a600ec2a1de9
+:015b20b5118abd7b211dc2ad2046da0fb51372
+:015b301470c7a071997e071c0715e70a62373e
+:015b408470d1f46ddaf0c5ee597685da3c08a4
+:015b504ca0f84eca2a2bd3f08b51741cd11b8c
+:015b6069ccab12b6653d1363d845fdeb6df42e
+:015b70c29ed2b6c20e9b01d530c4e78fad8675
+:015b800a0e6814b2c91e35e1d8b0c22074fcfa
+:015b90ceeaf16721562e3d862d2765d506086d
+:015ba054b588355f4a29530f2432a4274fb0c6
+:015bb0ec0d82b4a924f3f308cd6104968cf781
+:015bc080239a8b8547b27afb9b935aac653275
+:015bd0fe9d30068cfbcc54777f56c56764c6ea
+:015be0324d7f7232b54032856bcea5808ea27f
+:015bf0dac559890413eafced82ce847f841f3b
+:015c00a51eb023935b9ef83f4f67b8a450e3f1
+:015c100ebf868de2a7db5ec4fd3022e4c907c0
+:015c2095d76547d068fe99590aeed742c828c3
+:015c309f45c344b05fb3575e1df4ab15ece53f
+:015c40ef327015ef1135af2a3c37607cb7f16b
+:015c50ae0f07a16ea81bd3044939bb5fa44c59
+:015c60c95be847832c2ee0d26a31f56e88eb2c
+:015c701fce8c4691870a804556ffbd6f03485c
+:015c80f56e8c2c17534ae35ceab433771b54c1
+:015c90b365f6f2702a354be4b56436b8ba9c09
+:015ca0688771147a58f5546691fa9b6b8149e9
+:015cb0cf39b703f87c1431b6ec3fad33934d5c
+:015cc0246e0fee52c67b54fc4feaf39fbceaa5
+:015cd07f496fc892e156bfe5da675659bc8c4a
+:015ce0120d6e1ca122540a8d85a79e87434a28
+:015cf0d74b8d8ea87c2b8833fe8e88b4c50ffd
+:015d00d181aa79660d6f76e1e4ecb0c791170f
+:015d109aa4a7c2be8d602e6e5da8ab40bd5220
+:015d20ba4866bc226e5e324b987902205490bf
+:015d3088cf34c2fa61729a53a337930b7d23fa
+:015d409fbdfa5695338d758183514a38920bed
+:015d50c064672b066225e39a42c927fc126d0a
+:015d60d1acbb06631f65d905c976f5d9cc7a03
+:015d70a306ff4f35c4038ad51b79a70d96d18a
+:015d80f5674fad3eb7a142c82147a530072a69
+:015d9008482ba665658740a8fa45235e49e282
+:015da0348055bbd93f78b6559d9acc64ee0055
+:015db0dcffe48f6df6fe398a2ab14fbc2d68dc
+:015dc0b9c5870663810bd7b65b1178cf5f38c2
+:015dd05877b338b7e429b743591cb45c3f7074
+:015de042ef14b2d972d2dd66748367b9cba9bf
+:015df03e0488cd95ae6861c06a7ae74d605b8d
+:015e008e3f01a564da90ee96c8c27d9c811158
+:015e1066dcdef6bd92987e47a64b818db69319
+:015e20a99a27c02d8de45e99a913094551a176
+:015e30cb0829fed12d9a70eebca1ab95af581f
+:015e403a8b379104b233e425821954f083e7cc
+:015e504b7bb4bcef3192035f76d2ce1ae984ae
+:015e60c56ea0572df6951d5f10a5ab0eda1c9d
+:015e7026d0dc471ea64421b9d319f1462b9c5b
+:015e8080dfff44f8558fe33be1c1cf94378158
+:015e9019a0bfa6e18e1db87547e041aa342a19
+:015ea0e563ce266ca71dea5d48efed416d57aa
+:015eb03421341a0c1809617e613e4fe59090c0
+:015ec0eb407fe7ebaffe23322fdd0291307ca3
+:015ed04f0b0ebda8319ef80d76f3f05d45a140
+:015ee01d391a3e91d4470ca8581a88a5974163
+:015ef01fe9aa9d5d7c3dd94c053b8eac3b71b1
+:015f00e7cb84762ad286a13c59550ae233ad89
+:015f10dbfc07ab41f438cfd9b0836677f3a0de
+:015f203f2159abd51e7fefdb14f3d4e3ebc996
+:015f3071ad4492943e1b6534e1aceb69a9b655
+:015f40395abfaf3b7a80d7227e70129876fc1c
+:015f502862b9befcad260622488daf95184fed
+:015f601d114daf545dbf80084d6a128869a95f
+:015f70eb10966de0c2fe80f1e56af920f5d57c
+:015f80c2e20ec4407e554929bd1f3a001ee09f
+:015f906f4e344fbf81e0102f93cdc12a31c248
+:015fa08aa4a6f1fcd5a099ad8941a0ac9dbbec
+:015fb07cdb72ff73b5039a857223bd95291efb
+:015fc00953f2c59833a20dcc74eb48be9fb615
+:015fd01f9bf1fdb7c1458e9aaa3512c8233c05
+:015fe0a2792ba402132f9ede259be12d4afd69
+:015ff0e555acb2dc083bcefd32b207261ea58d
+:016000424932e92cf77ae1ac18c8aeaee8c713
+:016010ba9e714e004fbb1209b54b6e22b1b97e
+:016020d87c56d68afd5b48031349fdfffed33f
+:0160306734ae04963db209205925279da55139
+:016040603bed7135590415c84364b147b8574d
+:016050407980697b44c0078d6618e9d4674c6b
+:016060240b2d4bfc167a5e50d4857b8fb9bc78
+:0160700de0a1184175f769c310f99d03fe751f
+:01608070ffccb04e79d1808366975d070bec3c
+:016090c488d0dfec0d0399f605ac3e52ebe431
+:0160a025210195759e11d6cf43e5baaf5c5c72
+:0160b03f0db715b986c45bb271d701f414be35
+:0160c07c7ce7f437dea1b9cfee2a343cc02922
+:0160d04626919b72e5e7305f46ceee641b17cb
+:0160e0f81ba26f20ac5a18330c9122d67fddc4
+:0160f0169cde2d22cb6a29b02edd5e07825280
+:01610092a35f27615f408c2eae90d028c9e6cf
+:01611093830fad07a12ce360ed2309dd1e00db
+:016120c55bb6ee791cffa549373f69c28a2988
+:01613039930854354a10301d677ab27aa97119
+:016140c191ee4eea5a42067d661c5619237298
+:0161503420609e411db76e44dd67b0f21d2e67
+:01616046107e876bca564ed21863add53175d8
+:016170c32197782e4a693d08c32b34bc0ad8be
+:016180beb7a6f1d5b3c1b6e0dcd57bf3cf6458
+:0161906fc3f47e937dae9dacb58c376a6fa302
+:0161a02d5a970e79fa85402cbab8f124283b04
+:0161b02d8115bf50c07cfc8ace181287fbd507
+:0161c0218beb576c64402e356fc8d7d08e0adf
+:0161d047ff26751808e3fe0edd66223f237baf
+:0161e01e1ab1e7a1bd56298530507bbca13afd
+:0161f002372511a9ed17467bdcab0d82d9dc7d
+:016200be2d705d802858c186216183a2ca82ac
+:0162102921e110e158b9ae294ac7f97d01ed37
+:016220913771d9f00e5305f0c4f2c4be4a6dd7
+:016230eab5502e26a30f7f2ec39a942801ca71
+:016240a1fd469d1f8977cea14dc2d3605a2e3c
+:016250237875b615ff815e32fff89b7e333ded
+:0162607d4003e0ba5bf094d6c41a6ea463f45d
+:01627092468e746d35a0593699563c7083d7e0
+:016280c5a8a1599385d591eb0e68fa212788b2
+:01629074478616ac4f40699de05ce1592556d2
+:0162a0a00a70757a7552b669870279ba4ed7b9
+:0162b081ef2bf7a5ca70a50bbd90a24ca55834
+:0162c01bd9050e5f8127662eec83af51f30e04
+:0162d025d51a9143f0eaf056c4bf552a845209
+:0162e042ee11b85d2b71a0b9d003571922baed
+:0162f0777277813a48f42fc79dbe20c40bc94f
+:01630029e28dbe920585a7a8aae431e76400b6
+:01631041ca0749d8c19e70d07a1b60697d3407
+:01632080f53d7ff66c71a9bee42392647efd5f
+:016330220eafe3c2929b8cd197eba9149d2d21
+:01634096b9a60591579af0fc534b5b91221a22
+:016350b8816a5571372ef418f2c9c2159599d5
+:016360cfe5f78f8c53d1e6cd4b7e7e5588414e
+:0163700180fcea003f0e9862fdf934ea357491
+:0163801dbf23fcfa16ddbd2d8f9731d4c536b8
+:0163900f3a31fa99129af14f7e775e040e2239
+:0163a0f009ae0c0bf043077a68074bdf35a2bb
+:0163b0e7aab6897c347a74701a2d8c013e6321
+:0163c0d15da401544248a39572eaea2c09cbb4
+:0163d0433ccb67d4efb014be4699b2a62a2a3b
+:0163e0f67f5768324368a241862ec1c4f90974
+:0163f062934a98757bf1dfba8bdbf29210dc56
+:0164004a78a269f0ac61cc27813256dc063a6d
+:01641044d4de4ad8f54c804b76e44e39a2c3be
+:016420b647c378c0ad5249f9a36008332cdd2f
+:01643040a201a2b46a9eeb2a928a731969ce78
+:0164401b8fbe9aca08b1aa3d35cbd9d7aebc9e
+:0164506c51f649164d8a4b459a078260b678eb
+:0164603e51f218010558c5a6a13bb581919d90
+:01647077ce1ec1ff4ed7a9a564ab1a8ba505d1
+:016480b0abf4d42b60140b81a024ac0b28663f
+:01649003a36feadc0d9d886b007da1f3c9f1f1
+:0164a0143ffe6542563242a2e4cf9d364ea973
+:0164b07c991bb989c3286a3ca8c69d5f50eb53
+:0164c0d491982dedc300dbd8ca89ec34a90dfd
+:0164d05be6b43abc93ae203cb48ea02ad113bb
+:0164e0abb40e8f101fe98b005caffa2150ef44
+:0164f0714d4e5b06caea9e09d5cb66a2a569b7
+:016500ed3aca257facb82d7f4b90ff22de48bb
+:0165109c103a43b8834ec1b582b543d7bd5f3f
+:0165208597bd3697c59af59888ef70a12e49d6
+:0165307ddeea8545146a263d0a745fc51ee9a0
+:01654017b455d2c233381e5d0cd9132b7cfcf6
+:016550b4a6abcac67d85f319a0f3a24edc79af
+:01656010f1dfa0c6a729c110fb00b51c17b414
+:01657002df968abe7b634b78d00278991a5fd4
+:016580d40e1361273e6d32f0d882de2319da7c
+:0165908db493e69b9056907c101bdd8e41e774
+:0165a0b7f6657c9908e9cab4d33678cc2c2084
+:0165b090b0dfc7988aca78360dd7fc1260c1f1
+:0165c0b49fdc621eb54ab3250e9a50bf54ca54
+:0165d0edd52f84fe6362787336eefcf35a6443
+:0165e07f0ff4b5cfe51915437532cc0f9240df
+:0165f05168a758c0822f27c2733417e8960fe0
+:0166009891c623aa5797373d16af85bd02f9c7
+:01661085d354de1b2137def65428c85158f652
+:0166209a2c70d7b082cac89e04a05c3591c740
+:01663020752ab30558203578a98ee361ddfe4f
+:0166402a77f1b6df1123eb03eb9085351b0cf5
+:016650055fbbeeac56fbd36bb00a6bd3f48acf
+:0166609b149147c5de677604e169a9415d38c7
+:0166706ea48ab9cb51c74c4641f10aab748321
+:016680f366a986952a1d5316ce53b2771a4f1f
+:016690da6d55a173f871af27a1e2f431246281
+:0166a00bc2ac2b45cda10c07e0025c9ded93de
+:0166b0c7e07e504f96a11fb9d981ff5e486d91
+:0166c0d7fb35975f876f190344bc4c209449dd
+:0166d0a3b2280689ba041e6cdf01b6e9a144e9
+:0166e067ca4420f3492cf5c6bf3d13c0a1b507
+:0166f0af7dbfe041269ce1f9aec6320ab6bde8
+:016700f5cd586042344acd726607b507dc5f45
+:016710bfbfecb6514a0474fc74ff23d876bbf7
+:01672043b8dc5eace71ff5e8259f6c88104fe5
+:01673039bc531ebad00a70c4eb8b22f1f13219
+:016740d300ea9d2494e2f710778056722ee259
+:0167507d2b30ec0a32f8c0efa93ea085e5a3ca
+:01676056ae1f5b54def124d916e29dbbc1cd96
+:01677080c64cd0fcc60b866dc0407ee182db06
+:01678093c05be2e39f8cd8c79fec96c9f626b7
+:01679000d64deef2863a941265c92f31ce2cea
+:0167a09f793e89cc1a82358318d27676cd95d0
+:0167b0a4f24b11733d9f793cf77c1e71aba5ed
+:0167c0c8133381571bcb1f78ea9810ca50238a
+:0167d06c69df3c70eb2a2a7deaca7064b5f12a
+:0167e0aca6ab0182434432e93905c185ff292d
+:0167f0b30698e5de0060a5ccb16f02e1f0293b
+:016800bdbe1b03d51c715630c5ca75df0bcd71
+:01681095281e3fc9864314c43302f9c11e324f
+:0168202b08f2b7128df9e486218718b76f97a5
+:01683088e9123eb60cff3161951a564799800f
+:0168402c0ddf2929b680e4fd98e92080fdd0ea
+:016850610d9dfe17b64eb291660f53a187fa25
+:016860faee3e0e7407bf67befe2d53476bea5b
+:016870f388d5f0bc5f84ec8f9bc03035dd31c0
+:0168807d015f1a446a7d1e2ef3ad2b02916fd0
+:016890d928b4bfe7eb1153e457ebac10f86bff
+:0168a094189c4cef938f4286d178416acd6baf
+:0168b039415ffc05d62f97261779060e483ae8
+:0168c08d709dec5db7b0f1b1ca0a9e0b2ace7e
+:0168d011b800b439835e029685e0c7ae211d1f
+:0168e0710fd6c163345f8b803e1d500cb09be3
+:0168f043ef7dee50795fe1f17e554df802d4a7
+:0169005a54821e187775fa2856f12bf66d39b5
+:016910c6e6d90f7e554aae083783095e51c14f
+:016920e3b4cb7e78c663a6f7444f985ac30553
+:0169301f70264e8fb9c626cc266a5395ed9f70
+:016940fdc481901b7ee9e3a40f2e045c621290
+:016950986cccc0b37034540bf45a15531050f9
+:0169606e16c3fa97c368ebc48a38cbaa600674
+:01697035e241dd75a89006f2ab7917a8172d5f
+:016980e113512e580e96a7efbefaf7e0e59440
+:016990b052f9ea98edac15e2dd8f3e59fee031
+:0169a0a0e6140eaeca4c187bc2b337fd038251
+:0169b0ca7c19875c02c67e777ea88879c22aa4
+:0169c01c939cd6ca98afb54d0b6f8a50596e71
+:0169d090b5b20edd13d8685ab40163ba343e88
+:0169e08186c7c4f0875970e4a06f05a5baa1ce
+:0169f09de670b5dc84acd5bbd2752b2e41ab57
+:016a008e780eb1473e7393cae98834be09184c
+:016a10b6e281cd929210f23a566917d42cf65c
+:016a20309e7f890b8768fb6b66719269dbdf41
+:016a300899203408d40e5a699e0012a7928ace
+:016a4015f3037c8f1878ded2b7ee76a9e2194b
+:016a50f79d8f8862af59594e8cc34b343daf9f
+:016a6042bb36e6b2fddf90d981ec1c9c39e927
+:016a704e98af16022616c0de74d0b158b3ebc4
+:016a806d19f28f3f50d8019738cd1119ab4671
+:016a9074b24905434fd4ec138fd0bc50bcfb4a
+:016aa0df62248059e8dea17a1dbdf907f4a2b9
+:016ab0c5ec57ec9eb3a97d9c1b6d650843e00f
+:016ac0bca7eec658f37257e49ebb873420e2ad
+:016ad01b840f74d5561f2e5cf27a68bb7dd92c
+:016ae0a51681ba22f28a6a8e9143f95fc39471
+:016af09d38907cd65b3ebeba2ddd986694872b
+:016b00d06e048ffc6b696b9bacab7b72f4af86
+:016b10c81b34ce01c2bdc8cfb411bb08f9619f
+:016b20ba03f92bc68bb50c26ae0259da0031e9
+:016b30b37f46d6dc94679d6367ddee7c1c6332
+:016b40a9ec3f619b087ba34a12cfef3bcc10b7
+:016b50e1c2a8dbadc63e28ccdd2f161140a2f0
+:016b60208b2f338769b34dec9fcccac1cb2fa4
+:016b706e06a8f8e21f61efbf5015df47698a68
+:016b805acb5e5b19bfe65b075c4dd6ec1a3e81
+:016b9076b27b63bd7a5774163047893b342327
+:016ba072a6c315fda48479c58c10e44ce014a8
+:016bb03834421063c0a7a01a803078e090b30a
+:016bc0cda4d123df28f201ddaf949c3c12bb9d
+:016bd050ce90269390a949bb74231db06cb53f
+:016be06b7072d3bfcbb3fd404994cb81b5fa10
+:016bf041c0aeb543b050ebc39d2b8c3f1d4dbb
+:016c00e1f811345a4c6fc0f21944e7444fa1aa
+:016c101559af06557c7e3d6395e3e811ff9c47
+:016c2074062d54b969b16f0b7183b6596a6e0b
+:016c30b9a065f71d21e7b95d8bd60d981d1dfd
+:016c4092653dc7ea02db9aec1b82754bd760a1
+:016c50a05b5cef0c4c60b4ec317e772d6fc9cc
+:016c60c2001e5787628417a4740d3363e1dbf6
+:016c70862377cfdf61a8b2d7b789e5edd9a966
+:016c8090feaa235e9126fe83a297027ae0594e
+:016c90c98b0b055b33f6cdd6b0ce60a8036013
+:016ca0155c977f96b1b224dcd2717202fa7744
+:016cb00871bbf22fb11d50aa9158478ba9ec89
+:016cc0b39b7b7375ed80ae840eda9868726656
+:016cd06d91524fde04d728e2764b812214481a
+:016ce034dcb9608677a1a9365dcc5129c19e3f
+:016cf0f258ed8b8a49bbae3f7eb355c660d88b
+:016d00ecefd526a64ad2ed1479be5a5f17790e
+:016d10e2d225b68745ec8b13e02f8f64943a82
+:016d205fb79d373a6e5753e69b7d97dd9ed7df
+:016d30e5c04b76c0c18d7bfc4c6da4955f6f65
+:016d40207a2a594fb786437d6f1565a6e23c87
+:016d506e5233b683a661d69a19816ce913f4b9
+:016d60a75d931b3216b6b6a43895aeeb7bc2ca
+:016d708dc16d20873555cee94e7469f395fc94
+:016d80a67fe440988ec1d363bcabbc48099f5b
+:016d906b486ae8e3e01dbbc9db98bf28ac19b1
+:016da0393951ab5adc7e50170120c012d0c7cd
+:016db076bc592ca94d38868f77884df78ea4e4
+:016dc0593281520b4c274fe0fe185cb5da0bb2
+:016dd047c6733f2789d6a550ce4b1abb679198
+:016de032295b6e9c31369f61c558ae7e851d84
+:016df0d2d899cd9c82ef06735178e64b54c295
+:016e00cf2e62601b50c1fd42ab3b5518d0bf5d
+:016e10f0f1d1c044bb55048d4a5335a91f6bef
+:016e20185b3ebb2213784945062b5b7e88bb06
+:016e300dd49ed37e1c4d2b4118a7416829ed65
+:016e405c2305cc800e71aef6a3c4a87b50f2ee
+:016e50651cb2c7cc5e874803a92a21f2180cbb
+:016e608ec59a40eafee83c33b84327ee9fac40
+:016e70866352b1e4abb500a003d0c0d6ccd314
+:016e803f6cfcd94ad6659b523261746f4f021e
+:016e908d17b7a5437e2c3aa298d7126af48358
+:016ea0ab5a92c15878650f133934c322285d69
+:016eb01932773edc7abf6e990a273a9d7ee8d2
+:016ec0d09b6399b71fe0fa19ade91eda733d3b
+:016ed06e4b36cdf7ce38219a9bf14cc55a488a
+:016ee06e938bf722dfdedd6a674127f8157287
+:016ef05a3f81971027e0e20f59ec13756fb60f
+:016f0082f03df62020111443e91f757a98caed
+:016f10dec3428f77f47efb9fa400b3cb4bc767
+:016f205aaff5628e0387e0e7fc302e06343636
+:016f30b312d4e45a27204649f5ae1be87598c4
+:016f4040315215321035ea3cec40c157017c23
+:016f50bbaabe0958f89d9539ed15231fd479f8
+:016f6047353fba3b2cfa2fba1a4b5007fdf744
+:016f70c581b61dbf5920337ef3d6369ab7c55b
+:016f8022ce13f876ef154691e4f408ef8494ff
+:016f908445e1962e15493917c2374003c91e65
+:016fa045bedab04673df9aea0fbcf062dccb68
+:016fb0e4bde87b79c52c5cdd7ed1760f046c05
+:016fc037ed43f577d318e57fae10fb7b0af862
+:016fd03fd139e8432b628a8c5fad5ef6830932
+:016fe09aa6715165b8ebea5f8a21052b072d5d
+:016ff0c9f0f3bcc5049e2a3549b067b2b7f896
+:0170000ffe70629223cc9b554b193d6cd8afe1
+:01701070cd72c2c5bed2662cdc45160497b683
+:017020dbd62bf13b5da3617b0d9ce59789be86
+:017030a32c36f7989273f08a36cd84009b3a6e
+:017040a2ada1100f5846a0c96d65c5a789be0b
+:017050f1560703c3eeea932f7bcabff6ff2672
+:017060e66a64fc5c9b4606e026d6f2f5cc3b3f
+:017070b9b8fe99f156e6ea24b022aa8f0203f6
+:017080a72692a93d9dff42384e5f89a1dadeee
+:017090af9826281dd8972847a300548a24b983
+:0170a0fa2718475db660d1cb55d6276242247a
+:0170b040ddd23c6b73ba006d7559861584a1e0
+:0170c0d488140b9c9db3a242af6cfc014b10a4
+:0170d0c642a4a7c99fa07d401083da43238b4b
+:0170e07d27800693e5efe8eaf9f4c5461cb4ff
+:0170f05e005d49eb81635bb56574be93d74543
+:017100920d16c000bcdbb8888b92de66167d1f
+:0171106461daa24c56747ca1069f52c38aadcf
+:0171205dbf732f78a10ba18d6d75f80fdfa448
+:01713000c2879ce59493381db96c544029dc39
+:0171400054b461d22a3a5a082dfb24443554a5
+:017150ccea2611f6962d840a9af730a401735c
+:017160d122635fcd77b85e74ce1d80401830fe
+:0171700d3d86c26985f73b5f25c01c055fb3ff
+:017180e533b0a45148498d53a1489f789caf61
+:017190429053d9f118f812b4c6bc510a6f69f6
+:0171a0f385ba6cfbca838c0adb15541ff16fa3
+:0171b0658c58b29fb5dbb853c6e993d5359eff
+:0171c05493c5070d8a59c78319a7c606edfeb9
+:0171d0dc0a7e980a358a9447f34c40d1ea8b0e
+:0171e0a249534973fc75aa8cbc4ff3fbed12a5
+:0171f0dd3292b2bf8bf722708dd757c3ecba68
+:01720011abceb4334707b63c211bb68570641a
+:01721022e580a6f46555921d69bf13f4d04ca3
+:0172204c8e5c49950214a5f89f0238c6a9afc9
+:017230bd637b9ce6f83fe363fb28b264a4c717
+:017240c0e1c95dd6626aa83fb23ea5332ebf11
+:0172509cd5b7085f2dbbb24caa1504aab5c78c
+:0172603e3aff4af9f0fbe10550be6c141f534e
+:01727059ed8c1fc3e279a0fb928a20ec8610c9
+:017280a1d245e16dfc686e859f2a4328e3281d
+:01729020754ee2e082a8f7cd1f9ea137e12ef5
+:0172a097cfef1cae86ed22a19b3285eb16ec54
+:0172b0a8e2937dfa63fdcb08334890ed9af59f
+:0172c03147ebe4f451b2307fb610f91f0aff12
+:0172d09ff3c67dd80d393b0736188939a9b02b
+:0172e01f63e0ff6b7e7a31a0c0c82ca112be88
+:0172f09c4cae1bfe3d6ec6f661da9bc27cce58
+:017300f666f3bc11d1f862703aafd40959bedc
+:01731080f5d44ec01fa311b94a23c6880d0f9f
+:0173201610700cec907848fd034323cd601acf
+:017330393599a353cfdab6bee9fdd025ce44d0
+:0173403355130609ad89423add4a12c5cf3318
+:017350ad21c4bb0d85cd976456ff0825bdc8a0
+:017360b4ed2f44d87f3e6589d71cae7f2d196a
+:01737041e82fa3cf195462af346611ce929c1b
+:01738092907b8fc28ae91426e2d8df9ae20379
+:0173901fb07eda5974f32ad93dbf39500b5c38
+:0173a0314fef5ce5194e9e99357f14ab0b78bf
+:0173b0f2357dcf8f6f8032f251bdcfc7a9869a
+:0173c0f63155726ddff1ae0ec81b849c6028be
+:0173d0a1a0a86137b1f74e25bc5ceaa782e159
+:0173e00ad15dcda5695fc8f2b94b76b2b0658f
+:0173f0d4d3826e06e7203518f728161c9534b4
+:017400eb31afd7fee0296a1a6ba0e87d6431ae
+:017410f153f140810802bf24e0643ca5c25d48
+:017420fb44aee92202192b485e9dd53868556d
+:017430b7ce37ad2c3c493e63a31b62f0bbbfca
+:017440e063afc3703be1f237868e67b9a9e81c
+:01745069daff20df0606ffd7b9b642f52db8be
+:017460df8e8fa60ee5df7cbe931853e15eaa95
+:0174705fe448e3b0aa727d94b60cd57d6a45fd
+:0174804cdc66d117393870328d3a640d16e25e
+:017490c13acb46fa868f567a181dfcf8311f05
+:0174a0f1db410b8ef0bd97db5810a0e9b6fd7d
+:0174b074171a4504b3dfd9273b302eaf30100a
+:0174c0e093fa8c5657074f3b9f66a3b044a4d0
+:0174d01b9f2a89a031276f5e1c492a87bbe863
+:0174e09adf1a28ebdacf65dccc32e4688d496e
+:0174f059171eb5cf7996b4bb1f481569ecd8ce
+:0175004cf04562f14c36df5008fd9407d6a99a
+:017510f0a9bd339498c7589f53d8cad27a1472
+:0175206be41facefd7532d7022442e2a30f9e3
+:01753056794757e3d5173026be1774864b4ae1
+:0175400dda60f909c62e0cfcad75c2cde6fe53
+:017550134af90f5fadc402f96662ae4d68fd73
+:0175603fd2c55df5d396a2389edfee3ad00264
+:017570ecc7aae86f6b25c0c4c971ac2de352e7
+:01758087a1e92cd1c54143646354864053db8a
+:017590707c2cf308966a10873c96198fdc6d13
+:0175a032a214ddf82455b05493ece3558ad65a
+:0175b0d4afdd3f8ad343616fc4ed14a4cf6e62
+:0175c04736f59bf3fee035108ad81a743fe5c1
+:0175d0ebfc17b15c6db4a3d434bced34f876e2
+:0175e0eeb07f2473dfa2e01b8497a830608418
+:0175f0af9352fbf99f94c900f150bac2c36b22
+:01760025be1e398281c4424c5956d5e19fb4b7
+:017610bc32a5540238891eee7143829221f41a
+:01762076074f764e6daf11536686f902a02305
+:0176305dabd622c3378b02a813655b64e26f78
+:01764057c42440feb3a04615bb6685013d9fbe
+:01765045f1a84cbd4a6ad366bcb56099514e02
+:017660089ee2934ed753465db43ede15762064
+:017670deb23cdf0cddac4a098d492ef3a7e304
+:017680020dd8439b742e61f94f1959939500bb
+:0176906d1ceb53cb084c1dde09aaba42f03924
+:0176a090df8599e39ba0f3783fe00dde8f1c3f
+:0176b09a391878823b9e938d8f868bb9f0cc16
+:0176c07cbdce1fa6d86c3a2adb2b1ea1c116ff
+:0176d0867065a23b1a4d82709e6afc53aea959
+:0176e0fe6733a0a238f44e0f319e88fc84177d
+:0176f035445bd172ee147a94314c7b50ee1cd5
+:017700588d5de23e71341414bd79836262761b
+:0177104e316226b56e7d89892b6215ddd9e18f
+:017720dd44a6524a25f7e22081a9cc011029b9
+:0177305905cfa7882b9011998a1152b558b676
+:017740d9cdd47b4afda57d056a2a5d870881eb
+:017750b04dc90b099d24f2860b002129c943a4
+:0177600c59c2ebcfa988aacfb4825af0bd100b
+:017770932576fcba95901ffdd7a989fad03877
+:0177806b42570c13a3c0240d12354c74e6f578
+:017790436dbcda85144f9c69876387d2e3da9c
+:0177a0757f05774260dbc540d3af171f0cb84a
+:0177b02135f901f12035929e2e04b41ae0275d
+:0177c04c2dcc5e2d4adab0406ca6b7334ad88a
+:0177d0354acd97b465c81f2848b76236a97076
+:0177e070b7bade4778d9581b62edb53ec68982
+:0177f0e1f6f90dbc077a4b931d08ca610d44d6
+:0178006d4a43e4a4098adacbfd20d4a676a2f5
+:017810b05edae6b0836721268dd8cc17416e5f
+:017820c8b756f7b6c01734767a890f5f2d5e84
+:0178302547f2a73297d0a91787a50af82539c8
+:017840def49a697269b5cec223abedd6e5d6dc
+:017850aa2a525fd7763b6be1c7a6187a74297a
+:0178606d6ad392c34911f959dda8d9b7e0fefa
+:0178705f5aebb2c47f10199d99508be7a1fb87
+:017880eb5401ca08dba67ac97dc48cc8489cbc
+:017890f972a98138dbeaac18c0339dceb4899f
+:0178a058e5ce48170b2cdd19484746feafea36
+:0178b0d376645936921c537b2ea7b4fe586cb4
+:0178c0c09d155ef26ff4e917b7a7e2930648e6
+:0178d0d3b207f4e0473315aba79b0ca3fa32b1
+:0178e03833b8bb839ff6f2ea785b3f7133f225
+:0178f02ff9faf1084f25618c771b16f0675783
+:01790014af5dcbb65fbaee83d60da0174484e2
+:017910f1dd159c9cebae38ebf16d1d63ef4232
+:0179209f9eb3a55ed5be367aef73900c43c6ad
+:01793017129807bde4019826b86f16ed3de7ed
+:0179403c66fdb5fdf89a10bec3d9427b514610
+:017950164870d7647a3662fda412e9a7d9ddd7
+:017960c9f57af1118daaabf30ea4edb79332fa
+:0179703d11312ec677353dc73c15ac87dd87e4
+:01798089944d7ed9b7113b60161cb690c9d4cc
+:017990bd8c4de535d0cfcc93c78ca87e7a3ef6
+:0179a06bb1d8d099e6fe84d294b2b77499583f
+:0179b03a99973ecd2ce567885a04d65efdcd15
+:0179c0cd8c422fb27f1ec2c37317b88b815bed
+:0179d08052c9c86701a2b875fd23dd16847fbf
+:0179e076541aeb17c7b3ac1ee5c875ce5573d5
+:0179f033dea6d067a49db954222ba0650d3b55
+:017a00f9e68f468bc335d533582332b8837036
+:017a10e2b152d9bdd5d762fb5bb5566b4486bc
+:017a208d0d7a084f3f2522360fea87aec1c4f5
+:017a3074cf5cecbc8bd68c2ffa561c3f76a9fa
+:017a4093761149f6f53bda66dc8bf46dec3faf
+:017a507e950c362f1002b9676ce42456e708d5
+:017a60da654a82042963cfa2bdfd2475c377cb
+:017a703f05a2ea327edbc29eb49a68258264a2
+:017a80dc0d198c33026bfafe2cc71dae0d1c97
+:017a90808ce37eaf041f531196b533c35806f9
+:017aa0009ed03981d678fdff668b8f76953051
+:017ab09c72c0a00101617894e119548c0dccb7
+:017ac060154ef30404b7d441b4898100385530
+:017ad03baf0ff7e12ebf8e936d9063ca2c9166
+:017ae012b57decc861c6816a80bfbd85584797
+:017af044e92bfd2f706fa664fbfd3ecec9a85d
+:017b0047d608be77880cdcfff0bc7a3a0408d1
+:017b1089a5a29123ec8c7d2571548e03345e74
+:017b20c61af68cc0ebe55c4cd7c0f43d5a5cb9
+:017b305515e2e8e5cf1ad1be9666895a105341
+:017b40b4a1a22671b704da958a7236c28b3356
+:017b500b930139b98229a4b401ecab4efc20c4
+:017b6015b333560ffe45b1c1c24e00e6816ee9
+:017b70d95657c2362afbfb8b9a748e6c0ee6e8
+:017b80d9bf8744569171a969fc3da8188c99ae
+:017b901a30197327b29c661575c525f1be395a
+:017ba0c98b24b202560466355e1d0394392824
+:017bb06df84184be3708f4b7c6ef77cbf582fc
+:017bc0cc54988fd26251cfe05adea32658f113
+:017bd03db3f1d634d973fb629080cbc77607f5
+:017be03f43aac9399b934d51055533ad8a4b86
+:017bf0eedfb79493de85f5c161baabe8db7bf4
+:017c009666ac1ed4f97365a770555758e53739
+:017c101d076a411aa3a6e31ba3a82707eb4606
+:017c20483feb3b693fb0839f175193c40c6ef4
+:017c30038791241b8b8e6b2379a8bf896793e8
+:017c406e10dffc9d85046feda5e31ee0c4dc50
+:017c50fd2d078fbef928bb1ab585beac1ae22e
+:017c6042f4e04117e2a929d5053ba8a3c700b1
+:017c706551cabc4bde1010446cd35dd4d17ee3
+:017c801b2ab04e568dcfb0f515a3f0171069ce
+:017c903b64ddc2a10e59cd69703915a9dbf695
+:017ca0b439826889d87450d6b1e6892ba776bc
+:017cb0a73292c488aae22865e2a404b86f89ed
+:017cc0308275be1c2836e45a7ff666a15b335b
+:017cd00a77eed87d2f17d88fb1b98c4ac18591
+:017ce00527bbfa07ac2187e3c7b33f0e9039fd
+:017cf0606d421aa1be5bd252f6273790339569
+:017d0065d97182b26a8d5ecd72950a3b0dc846
+:017d10015690ec24015d4c28dbfdcaa002ebe3
+:017d20ae04f0757b7ac3fd4c1d1aa8f22cdb99
+:017d302c550ab85d5186a01b7647cd9b31ea64
+:017d404db4eea9fea38b79009d53a0f5d936f6
+:017d500595ad5ddb50e68291a8e47ec0d15e24
+:017d606931c621463d2089cfbed78a745bedd5
+:017d706c5b8361b5dc1496a106dcf214ae9941
+:017d8074d08a43898a3c062b1454825f535149
+:017d90f9cb70cd65d6c6a50eb300b5c0cb3aef
+:017da000d70b0d92949c52ebf29bbe4a3e4f7d
+:017db097a6e79f861f637ac92c35a53260452a
+:017dc03c7e50685c279f74196cbc5f8f16ce1d
+:017dd04095b366f3dabde6af17afa0dc06a8c8
+:017de0c7e8f38c7710e5728a6f586b1058a07a
+:017df0f046ef2bf9deae04bd6b0f375be545c7
+:017e00f01a1feb14e9248961edd7be9c2665fd
+:017e1045532aa3172b83361cfed4b767311d77
+:017e20b644b57f9943642743395e146d89c99d
+:017e301d28a2c4e941a40b5b6034b515c9bdc5
+:017e40708522026454be035196ca4bc9db2a37
+:017e503c444c7cd53fef67d67c05982fcca544
+:017e60c89e5d50d8e72c1c96d51e2cb3e9465a
+:017e705dac3fbf081d6ca31df0ec1313f334a9
+:017e80d0e33ae58a0bae8b75f2ed6ecccb1c75
+:017e90498baa67c2f2ad28aab70a01859284e4
+:017ea0302c67b82e290df65e96e4e8a5a4ce22
+:017eb04029f77a0430f4077f5783116a6c6b9a
+:017ec0f6333ebfb19d9181e5494ac9f16a4378
+:017ed0d9e52fa64f9e838fe63824ca0dadf7cd
+:017ee0feb19004a0a21e9c1efe7d153cdd6382
+:017ef01348bee0fd081f44f772267bf7b66272
+:017f00abe8bbcde9a0fbb70104cf0daa8c4539
+:017f10d7ee218d70091a941d42f37c13ca57b5
+:017f20fb0dc961358ec383849fcf80a2574f2b
+:017f30024ec6cbde1b617b583cbc88b92454e5
+:017f402c135416b1d3caaae1eb4a6a27288f52
+:017f507eb061b3a5dbb283f1a01b05d50cc372
+:017f6059c2828cb9a1d596283cd86e158b0ed4
+:017f706fac6226c01c35a6633664aa68d43bbb
+:017f80849a1c71b9ad60864ecdf8430e653fdf
+:017f90a56cdd9d8a1797f5ca0a2d527f327d2f
+:017fa073e3f00eeb47f74381f0d8e604eda2c2
+:017fb0607f685233b5b0e3b38af3ce89f073c7
+:017fc009bce1782bf932dc69ea1d60230d5262
+:017fd0e9b8b6791f1f1dd71d7ac35ed1987692
+:017fe08df66860b0f907dda9a45d586fe57da3
+:017ff01d939ed6649019ae9398418dc20dda2e
+:0180003faef089facdd8ccfa196b23bec8f3d6
+:0180103d687a055d7ef2028eb2765ae9cbbe9a
+:018020c0432c636b08ca4fd9452a4fce96a168
+:01803038fb80326f2e2ccbb14a57f84f345bf2
+:0180403b346a2268d96641625846d058cfeffe
+:01805083746eb81c450d65aabf39c3594565e7
+:01806000d0fbf9d3fa26ed80eec3f1d41109b1
+:018070fea5a26fc551a3eb9c969e6bde105e4f
+:018080cbe1655be6f2c37b0aa0c1ffc1c7d052
+:0180908cd3cc7472e38ad9882738a8f272497d
+:0180a03b97a80289ea9370a69525edd5edd2da
+:0180b0a7ad51fcec22ed1d62b9c74b99e7a98f
+:0180c0d0bf1246fa33eab47706b03131a30b58
+:0180d01880ff603d55ef4f9d97dc02637152e7
+:0180e07f142e915be4cea2dff7cbf6dd15deb8
+:0180f0d03d61eb5368c33910eedd0b51d78132
+:018100a9238c077a7d08e4316d7a6f7f34bf46
+:018110873c64602038d5a27e4d546b9950e246
+:018120b868b36b8ec2c20723aa5363e3f9e3cf
+:01813090ec167c5f7e34993abd29ac804f9566
+:01814027636a07ddb86338a20a785e19519809
+:018150464c32776a4852bfdd14470c4a4c0939
+:018160074c67805fc29a742426a37d13486dcd
+:01817095005f481fb4be37073f5e3a062e743a
+:018180d5b364e9201a8441c623e7dba8d65103
+:018190691a4d308f2eedcfaf07857557233864
+:0181a0c47bb421c08a6bea9c32b5995d50fda5
+:0181b0b78d0a6f209564d5ee2a9fcdf6be2f57
+:0181c054e3a77abc93bd7b631d7f368b1b4f60
+:0181d02373ca9e04db1e0c9b1d702a1ce89444
+:0181e00b7e64a7e9057e8e50fa8cb23af21c60
+:0181f039f10afa1618f27b5814fe19ed6cd249
+:0182000d6d65cf2209fb3213fd8a558ffe7407
+:018210efea6c7c44a83f0203e9edae5ec3e632
+:0182209d1bc2626bda22a966978c4382422124
+:0182301216f74c6c58c27627d08aba7d044148
+:018240e92639f06f444c435367490b589298df
+:01825015769eb1e7f649a4c78c91117f891507
+:018260768326cc6dfd44e1a3cb6a4ecbd54bf3
+:01827072b036815a3097633dd42e826e178453
+:01828080dbc743e7abdb0d87a972f2bef6c6ea
+:018290f9abc210fd3dd83bd2a6c73226c33149
+:0182a097109c915c7989302dcb754ef0b70b32
+:0182b087fdda967ba7e57840c42dd0387491f3
+:0182c0997480e0923d30c5a9e09f28ef12c625
+:0182d0843a86bc3e5313660142bbd26d9e024a
+:0182e0ca85896f0889e0c73ea9483254eb2c8c
+:0182f0fdeb2ca6c81c482b35e692342f51a2c6
+:01830068ba4436705c1004c8a2c44f27582afc
+:018310fb98fa19852cae3a39978e3d11bae707
+:018320594922fde852a77b3dbc626e2fc7dd56
+:018330e30d2c815fe8844917e63993ebe23b4f
+:018340960fe8a93ff06c63bed0214607c96f80
+:018350e1cfcb7fe40297a21ddc7bc814bfbaa4
+:018360df9838012df6c2adda11f2778bd3536c
+:018370ecc61ed4c013462583757635059e5f42
+:018380ce5d4c7470572ca3ef38a03697a536b7
+:018390bbc5cb6c9b3d99ac0caf8ad323f49e95
+:0183a0b308ebb1cb968a89e2b0d7768c0ff104
+:0183b0928fdca64e2e329d02e60a6448581378
+:0183c0f03aba32a1d7928fb753f84c13d2a9f0
+:0183d0339546fedc70744df35675d4761ad932
+:0183e0b2849545b1ff8de7c0b6d4b769446ea7
+:0183f09a5bc5131c6ac97ee6b68dba9471f5a6
+:018400d9bfbaa5b3914afca31adc418b74990c
+:018410a32d71eb80f5f4357cee66843ac45718
+:01842058b8e47756c6a3348e8381946d010410
+:018430344820bc7220e1f5a10aac637b208a0b
+:0184405487a7506fbdd8c0ca874bea682d93b7
+:018450d7dba8cfbb11010f07e6dc35ce2af15e
+:018460f48b9395be4b61d2d49c13fab4ae3a72
+:018470d519c187b9714cfdc959a1eb3140bea9
+:018480882648bf3bb577ba759773492e3fd701
+:0184906e4713db5fe60cf93e1acf5d18af015d
+:0184a0b9e7f6e22f9eb0a8d46f4789eee2664d
+:0184b05c84e922dd31cd89ca785b8da2e1e617
+:0184c0a423f8b2459e6af5fbd1cb4a00637e9f
+:0184d0fe70e8f28c6a06403c1dbaff39753f78
+:0184e0b54e1af8dbccf05058f41ecb2d48adf5
+:0184f018c3ec5a88a282288bd839d6bf1e1719
+:0185004377e0ca92c4b866040796532759d46f
+:0185107874166f886ffc5a302b795eb444a8e5
+:0185201681764bb45bf6f43b7d6efbd3e433e2
+:0185309ed745a62a8dc1f86f712fe880973b8f
+:018540dfa2e7b60d9ea02868e937888e5e3ca2
+:01855048bce477ec886e94b517885c86e33c1b
+:0185608c58f39f0486cfeaf13701263bc6f59b
+:0185701b01d0f399fc731e3fad99c834c61195
+:01858060cd8671bb267b3c9b35d3a30a8cf8a5
+:0185902586fda888c9721523081f900f6e37bf
+:0185a04693657edde89213853f5342483deb62
+:0185b02deaf76b91ebfb6deefc56da99688340
+:0185c02b25c5b815765adec88ee99e9240741e
+:0185d003b58ab86a609189e55a95290b0b98bc
+:0185e0558e0f00d8cdc799dad300e796e3dbac
+:0185f05c0fcfd0a9316ad55c0c7b524e99abef
+:01860063a6b36c21ea80c6a0e04d99b9d632ea
+:0186104de2f6f31edb8bafb40248a5debffaec
+:0186208c5394b44937253c9e00986e985f479c
+:0186308cc6d21bd2f2a49f9e5d36a9e27e6e1f
+:018640d829e85db00b322bf0c06f245e8d48e7
+:01865029e0a8ed75879ecf1dd82d2d62bec1e9
+:018660429af48f976434a8d4ade26407c33ff2
+:018670ef2bcafc786eaa201fd76f079396ac3a
+:018680f1d35a8dbb3114e4adacd9dfa5f420dc
+:018690e5dce1d0793dc9abdd0c0d7c0e5bf77b
+:0186a0cff74b31bfc5c488ad671378f416819c
+:0186b05e7450a855a6fc00ac7aa358a7952815
+:0186c08f6436422553619cab25fe935f3f2879
+:0186d0ccd39bd2781e51ed0d2131af967b535c
+:0186e04cb0bc33a96bc29c3491b8ae55ec3b21
+:0186f0f2cefd8e5fb0281abe19c65293892228
+:01870097713f3d701d79d22e7b9e3326f547c5
+:018710935737671225ff769ee832fb6e676220
+:01872066f1d72d6816d04ac8ac32a83aae5739
+:018730ee00fbb063930fc8bcd94a588d49ff77
+:018740d2993d2d7a535af1d4f80a9487150c72
+:0187500841688b26b84aa20bb4da10f3794689
+:01876033a86f20203cf19b952fc83cdc61ecd3
+:0187701dd4ddb3c4ea5f76fe00d037cbcc083e
+:018780a71cfa8a17ac5ab8099bc0f4a63c8a51
+:0187909f244594e4e1d1b1aeb0211b57fc4aaa
+:0187a0823f85f010dc635d8bc9a5370d2885ff
+:0187b034865a2fe80078e2ff0f56dad723f761
+:0187c0f2b475aef6014990226a4290486dc3c9
+:0187d08f641ef8069c460df5beeb322b9d4941
+:0187e0974ff71736526ba40018672f9cbc2782
+:0187f057e16672f592dea47daafb640fd2282c
+:018800ed2fffd96b6dbeb19708bbdb5b3ad44f
+:0188107521a78c0252cf55283564e408fa1a76
+:0188201f2131fc0bf598c1c3dc8d63be43ad11
+:018830dda8378e3b4a1f26952bafe243c419ad
+:018840b6115c314cecae4edb1d7497bba40693
+:0188502c4ad535ffbf65db0e488b695b2daf7e
+:018860562712b912a01acee8bbda69a15cc5f4
+:0188700873b73f0e2e647f53852bc1802cc4ba
+:0188802c995d2aa5c953b1d20eb473663dbe68
+:01889002e360403c1eec8025db9e64f720f56f
+:0188a07ac53f9c3fad3a8480c6e67ad37ca26e
+:0188b01396dd772a2474ee383d3556b26382f8
+:0188c067e9b7317d09262ee9234c4fd1a1231d
+:0188d049f0d553f20181474da9700d56fbddbe
+:0188e0753b8fe480fb0435c825448c48fe21cc
+:0188f0eb207be342af113c7b40e87fee6faeb5
+:018900ca4813385ad57e2e315e3aba35473dcf
+:018910b9b90b83680984da55aba312308a0ce7
+:01892071739fbb98406bbb85bc0f4dd2b519b9
+:018930b7b4314aec06e610a16ad31c4f1e094c
+:01894037ff8ae0263f1c18ec19c3d9c3aa14c1
+:018950853d1e9f55286c83bab25a4b24a99e78
+:018960d6b8d2578ecd7696737c97c4caa10648
+:018970e647de422a73f3f99a920cfd446cafeb
+:0189802d326b79729624865d724d4c9cb22da2
+:0189900644ea926db60cb1738855791be3e2fb
+:0189a00500d2af964732cb02544c3900980674
+:0189b06f66fcf8c652d2817609786daad83016
+:0189c0c6a3f87c3ebdce9bf8e7b210431a769b
+:0189d023f755c31193dac1c0a8251702fb589f
+:0189e0e61b14bcf51ca108cff9cdaa722249e8
+:0189f06895c8bb246f1e7ce0518d7d29a41177
+:018a00bcbc7d5b6760955af56e5f375d41ff17
+:018a103d088f879ce8d4e8266ba8e32be36487
+:018a20049d836daa24cff06012fe516ac4d4aa
+:018a3025ec48184a7107f7dd5703fa66e69181
+:018a40319eacf31b9b2e152c5e4a919933b4e1
+:018a5014fd4ece4bb4ca4e2cc74ec6ebcde22a
+:018a6001f19a9f78dada1921066a1a42dc1ce2
+:018a706d0daea5d1f3d343f91ac3d0b69744f0
+:018a80e5922d8a5ddd2d0e467b562a0b436487
+:018a90170b691014dfebab237d32fd7a8e3146
+:018aa0c396fb2eb0e53e3e1563449f787d3e23
+:018ab0c1043d05cfe1e9bb530233353dfbb296
+:018ac012d3ddc4755fa99a1cc23d3496ac4a41
+:018ad0590cf7ba8dcdf03223644604b1e2e5d5
+:018ae0d570c7429867794a1113739a921d4f40
+:018af0c3a9c84f47cbbd1253c74cd9b0e4e5bb
+:018b00df956e8283f7dabc72defc782d998c50
+:018b102ce4230b9f5dda1278f8e7c65ddbb29c
+:018b20c3431ea056c203c9a352dc7a1e056723
+:018b30ca367954d82570be59dea2da5aafed35
+:018b407e001b9aa7155df8ea39f49bf69f6a2f
+:018b50fdbc1e7a7b2b852d725c78b84308775f
+:018b60191d5005e037221576f423a04e76ba99
+:018b70393381483925615d533a6b8f0cfdb8a0
+:018b80506b783784acbb8658104950441896c5
+:018b903173362e85e9c3851d0beba2efe55a92
+:018ba01ecd35c6c1c920483c4fe9db95c378dc
+:018bb0f00c2ab11d932957536a700498bd1b41
+:018bc05826005bf26dda35772ff0f8b17fd6b3
+:018bd03c78ebf88cff097058259ed04eecc595
+:018be05f3cdbd982bbf313957744c6590eabf0
+:018bf06ff5ecda7caa08391791f04c30d78a59
+:018c00ba089486763166cd46942e74b815b64f
+:018c10c2547d4457b8e6e631719428988a79a9
+:018c20b3caab636143e714b8af75ca58439cb6
+:018c3057f31b17a7de5ce8f234c0d7757c0019
+:018c40387fc516c6a5c754a36d21fe8bee1adf
+:018c505ef65ade46bcdbb6e91e58aa8646e622
+:018c60ac7a8be56ffd4860141f65ad5633c0d1
+:018c70d9a5c6e49c353e70f80bb7a9df2dd4e8
+:018c80d23d6e84431c25b52a23d81ed2bb3ba4
+:018c90446e6685e18cfae0b28866a10ae94bdf
+:018ca024e04f39683fc0d37ee2723097f42407
+:018cb02e114571737ad4e429e643bcea5b8b2f
+:018cc0252b448748249f0036906cbb07761b20
+:018cd0386b9da59342b605576916d5e551bb00
+:018ce0e747d829fad954a8070a3122866ffc1a
+:018cf02989c924457ba94307fedb4435a0229f
+:018d004083d4603afaedef3aa5011cba641a85
+:018d10ddf602894f9958700f192adf160c81a4
+:018d2039eee54bc4d660bc6f7b1b6d880760af
+:018d30978fe099fbb01ee00efc75ae75f037e1
+:018d400f2d42c8148ac492d8284ddd4346ad67
+:018d50819f6f92799e447b9acff04c277d3b5a
+:018d60e1e8da14a0abc26a24be80608271eebb
+:018d70d223905b0ad38574bf26c95b8f83c272
+:018d8085a001d4e2f809bc89be4b872df056d6
+:018d901a30e0949041c91b127fb62fdb67d8f0
+:018da04808f4bfb4b02b7778b3b1e2102b01ff
+:018db0c6f00902cc65d60a757cb686314966da
+:018dc037bf2397080f8facea8d3cb537f00300
+:018dd06ef888eb4818e791f6f153bfe50fe211
+:018de0b78a8d283f79f8ac6d050b4d9f0ce297
+:018df0981ce5c006ff118b1ad8ecde4a39a075
+:018e00f7c5866baac3a8cccd94c5c3d16a8e58
+:018e10d66a0d784d0eb549f8674544b621fc16
+:018e20b5909f4d72c9421db8dbc482b06d38ee
+:018e308a3257c6f8f07c7e24b1b03693707c3e
+:018e4071910fbcfb5cb546f09d558d24f5f5d9
+:018e50ef23580d10cece6ffaf533522c304521
+:018e607425b92f9f431972ca57b06b9b8c62ef
+:018e706abbdcb34d564f1ca0e66ef183cfc6b8
+:018e80e927c81f7ffb80e7107c12a19b65e7a8
+:018e90598f8bf12b953d6096eea4978922f1d0
+:018ea0ed8311bd2e906a581947ae54ac525ce1
+:018eb0716cb85e1eeb98483dc4a2dbd91b2dc8
+:018ec071aa3149b1afce83acaac1993245f96d
+:018ed086ed27bca12d838c2120bbb5440f6a37
+:018ee09b1f3fe6db9cd61e0ae49e9c5824c0b0
+:018ef0d5377153ac9099dcb1308f2139563f40
+:018f00ad0bdedb186d26cb85a85cfc5036f205
+:018f10047e9717ed5396e5191dc0b90830b13a
+:018f204f5808679528d972e005e7dd84e39de6
+:018f30c3628fb307ce5ecae12e88a5e4f61f69
+:018f40f0fcabd0756ef40a5d4393e98e303fe0
+:018f50f20535f160a8cee9a50b48b6b88a3115
+:018f60d2dc67042568ef2b476c2873a558c2ad
+:018f7060c5aeb118bda3c81e5f343e14edf725
+:018f8016d9e46f0c50a3bd7b09184ba0549ad0
+:018f903212be9c4b844fb000458ac20af377d3
+:018fa072edac421be137cdaaf5aad16fb71d7e
+:018fb0139bf11116b17cbaeaf1a2ac3d2cc87d
+:018fc025bd59a7c2a34ae978b2012c4d11e28d
+:018fd0f06cc91af136f06de2cd4994b05c34b0
+:018fe0e16a2b8885cab7fdc1b831a79d27d868
+:018ff0f4748110939af548010a5347049ed42e
+:019000959d4a5e3d308c983e67477d2e24b727
+:019010bea157a45079a656153fabc4ffa65929
+:01902042daa97afe122579630b10b2b8f5d9e6
+:0190300a593fe454b0ba5f5af764ffbe9827dd
+:0190404053a8d0d6b2559f6db474a6e9e5589e
+:019050e5e5c2434805fc5b9c8c2f7bb19db0be
+:0190600476cc9d36c03e4bc81e6047c410c2f8
+:019070954a06c3cd37f886a88bc8d5f9b48316
+:01908084c3eed45ec9d701a7d922a66f28db0f
+:01909050005d543391744a6807e4c76d632e78
+:0190a07148f610ee880ed484290d19d57740a4
+:0190b07e218ccdfcc2f83ff373955c1ae76f1c
+:0190c060dc3c7d3e855d0e011fc9dcd07333e0
+:0190d0865c0370d2a928e1451a4ca4b291b2fd
+:0190e04a2d26b96ba241b6c7478df66fca3712
+:0190f0128998cf7356fe291960579ade065ce6
+:019100a1b25c1cf560efb076e2200a65529311
+:019110b174ee5e2a4bf6f901ebdd7541f7b74d
+:0191202d8fbdbfe809bce8a13edec1af3e3382
+:01913023a9319c1dcf987b6d02adab5a186b88
+:0191405cba0a4f48243d21cf0a1a9455c98a33
+:01915064a10a5120dde84aa0051f9e7c657000
+:0191604e7fb3c10b37198136d0b0e8e79ca940
+:0191708210c1a13fd2600000e8d7db16e0d037
+:019180ac8154385906233f915417f852c95921
+:019190d205c700d007cd4c7a58663dc8f03492
+:0191a0a5b989d7e1dd9194453bdc6d0bddd9df
+:0191b0bd3ecc4541e8c41faa4c64df04702643
+:0191c0a200b3baff83b889ed1677f85f19a86a
+:0191d00d60dd684f5b7c6dc7dc4667405c94bb
+:0191e00fa104e9d895f6f560225b4244af0789
+:0191f0358db77e1f95f2c1ca6c438f73cfce01
+:0192001d6ff500549b3c49659967795afea02a
+:019210633939fb5b4a5eddac0b0271662a836e
+:0192202f47f063c289fb9a122862e0b7459a23
+:0192304f857041bf4652404e55f4ccddcb357a
+:01924000f6df55116c8337a92158d99e54371b
+:0192501dd2ac0f9faf34445f5a952cc28198b7
+:0192602eb27a287085402235700ead01968990
+:01927023cdb89389ac95bd63c5e472d4b054b3
+:019280120c28b0b5d1bd8237c26b1a0dd0d107
+:019290296e6991bbfdcdfaa4c69085df0d4b37
+:0192a0af9dcb627740101efb2b4728a48b815e
+:0192b026c298ce1487bead6b682839b63d2641
+:0192c0dbb4ac38c8b1c966346bfa7e59a22a3c
+:0192d096cfcf72b685e19c0d6063beb7bdd146
+:0192e020e8b6d65ddf26c4143b9a30c7012479
+:0192f0ef69296fb1f865e5de0a44c4a82a56e2
+:019300a08490d1dc5fe26c5435e9a2164eca37
+:0193100ce638739537076883445e8e200feedd
+:0193208d3847fba5a58de612b8a2292c87b158
+:0193302dc3c10dcc72b813e544113c01a6874b
+:019340e6e68dd5b3cf8edd162e9c1b7a89a888
+:01935042cb0ec9726a55d4a6a7d6f11d1a4a17
+:0193604da6a9675308fddd18a4fc7c38a49594
+:019370e74f08966ac3b46d458072f25ee417fa
+:01938031f867334413d0f5e61ddc13958d9523
+:01939007f0d8af768678d40bc168c17acb473c
+:0193a03ee11d69162673299162501019f86cad
+:0193b0b29d95b5dcb95c9b215d45d9bbc96cd3
+:0193c02c563185775399cdb4184f429fa82b97
+:0193d0fe9ef8dccd5efa8fab8dcefe485d06b8
+:0193e03919bdb965eaafe08f764ab5244dbd06
+:0193f052b21d19ae6d74dd239f8cea67197340
+:0194006b6a04dd340dbd32179d01a8ba023972
+:019410c8ac3ad3cdd73f9d218b34a0a0223641
+:0194200e801b25448a66c7ac40dc01dc5e61bf
+:0194307b98bd68293ed74422deb70fff83312b
+:0194403fee5160fcabfdf02ab5638b2510775e
+:019450471342c95597df3f0c45a4165a7513d4
+:019460ce5dc96fede9693d095e320c60f1d95a
+:01947083347e4620aafdb1a391cabcabb9e928
+:01948068d59bb435b6d2c2c1ca0f112c6bf4c2
+:0194904ccc947aad2aee8289e36e9dcb4c6070
+:0194a04302de8e42bb3d88b732d0017672f300
+:0194b08a4c6623bd6b8d81adbf0f8727e1d6d5
+:0194c02507eb85e390340e8641b840b42e35ce
+:0194d046cfe8935658b72edfb60a339c337b4c
+:0194e0c084096685da625c8c7d5c94eb86c374
+:0194f068b68a09a9ebaa2bd17789b5ea78d32b
+:019500c7a9e491c172162d7c339020cff50873
+:019510c54d5720872605d0492f2340b5ba2d66
+:0195205efb538a34dee1ee44318939fbcde868
+:01953030cd01afdaedd767e201a9884ff18718
+:019540dfaf2b936666fcefb2e8f3c8348319c0
+:01955098f96fa89c5ff37091079c87b257f370
+:0195603714d174fba30c3a1efed22f6b91086a
+:01957004f11e182aa1020166045457848d1aca
+:0195805f97b249aba94a6205e671d88c07c590
+:01959031e80c9689e1f25a64e2298408db7b60
+:0195a079889883776c3828beac230d10fd5588
+:0195b0482122ba60ee7c6915f43609421344b6
+:0195c0c50a937c9931984e18aa74aca4e0321d
+:0195d094851a771836db48b0ef47c0809f4de4
+:0195e05cb93120e4a3856b80f71b18ac183568
+:0195f0b9c06db826d35621ae3fad8620e39c1a
+:0196008c739eeef73e3532a85ef112e92e09c3
+:0196103bdffa8518d7a8eb999be419edd0760a
+:0196202f03204c32407da6f04d875dca4eb1f0
+:01963025a3a0ac2aa96d237314856e020ed7e4
+:019640977e1e7b0845fdcecd2879c2b32f30e4
+:0196506d154f9d2000c2fbbeb344e913db1525
+:019660b0cc470fa006519d7ee31bf435a5e212
+:019670a5b499684b51ae65db05891f9bdfe61b
+:019680551e4a4dab5c28218e0223fe0d5657ec
+:019690815b6e9962c925084e86027e3e022ba4
+:0196a041ceffbe13e35a140ca61ed4b5223a9a
+:0196b0a3e152fad87fbd709792e2db7673bcf1
+:0196c064796dc6b0e97ec2d1535a0774535508
+:0196d0a307b031105d21d0863d3de874bbd788
+:0196e0eda8cbc123fd48b47ee2b57a2661fec8
+:0196f0b45a6dbfe059791c555d498ca23646a4
+:0197008f9f1911700f7e51484472487db5aa27
+:019710df1fe80ccd006e6c3240fdd2f8c3f75e
+:019720a0f54b4298f74261d8911cbbebc37a58
+:01973004394a65cd8ce1c7deb373353313d389
+:019740ffa8efeb2bc37f324383a2e0832d0b8d
+:0197504c839011e466133966717adfa06e7ddd
+:0197605c2eb09521bc41592f95d42b04dbe3d5
+:01977002ad73cded229cd2d1f537714aa46903
+:01978042ec7b6cdcfb4c95ccb486d9914a2339
+:019790654825d8467ddf47d94a1b4332164b79
+:0197a07887cbefe44e3ac3f3a016efdba4a4df
+:0197b0b0977d2292dcd5954d4b5695a033c6cc
+:0197c030fdbd74cd4587033887caad5344622c
+:0197d01daf3d9bb1c373815a3c141a1b087c1f
+:0197e0df7261f267f01c1e5ff41b89c508506b
+:0197f091d3cf37014e878eb709db414d142e8e
+:0198008025ac103227fa5ca1f7042a36ab4e5f
+:019810116838f10e90d14eae1284721a0396c2
+:01982099af68e97ee02931480a48a9d562addb
+:01983041da53b1c8c629218d4be4975f296f8e
+:019840628fc730bc1b17bfa083eafe3bf79e34
+:01985080af7e99e6505b5a176cb4726ef1c20f
+:019860b02634b614bc8eb27cd57b9f87c0ade0
+:01987034c214da554b13e75fa5179dc093688f
+:01988016f8a559a1caee7a5ef04b3b82bd1478
+:0198907811c968e211142694f1937ddce27ad9
+:0198a041e220bc742e08fdf1fafe0fee16f1d0
+:0198b0b20936420ea6142c430bbb7be2496444
+:0198c069b1a188a27c84aa953c10ba298e9753
+:0198d0655f59ab7bad576133dfbde8d150a0ba
+:0198e0a3a8b3e47fd9882ed12a5a5a2b2feec4
+:0198f07b2f239065bcde05a51f8682d9ba3722
+:019900223771d9cdc3c4b34e5d6d07a8970126
+:0199102ac03e081ef6a45d00873dbc98275b2a
+:01992075663241389c1187e1d26a89f51febc1
+:0199306e53e576cda53c365d627a1609023979
+:01994098931afb2056c02850ecad4c669a3613
+:0199502d1639b5267a34f4845361c90ba70d08
+:0199606af386ad0d2e1dc29041b4c456a2ad46
+:019970222f2d1689801f9f127c9faa34f8a205
+:01998044610aaef08e2cada2683f81b9eb372d
+:019990ad8f521386d7003003767b178f3dea58
+:0199a0646d7016cebf157af8c0092e7e88e71d
+:0199b06accd214b1efdab07d21bb839ffd9bc7
+:0199c0bc1630094cf49bf75bb93faf2441f5b1
+:0199d034e31f691c0a8f2f23078912207f0575
+:0199e0b242c2f1f721f8c06ae0571cdcf1b22c
+:0199f0e078ba134327a9f2d422ba4bcfd4a5d6
+:019a009c55554a7d9504637e81ae7511e687e2
+:019a10b3bf1367437d7e5249e138bd0fd31d1a
+:019a20596fed3d6e3479a91068e18a997a1fa9
+:019a3080c76159c3e8b7f7d6b723c6fa44cc22
+:019a4018ec885b5f54cf400154d386f1f8ee1f
+:019a50b05812b4ed6a442b5638f484988b06ef
+:019a605a43ee77fb5b21f7b725f9101f5e0f7c
+:019a709f25e010ba81aca2445f04d5b7060ef6
+:019a807ef1827c9ed0aa95dd3fd5e4c5f4420d
+:019a9079e386429671db69fa617086c76a561b
+:019aa09f8d17b7ce30b66468f38ed8ba91c0b8
+:019ab069715f7f2085dc9ecb7f7ceadd236e4a
+:019ac0e3bd292163e0b84baae4ffc382d41dc2
+:019ad0c517d2c2eaea0b5d5cfa041c1a3d8d87
+:019ae044a4aa4d4cd665b649f1bb1c973ae6c2
+:019af0f9f00b048e133f84bd2f59987ec24169
+:019b00cf60c023538f8d70b711035fd90de10c
+:019b10824e160bf01449d61b5d2b1728c19e3c
+:019b20722f947a917ea680fa4ff50524127d6e
+:019b3054ef60ae7a3112cf8b52a675d656b80e
+:019b40c6ed94949307257b15e50fe68f3e99cc
+:019b504cde6dc25e886f3367b041bb5f823bd8
+:019b600d2bad4d8036737d88eb3f4afe352ba3
+:019b70d920c0f5f24ad65e652637c80553e68e
+:019b8030007bd2ab599a5e1106d447a6d8d00f
+:019b90d0f6b3b79b341d732c1ff424a03ce34e
+:019ba0d44319a51963d548b226f48d3e4bfc91
+:019bb060d8b537a056e844bcf622b4e22df193
+:019bc0e7798ec08f85d068c93767e63e4af2a8
+:019bd057eef4f7d8120d8008c4795d8242c184
+:019be0e8068f7b8457930ae274dc4a2db33279
+:019bf0ac3e555fc97884b269b181f7d82b9383
+:019c00e9090ec8f4b9cdf97e6ae838c3448f56
+:019c108d8a2dd3d6d9afb302cb7d5cab96a159
+:019c2090b4aed1084b5914a5a0967e88b2105a
+:019c30a1067a89850748c1552d86b9a1b0f937
+:019c4003fc432d51a511c64455fb61cd8f8204
+:019c506bfec954110326103ad90e283767a055
+:019c601e9963717a74aea843ae6e52c0934ae1
+:019c70a3e9fa9d5b29053232770b25817f037d
+:019c80fd2eeb1c25c7fa23e3c6d660830c8eae
+:019c9006ce5ae1e6badd16f048f77e830287ab
+:019ca0dc7ba08fa89cdc42791e4a89b659acb0
+:019cb06cafb335edd8ce56e9846d65d6200b41
+:019cc0e7d0fcb4a4e4dcbcda43e5dd27c6aa2e
+:019cd01b656580d105059ccd0c1f14f245b73f
+:019ce057bf282dd283f605fd88adf16e1af94f
+:019cf0c8eae93838993be644dfbde1d6dcb469
+:019d0013d369f3603aa15484161fed1ff9f399
+:019d1099ef40c071eda559c5ad80381f510322
+:019d20356dab7933e0262d512b5cfca7f2e107
+:019d3013a0b9d64320a3690236447f184f2e35
+:019d40c2e2c1fa54a6417c6b911139377c2bfd
+:019d501bca9c3b39a43af2a18bd4c7d399111d
+:019d60073b3907aca3248ce3dfc55e062d9ff0
+:019d702b4f9ef4d763ff7a26dd1cb67e615ea1
+:019d80736d380836b6073cbc5cb74b602eb8e6
+:019d90045e87ad1d6f384526551cd3d4e844f8
+:019da01e0fb45d0f15961606cb4cd8cb207e2f
+:019db01b24c3242f7aba2785e86f698a4e43f3
+:019dc093d2694b2f81072c4952898cede30da1
+:019dd0e07e06a1c4db850c1d4ec4565d5ca247
+:019de0535c6efa6ae89f21bcdf52ad2993641a
+:019df0f18aaf75d9203bce9aab2b8a6a51ea92
+:019e00a78a4cd640b1f842f2496df505c59abc
+:019e10300aecb5460c09589b420d42f1e8a7c1
+:019e204b3abff33f9307ea7db0f5962d02cc55
+:019e30af998a006873f193999e47e726d5b7cc
+:019e40d40398b5d0dea8ab9157056cbe883e15
+:019e50b88cc7aca0f8bf092c0dfde342b04e6c
+:019e60c35a41e16167759c1f80e9c6348d4734
+:019e70e2b19a5c33afd4c5a236b2fee840a767
+:019e8029560ecfe2ccbf9e76b709589a314ce9
+:019e905f29385c3f32a330d6d2cc6ac34200e0
+:019ea0f4132a9395263e6ba7106f00d8d27721
+:019eb0f05e21bacc0bcc76f0584a2f32686d96
+:019ec077ce47f86ce0b50452c69dfe8f4d5514
+:019ed0309a2f9a0e90d8de8e0a0587df2e6cd5
+:019ee04be24e3807d0696b7c402b00f2651d77
+:019ef07ddcf16fd148e20c1966cef336ca001d
+:019f003b0a10d76b9f363b63b6b66c6bee3265
+:019f108a5652bfb9cfde613f5904ea1ec22bd1
+:019f20257e6d35ad6be976ff33ecfe2041f8cd
+:019f30b70f677a658be91883bae417e28534c0
+:019f4090d5067b249ff28ac0f520ed56d6d25e
+:019f50049faf775008d885fc0160111daa96f2
+:019f60055744fe674b0f2e45a697442096a773
+:019f70ca388a73df3a0569ad763c1ab076f973
+:019f8097051de68e6053364337c5b896c537db
+:019f90686dd6028274ec6920641ab556d50326
+:019fa08209eab7d49a5dbffdd7dc74bd37ef42
+:019fb0c02962da9de8d936fffe839d139555f6
+:019fc098d72f9ca1a2caf6913f39fc86571eef
+:019fd0084f868fcd83e01dd5a5e5722c3b5a12
+:019fe0a458f973a39a206c73afda21e2f13ac0
+:019ff02730587be8048e46c5c0f1d75a098161
+:01a000b8c3519fced78aacbc2614d560c4a645
+:01a010b023700caea82093d951680df46623b5
+:01a02068a14fbbd0c0a72b799f6133aa1f7865
+:01a030cc53143ac299db53c855c29404d4f332
+:01a040d8a220bed57a9551429fab602a2f0eff
+:01a050a165008ebefb58c7eb26e8b2b8bd9529
+:01a06025c6a17085acd07fe7e6feec12589ec6
+:01a070a92c47f8f44d7cf749463c2cd38986c5
+:01a080af820f8d7c975f14ba32223293c30b4e
+:01a090a508a4ec66fa3ca45f0d3abc436d7d73
+:01a0a03cba261e0aa4a10d8772e5a7a1a23700
+:01a0b0febd907a2c42e8a2df2d963686ce18f2
+:01a0c0baba8245b982cee086d662ee2e4f47cb
+:01a0d0c38d69bb02a216848d6ccb44dfb9b7da
+:01a0e019f6ab69e8e7b7e6e71f8a8d3f91aeb6
+:01a0f06911b29af27658be67c62adce58c6ead
+:01a100f602b0e2e49401244a17586b68936423
+:01a11027120b5b2f0fa70ba5a327b329a4cc67
+:01a120344ef5b5825ad4c93bff4f185c341d66
+:01a1302d7a63563433b7b7a20ca8e1c17e96e6
+:01a140b287d3acdfedf5481a1477ab5289027f
+:01a1505ab9919c6d2f51e78762133c2b61b93c
+:01a1606c68ca581942e2e0106bc40101706804
+:01a1701f287d62d13cd88e5b82da5744a39db1
+:01a180a6f225b0232b09f0d2eb33f88425e0ba
+:01a1904ecafd4867a90d26b61372b74eb14cd6
+:01a1a0aed48dd0c8603e6fe01737858a1e6872
+:01a1b0650ea76cc44a3ff16fdc18c8b8d56929
+:01a1c06e104b21ba25b15e1fec6c3a7388e8f9
+:01a1d038bcfe4fd2365d8e6bbb5645315ce834
+:01a1e0008ff5a1c95921f7ef0f4a4239cacd28
+:01a1f0bdcd69a0e1c750758805f05c222799f7
+:01a200029f8eeb43ea96725ebfe3abbbde1b8b
+:01a210d56e31be65edcff2928a2dc2e29bf81e
+:01a220cccf15a79bb5fa684392d37912096119
+:01a230ede24afa1e2f1d1ae6865a6b5f75c461
+:01a2403f51c92fe5d2df657459773c0d007a5d
+:01a250d62851b429278253729c1701c979b69f
+:01a260051f2f4b41353f6b77bf16cabde4c57e
+:01a2704d7b92597bbd48abfe64dacc053acda8
+:01a2807c6e72b6b06a7ddd743e1a131a452e63
+:01a290b6127a09e4d75e630bfb0b0de1d2e587
+:01a2a02570e6d868836dca167e47ab0bfea170
+:01a2b0af06d84c7df3f3c6fe0633d900bf130e
+:01a2c0eb1f16fc037d76286c2846272bdfa8d9
+:01a2d0a40c170288d47e6ba8df799a659eeec8
+:01a2e08b811fd8feba854fbc039e6bacda9ebc
+:01a2f0b1db33e679d5eefc6956165818db9834
+:01a3003808c4b1b93be992ab0304b4972a4a8d
+:01a310d4ee202b9440699d64b3237302d69da0
+:01a3200fe564734b4e18e413832093c82d770b
+:01a330cfc65f2f3fd9bef4e3b5340521ff5c8f
+:01a3409e23fc799bc05575fc5e466adb909b3f
+:01a35071049eb19935a776d02047e7581e924a
+:01a36091c27dc73185b42deca233a024a4b8c2
+:01a370c9278f906c305983074da2bb15e1f414
+:01a380746978ff5ea9aaf65d2d4c1c2f4ca600
+:01a3901a2e63cbb6dc0e3d635403b50725a039
+:01a3a01159236a84dfcf802ef13204decba042
+:01a3b0d954bacc07a777ffc6017e4f030f8341
+:01a3c0d6a0c0c83e17eb4fde0361e6d1b0fe9e
+:01a3d06cafc5a8b2d456ec7becdc7bdbb9a952
+:01a3e026705cb7f41faecd393e2ecc37fe8bb8
+:01a3f0839685170506196ca221bd6451d176c1
+:01a400833a1b90544088ecd07cb56b204ec114
+:01a410af51105e912deaed0d08893b04dc42f3
+:01a420de5f1f9b177d2ec5862ad4bcc2fec7fd
+:01a430ee60204c285c04f704cf7227a53fdce2
+:01a44086f1b30c06e2c41d7e12dd6631d90068
+:01a450439ba87954568e72d6096552284ffb3e
+:01a460ba11ecc1e8b47f015bcc9f5563708d94
+:01a4705b5ae0213c171a124a4e961c617bcb4b
+:01a4804d4670b42dfdd060ba80e2c38b6609d9
+:01a49062dd2e3d0939588290b62515f47cb97e
+:01a4a0d376415a5012ddcdc1165f6ce2c91a16
+:01a4b05f830043238d8af76a7d4d91ff656f66
+:01a4c0692f8144105b00b112d7959e5591e364
+:01a4d07b48ca15170ab308397d96a0eff405ee
+:01a4e0c5bb296119805973281905faf79a1586
+:01a4f08d50096f9c630a5bedd8b42f90932ddd
+:01a500fe5e90f147c167464fcb32b0fffca556
+:01a510b2fa5614fb551b477d767f94b3a49735
+:01a52003ada0a1f267d1c32ce3bf5ec30171f7
+:01a530402b31f4e4501884eebd8b28ded31e2a
+:01a540c366d61c06ce949de09c8f58046676b1
+:01a55060e97ec580fe8e61099d7fae67a2aac0
+:01a5607c6364eeb8eb0b83945ae909787598ea
+:01a570fc4bbb9f81032a55077fbe6305b86f10
+:01a580ad62b7238379ad38f13f6332e15c7330
+:01a590d02ad80e1791c7cfafd1307cb1101d89
+:01a5a0c56ca4eacc1f129555973df0f15c5b38
+:01a5b00e21d8f968a591f9483c0ecdebb8fda6
+:01a5c0b2cde98d6cc604b82236c3fb5dcb759d
+:01a5d07183bec9b9fc4e903caa5d3478acc3d9
+:01a5e0fe28ee151180cccd248d1b1bcf0b9c75
+:01a5f0166dafee0cc6906e5343993805897dd1
+:01a600edd147bb300cf41c21f0181635578df0
+:01a6107ed97aed303592a3ec7a7aebdb23b61b
+:01a620f5f221b955b29b347b2d5f7f334a4093
+:01a630cae816f9f9a6e70724f89d3f25c5ab0f
+:01a6409768676a7b71fca9492adbaf0f10e8a4
+:01a650dfa124255a43ec1a36e956e21c7fa97c
+:01a66077de4631c7725e849b6851f582479f62
+:01a6709e37146fd6a5f4f51c5c25acd12c95af
+:01a68066848c97e640f833661e5a1db0c2368a
+:01a690f7b71d5086d84e89bdd37464ec88bf55
+:01a6a0d0635062f7843d5e786265f7aea880f2
+:01a6b0c847c0d90f0b4368b85e64d904c08748
+:01a6c0afd4fcf951895478799617418ba6889d
+:01a6d01f264922acf5220c3a13222f528b4b18
+:01a6e0a6ffa383c29d8734196c200db978c774
+:01a6f00da66e931d56c683a1221f775a76b21b
+:01a70024e46c1b6611adc63d6e0c6c79536d31
+:01a710b9dc830a4c565e345e557bb481f744fa
+:01a720c3bc7111b0519f30d5f6c185d2f0c9c0
+:01a730f2ab0d5e83f8cb9c52e68b46b8a42364
+:01a7409965219be05b8a70323c9f7d2571d28c
+:01a7508adbbf588e0edc64869c220e6d10f249
+:01a7606b693a9e0d0dfce326f525d06634f743
+:01a7707173ffe3fbad88fc4e906d41720a2016
+:01a780e735bb816e5e56dcd5ffd5bccb0dff4d
+:01a790b938583cbbd07429f040214d09661dd7
+:01a7a0f8ea263cdc9c48f099e57bcaf597b482
+:01a7b00cb16135dc24b878d7f7101edf431d44
+:01a7c06a015d070ebced1cf29cb233a8acc918
+:01a7d0cd9946ec1ffbaccae456396e271689b7
+:01a7e0e7a4e3c5d8fa0abe940e576daaed6da9
+:01a7f0da2fd3cd730a0a4e8b239b916ce6f009
+:01a800b3fa724fd88a072196bae5837116710a
+:01a810a4ad2296a25a3f038051e979985f2a37
+:01a820970fdf2420659dfdd4d8dae9ee2baf21
+:01a830fa350afba807cabe411de567e0ddf103
+:01a840c1cb067d4c54e7426eb490399b7344ef
+:01a85008a23994f8b94bfa99f79163d6f73134
+:01a860eb7dc0ea5c2d2d38c72da3455acdf517
+:01a870a1b5ce0e80fc27b950ce13092bd6ddc2
+:01a8808ac3243ad0f4490ee1a23c3dabab3c76
+:01a89041d3f2e9d97deac148f20977c4d3c3ca
+:01a8a07d74fb8026f43022370d2e51593161d3
+:01a8b003a4fbb0648bf50fc581d5e1bb6a1fa8
+:01a8c085555e0f789047b600b4ebbae558910a
+:01a8d0651064f2eb3f73a42b72d9c54900eba0
+:01a8e008a4677ae156d478188c10094c246a90
+:01a8f0202758b60c2b624383b9cbf0f20e1cc9
+:01a900e8ef935ff326a691b3db6b771313bf2d
+:01a9101a4c308099a5044fdabf7247e91258af
+:01a920047969063490f84f676c521a37834a1f
+:01a930f2fcd7a05216cf3a82248d801216f5c2
+:01a9406e5b2ef32b870e06d75c66a0e4e6fdd8
+:01a95024d3b47a9c2c880dca3026d472101e74
+:01a960a18fb4867386a6c6c38ff6b2f305af65
+:01a9700b5bc0e132c28d9a5e608508d480ea80
+:01a980fb67b38fb7c37524a6846e45985f4270
+:01a990a47eef960200660d87a24509e0a98f1d
+:01a9a04715d6673b98dd1b86095a748eba6676
+:01a9b0ffa5a30126e779a0616ea6a0e92ea7a6
+:01a9c0631e2d1e7bd6389169a414bd37cac178
+:01a9d01e0c3ea692f1832d5379466ef4bee74f
+:01a9e04f39cfa8702d037b33210086764e25e2
+:01a9f0b931fd3e609a3e9d9eea796b594fedd5
+:01aa000dc2c5cd803158741323eb35357d5e50
+:01aa1098b91b36f095edb06497d628972aabdf
+:01aa203b471d941dc5acade79ccc1a17f77fbc
+:01aa3065c399a09debe3d153931b04fd6895ec
+:01aa403c733b34fdc476e0cafab66ac10d9d67
+:01aa5053812fb8ee0ba26594f3742039d22a72
+:01aa6060c0bb6027bdfdf93c5c967d20a40f0d
+:01aa7076eeb3559cecb2d548789d8a825231bf
+:01aa8022d09afdefed47e8cfd22e9ea0322efd
+:01aa90a9ee8c51986493a248fe1296ed714e0e
+:01aaa06b78e848538e845b5f428e44cf54fc9d
+:01aab0323241df4804c2e05d00f5dc1edf6f59
+:01aac0fbd4e12faa6e124d403c445fc1add69a
+:01aad078993b8e0d6c92490e67761ec6cf9bae
+:01aae0c698745b17a9367f24b7496667ecd4dc
+:01aaf047e290b05ca649fae358a1d9e85e2bb4
+:01ab00f5ec219d8190bd8466c5fba93206a9b9
+:01ab102c5548114cc49889b853a4cd5c789943
+:01ab20b55be59a61516ce6ea9a54b8d0ceb3be
+:01ab30d2355bb75213e9318a820163a0b6ce84
+:01ab40869f0d83a2beb51905422ad90cec5b51
+:01ab5064608bc7fc4825d7f4cab6fe3eaa0cec
+:01ab6055f0c467541c5a8b22a0e6b93b567617
+:01ab70417b11cdd03951ee81f2a7082572ecdd
+:01ab803049e3c1f1c46e13b488cb3a5abd7460
+:01ab90f86468c16867369a11965f4169c2dc64
+:01aba073a7b68a964aea34089578b6018d298e
+:01abb0ba698217f7a32be23166d19f495e9d08
+:01abc0237fa80c6d5a55fcff1d20dd38546c61
+:01abd06daddf66c3020e67ad7ef954513d51de
+:01abe0a6f44b56448d4f64ba05ed6b903bf947
+:01abf00e00dc50e018b97113286d6a9f79ba70
+:01ac006ce250abe3a1653d4eb2dd5b9561b2a2
+:01ac10875d5c43ca9ace7bcbcc59d342e486a6
+:01ac20944215e8e95da14a1d6097efab4be1f6
+:01ac3007c4991ea514ee2fb0943be6be6434a8
+:01ac4092f05f06994c219c1d052eba1f5dd4d7
+:01ac5072f3607e31ebf5d225c0a3f465b992fa
+:01ac60061e02932b7100aaf9289a9409434291
+:01ac707b3137f70baa9a004e05f2f3b58c1d38
+:01ac80c867d856c6cea3db46741541706700aa
+:01ac90bb17c78f3cc9c0420f806d719eb23c7a
+:01aca03e4c4f03781fa2fa892e91ba190192fa
+:01acb0353f601b548bb9827adfd2d7fe28a805
+:01acc09c7f91a1bd8064ad3156e56a3ea96ee6
+:01acd047fdc885b3cea93de0645d9191810732
+:01ace04f73f468491c71fc82eb8fa42a55a87c
+:01acf0506f9c6f17d89d0fe6c6c3fdfcfe0dc0
+:01ad0084bdd8a13effca7c3a5e9761eff60967
+:01ad100bd30026a5a62acdb236aa06d0ab185e
+:01ad2079d35a9e2faac5f3084de21c4cc83bd5
+:01ad303acbeae371dff4801937acba55a80a8c
+:01ad40fdffa71e90855d37afcd18d5620df2d0
+:01ad50b01c41406ec8c1b48e6e642fb7118fb2
+:01ad60d3f9fd8fbba7693b6449ffadab7790d1
+:01ad70b1e3eacc8a146c5a3b841ceeb3cec6b3
+:01ad80727708648b3de18476ce37375471b085
+:01ad90c74b4825f7bc25ff86f1746e0b13ad6f
+:01ada013f5c2d680015918650645e993ef3358
+:01adb0fff6be46acee6e2a4804587d34f45bb9
+:01adc06ff74e9fd89450b6c9c88e8b490cdc2d
+:01add08e0bda4e334fe64bcc2eea704c09abd3
+:01ade07af65d377f4152af2c85864398ef92ac
+:01adf0dc9f153bd828cd61c4cb85638862a3ee
+:01ae006b54db4bed25c5b56eef9645f4316dce
+:01ae10a6be268cb4761b56aa6b072e2ea0cff3
+:01ae206bd0ee969ba9aa3495e3629b3489e842
+:01ae30fd7712cf353871e7eef4afba3af26a9f
+:01ae40d4deb40050d06ff7a8219d60b18c111c
+:01ae5064df5f62ea14d720162c5d849b136435
+:01ae60b32bc54e69cb86c134cee8905997e0c4
+:01ae70a709b88b89dd81eb77afaa21e29b4caf
+:01ae80e0f8f3d3d18c222988856ed8dc4bde86
+:01ae9038150fbe6aad323a7c296f6f7fb6a4f0
+:01aea081ce1a5ff0447ce0c01cb5cbcbf27dda
+:01aeb068085e8241d530d53f1521654ddf26a8
+:01aec098988ee2a8010df7bce8791f72370623
+:01aed0b73f1234dcc99bb979ecac1b0c857844
+:01aee03dab44ded97601aa703fa65c8f889397
+:01aef029a538e7927c4fb1f5e32f214be6ae19
+:01af00cd20ec767c37d76364db50994d295087
+:01af100fbca2421d06459df6da9d25bad33e94
+:01af203ebf9cda4a98fb617870d14fb0162e6b
+:01af302376e311b51ea561ff50e1b827aca339
+:01af40b643ee5923cbcbd6b553b1b8720f67f3
+:01af50e59c46a248bc02d7034cfdf12a796a0a
+:01af60f1544d0002c8ed81387843fcf714372a
+:01af7079ed7c2a2bc37d4f6f97a294b344ec92
+:01af8020a48629f3b1286dd466ed9eea647e3c
+:01af908a715915f8508562b323cf91c71deda2
+:01afa0d93e83ed622f54fef3450c18ac95d149
+:01afb07c0872c5c0cc4d1b2e6b1668c36b01ff
+:01afc09ba75f011791710a47fa6fb5969ab0bd
+:01afd0c11278e466af0aa7940b4f113c5f4c69
+:01afe0623467b4e4b9c84d7c3ddab7467ef9d1
+:01aff00cdf9f00e69d26eae73e2119595086a3
+:01b000d05e811a3f208e47fbd1d96e4e750ea4
+:01b010c8ec15d7924b9af89565d8ceaed5d0b4
+:01b020d0138ae23e34fa5772d0278a592248c6
+:01b0305fa530abd65ec90f2b59373ce5eec613
+:01b040fd345cf77fae304792218da63ccec79a
+:01b05053ad5dc43895971b5cfbca36ee130a23
+:01b060c6830039b37d7dd23b454e5dfd1bf441
+:01b07032f24cd73e6c20823761f0a1463f9c19
+:01b08098902c2c768e78a9661c0f4608f7c199
+:01b090212227dcc5e65078a7ce8a7880424f26
+:01b0a05dff1df118399f546ff5744bd0783ede
+:01b0b035400d6f67cf6e3359b2b44df72954a7
+:01b0c075d07d94211ac254e24b3d790583ccc6
+:01b0d079ff5771525dd4a49fec08d4ffa05f89
+:01b0e061dc89365d73be1659f1de7b65760b58
+:01b0f09f36ae28096a49cee3cbef5ec39a56d9
+:01b1009155dfe77ed7eb2acb86c649ffbde6fe
+:01b1102ddfbe077c5c0819a11646285681fb82
+:01b120e3b92a9d25cdf8da48ec3f051bd02dd5
+:01b1308450c06911cb024416739b4e99b91ba8
+:01b1400473bc8203b40ecfa550c710047283d2
+:01b1500313a63a7efcb47cd00996066027b64f
+:01b160350d906c079a70eca4f74dde8ee496da
+:01b170f3662704ea9fc0abc4f88d35337b0e4d
+:01b18035f6fe847c3f71b6d0f95470487e3252
+:01b190cdcc7d5e2b21893469eef5ab4ecc5ca8
+:01b1a054d0ba3e4652959ea0c9645936067989
+:01b1b0a32f22531dcdd96cc842a229f9ec0d27
+:01b1c0496d483f344b3d2b6710e21cf941365d
+:01b1d08ac23d79b0f15060374c9f13ce6654ed
+:01b1e01a66a618706f9cbca6b02c3cd41b5180
+:01b1f0727a9e32068e6a74b6262754d228b2e0
+:01b200a895cd973244e676028ef686c1f1577f
+:01b21020482b84bff186dcdf2f8b4ee11de5b1
+:01b220d0fcf8929f4a17207c615b458a9698d7
+:01b230d7f48246c02cb92cd13deaff9a35de19
+:01b2401ee16dabfc0dcaa317b446a0fe5c2448
+:01b250d05266797be188fe118ae4338b0c8035
+:01b260253123cff8b7c71ff06e58749f4a8267
+:01b27024f6bb4b2bb368a4a30e8aad6b400eb9
+:01b2803ed1d8da93f6c88eab9559c1fe719784
+:01b290989780c8a4fbeca24ca0d4c37abf0cb1
+:01b2a00a8829c781ca569fe10f96f2739082bc
+:01b2b0f3223565877484aeaab791a2ade22c1d
+:01b2c0e05cdea51ded58afe2a6724aec44b963
+:01b2d08a589a20f88fdd3a3027c4843aa51b51
+:01b2e017c317ce347980b55544b1e34792fee0
+:01b2f082ab7b0798f47afb19e791eb1eba2096
+:01b300054b73f2e170a1ba04babb07b8fdc8e3
+:01b310dbccefa757d805aeeab6f7f22a0130e7
+:01b32094236063cb059b41f8c5afb9535b5821
+:01b3305ac795631601c15b2093a4c0f80164a8
+:01b34009dabe9a6c9203bb9ca811f1b1e34201
+:01b35058a30da5e14ef22818ce30a4bb8a28ed
+:01b3601c1fab85c836d7251c2d16e6172d9898
+:01b370e93ed2688ab0c6ee3874bce643d59aa7
+:01b3800fbc18ad3c529a680bb2df083afb83e2
+:01b3905c0d2ed449c01c03ec86f9d39f8f059d
+:01b3a0b9a43ff9a76623636a4cd8b859e3579a
+:01b3b0f093622e63a509f7eb479f6fa11b1bbe
+:01b3c0e2b8bc09694eaab395bf0904edcaa57d
+:01b3d028d46b0afeea92e4ee464a3a32dbfc75
+:01b3e00ae5397dbf9c829b8bf39cf1cb6eb237
+:01b3f05874cecd3aef94c105801ba9c6348831
+:01b4002e0831fc2fe2e624029ec48eb6d962ff
+:01b4100e34a889d037dbe885d06d96fe65d1a2
+:01b4203d359fd06b364b38dd1c6c2374285b77
+:01b430010f7a11b0e66cb7a1f74ba0bb338713
+:01b4402a4ba2c21dbf564377870d09e5fee1ad
+:01b450f85932784843cbca8951f196d0d6849c
+:01b460d770339354605af7339f276f20cdce3c
+:01b47012572d4aa33136134562a9dece3df83b
+:01b480e396be0cab90abd1d63e10be89fa032b
+:01b490bb39fbf3c48d0424f1ead2b2399a43d6
+:01b4a076718008967240fb2b07d2ff09c4562d
+:01b4b0edd5e28da15dec5b96e1148c11dd6db5
+:01b4c0f9579fcff0517dbf22ab97f63510ffa4
+:01b4d006bc54c2c7faa06fb7b475b4d1eab2eb
+:01b4e0d5573674a031418bb88d6bc31bb138ba
+:01b4f03d5b7f093e980be78133d904993ab57b
+:01b50065752af9a84a8c0dbac5ebcc990e2573
+:01b510c9814a850fe890678ceeccc89f0a07e8
+:01b520203f3d53ae36fda2cf34afd4baaa07eb
+:01b5303f6b6d5f061aac967a8e541d5c4c8d69
+:01b54023ebebcdc7f22b07cd01dd03b570f8d8
+:01b550e5ead7cd021a5ad71bbb10826d72c2c3
+:01b5606d4b56cc61d1ab14212b1f88cf0bf167
+:01b57099f2779e399a7dc7d0b1966d3b6d9ef4
+:01b580abc97ddb0ed3c9e540ec6d8d8ebc3fb7
+:01b59017801ca1a2fca5e7bdc5805b5ee66407
+:01b5a08616c25fbe697819bae68a69ddef0479
+:01b5b00b268bd2b1640f8a5e101e9428f7795e
+:01b5c08951270ea053aa0770a9ee19f6aefe22
+:01b5d0c55ec3d8b8e4e16bc5d4146810d00d4a
+:01b5e0ba601930a71e4fa017451692413e591a
+:01b5f079e9a9f0f4f9b918fa1708ef422769bc
+:01b600c943056179cc1db7d955d863d2461a1e
+:01b610207987b4ec31fe4755dacb03b4ba1b78
+:01b6208e2e18a0b2d5f9ba7933d047a1bbf1ea
+:01b6304835fb8412b1a18ad023b79e67bb5da2
+:01b640f537270a6df5990d92910f904ea7a7c0
+:01b6509a0a41c1acf2d8dc8ff29a9fc5d285a3
+:01b66077b90476989ee727f458272f52c9383b
+:01b6703735c129527d8198ce6503f83cd7b6ab
+:01b6808dd11c1478fd5148c0cedf4abd216bd7
+:01b6908ee19e78c50391fcd5a3b2e4e590b8ef
+:01b6a0fb10d1b41c2d125b572c3c544ec27af4
+:01b6b0ca182f22e526ecb9f686d9c7dd86c22d
+:01b6c0294d7545305bbf3694700f3761eb9927
+:01b6d0f3bd09dfb6ece6fc44a43af6f5a02dcf
+:01b6e0e6213a2e3f62b48f284246dd705e3101
+:01b6f0222ec4719b481a4504d635bfacbe5e2a
+:01b7009c2958ecd339f6e7cc18a31fd06c0c1f
+:01b7108b8bd37a14306157b491a25a4dec12ea
+:01b7208dec85a15fe3476bf7cc773dd6b73344
+:01b730db102336296fc98d6076291ba4736c1e
+:01b740b2dd433e125d47d3faf608d015378c48
+:01b75043915143639b0b83db4fd6f30df86f87
+:01b7604408b38b9fa5f6b0a69609e1e139123e
+:01b770a55d984df855aa6296d5bcb3321cbdd1
+:01b780610be30a7d14c17eda7105bce7723356
+:01b790903cd586a335f02968b5f3124c56ae6e
+:01b7a06b4e833551ced476e47e99708fcecf63
+:01b7b0b5d1c5277503d2d7dd01d6dbd2609ed2
+:01b7c064cb22e2bbfe312398c314c57635461b
+:01b7d0605d2ce0ae4969fe67eabe3d54f19660
+:01b7e010f3f816069071ffbc22eae97bac59ef
+:01b7f0a9f9a71e767e7662da742833cd6572f7
+:01b800dcc253c796fc0c6307dfe4bd6fc479ea
+:01b81060338990c15689b56b5c9eab72c35ea5
+:01b8202425e7d1c5d95f761e49c921e0fc23e7
+:01b830f82c91e44edf614df0e626347266df08
+:01b840e6f73342966dc84676981c1e89614a5d
+:01b8509fe0355a858d0c1cadbf8425f26516ac
+:01b860ce1e5d9c511b0e966860c94e3a9bafa8
+:01b870a86faad87c5c20380b34b117eca95e64
+:01b880699c5949ba0e57152af009d6e0c72e5f
+:01b890f76d968363cc66240555f852c8016e5e
+:01b8a0e6c820f08da25dd5daaab6416b1f627a
+:01b8b055e7816ed643e407607878c2cbc2ac5e
+:01b8c09e53bd9edade95cac4f52f90ba3daaaf
+:01b8d03ec9916a8e93a5f4ab51524a0c3ba48e
+:01b8e09fabd27f31ccf55f08a973d1df751f38
+:01b8f0daa90e1185cb83fae55f4e2a352cb0b4
+:01b90047b86f86b1f398686ccb3a0f056f7f53
+:01b9109eb344c2f58330df269c366833f29994
+:01b920ab077f09bdda65eb8fbef3b710e4836c
+:01b930c522922d181358aba1bcab1789579488
+:01b9405b9cddd261b81e738e2ef573df7bda38
+:01b950b7b9402b2c3b12261bbad7a2ad0063c4
+:01b96082715adb3b244429397528b50c49f28c
+:01b97049594e248cef63642dc0cdec34b20022
+:01b980a327bf0ff7639561e185de9b4b02ffc4
+:01b99063a1e02e68a5c84664b2af62c9f63888
+:01b9a08bd14c3cec16a451ee49bda146e63140
+:01b9b0f9db159c80fd6ea5735374d2f8159b47
+:01b9c017f9389e74e74a9e17c0180701b7c2a8
+:01b9d00daed4c622a276f0e356811de4f33f50
+:01b9e005b9834d6cbe2ec274383e1b6a7fb0be
+:01b9f0cdc01d85c5ca2c3977c7a0344c97ab2c
+:01ba006f9c3c189858cc375160ff21c34ede74
+:01ba101959acd678b2b78244787543ddde3bc2
+:01ba209b0e735b2ae55d0e68eb039d528c6e6e
+:01ba307934d0d72282b69f35ae57259858774d
+:01ba400b366ec7444f517454a60d4c1367bae9
+:01ba50dc44f6340e59119224125bc3dc175dd7
+:01ba60d90d9c803b0fff0f3f1cda7db4974c8d
+:01ba70080ed86bcb29c250d6c6da33219bda87
+:01ba808296fee8bac7261ba26fcf0f0af41ac8
+:01ba90cf1e4d8068c54a7fb7cf5b425e7ca0b3
+:01baa0d6a8d9d30de716e01351e6cf964ee69b
+:01bab0a8b237313d14a2663311fcf242fc0acc
+:01bac05dfdea5fe62741e29822eb708b4cb38c
+:01bad0f1a9f2b50feb2f80aeac7f182e5dd2cf
+:01bae0b6e5132f415a89dfcc2fbce6ee1079b6
+:01baf024f8f147973fce18954966b0afd5cc78
+:01bb00706c3c5530715b299f5850dba2ec97c7
+:01bb1049490362e26549a699ce4098c261f0c1
+:01bb207a1555e76f33134204a9aec35227f508
+:01bb305d2ddc22bb093982b0c72fd6f88220d8
+:01bb400b0ef2d5e19ccca526dd5b060775e23e
+:01bb50534aa0a577b6a9d1677a9381c14d18a1
+:01bb60e3a64788535d2a5dce72d1c8e5601656
+:01bb70aa01317a4d1de2bc3ed2bd84a3611848
+:01bb807286e476fc4b3a5938445639f537a43b
+:01bb902ddcedee6daa5722b826ac5075f269a7
+:01bba00f17584752be001b77e3497654fba238
+:01bbb0366636502639aa56d6d613d1fb6db8ca
+:01bbc0f9b1477ac627a6128370a7aa2aca9760
+:01bbd0b87a2a50377111e9739acf5a327e65c2
+:01bbe0c41ec5d6a6ec203f2543d1e7798f17e8
+:01bbf0308b937ad972d6bc22f752acf25c51c7
+:01bc001f5b4b0a76d85d9484b7c2167babc910
+:01bc10adbb326c3cddb656a3f79f7f787e3027
+:01bc204954e69537b0d98f3ce3aa5ac3a5e8f0
+:01bc30f5a14a3be1f489ee12ea15cfb191c111
+:01bc40462fec21901c002aab6269118c766790
+:01bc5044964bbf5b910418d816115962bf457e
+:01bc60fe88e1fbbf9be38285a56a5921ad785a
+:01bc70ea89771abcc874aa97a2c1de6bf85269
+:01bc80b551f441018cd97e17a328238329bd2b
+:01bc90560e3ff05045ea33fcd8127f4d579b43
+:01bca07325bdf615838dd024ff6e5989d37e0b
+:01bcb089fda92080bd097bec8ca8453f7e9659
+:01bcc094acde65e2f96d239f6015ebead79139
+:01bcd05d15bcd9336ad93306850842d236af5b
+:01bce0f090cf80ab930844f63866dd14b89a29
+:01bcf031a291b3dadcc5bc509ea0b197e07ae4
+:01bd00abc39b09a445915abfcaf2976646b25e
+:01bd10fdeb379661ff4b3c7fd23151fa0f1fb3
+:01bd20d1ae60f2d33a25d5e4604d0f9947ec49
+:01bd30a8e04bdf0530a63965549032edeec0ff
+:01bd40f8a130b216f183f7fe0292ed0282431a
+:01bd50699e345aab866253645cf8dbf876e13a
+:01bd60cbb3d2999a514d1ddf0ce2699511c8fd
+:01bd7050ba9f2edc5deb08e9fa811a38c32ed2
+:01bd80e02beba30f5a79d59ecafdf5d623c10b
+:01bd908fb998483e238f2b7f639a7bd9d04321
+:01bda07413a3aa0c40d71556748bcfd18d9431
+:01bdb06bf51b6bf5c2e952ca7f81aa8671711a
+:01bdc05441e3a078d37034d7a28a8ae31a96ee
+:01bdd00a80408b08f0b55fe2f15e34a319bd45
+:01bde09c0fd32f3764959cb5bdca38d7012a4b
+:01bdf09267c1056b21051839053445e8115697
+:01be007a7787dc26d5eafc00148433b940f282
+:01be103a5aab58d75190e3bcccdb9c41a50f54
+:01be201f01892ffa9e0e1dfeb297ef88f6c245
+:01be30a64bdd5a6932209471ca36576a612b5e
+:01be40a31c31b519d95f6d45e79d3499f48bcb
+:01be505aac988cae1f3d2c9fdc9857309a615d
+:01be6077431f3e24dbb94d422dff0b89a116c7
+:01be70aed4840b80cb3226bd888387794b38dd
+:01be80c28f858311d3cde736d5cd85f856385c
+:01be906fb542095f1882c034bec05228cc77a2
+:01bea0a1529c846cbce91637ae2b06c11d2ece
+:01beb07c50d0c938f8aadb5f718dde647afa1c
+:01bec0e3ac90c9cb5af8982f5a37072aba2f4b
+:01bed0e3521e777d4683d08290de9873639102
+:01bee0e6a2d30383e8f6ed049415ae3b0829ef
+:01bef01d32f80e07017b7da0c7f20851a57da1
+:01bf009374b1274f288cd954e4ad35ee0bf3d3
+:01bf10e60e3db26d3ebda12c2c68486f4ec487
+:01bf20db71985f5f332aab9d0cb45ac30fc52b
+:01bf308bdabb70b86c5769f30986c2d164dbba
+:01bf402f94b1a2e80420600848290ea43d0ae4
+:01bf50f212f6655be79ff907dc8ea930bc9dcd
+:01bf604ad4ba984eef20752e5ae2b019bba3d1
+:01bf70820d9f0197e9a56562967fd8e3391da9
+:01bf80e821fb86d55039304206ede2d63b0a08
+:01bf90e5bf170d5baa81d0e06d1096f2f16231
+:01bfa053124d83799838778c56d88316150d60
+:01bfb08fb4fe031544e09663c4d5fba28b38ae
+:01bfc000738ce0224223514bd63aeea2d50cbc
+:01bfd04af136e9d2b759f9837bf2f44da419a3
+:01bfe0f51f639377e756e15ff1ccd6e6a5b3ba
+:01bff0b37d8548ce063fd5f103dd9b264c865c
+:01c000fd7c3e8ffd7c2234385d54d5259277a6
+:01c0105a7eb40e105a02b9b3962fe22b133447
+:01c0202a8d254b85a60579230b2c7f9db0eb5d
+:01c03049da6c5a8368d659ae22d8b58c8f4a11
+:01c040f751e7836be958ead2dc6ed9045a7f5d
+:01c050dc9aea6d1747da646f360e1af53f472d
+:01c06016f8bf9efa16961aff86596d1891964f
+:01c070cd0d338f60e5899b1cf02c30dd47bbb3
+:01c080121710fd08552bb844d67cdcab024920
+:01c0905252733eba674f0aeffd5b35784f1def
+:01c0a0c7572a4f762dec23b572e459aa441b92
+:01c0b01fbf42b25dd33721531eebc6d164e995
+:01c0c09c786325820471ca7e11c0c551ca3d6a
+:01c0d07fef3ff69f7f597ff7d105efbe10fc87
+:01c0e07098952ee9814439966fea04e2b4823d
+:01c0f06e1d5308296b1b0dd12ec0d2109cc705
+:01c1009cba1bbebcd19f719ecc63aae876f373
+:01c11070ba2e66507718f08db627ecf657b5f9
+:01c1207e0f65c0d4b3c62ab9d3f654c8c5539b
+:01c1300e1f12129b1a5605224e0db4e7037622
+:01c14065fa6c56683b05a6af1ea0d6a3b39820
+:01c1504df82149c05740fc864eda10ebb5f9d1
+:01c16030fbfe8ab90d5565b8005cf01281c794
+:01c1702a987111ce7e9b2dd9fba7d12b11854c
+:01c18049b23705eff20cb60f98630a6b82a47d
+:01c1903a7f95f9864a1a5be863618ca49de223
+:01c1a0f4c7a87e4022726830ef189d5a48f04f
+:01c1b040cf7ab462f352ddb5b7a41d9a85419e
+:01c1c0a18a30e6cacd803c57381f2da187a423
+:01c1d077c9f35082c91ae88a07d501d9292ead
+:01c1e0b013ab03aa108b0b286e025857607ed1
+:01c1f0ba7cd02793315495db4dc6e9314bb900
+:01c2000db072a058958bb640dca4edcae3d3bc
+:01c210f08d7944011c1bf1689733485ba06100
+:01c220ad88f9e369b2cfb56363401ecac1969e
+:01c230989073047ce8ff5d01c42dc24308166f
+:01c24006cd6e2fbdc55e001a5fa869e974a380
+:01c2502763ad1dc8bbc1a86c3221e7c859d51a
+:01c260e83f9a3ec18f7ed0d30f9e9fee7a48bd
+:01c270a7765e8ef5f870c6ef928702f705349b
+:01c2805a80948438d660d43a70949638e12873
+:01c290f47913b75751b873b8d2c8edd8a5b1ce
+:01c2a06fe885068411f8ed6b63a85223e88a72
+:01c2b0946aa3fb9b8f6736c93057c529c268ce
+:01c2c01b6b767771986db605007ecd0354082c
+:01c2d05eedd5d1007ce6646e4852956bd219da
+:01c2e04160b63f73ff34d4b9f7100d93027f9f
+:01c2f0ed9e4f5ec7b89038f3172cd67c4b282c
+:01c300710fa7ad7b3db4562129d805c13e2150
+:01c310f240ed1a34facb896c430c87d2ad8a65
+:01c320e482deb3494c61870353a95727b943c7
+:01c3303a72a7e73481fda54bcec6fb4852985d
+:01c34042a6f17133515d26ac7bbdb877f6a06a
+:01c350bca34a7dec57e9ae9d788b9638adfdea
+:01c3603622a8492e04de9db737e9550250a7df
+:01c37052fc63240e33a010de1b4f1995cb2353
+:01c380244cc9887e190a8d7bd6e239cd0f48b1
+:01c390be22900847ea32077ec21fbde454f5dc
+:01c3a04e299ee9f8181b3dc7387f47d390e772
+:01c3b00a3917ca076b4acc868de341215e4308
+:01c3c08a4a57e31548d3ec13beb59290361baa
+:01c3d042ce4e3c1a1f770cf231af8babcfaf5b
+:01c3e0a5f64ddb643e604dd5760cf2fc8ffad6
+:01c3f0a7567667a4420ea81006b5ed4ed79f23
+:01c400c2c4aca9d0efb40b78f0e31ffbf8156f
+:01c41035b8525d82dd4b1b1fe1fb99ecf1ad48
+:01c4207a9aab4d41f0e778d2f98aeebe6e0365
+:01c430059c5ed8265a6455e9aa6656d02f3d45
+:01c440d20d89d420cfc4775e58ea91ffc4d81c
+:01c450244b5603307a40c97a10827732a3b544
+:01c46009bcb115a0ec6855591aa8b6a10537e9
+:01c470b4046eba191ef393434a71e44ccc2794
+:01c48068b20752d4f8865482a13da901d796df
+:01c490fae97b0a3fad2d20a4a1f3dbc7c4db5e
+:01c4a09e2d8653f86865fa3d5b1c5e875fd103
+:01c4b0c69f23cef6a63d7927da54d4d62e2765
+:01c4c01cc0ac5418714f1505a88de7bac27d68
+:01c4d03d6f346ad26bea8d793be0384ff61826
+:01c4e0ed932a49dbec425f2584f082bb94f315
+:01c4f08217636af1c552e34239a2e5623f1dbd
+:01c50065bb8f44da607bf525c37590e228486a
+:01c51034ba415f357eba561142c7ec6ad8e9b2
+:01c520af4c787f7072babc9613dbb46bf7dc90
+:01c530c434727d36e083991e19e12589dffa94
+:01c540eba78356150feaf70868686ad1b019e9
+:01c5506a9c492f1618cba881a4c88de2dd099f
+:01c56046fb28a9d940f233058aaa78498955e9
+:01c570ca3ddc183d68663f91bbc7dfefda09b5
+:01c580117989a265716411c375f33a8167a142
+:01c5905a897e2e2ed62c19b4c0823758669fe4
+:01c5a006fb8d6c6c0a1940d50a93d2421964b4
+:01c5b051643bff5fcb0d8bf271ecf6fdf961fb
+:01c5c0374a9ed6891327f8cdc26aee5bb49a10
+:01c5d0bd7d8a5901794ec4496c7304417ebce3
+:01c5e0e2f25e27683ff199b65e47d1d5907d17
+:01c5f05e335f2329d61595e52fa1535f6a1a8a
+:01c600ef8910e829a9715e44a0625b42e6eea2
+:01c61002f364655050514a8a15d2686b0e7c72
+:01c620b0927b9bd22ebbdf306e5efeec1a6268
+:01c6308ba8cd19779839edb66053ab45942a9c
+:01c640e2f33fcf81b2598d70cce90a69dc209c
+:01c650fb3f71762647ad4f8cdfeabd45e3f9f5
+:01c66067dd59f8ad93893eb1bb5e3769bb1e92
+:01c670f758fa5dd38851bd0f3e691f1cd1c650
+:01c680832fcad5c125b719c5866e2207b810fb
+:01c690ee43c9cea1b6bb509515401b73c0e991
+:01c6a056702d9fc3b5562551ec70434e1f18ec
+:01c6b0f29606e87ad6b848f197ca8479da6fb7
+:01c6c03bd765b4ebbcb469d1dff73b54d6d0cc
+:01c6d06e93a06c886aef866ff5b2983b12a663
+:01c6e0e619285236838be0818b43c4b08f1e8f
+:01c6f021231ed4723321b92a6b4e5dcbd59d65
+:01c700da4715eba6c100f3134385b3904d3453
+:01c710fcb82b5bfd44e3b859e73e4c2f42d625
+:01c720a6c95a950a8264899996c85e5fa554ae
+:01c730a4781cde4ed3f857be199315be0a565a
+:01c740c05ab3233ddd6582cc95ac5c5de7fcf0
+:01c750f2619845973364970a3421c73e48e4cd
+:01c7604dbcd049f4602377eaa2d1c47cb5b1d4
+:01c77024f276861cbcc81acfaf040673569c71
+:01c780cb678e31cf7998bdf4c4c14c78c9a81d
+:01c79030d34dc7e930df8c3ec81cf32beb16dc
+:01c7a0acf48c5515f1d70f6bef81eb0f14abd2
+:01c7b024980ee23e25f1dc733a83f720503367
+:01c7c0430833d5de88fb53b6cd06810d40a8fd
+:01c7d03351b0401a0039f544e2bd88e50e9bce
+:01c7e09095683ffb590aef7336b26a1653c387
+:01c7f0d2e242fb2472d32c0c043c1dd7a40682
+:01c800167435a0fe48d192e73432ecbcc189c1
+:01c81020249d70f65228b3ed741e2a63b8228f
+:01c8202f2a1b973307e9582d58964b31e8af8a
+:01c830f680a632e0b31d330e3fd9565504420e
+:01c840c3e1b62e6ec5cfc8cf370bbfa5376032
+:01c850dfc9b9db85837b0604586fa644f74c18
+:01c860298c2de2f94cae2992071558fea43e48
+:01c8704dc853cab8ca5e51b71b9a7add90f14a
+:01c8805100b75ca7965ada670e53d989a5fa9f
+:01c890505f7366c6e3762eca67587a169f21c3
+:01c8a0f0c1977070e99b823a746909e5ca0ac8
+:01c8b07093826246a689f212ac6eba1fa02857
+:01c8c0f94c91d30a12f8683903f9a149300748
+:01c8d02f9e1e4b5c7c15f861f359fefeccafc4
+:01c8e0565f7fd16c4cf7441570123261495d42
+:01c8f0c6898be83b9808bf479d59198d1267e1
+:01c90025aff8adef36ca6dea15dd531f2ab60b
+:01c91069943db889451f9342ff8fce9ccfaa12
+:01c92082d187ad5cfa5d22a7431297fc898342
+:01c9302c81a3d417e9ff068e211623ca303b8c
+:01c94017be11b0de3d8792515b91c23ba86ad1
+:01c950ec61e175b0322cc0c41a89923509cb4c
+:01c9603868d56c4ff5b18241455cc77ad6fd07
+:01c97010a5b848953123b7bdbdc9fc09a24048
+:01c980a53eb7cbc399c2e00fcf7173f7903877
+:01c990a1920d68b9cb07cfcb559cd03598e3ad
+:01c9a020b964012f1af4324f135ce076179a82
+:01c9b0aca581d2e918cf203839baf87f410f25
+:01c9c0f1820bb47527d500830e2dabb1bb81cc
+:01c9d04acf1016a73b970897f92a65bcf042f5
+:01c9e00e39ff26ee39893152dbc381679a40b2
+:01c9f0460f16b891b221c2eec3af54f8f49e9f
+:01ca004a66a17718b87b419bc9fb34d1b843f3
+:01ca100adb2ece7425d3529177ec471b3813fb
+:01ca208a815994653ab5e3a511d8f08f8361d7
+:01ca306229038afe4ed65b36276fadc2d8ac74
+:01ca401a0072fceeee51c0f6d506bddcdc2357
+:01ca501adcd6ab99e75e1ef5c73e48875c2141
+:01ca607ea73f18cd315579bbc6afb3a9fd247a
+:01ca708db574f311d85bf85cb06c68dcea7b90
+:01ca805f8d88b8d4788822ae6f13d56fae950c
+:01ca90605dbb0160864061069b42e4d45f79e2
+:01caa06c32ad1c7898ae5cb4e80d4463438176
+:01cab0aeddf01a2d16ba972178df735672f295
+:01cac0b9a8da0efe72013a4514765d54ed1f43
+:01cad09bccd6b2f084c3406ca472285542d0e7
+:01cae0f5d4a672d10f0656cd01f0bdf2040aed
+:01caf0d9ffbf61d89c27d098ad9b80746e0e6b
+:01cb0093065d7e3c542093979cd669bc8b12c8
+:01cb10fd2c7f633eaa3cb50ca0f2f503191e3d
+:01cb20e07240ffcb19fe643891811a5a4d11ec
+:01cb302ca36c3d453a545ca56e79f4aeb9e8cf
+:01cb408ee84e1d9debb60919d6edb6a583f5cf
+:01cb50cbde6d0c92f59578e49ac6b87dfb47e0
+:01cb60b84e338d20eff865a99f3beb025509e2
+:01cb70057dfa15bd0bb17f0cc509a14933d14b
+:01cb809601faba334a9dea5aaf59a484abb71a
+:01cb907de82fa7c76bf6267ede200e2a9ffce7
+:01cba0ea3b27eba9af7a1d936541ae1a7b596e
+:01cbb0c50b9a838cffce646aa2bab001ad08a1
+:01cbc0d1018da5ebef9e3fd5dd3d94506d5c16
+:01cbd0765d9767e88df84b2fcf43a1d390aa7a
+:01cbe069988685d6bee62be94e125be30fe5fa
+:01cbf0c75f94f21e268dc804510d01d6e8a00e
+:01cc00e69ed8962e9dfb20e0c76fe5c337b447
+:01cc10fb52cf93bb1a544afe8a6d4cf20ba95c
+:01cc202a6629061f754d9149ceef0124e391d7
+:01cc30a51d724424afb03987262c707dacc3ca
+:01cc407ac285861b9a24cff618efa722220a17
+:01cc50d10e53f20b6ac5e8f4f144f74556b51f
+:01cc60be5bedec64bf52b70062efea86f26d8d
+:01cc70345bc3b00e5741ecefa54bad63e62953
+:01cc80d9e7c97311edbb9ee1548537bc80591a
+:01cc905f9845a1828392219743339ea36ceadc
+:01cca03bf257cb4a313de9b2f818519e8d6f44
+:01ccb04ee20776d6cf7af3cdba2373463af49c
+:01ccc04fe4daa81ddb265ae2fbc2796378b984
+:01ccd002fc26267df6631f69f72c560e728b41
+:01cce02604e9886f2d3ab165bec1a505d8e8b4
+:01ccf0908349b45421f4b06bcd41cf4e51402c
+:01cd007983994d77abb53964aa14bbd389ceb3
+:01cd107f8384a1685d7983be779277f75c3709
+:01cd2014224873dec08de052fe21f7e87434bd
+:01cd303f89dcd97658883fa4a711c88540945c
+:01cd40c07f6f6d1d565518a651099fc2cf1546
+:01cd50873316a11c2f58ae62821a4d70f0987e
+:01cd602ee3109d8b7fb706690169ff782869d1
+:01cd7081e0c51e92326ee7da28ee371c5d04b3
+:01cd800985df4fc20b2b91098c6baeb10100ba
+:01cd9001a59ccbbf410c956fade8dfce2f07b9
+:01cda0b58af465e6bb1235f0e2403f677ff4a7
+:01cdb07b8bfe9fce0a2cea25107d29c39e9ff8
+:01cdc08333b7f0f82ec32163f91b39420d215a
+:01cdd0b8209c3039213fc74f130011d3cd1c59
+:01cde02e553a9f38cace7b6758da0afa42786e
+:01cdf0f601dc632e0dd3ad2df2932d0ee0fbac
+:01ce00dfdbfb609680fd33361def9f66881ba5
+:01ce10ea2e4b8fb7e8d3ba4d7151fc3c5a6e3a
+:01ce204ef1bd8020392718ef2486e28099b4e4
+:01ce30e8f36304d952b329de72085a3876e102
+:01ce40e06d421d79e46b7fd9adf5ca403fe545
+:01ce50996ca7e90f8eed29bd85efc2c2d45d52
+:01ce60539b6fab5ecfae277b3d344aaa5323d9
+:01ce70a2308a2a9844506fd8a37a6b58f5a3ce
+:01ce80605a543a4439e78c28b795f9f8fb5f8f
+:01ce9027b272107362e0c1a9083319fdf8229f
+:01cea0e3e6a0766c593dc4c05173408199c598
+:01ceb03bccc845b5bc2213eccf188b4cb0aa92
+:01cec07f6b5cd8cc381f3d2d4fc8d5f67f5eb2
+:01ced0c1c7c264b7cb4dd85d5e1a69f2b75837
+:01cee0c2107332453b28de41d3cca814b5114d
+:01cef01d1b53cf43c999c118f85f842088a0c7
+:01cf00c1534420b0ab92680bd770ad9aedbf2b
+:01cf10d002ee888474de9f806c57572fff52ad
+:01cf209eda558ac513e728f38cfb3223f8deed
+:01cf3077a665a2c28b99dc178165dfef506185
+:01cf401911d64e6b083194e7ac5f560cf6dae6
+:01cf509a4df1309e522499f040e3facc302f24
+:01cf607f97280ca65a82d62b04ca9bf212c110
+:01cf707a6e092709ecb806135b78e0ded9888d
+:01cf8036ec01ee725ebc00e4a0ad63a0d174b4
+:01cf90747a02fb76e4d3cb0e2b4904c19bddaf
+:01cfa052c54972701e4ad33e2f200538ea45c2
+:01cfb0c7a122158aa81c70439be20d72c6622f
+:01cfc02af272b07ab96da0d58f4e1b5b3e1791
+:01cfd0aaa5fc13d76dc8bbaaada3baaed69dd6
+:01cfe0f6e6569e586d379b573ac12508e2b58c
+:01cff0068fb42af22ef42ccbd6e0008d1e356e
+:01d000e10472c699817d3febcac9561e3c965c
+:01d010d7b06348659561ff7acda110f113d618
+:01d02005c545afde99f49e95973aa89ed7d139
+:01d03011761d08a8fe49d1f2cb7b10d90999e3
+:01d0401232943e5d068055045e60b574861e69
+:01d050c545199e079f5978609152ab493d2694
+:01d060089b3394f9cfdc1652aed70a11a4c703
+:01d0700d06a0c7e57c276711c077fe6a9b060d
+:01d080025a596b71b026c64ecf67d90c893b3c
+:01d090a56b53919022a1f8ee70427575c10991
+:01d0a09d0483ff91f60e65c0c406f4511548a0
+:01d0b0d49c6c160f64061ce2d0725e64b2f7fb
+:01d0c09033dacee3793356c9d3a7546c2fd934
+:01d0d085329789b4a500f616bdabc9eb1e16d7
+:01d0e07d133f23019501893d6057a062b2bb38
+:01d0f0d0f69fff011643d6b69fbffa26145022
+:01d10076abfc67c89a0437dfc119492d8b897d
+:01d110b523be8d96e67813a4d17e2eba3b1feb
+:01d120595f7e172cd11faeaff62537e411da2a
+:01d1308cdf35130664104ea7e02939ff49bb00
+:01d140461340c6b66fd57dc1039aa293ae337f
+:01d1507a2b18bbd392148c373e70fa1d1e82cb
+:01d160bda37c737d44a3e3279af2e4f22307df
+:01d170c25bc1652d02043b2003507115123eec
+:01d180956b9fe2824d7580156adccba6d969c6
+:01d19025a792346c3a7cb71e3a5ddc0f211925
+:01d1a008e91a269d39cfb6e2631dc46383b535
+:01d1b04225214edd7aa640c0e8d34d1f7758ce
+:01d1c0ffe2aef687a90624c41ea7213937d2a3
+:01d1d014e10d7454f32d9b48eab724537dede6
+:01d1e02c6b55063652160090006d3c3e0baee9
+:01d1f0b5eb6e163a94772f9ca6f73db981913b
+:01d2008fadbc187a2d9373ada22784680ca3d4
+:01d210ec0b1ab680b937a17b0887d488ea3ba2
+:01d220c079116641a7a1eaacf22c39178944e1
+:01d230b41665574cf65c1b6d5d07df7fc12b33
+:01d240f3c6d3b8fd0d264b65eabc8d176b1c4f
+:01d250ae05933a49dbc4667d695bce36add6c8
+:01d26093803cefaed2a0423c41681268999177
+:01d270900d73c7624cf23dd3c6a54f2bea67aa
+:01d28069412eaf332db9566c015e8bb688ab86
+:01d29095a23ad7241b4fd819cc958c0fdb4412
+:01d2a04f2e8129c56ae00e47968bc08eef3c92
+:01d2b05ede231407d178ff1444c1a9ca449ece
+:01d2c0eae087750b83d7744e89fab94588eb94
+:01d2d0c1a2c00668f993b51ff9565805a511da
+:01d2e06e17c5e6d0b72ee4a36b1d0b2588e4c7
+:01d2f0c575370ffcff2bda46be376404809039
+:01d30028075a36cb5a850dcc07528c26450b9a
+:01d3104963f9a2930dc209ad6f65baf97deb09
+:01d320209403c01343029a65d8b5a7894dfc74
+:01d330929b51185790a7b6195b75e57d6bf023
+:01d3407bd8b8c22122be679f3fcfe53d937b92
+:01d350701a001450c00fcd75a5ee9277ef0bdc
+:01d360818420ace7208c919bc7c6deb73e514a
+:01d370b48e207a231e4ead2ed3e67c62606451
+:01d38001798117339e1b87753db9b8947d1540
+:01d390685d37558486254abbd0076c2317f6f8
+:01d3a0e9c599b7c4d27c57ad5e70d90d838883
+:01d3b0e3e8c667543855834b940bb2d9dedb2e
+:01d3c0ae86503f5e252f3b7726ab79dd0b1630
+:01d3d048553c52b34d7b7b07a7aaf2bb5dd73b
+:01d3e0d42065927d2560ae5bf9e64f26460d4b
+:01d3f03828f4771ffff1b5411b2f6bad8f43bb
+:01d400760ced3416d872133a07254062097ea9
+:01d4103c47671a7e374f9134ab3f2ead1bcb4b
+:01d420c55033e41f926994f4754d6f2c81eaa4
+:01d430212feb67d2f6f283d9b48270d4effa70
+:01d440859103a6b22d29d0fc6d7ea8b0667473
+:01d45050511435c2f4666feccfea85876d54a8
+:01d460c1a37c259c3b8352e1438c2425215376
+:01d470e60c4fa23171f74f8df62beda798b921
+:01d480aa550a23ca46a9b7b61db3cc28a35a14
+:01d490b22d8ed986f52515599df9b81d9c2acd
+:01d4a08b9997cc89aa86e81f15cc072577813a
+:01d4b02fb3cebc8cae5355c8552361c0973b0f
+:01d4c072639ed69db20a14a654fa360f0df0fb
+:01d4d049501f53ab8c0915df65632531d7e0c6
+:01d4e04acc91f25e1c9330dabd1a1984e3fe22
+:01d4f09e8ec5efa4b7bce3e68b20ecda7b48ef
+:01d500a45be65638392e5390d594e797ef49fe
+:01d51037db3dab0915b9e5aeecfd1ad7415ad2
+:01d5201785c5ed016ac252c5fecadd94196a98
+:01d5305aa5ef858be2d4fc8f474030a75f099d
+:01d54003ab81341439dffe0c27516c73707b54
+:01d55097c4e19b36388062532d5ce58d94e199
+:01d56051eb8f5a09d912365d1b3f1a3a5a0cd4
+:01d57032859ef37dd7004512b4eaec1c69c320
+:01d5809d73abf855da2e06d41c05234188b100
+:01d5907a573ced403a75cf71265060a4bfce3f
+:01d5a011e68db564246e6b492d3ce4ea28d045
+:01d5b08f562c862f1b1c381c830d9bcd5f7166
+:01d5c0ca12460bd9e0c629accf0ef24197a7d9
+:01d5d08c295e5a8389d25b732fb28b9e8eac13
+:01d5e0738c538666e7abc5a0d69ed0a0dee839
+:01d5f0cdb17f56d2bfaeaa56b2db556f796349
+:01d600f876b60e6e6b2726596edcf667a4f62e
+:01d6103d275117b261875b9264cbb370855cdd
+:01d6208f1dfa7634c7cd2c052a0feb43cb4115
+:01d63004c61f2a0801b29740fdd00742c8bf8b
+:01d640763f1f12eb59eb18a41b252dcca249a4
+:01d650ed17df7fa1700161ef40fc6dc1f87dad
+:01d6609b989e60a64e715fbe7fca6821b0f9d8
+:01d670ccc7800c5ec9c98796f6fce63dc0db38
+:01d680080a1af6b7fe25cfd749a41df4415961
+:01d69054444a2919f662162b851c3ce49db2c8
+:01d6a097f7618aec624bbbed60ee6a850210be
+:01d6b0f13fcb71543206d2df7c5843c4b7956e
+:01d6c05e3dd2f1b4750442634c25f88a28ac36
+:01d6d039fb769e3742119a88dd2e52e4a9cd46
+:01d6e019763fd87e059206fce585d5e9eb2547
+:01d6f0e04b72ae5884b0cf2831f09502b7a19b
+:01d700cf870b67bbc9aae93c6b5c136583fa11
+:01d71089afd18e1209709b25e3f380f287ad3d
+:01d72091366b154ca4b0b13c6843d370000474
+:01d730d28e1d76e5a0e40e3f962c6b2517d98c
+:01d7408d612ba0006dc60457c96296edc65053
+:01d750e002926f5c4a02e4ddf751a75b0fbbfa
+:01d760927afdf5f379499fa7bd8447a9729d79
+:01d7707a29ec368aa75ee9a4f1242b445615fe
+:01d7806064a15abc3f9f429cd064417ea79e7e
+:01d79049ad12f34c90567fc7a516f7114ca1f9
+:01d7a04f7175eae99b481e627fe0baacfadbe7
+:01d7b0c24330a8aa7dadde28e1b40c8019d431
+:01d7c040dbdaa9f67d4ef435ca4776278f00de
+:01d7d0d21467fe9181b25ce56f2911d6ab2b48
+:01d7e06b111c3cee1c49b44a49d7bb81cb6529
+:01d7f0352b03b0b920efca62b58789248686d7
+:01d8000697a9c5b02fb93f748493e830ce46e5
+:01d8101fdcbf6817dcc91d624f1a6292dfdda8
+:01d820ef6670d04e574b5dc6b33edaaf6fb3c2
+:01d83064c50985b78f01e262cef56fb2234968
+:01d840c533c42c7587c496742c8a97a43e2792
+:01d8506400dde4b8a341b4eabd4f651ce52170
+:01d86026eca6500d7ac70112b33ffef690dae9
+:01d87033d8f72b9753de6ab83465c3d65c383e
+:01d8808b38268687ce6a12e4b288ab036c7e9d
+:01d890c0a1353166377ebc98281abdfca40c11
+:01d8a06b05a5265195efa394f4683503952b2a
+:01d8b01fb0998f800b9069991fb409dd506322
+:01d8c0b277459ea8d612200cf29795a654f5c6
+:01d8d04cc50febe1d91b60534a309b5ef6bd7e
+:01d8e075ba9f8b21eb999bdb75f5434c91a1e1
+:01d8f03ec5cedfa1910b38ef396b8fb5508184
+:01d9000fd8122400a56deaec650fd7b561a307
+:01d910515b8a41d8375efd909ea3502bb6ce55
+:01d9206d80c2011a46d38f943dbfafa5b15950
+:01d930be621ab112c03b08b164d978ae18fbe5
+:01d940274d6da1407c0e5dc338585b40102cc5
+:01d9506ee4738937ae29f1ff32b61a65927779
+:01d9607a767ac8a73cdea4efb809941e491ece
+:01d970925ec1ab52fa35174cfc0fed89078dbd
+:01d98036ca71f017846070c94c9f8157e3c27a
+:01d9901b5931bbd6b2aebd0cff449f94f76b2b
+:01d9a064e3410ded6a08b2bfa8e20db8e656ac
+:01d9b076fb130fd50938da08447eac381ebebb
+:01d9c0753eb077e012471d4818b8667e594e67
+:01d9d0df265e3815f3e15e3a7b52695b87381c
+:01d9e061715e556b3533ca97789506f2433251
+:01d9f0b5d353dbead3f4b0dc152f239bfc1afc
+:01da004ae32835f486c92b118add18a2ddf60b
+:01da10c901f77bdefbbdc8b9552560fa193b6d
+:01da208314fe0bb1457cbbba3619f595431e64
+:01da304125a4810c94c6393c70a1bfbcd5d9ab
+:01da40f53758efdd5cd98d088be69cee60d4af
+:01da50098f3644db07be9f3ff10dee7df1a5a4
+:01da6045d9b1b888b8f778b5cec202a212250f
+:01da70509f50521f6e7e584a0606b1616da33c
+:01da806996782b3f0338bf4e59cad2193fbf51
+:01da907f21ce1d942f5d981d0fe9795f16d8e6
+:01daa0f0da6a36df4cd297283e567f3286beb5
+:01dab049e9c1479bf333e0dca894b260742b03
+:01dac0cf07a56111f6244feb52158409cde33b
+:01dad05eb3ede074d8f93732ff85649482c5f8
+:01dae08b812ed03d747e3227963f9f87b15718
+:01daf043a169c715043c59c04ec67aa8e1c91d
+:01db00d4311783262aaa2bff9b8ea0f0bb4421
+:01db10eef816af5c98dd2b69bceb0c0547de1c
+:01db209e328bd836e75e8035c60a5315d13ae7
+:01db30f4678e2c887ddd844684294567b39ea3
+:01db4062746a479e536f728cc3e82578774bc7
+:01db50b842e1e6947d2cf6e64105d3c0f73704
+:01db605e62285b77769b88f53f86495e85fb05
+:01db70abaaa575436aaa23278b2fd3b6bf5d96
+:01db802ae1439e7460bec8284389f653431b70
+:01db900b8d08f59426713f470a29edc873ce0f
+:01dba014c0e8db69d2076fee20ce3f594eb766
+:01dbb06c0662edc0ff38c0f1ec6bb33bbf67cc
+:01dbc06cd6fedf1683013207bfa813248555ca
+:01dbd00114e60dbe8c02635fbe3cfd96406373
+:01dbe0a69f755996618f1f544ba74e6213a261
+:01dbf0156ce6c9f186eaacf0b96205a8a9509e
+:01dc004ca0e2ec1b7bb9c3a3d6fd97712c9f80
+:01dc10ccf800d9362434a622290978f9d110f7
+:01dc20425e65c6edcd1fb3aadcaf3096233122
+:01dc3053cd972fb44f56e53760d21cfa7906d7
+:01dc402048ec7cf7bb20528f3788a4c8ca3942
+:01dc5071d66224c0d242dd0b11bf14edb4c6d2
+:01dc60d5e2cbc9618c3fe8286c47e28dd89401
+:01dc7056dd9707478855f5db776e29cb0b2f64
+:01dc802596eb7339ca3d2c1b6def7cf06fdb23
+:01dc90c39a69c4d8be7299c7a57b5459b789ec
+:01dca0701bbbea2ea796c71683e02c13f2d628
+:01dcb026ac9b20949c543b0b6543854f564ce9
+:01dcc094709301d486b78a7c4dae9202455732
+:01dcd0c2bc70a038563c9b00f9e9e7cbeb2c46
+:01dce0b4bc7016515304da3634ad94c0283b76
+:01dcf0c61d4ca173065f4bb9140750caebcaec
+:01dd00f23056e2fb889917f8687750e234966d
+:01dd106cc56ac8dd8b4ce768a3421ec0cd505a
+:01dd202c86f7f83dd16a9d1c3549d4902f2106
+:01dd30d6ea8717814cd203016080b29fe77342
+:01dd4047c0a1754d4da0a6859e5eff27817c88
+:01dd50ac8e0ce77b6a6bd9cff56df4726b53ab
+:01dd60e72c147d96969956a024b3f1af616d42
+:01dd70ae79e37331d99ba59854824d77cf66a6
+:01dd803f9568b3d43c201b0f2d2d22f43fce3c
+:01dd90cf38548986da6973d6c04ff54bd42472
+:01dda01be716c61d23cf89f82ae0b27e772321
+:01ddb00be6dccb9c2ed43580aa04d1b8a78e3a
+:01ddc0baf1fb277bb91121a561f1c2e881cc17
+:01ddd0c261aa31dead1539fa984f59b02b080a
+:01dde0a07c53bd92551896271ca0978bc150f0
+:01ddf0eb49b117ef2d42f4ea6b4dc04a2064f5
+:01de00fc89dcca30b07dbff7a5dc56c88668ba
+:01de10c7ff78f8a62e7cd266c7a7da0b2cce87
+:01de20fa87327cb160733112440678656ce9dd
+:01de30191a7789d88984bf40242f4b53d300b2
+:01de4040cecaea2cd50b2649d9fa9cf689f319
+:01de502a433024bee935a9e673bb7f7c3bd3ac
+:01de60c0a74de2ffc75392c06c9a719f22d1ce
+:01de70911a7b143ae6f52bf316c0c4ac462ffc
+:01de80941b56e0b99f52027684edd9f5b955f5
+:01de9056d75a302df905b40c26f6ec5ae9f885
+:01dea03253cc951f7a483334c2c0a47e428a87
+:01deb08316f94e82a49b2c34018ad7928e5cc5
+:01dec0b0df13de8c193131db150e30f3b47f15
+:01ded0fca93e963673c274f9f0a2e33bc947a1
+:01dee08a0e5dbd11e0484e1516911ae5c83eb3
+:01def087075b5ee992b81ec9cc3c420f54c786
+:01df00c30eda77af52f655d4c681b5063c2500
+:01df10066a5632467e386cac7b37a66148e108
+:01df2097981a9060faf7a718abfe9089dacf3a
+:01df306f09db9dac304f062e5a0834b3851143
+:01df4006900e20593983f67ab42051bcb36acc
+:01df50d8c502d32827e2177fd39d1b84798426
+:01df60a0f8b532236aca97503ce52511f878f3
+:01df704af18a885b01571d505267ee50df6d82
+:01df803172fe4a456e6189b07ac1c406f8bd7a
+:01df90646c50b5cbba0543be41408a22c16e64
+:01dfa0235f9a370252325d69d8011ba514b246
+:01dfb03a5fe2b67917c8f3f31bd6bc5b469f66
+:01dfc06654bb563ad1a48aca7e27c814549374
+:01dfd06fde3287fbae9a1f569cd506ac5b47fa
+:01dfe0dfd5ea1c3b306e7338eda3fb256195b4
+:01dff0d91baf84c9a22fdf269dc8268faea63c
+:01e000067222bcfb9053c6a0c8d9e76d541b4f
+:01e0100dd5b379