hirom ; (should be s-dd1)
!transfer_buff = $f4
org $c02874
l_c02874:
phb
pei ($16)
sep #$20
rep #$10
lda $16
pha : plb
sta $01 : sta $1e
lda #$54 : sta $00
lda $12 : sta $02
lda #$6b : sta $03
lda #$ff : sta $1d
ldy $10
rep #$21
stz $10
lda [$10],y : iny : iny
adc $14
tyx
ldy $14
sta $14
lda #$00ff
jsl $800000
sep #$20
stz $01 : lda $16 : inc : sta $03
phx
tyx
ply
sep #$21
.flag
lda [$10],y : iny
rol
sta $02
bcs .lz
.uncomp
lda [$10],y : iny
sta $0000,x : inx
.next
cpx $14
bcs .end
- asl $02
bcc .uncomp
beq .flag
.lz
lda [$10],y : iny : sta $1c
lda [$10],y : iny : dec : sta $00
sty $16
txy
rep #$21
txa
adc $1c
tax
lda $00
sep #$20
bit $03
bmi +
mvn $7e7e
tyx
ldy $16
cpx $14
bcc -
bra .end
+ mvn $7f7f
tyx
ldy $16
cpx $14
bcc -
.end
plx : stx $16
plb
tdc
sep #$30
rtl
; (other codes)
l_c0b60b_clear_center:
lda #$0080
ldx #$7e
- sta $c440,x
dex #2
bpl -
rts
l_c0b60b_update:
clc : lda $10 : adc #$8c10 : sta $10
tdc : adc $12 : sta $12 : tay
lda $14 : adc #$02eb : sta $14
bcc +
inc $16
+ asl #6
clc
adc $10
sta $18
rts
l_c0b60b_post:
ldx #$7e : phx : plb
rep #$31
ldx #$c4c0
ldy #$c3c0
-- txa
adc #$0010
sta $18
- lda $0000,x : eor #$00ff : sta $0000,y
lda $0010,x : eor #$00ff : sta $0010,y
lda $0020,x : eor #$00ff : sta $0020,y
lda $0030,x : eor #$00ff : sta $0030,y
lda $0040,x : eor #$00ff : sta $0040,y
lda $0050,x : eor #$00ff : sta $0050,y
lda $0060,x : eor #$00ff : sta $0060,y
lda $0070,x : eor #$00ff : sta $0070,y
inx #2 : iny #2
cpx $18
bcc -
tya : sbc #$0090 : tay
txa : adc #$006f : tax
cpx #$f4c0
bcc --
rts
warnpc $c02a0c
padbyte $00 : pad $c02a0c
org $c0b60b
l_c0b60b:
php
phb
phd
sep #$10
rep #$20
pea $807e
plb
jsr l_c0b60b_clear_center
plb
stz $10 : sta $12
stz $14 : stz $16
lda #$c4c0 : sta $2181
ldx #$00 : stx $2183
ldx #$60
.loop
phx
jsr l_c0b60b_update
lda $10
ldx #$00
cpx $16
bne .one
bra +
- iny
cmp $18
beq .next
+
-- sty $2180 : stx $2180
clc
adc $14
bcs -
cmp $18
bne --
bra .next
- iny
cmp $18
beq .next
.one
-- sty $2180 : stx $2180
iny
clc
adc $14
bcs -
cmp $18
bne --
.next
plx
dex
bne .loop
.end
jsr l_c0b60b_post
pld
plb
plp
rtl
warnpc $c0b674
padbyte $00 : pad $c0b674
; ------------------------
org $c70000
l_c70000:
jmp l_c70006
l_c70003:
jmp l_c7005b
l_c70006:
php
rep #$30
phx
phy
phb
pea $8787 : plb : plb
phd
lda #$0000 : tcd : tay
sep #$20
jsr l_c701a5
ldy #$204a
lda #$c7
jsr l_c701f9
jsr l_c701dd ; set jump
jsr .sub
jsr .sub
jsr .sub
stz $80
stz $81
stz $82
pld
plb
ply
plx
plp
rtl
.sub
lda $2143
- cmp $2143
beq -
rts
l_c701a5:
php
phx
sep #$20
lda #$ff : sta $2140
ldx #$bbaa
- cpx $2140
bne -
lda #$cc : sta $8c
plx
plp
rts
l_c701c1:
phx
sep #$20
lda #$fc : sta $2140
ldx #$bbaa
- cpx $2140
bne -
plx
rts
l_c701dd:
phx
ldx #$0400 : stx $2142
stz $2141
lda $8c : sta $2140
plx
rts
l_c701f9:
php
phb
phx
pha
plb
lda $8c
phd
pea $2100
pld
.begin
ldx $0000,y
beq .end
jsr transfer_ipl
bra .begin
.end
pld
sta $8c
plx
plb
plp
rts
transfer_ipl:
xba
lda $0002,y : sta $42
lda $0003,y : sta $43
iny #4
xba
.begin
sta $41
sta $40
- cmp $40
bne -
tdc : xba
lda $0000,y : iny
xba
bra .loop
- xba
lda $0000,y : iny
xba
-- cmp $40
bne --
inc
.loop
rep #$20
sta $40
sep #$20
dex
bne -
- cmp $40
bne -
inc : inc
bne +
inc
+ rts
l_c7005b:
php
rep #$30
phx
phy
tsx
txy
ldx #$1f9f ; (avoid stack overflow)
txs
phy
phb
pea $8787 : plb : plb
phd
pea $0000 : pld
pei (!transfer_buff)
pei (!transfer_buff+2)
pei (!transfer_buff+4)
pei (!transfer_buff+6)
pei (!transfer_buff+8)
pei (!transfer_buff+10)
pha
tdc : tay
lda #$1500 : sta $8a
stz $8e
pla
and #$00ff
beq ++
asl
tax
lda $c71000,x
tax
jsr .sync
jsr transfer_1_begin
jsr transfer_2_begin
rep #$20 : lda $8a : sta $7e2000
sep #$20 : lda $8e : sta $7e2002
bra +
++ jsr l_c701c1
rep #$20 : lda $7e2000 : sta $8a
sep #$20 : lda $7e2002 : sta $8e
+ stz $8f
- tdc
lda $8f
cmp #$03
beq .end
rep #$20
tax
sep #$20
lda $80,x
beq .end
rep #$20
asl
tax
lda $c71078,x
tax
jsr transfer_3_begin
tdc : lda $8f
tay
clc
lda $c70000,x : inx
phx
tyx
adc $c704dd,x
plx
sta $8d
jsr transfer_2_begin
inc $8f
bra -
.end
jsr .finalize
plx : stx.b !transfer_buff+10
plx : stx.b !transfer_buff+8
plx : stx.b !transfer_buff+6
plx : stx.b !transfer_buff+4
plx : stx.b !transfer_buff+2
plx : stx.b !transfer_buff+0
pld
plb
plx
txs
ply
plx
plp
rtl
.finalize
stz $2141 : lda #$ff : sta $2140
- lda $2140
bne -
stz $2140
rts
.sync
php
phx
sep #$20
lda #$ff : sta $2140
ldx #$bbaa
- cpx $2140
bne -
plx
plp
rts
transfer_1:
- inx
jsr transfer_1_1
.begin
rep #$20
lda $c70000,x : inx : inx
tay
sep #$20
lda $c70000,x
bne -
inx
lda $c70000,x : inx
sta $8d
rts
transfer_1_1:
php
phb
pha : plb
phx
sta.b !transfer_buff+2
.begin
ldx $0000,y
beq .end
phx
rep #$21
tya
adc #$0004 : sta.b !transfer_buff
adc $01,s
tax
lda $0002,y
tay
txa
plx
pha
sep #$20
jsr fast_transfer
ply
bra .begin
.end
plx
plb
plp
rts
transfer_3:
- inx
jsr transfer_3_1
.begin
rep #$20
lda $c70000,x : inx : inx
tay
sep #$20
lda $c70000,x
bne -
inx
rts
transfer_3_1:
phb
phx
pha : plb : sta.b !transfer_buff+2
tdc
lda $8f
rep #$20
asl
tax
lda $c704cd,x
tax
.begin
rep #$21
lda $0000,y
beq .end
iny #4 : sty.b !transfer_buff
txy
tax
adc.b !transfer_buff
pha
sep #$20
jsr fast_transfer
ply
bra .begin
.end
sep #$20
plx
plb
rts
transfer_2:
- sta $86
asl
adc $86
phx
tax
lda $c71c75,x
tay
sep #$20
lda $c71c77,x
phb
pha : plb
jsr .sub1
jsr .sub2
jsr .sub3
inc $8d
inc $8e
plb
plx
inx #2
.begin
rep #$20
lda $c70000,x
bne -
sep #$20
rts
.sub1
pei ($88)
tdc : lda $8d
rep #$20
sta $86
asl
adc $86
asl
adc #$1208
tax
lda $0000,y : sta $84
lda $0002,y : sta $86
lda $0004,y : sta $88
tya
adc #$0006
pha
sep #$20
lda $8e : sta $84
ldy #$0084 : sty.b !transfer_buff
lda #$87 : sta.b !transfer_buff+2
txy
ldx #$0006
jsr fast_transfer
ply
plx : stx $88
rts
.sub2
rep #$30
sec : lda $0002,y : sbc $0000,y
clc : adc $8a
sta $86
lda $8a : sta $84
iny #4
phy
lda $8e
and #$00ff
asl #2
adc #$1400
tay
sep #$20
ldx #$0084 : stx.b !transfer_buff
lda #$87 : sta.b !transfer_buff+2
ldx #$0004
jsr fast_transfer
ply
rts
.sub3
rep #$31
lda $0000,y : iny #4 : sty.b !transfer_buff
sta $86 : pha
adc $8a
ldy $8a
sta $8a
sep #$20
phb : pla : sta.b !transfer_buff+2
plx
jsr fast_transfer
rts
fast_transfer:
php
phb
sep #$20
lda #$87 : pha : plb
jsr send_size_and_dest
sep #$10
stz.b !transfer_buff+11
ldy.b !transfer_buff+10
bra +
.begin
jsr confirm
+ jsr read_bytes
bra ++
.loop
jsr read_bytes
dey #2
- cpy $2140
bne -
++ stx $2141 : sta $2142 : xba : sta $2143
+ ldy.b !transfer_buff+10 : sty $2140
bne .loop
rep #$20
inc.b !transfer_buff+1 : inc.b !transfer_buff+4 : inc.b !transfer_buff+7
sep #$20
dec.b !transfer_buff+9
bne .begin
jsr confirm
plb
plp
rts
send_size_and_dest:
stx $4204
lda #$03 : sta $4206
xba : xba : nop : nop
rep #$20
lda $4216
lsr
adc $4214
tax
sep #$20
sta $2142 : eor #$ff : inc : sta.b !transfer_buff+10
xba
sta $2143 : sta.b !transfer_buff+9
lda #$ff : sta $2141
dec : sta $2140
inc
- cmp $2141
bne -
rep #$20
txa
dec
ora #$ff00
pha
tya
adc $01,s
sep #$20
sta $2142 : xba : sta $2143
lda.b !transfer_buff+10 : sta $2140
stz $2141
- lda $2141
bne -
txa
beq +
inc.b !transfer_buff+9
+ rep #$20
ldy.b !transfer_buff+2
lda.b !transfer_buff
sec
adc $01,s
sta.b !transfer_buff
bcs +
dey
+ sep #$20
tya
sta.b !transfer_buff+2
rep #$21
pla
txa : adc.b !transfer_buff : sta.b !transfer_buff+3
sep #$20
tdc : adc.b !transfer_buff+2 : sta.b !transfer_buff+5
rep #$21
txa : adc.b !transfer_buff+3 : sta.b !transfer_buff+6
sep #$20
tdc : adc.b !transfer_buff+5 : sta.b !transfer_buff+8
rts
confirm:
inc.b !transfer_buff+11
lda.b !transfer_buff+11
- cmp $2141
bne -
rts
read_bytes:
lda [!transfer_buff+0],y : tax
lda [!transfer_buff+6],y : xba
lda [!transfer_buff+3],y
iny : sty.b !transfer_buff+10
rts
warnpc $c704cd
padbyte $00 : pad $c704cd
org $c72afb
arch spc700
base $0ea5
mov y, #$bb
mov a, #$aa
movw $f4, ya
mov a, #$fe
- cmp a, $f4
bne -
.begin
movw ya, $f6
mov $f5, #$ff
movw $14, ya ; size
eor a, #$ff : inc a : inc a
mov x, a
- mov a, $f5
bne -
movw ya, $f6
mov $f4, x
mov $f5, #$00
mov .st1+1, a
mov .st1+2, y
addw ya, $14
mov .st2+1, a
mov .st2+2, y
addw ya, $14
mov .st3+1, a
mov .st3+2, y
mov y, #$00
- cmp x, $f4
bne -
dec x
-- mov a, $f5 ; 3 bytes / 40 cycles
.st1
mov $0000+X, a
mov a, $f6
.st2
mov $0000+X, a
mov a, $f7
mov $f4, x
.st3
mov $0000+X, a
inc x
- cmp x, $f4
bne --
cmp x, #$00
bne -
inc y : mov $f5, y
inc .st1+2
inc .st2+2
inc .st3+2
mov a, $f4
- dec a
beq --
+ mov a, $f4
bpl -
+ inc a
bne .begin
mov $f4, #$00
- mov a, $f4
bmi -
mov $f1, #$31
ret
warnpc $c72b84
padbyte $00 : pad $c72b84
aGlyb20gOyAoc2hvdWxkIGJlIHMtZGQxKQoKIXRyYW5zZmVyX2J1ZmYgPSAkZjQKCm9yZyAkYzAyODc0CmxfYzAyODc0OgoJcGhiCglwZWkgKCQxNikKCXNlcCAjJDIwCglyZXAgIyQxMAoJbGRhICQxNgoJcGhhIDogcGxiCglzdGEgJDAxIDogc3RhICQxZQoJbGRhICMkNTQgOiBzdGEgJDAwCglsZGEgJDEyIDogc3RhICQwMgoJbGRhICMkNmIgOiBzdGEgJDAzCglsZGEgIyRmZiA6IHN0YSAkMWQKCglsZHkgJDEwCglyZXAgIyQyMQoJc3R6ICQxMAoJbGRhIFskMTBdLHkgOiBpbnkgOiBpbnkKCWFkYyAkMTQKCXR5eAoJbGR5ICQxNAoJc3RhICQxNAoJbGRhICMkMDBmZgoJanNsICQ4MDAwMDAKCXNlcCAjJDIwCglzdHogJDAxIDogbGRhICQxNiA6IGluYyA6IHN0YSAkMDMKCXBoeAoJdHl4CglwbHkKCXNlcCAjJDIxCgouZmxhZwoJbGRhIFskMTBdLHkgOiBpbnkKCXJvbAoJc3RhICQwMgoJYmNzIC5segoKLnVuY29tcAoJbGRhIFskMTBdLHkgOiBpbnkKCXN0YSAkMDAwMCx4IDogaW54CgkKLm5leHQKCWNweCAkMTQKCWJjcyAuZW5kCgkKLQlhc2wgJDAyCgliY2MgLnVuY29tcAoJYmVxIC5mbGFnCgoubHoKCWxkYSBbJDEwXSx5IDogaW55IDogc3RhICQxYwoJbGRhIFskMTBdLHkgOiBpbnkgOiBkZWMgOiBzdGEgJDAwCglzdHkgJDE2Cgl0eHkKCXJlcCAjJDIxCgl0eGEKCWFkYyAkMWMKCXRheAoJbGRhICQwMAoJc2VwICMkMjAKCWJpdCAkMDMKCWJtaSArCgltdm4gJDdlN2UKCXR5eAoJbGR5ICQxNgoJY3B4ICQxNAoJYmNjIC0KCWJyYSAuZW5kCgorCW12biAkN2Y3ZgoJdHl4CglsZHkgJDE2CgljcHggJDE0CgliY2MgLQoKLmVuZAoJcGx4IDogc3R4ICQxNgoJcGxiCgl0ZGMKCXNlcCAjJDMwCglydGwKCjsgKG90aGVyIGNvZGVzKQoKbF9jMGI2MGJfY2xlYXJfY2VudGVyOgoJbGRhICMkMDA4MAoJbGR4ICMkN2UKLQlzdGEgJGM0NDAseAoJZGV4ICMyCglicGwgLQoJcnRzCgpsX2MwYjYwYl91cGRhdGU6CgljbGMgOiBsZGEgJDEwIDogYWRjICMkOGMxMCA6IHN0YSAkMTAKCXRkYyA6IGFkYyAkMTIgOiBzdGEgJDEyIDogdGF5CglsZGEgJDE0IDogYWRjICMkMDJlYiA6IHN0YSAkMTQKCWJjYyArCglpbmMgJDE2CisJYXNsICM2CgljbGMKCWFkYyAkMTAKCXN0YSAkMTgKCXJ0cwoKbF9jMGI2MGJfcG9zdDoKCWxkeCAjJDdlIDogcGh4IDogcGxiCglyZXAgIyQzMQoJbGR4ICMkYzRjMAoJbGR5ICMkYzNjMAotLQl0eGEKCWFkYyAjJDAwMTAKCXN0YSAkMTgKLQlsZGEgJDAwMDAseCA6IGVvciAjJDAwZmYgOiBzdGEgJDAwMDAseQoJbGRhICQwMDEwLHggOiBlb3IgIyQwMGZmIDogc3RhICQwMDEwLHkKCWxkYSAkMDAyMCx4IDogZW9yICMkMDBmZiA6IHN0YSAkMDAyMCx5CglsZGEgJDAwMzAseCA6IGVvciAjJDAwZmYgOiBzdGEgJDAwMzAseQoJbGRhICQwMDQwLHggOiBlb3IgIyQwMGZmIDogc3RhICQwMDQwLHkKCWxkYSAkMDA1MCx4IDogZW9yICMkMDBmZiA6IHN0YSAkMDA1MCx5CglsZGEgJDAwNjAseCA6IGVvciAjJDAwZmYgOiBzdGEgJDAwNjAseQoJbGRhICQwMDcwLHggOiBlb3IgIyQwMGZmIDogc3RhICQwMDcwLHkKCWlueCAjMiA6IGlueSAjMgoJY3B4ICQxOAoJYmNjIC0KCXR5YSA6IHNiYyAjJDAwOTAgOiB0YXkKCXR4YSA6IGFkYyAjJDAwNmYgOiB0YXgKCWNweCAjJGY0YzAKCWJjYyAtLQoJcnRzCndhcm5wYyAkYzAyYTBjCnBhZGJ5dGUgJDAwIDogcGFkICRjMDJhMGMKCm9yZyAkYzBiNjBiCmxfYzBiNjBiOgoJcGhwCglwaGIKCXBoZAoJc2VwICMkMTAKCXJlcCAjJDIwCglwZWEgJDgwN2UKCXBsYgoJanNyIGxfYzBiNjBiX2NsZWFyX2NlbnRlcgoJcGxiCglzdHogJDEwIDogc3RhICQxMiAKCXN0eiAkMTQgOiBzdHogJDE2CglsZGEgIyRjNGMwIDogc3RhICQyMTgxCglsZHggIyQwMCA6IHN0eCAkMjE4MwoJbGR4ICMkNjAKCi5sb29wCglwaHgKCWpzciBsX2MwYjYwYl91cGRhdGUKCWxkYSAkMTAKCWxkeCAjJDAwCgljcHggJDE2CglibmUgLm9uZQoJYnJhICsKCi0JaW55CgljbXAgJDE4CgliZXEgLm5leHQKCisKLS0Jc3R5ICQyMTgwIDogc3R4ICQyMTgwCgljbGMKCWFkYyAkMTQKCWJjcyAtCgljbXAgJDE4CglibmUgLS0KCWJyYSAubmV4dAoKLQlpbnkKCWNtcCAkMTgKCWJlcSAubmV4dAoKLm9uZQotLQlzdHkgJDIxODAgOiBzdHggJDIxODAKCWlueQoJY2xjCglhZGMgJDE0CgliY3MgLQoJY21wICQxOAoJYm5lIC0tCgoubmV4dAoJcGx4CglkZXgKCWJuZSAubG9vcAoKLmVuZAoJanNyIGxfYzBiNjBiX3Bvc3QKCXBsZAoJcGxiCglwbHAKCXJ0bAp3YXJucGMgJGMwYjY3NApwYWRieXRlICQwMCA6IHBhZCAkYzBiNjc0Cgo7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKb3JnICRjNzAwMDAKbF9jNzAwMDA6CglqbXAgbF9jNzAwMDYKCmxfYzcwMDAzOgoJam1wIGxfYzcwMDViCgpsX2M3MDAwNjoKCXBocAoJcmVwICMkMzAKCXBoeAoJcGh5CglwaGIKCXBlYSAkODc4NyA6IHBsYiA6IHBsYgoJcGhkCglsZGEgIyQwMDAwIDogdGNkIDogdGF5CglzZXAgIyQyMAoJanNyIGxfYzcwMWE1CgoJbGR5ICMkMjA0YQoJbGRhICMkYzcKCWpzciBsX2M3MDFmOQoJanNyIGxfYzcwMWRkIDsgc2V0IGp1bXAKCglqc3IgLnN1YgoJanNyIC5zdWIKCWpzciAuc3ViCgoJc3R6ICQ4MAoJc3R6ICQ4MQoJc3R6ICQ4MgoKCXBsZAoJcGxiCglwbHkKCXBseAoJcGxwCglydGwKCi5zdWIKCWxkYSAkMjE0MwotCWNtcCAkMjE0MwoJYmVxIC0KCXJ0cwoKbF9jNzAxYTU6CglwaHAKCXBoeAoJc2VwICMkMjAKCWxkYSAjJGZmIDogc3RhICQyMTQwCglsZHggIyRiYmFhCi0JY3B4ICQyMTQwCglibmUgLQoJbGRhICMkY2MgOiBzdGEgJDhjCglwbHgKCXBscAoJcnRzCgpsX2M3MDFjMToKCXBoeAoJc2VwICMkMjAKCWxkYSAjJGZjIDogc3RhICQyMTQwCglsZHggIyRiYmFhCi0JY3B4ICQyMTQwCglibmUgLQoJcGx4CglydHMKCmxfYzcwMWRkOgoJcGh4CglsZHggIyQwNDAwIDogc3R4ICQyMTQyCglzdHogJDIxNDEKCWxkYSAkOGMgOiBzdGEgJDIxNDAKCXBseAoJcnRzCgpsX2M3MDFmOToKCXBocAoJcGhiCglwaHgKCXBoYQoJcGxiCglsZGEgJDhjCglwaGQKCXBlYSAkMjEwMAoJcGxkCgouYmVnaW4KCWxkeCAkMDAwMCx5CgliZXEgLmVuZAoJanNyIHRyYW5zZmVyX2lwbAoJYnJhIC5iZWdpbgoKLmVuZAoJcGxkCglzdGEgJDhjCglwbHgKCXBsYgoJcGxwCglydHMKCnRyYW5zZmVyX2lwbDoKCXhiYQoJbGRhICQwMDAyLHkgOiBzdGEgJDQyCglsZGEgJDAwMDMseSA6IHN0YSAkNDMKCWlueSAjNAoJeGJhCgouYmVnaW4KCXN0YSAkNDEKCXN0YSAkNDAKLQljbXAgJDQwCglibmUgLQoKCXRkYyA6IHhiYQoJbGRhICQwMDAwLHkgOiBpbnkKCXhiYQoJYnJhIC5sb29wCgotCXhiYQoJbGRhICQwMDAwLHkgOiBpbnkKCXhiYQotLQljbXAgJDQwCglibmUgLS0KCWluYwoKLmxvb3AKCXJlcCAjJDIwCglzdGEgJDQwCglzZXAgIyQyMAoJZGV4CglibmUgLQoKLQljbXAgJDQwCglibmUgLQoKCWluYyA6IGluYwoJYm5lICsKCWluYworCXJ0cwoKbF9jNzAwNWI6CglwaHAKCXJlcCAjJDMwCglwaHgKCXBoeQoJdHN4Cgl0eHkKCWxkeCAjJDFmOWYgOyAoYXZvaWQgc3RhY2sgb3ZlcmZsb3cpCgl0eHMKCXBoeQoJcGhiCglwZWEgJDg3ODcgOiBwbGIgOiBwbGIKCXBoZAoJcGVhICQwMDAwIDogcGxkCglwZWkgKCF0cmFuc2Zlcl9idWZmKQoJcGVpICghdHJhbnNmZXJfYnVmZisyKQoJcGVpICghdHJhbnNmZXJfYnVmZis0KQoJcGVpICghdHJhbnNmZXJfYnVmZis2KQoJcGVpICghdHJhbnNmZXJfYnVmZis4KQoJcGVpICghdHJhbnNmZXJfYnVmZisxMCkKCXBoYQoJdGRjIDogdGF5CglsZGEgIyQxNTAwIDogc3RhICQ4YQoJc3R6ICQ4ZQoJcGxhCglhbmQgIyQwMGZmCgliZXEgKysKCglhc2wKCXRheAoJbGRhICRjNzEwMDAseAoJdGF4Cglqc3IgLnN5bmMKCWpzciB0cmFuc2Zlcl8xX2JlZ2luCglqc3IgdHJhbnNmZXJfMl9iZWdpbgoJcmVwICMkMjAgOiBsZGEgJDhhIDogc3RhICQ3ZTIwMDAKCXNlcCAjJDIwIDogbGRhICQ4ZSA6IHN0YSAkN2UyMDAyCglicmEgKwoKKysJanNyIGxfYzcwMWMxCglyZXAgIyQyMCA6IGxkYSAkN2UyMDAwIDogc3RhICQ4YQoJc2VwICMkMjAgOiBsZGEgJDdlMjAwMiA6IHN0YSAkOGUKCisJc3R6ICQ4ZgotCXRkYwoJbGRhICQ4ZgoJY21wICMkMDMKCWJlcSAuZW5kCgoJcmVwICMkMjAKCXRheAoJc2VwICMkMjAKCWxkYSAkODAseAoJYmVxIC5lbmQKCglyZXAgIyQyMAoJYXNsCgl0YXgKCWxkYSAkYzcxMDc4LHgKCXRheAoKCWpzciB0cmFuc2Zlcl8zX2JlZ2luCgl0ZGMgOiBsZGEgJDhmCgl0YXkKCWNsYwoJbGRhICRjNzAwMDAseCA6IGlueAoJcGh4Cgl0eXgKCWFkYyAkYzcwNGRkLHgKCXBseAoJc3RhICQ4ZAoKCWpzciB0cmFuc2Zlcl8yX2JlZ2luCglpbmMgJDhmCglicmEgLQoKLmVuZAoJanNyIC5maW5hbGl6ZQoJcGx4IDogc3R4LmIgIXRyYW5zZmVyX2J1ZmYrMTAKCXBseCA6IHN0eC5iICF0cmFuc2Zlcl9idWZmKzgKCXBseCA6IHN0eC5iICF0cmFuc2Zlcl9idWZmKzYKCXBseCA6IHN0eC5iICF0cmFuc2Zlcl9idWZmKzQKCXBseCA6IHN0eC5iICF0cmFuc2Zlcl9idWZmKzIKCXBseCA6IHN0eC5iICF0cmFuc2Zlcl9idWZmKzAKCXBsZAoJcGxiCglwbHgKCXR4cwoJcGx5CglwbHgKCXBscAoJcnRsCgouZmluYWxpemUKCXN0eiAkMjE0MSA6IGxkYSAjJGZmIDogc3RhICQyMTQwCi0JbGRhICQyMTQwCglibmUgLQoJc3R6ICQyMTQwCglydHMKCi5zeW5jCglwaHAKCXBoeAoJc2VwICMkMjAKCWxkYSAjJGZmIDogc3RhICQyMTQwCglsZHggIyRiYmFhCi0JY3B4ICQyMTQwCglibmUgLQoJcGx4CglwbHAKCXJ0cwoKdHJhbnNmZXJfMToKLQlpbngKCWpzciB0cmFuc2Zlcl8xXzEKCi5iZWdpbgoJcmVwICMkMjAKCWxkYSAkYzcwMDAwLHggOiBpbnggOiBpbngKCXRheQoJc2VwICMkMjAKCWxkYSAkYzcwMDAwLHgKCWJuZSAtCgoJaW54CglsZGEgJGM3MDAwMCx4IDogaW54CglzdGEgJDhkCglydHMKCnRyYW5zZmVyXzFfMToKCXBocAoJcGhiCglwaGEgOiBwbGIKCXBoeAoJc3RhLmIgIXRyYW5zZmVyX2J1ZmYrMgoKLmJlZ2luCglsZHggJDAwMDAseQoJYmVxIC5lbmQKCXBoeAoJcmVwICMkMjEKCXR5YQoJYWRjICMkMDAwNCA6IHN0YS5iICF0cmFuc2Zlcl9idWZmCglhZGMgJDAxLHMKCXRheAoJbGRhICQwMDAyLHkKCXRheQoJdHhhCglwbHgKCXBoYQoJc2VwICMkMjAKCWpzciBmYXN0X3RyYW5zZmVyCglwbHkKCWJyYSAuYmVnaW4KCi5lbmQKCXBseAoJcGxiCglwbHAKCXJ0cwoKdHJhbnNmZXJfMzoKLQlpbngKCWpzciB0cmFuc2Zlcl8zXzEKCi5iZWdpbgoJcmVwICMkMjAKCWxkYSAkYzcwMDAwLHggOiBpbnggOiBpbngKCXRheQoJc2VwICMkMjAKCWxkYSAkYzcwMDAwLHgKCWJuZSAtCgoJaW54CglydHMKCnRyYW5zZmVyXzNfMToKCXBoYgoJcGh4CglwaGEgOiBwbGIgOiBzdGEuYiAhdHJhbnNmZXJfYnVmZisyCgoJdGRjCglsZGEgJDhmCglyZXAgIyQyMAoJYXNsCgl0YXgKCWxkYSAkYzcwNGNkLHgKCXRheAoKLmJlZ2luCglyZXAgIyQyMQoJbGRhICQwMDAwLHkKCWJlcSAuZW5kCglpbnkgIzQgOiBzdHkuYiAhdHJhbnNmZXJfYnVmZgoJdHh5Cgl0YXgKCWFkYy5iICF0cmFuc2Zlcl9idWZmCglwaGEKCXNlcCAjJDIwCglqc3IgZmFzdF90cmFuc2ZlcgoJcGx5CglicmEgLmJlZ2luCgouZW5kCglzZXAgIyQyMAoJcGx4CglwbGIKCXJ0cwoKdHJhbnNmZXJfMjoKLQlzdGEgJDg2Cglhc2wKCWFkYyAkODYKCXBoeAoJdGF4CglsZGEgJGM3MWM3NSx4Cgl0YXkKCXNlcCAjJDIwCglsZGEgJGM3MWM3Nyx4CglwaGIKCXBoYSA6IHBsYgoJanNyIC5zdWIxCglqc3IgLnN1YjIKCWpzciAuc3ViMwoJaW5jICQ4ZAoJaW5jICQ4ZQoJcGxiCglwbHgKCWlueCAjMgoKLmJlZ2luCglyZXAgIyQyMAoJbGRhICRjNzAwMDAseAoJYm5lIC0KCXNlcCAjJDIwCglydHMKCi5zdWIxCglwZWkgKCQ4OCkKCXRkYyA6IGxkYSAkOGQKCXJlcCAjJDIwCglzdGEgJDg2Cglhc2wKCWFkYyAkODYKCWFzbAoJYWRjICMkMTIwOAoJdGF4CglsZGEgJDAwMDAseSA6IHN0YSAkODQKCWxkYSAkMDAwMix5IDogc3RhICQ4NgoJbGRhICQwMDA0LHkgOiBzdGEgJDg4Cgl0eWEKCWFkYyAjJDAwMDYKCXBoYQoJc2VwICMkMjAKCWxkYSAkOGUgOiBzdGEgJDg0CgoJbGR5ICMkMDA4NCA6IHN0eS5iICF0cmFuc2Zlcl9idWZmCglsZGEgIyQ4NyA6IHN0YS5iICF0cmFuc2Zlcl9idWZmKzIKCXR4eQoJbGR4ICMkMDAwNgoJanNyIGZhc3RfdHJhbnNmZXIKCglwbHkKCXBseCA6IHN0eCAkODgKCXJ0cwoKLnN1YjIKCXJlcCAjJDMwCglzZWMgOiBsZGEgJDAwMDIseSA6IHNiYyAkMDAwMCx5CgljbGMgOiBhZGMgJDhhCglzdGEgJDg2CglsZGEgJDhhIDogc3RhICQ4NAoJaW55ICM0CglwaHkKCglsZGEgJDhlCglhbmQgIyQwMGZmCglhc2wgIzIKCWFkYyAjJDE0MDAKCXRheQoKCXNlcCAjJDIwCglsZHggIyQwMDg0IDogc3R4LmIgIXRyYW5zZmVyX2J1ZmYKCWxkYSAjJDg3IDogc3RhLmIgIXRyYW5zZmVyX2J1ZmYrMgoJbGR4ICMkMDAwNAoJanNyIGZhc3RfdHJhbnNmZXIKCglwbHkKCXJ0cwoKLnN1YjMKCXJlcCAjJDMxCglsZGEgJDAwMDAseSA6IGlueSAjNCA6IHN0eS5iICF0cmFuc2Zlcl9idWZmCglzdGEgJDg2IDogcGhhCglhZGMgJDhhCglsZHkgJDhhCglzdGEgJDhhCglzZXAgIyQyMAoJcGhiIDogcGxhIDogc3RhLmIgIXRyYW5zZmVyX2J1ZmYrMgoJcGx4Cglqc3IgZmFzdF90cmFuc2ZlcgoJcnRzCgpmYXN0X3RyYW5zZmVyOgoJcGhwCglwaGIKCXNlcCAjJDIwCglsZGEgIyQ4NyA6IHBoYSA6IHBsYgoJanNyIHNlbmRfc2l6ZV9hbmRfZGVzdAoJc2VwICMkMTAKCXN0ei5iICF0cmFuc2Zlcl9idWZmKzExCglsZHkuYiAhdHJhbnNmZXJfYnVmZisxMAoJYnJhICsKCi5iZWdpbgoJanNyIGNvbmZpcm0KKwlqc3IgcmVhZF9ieXRlcwoJYnJhICsrCgoubG9vcAoJanNyIHJlYWRfYnl0ZXMKCWRleSAjMgotCWNweSAkMjE0MAoJYm5lIC0KKysJc3R4ICQyMTQxIDogc3RhICQyMTQyIDogeGJhIDogc3RhICQyMTQzCgorCWxkeS5iICF0cmFuc2Zlcl9idWZmKzEwIDogc3R5ICQyMTQwCglibmUgLmxvb3AKCglyZXAgIyQyMAoJaW5jLmIgIXRyYW5zZmVyX2J1ZmYrMSA6IGluYy5iICF0cmFuc2Zlcl9idWZmKzQgOiBpbmMuYiAhdHJhbnNmZXJfYnVmZis3CglzZXAgIyQyMAoJZGVjLmIgIXRyYW5zZmVyX2J1ZmYrOQoJYm5lIC5iZWdpbgoKCWpzciBjb25maXJtCglwbGIKCXBscAoJcnRzCgpzZW5kX3NpemVfYW5kX2Rlc3Q6CglzdHggJDQyMDQKCWxkYSAjJDAzIDogc3RhICQ0MjA2Cgl4YmEgOiB4YmEgOiBub3AgOiBub3AKCXJlcCAjJDIwCglsZGEgJDQyMTYKCWxzcgoJYWRjICQ0MjE0Cgl0YXgKCXNlcCAjJDIwCglzdGEgJDIxNDIgOiBlb3IgIyRmZiA6IGluYyA6IHN0YS5iICF0cmFuc2Zlcl9idWZmKzEwCgl4YmEKCXN0YSAkMjE0MyA6IHN0YS5iICF0cmFuc2Zlcl9idWZmKzkKCWxkYSAjJGZmIDogc3RhICQyMTQxCglkZWMgOiBzdGEgJDIxNDAKCWluYwotCWNtcCAkMjE0MQoJYm5lIC0KCglyZXAgIyQyMAoJdHhhCglkZWMKCW9yYSAjJGZmMDAKCXBoYQoJdHlhCglhZGMgJDAxLHMKCXNlcCAjJDIwCglzdGEgJDIxNDIgOiB4YmEgOiBzdGEgJDIxNDMKCWxkYS5iICF0cmFuc2Zlcl9idWZmKzEwIDogc3RhICQyMTQwCglzdHogJDIxNDEKLQlsZGEgJDIxNDEKCWJuZSAtCgoJdHhhCgliZXEgKwoJaW5jLmIgIXRyYW5zZmVyX2J1ZmYrOQorCXJlcCAjJDIwCglsZHkuYiAhdHJhbnNmZXJfYnVmZisyCglsZGEuYiAhdHJhbnNmZXJfYnVmZgoJc2VjCglhZGMgJDAxLHMKCXN0YS5iICF0cmFuc2Zlcl9idWZmCgliY3MgKwoJZGV5CisJc2VwICMkMjAKCXR5YSAKCXN0YS5iICF0cmFuc2Zlcl9idWZmKzIKCXJlcCAjJDIxCglwbGEKCXR4YSA6IGFkYy5iICF0cmFuc2Zlcl9idWZmIDogc3RhLmIgIXRyYW5zZmVyX2J1ZmYrMwoJc2VwICMkMjAKCXRkYyA6IGFkYy5iICF0cmFuc2Zlcl9idWZmKzIgOiBzdGEuYiAhdHJhbnNmZXJfYnVmZis1CgoJcmVwICMkMjEKCXR4YSA6IGFkYy5iICF0cmFuc2Zlcl9idWZmKzMgOiBzdGEuYiAhdHJhbnNmZXJfYnVmZis2CglzZXAgIyQyMAoJdGRjIDogYWRjLmIgIXRyYW5zZmVyX2J1ZmYrNSA6IHN0YS5iICF0cmFuc2Zlcl9idWZmKzgKCQoJcnRzCgpjb25maXJtOgoJaW5jLmIgIXRyYW5zZmVyX2J1ZmYrMTEKCWxkYS5iICF0cmFuc2Zlcl9idWZmKzExCi0JY21wICQyMTQxCglibmUgLQoJcnRzCgpyZWFkX2J5dGVzOgoJbGRhIFshdHJhbnNmZXJfYnVmZiswXSx5IDogdGF4CglsZGEgWyF0cmFuc2Zlcl9idWZmKzZdLHkgOiB4YmEKCWxkYSBbIXRyYW5zZmVyX2J1ZmYrM10seQoJaW55IDogc3R5LmIgIXRyYW5zZmVyX2J1ZmYrMTAKCXJ0cwp3YXJucGMgJGM3MDRjZApwYWRieXRlICQwMCA6IHBhZCAkYzcwNGNkCgpvcmcgJGM3MmFmYgphcmNoIHNwYzcwMApiYXNlICQwZWE1Cgltb3YgeSwgIyRiYgoJbW92IGEsICMkYWEKCW1vdncgJGY0LCB5YQoJbW92IGEsICMkZmUKLQljbXAgYSwgJGY0CglibmUgLQoKLmJlZ2luCgltb3Z3IHlhLCAkZjYKCW1vdiAkZjUsICMkZmYKCW1vdncgJDE0LCB5YSA7IHNpemUKCWVvciBhLCAjJGZmIDogaW5jIGEgOiBpbmMgYQoJbW92IHgsIGEKLQltb3YgYSwgJGY1CglibmUgLQoKCW1vdncgeWEsICRmNgoJbW92ICRmNCwgeAoJbW92ICRmNSwgIyQwMAoJbW92IC5zdDErMSwgYQoJbW92IC5zdDErMiwgeQoJYWRkdyB5YSwgJDE0Cgltb3YgLnN0MisxLCBhCgltb3YgLnN0MisyLCB5CglhZGR3IHlhLCAkMTQKCW1vdiAuc3QzKzEsIGEKCW1vdiAuc3QzKzIsIHkKCW1vdiB5LCAjJDAwCi0JY21wIHgsICRmNAoJYm5lIC0KCWRlYyB4CgotLQltb3YgYSwgJGY1IDsgMyBieXRlcyAvIDQwIGN5Y2xlcwoKLnN0MQoJbW92ICQwMDAwK1gsIGEKCW1vdiBhLCAkZjYKCi5zdDIKCW1vdiAkMDAwMCtYLCBhCgltb3YgYSwgJGY3Cgltb3YgJGY0LCB4Cgouc3QzCgltb3YgJDAwMDArWCwgYQoJaW5jIHgKLQljbXAgeCwgJGY0CglibmUgLS0KCgljbXAgeCwgIyQwMAoJYm5lIC0KCglpbmMgeSA6IG1vdiAkZjUsIHkKCWluYyAuc3QxKzIKCWluYyAuc3QyKzIKCWluYyAuc3QzKzIKCW1vdiBhLCAkZjQKCi0JZGVjIGEKCWJlcSAtLQorCW1vdiBhLCAkZjQKCWJwbCAtCgkKKwlpbmMgYQoJYm5lIC5iZWdpbgoKCW1vdiAkZjQsICMkMDAKLQltb3YgYSwgJGY0CglibWkgLQoJbW92ICRmMSwgIyQzMQoJcmV0Cndhcm5wYyAkYzcyYjg0CnBhZGJ5dGUgJDAwIDogcGFkICRjNzJiODQ=