Edit: Said that, done that. I just managed to get a patch into bluetooth-next that enables patchram upload for the whole vendor ID 0489 (Foxconn - Hon Hai).
If you provide me the neccessary informations I will try to do this for you as well.
]]>My bluetooth's vendor ID is 0x13d3, product ID is 0x3404.
cd ~
mkdir kernel
cd kernel
apt-get build-dep linux-image-`uname -r`
apt-get source linux-image-`uname -r`
cd linux-3.13.0/drivers/bluetooth/
vi btusb.c
Add my bluetooth device ID like this.
/* Broadcom BCM20702A0 */
{ USB_DEVICE(0x13d3, 0x3404), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x0b05, 0x17b5) },
{ USB_DEVICE(0x0b05, 0x17cb) },
{ USB_DEVICE(0x04ca, 0x2003) },
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8143), .driver_info = BTUSB_BCM_PATCHRAM },
make -C /lib/modules/`uname -r`/build M=`pwd` modules
mv /lib/modules/`uname -r`/kernel/drivers/bluetooth/btusb.ko /
cp btusb.ko /lib/modules/`uname -r`/kernel/drivers/bluetooth/
depmodgit clone https://github.com/jessesung/hex2hcd.git
cd hex2hcd
make
./hex2hcd BCM20702A1_001.002.014.1443.1479.hex fw-13d3_3404.hcd
cp fw-13d3_3404.hcd /lib/firmware/
chown root:root /lib/firmware/fw-13d3_3404.hcd
OK, now run
rmmod btusb; modprobe btusb
or reboot OS.
rfkill list
should list your bluetooth information and bluetooth work well.
]]>Special thanks to Harey, Steve_White, and laloch for all of your great posts.
]]>I deviated from some of the advice posted in here in that I manually edited the btusb kernel driver so that it contains my Product and Vendor IDs; this means I didn't have to manually echo my PID VID combo to /sys/bus/usb/drivers/btusb/new_id.
Anyways, for those who find themselves here by google, here is my setup
MOTHERBOARD INFO
Asus Maximus VI Formula + mPCIe wireless / bluetooth combo card (included with motherboard)
WIRELESS INFO (probably not relevant, but posted for others who have the same combo card and want to know if it can work)
/>$ sudo lspci -vvnn
03:00.0 Network controller [0280]: Broadcom Corporation BCM4352 802.11ac Wireless Network Adapter [14e4:43b1] (rev 03)
Subsystem: ASUSTeK Computer Inc. Device [1043:855c]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort+ <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 17
Region 0: Memory at df400000 (64-bit, non-prefetchable) [size=32K]
Region 2: Memory at df200000 (64-bit, non-prefetchable) [size=2M]
Capabilities: [48] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=2 PME-
Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [68] Vendor Specific Information: Len=44 <?>
Capabilities: [ac] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop+
MaxPayload 128 bytes, MaxReadReq 1024 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <2us, L1 <32us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk+
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR+, OBFF Via WAKE#
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR+, OBFF Disabled
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt+ UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 0f, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [13c v1] Device Serial Number 54-27-00-ff-ff-00-00-01
Capabilities: [150 v1] Power Budgeting <?>
Capabilities: [160 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
Status: NegoPending- InProgress-
Capabilities: [1b0 v1] Latency Tolerance Reporting
Max snoop latency: 71680ns
Max no snoop latency: 71680ns
Capabilities: [220 v1] #15
Kernel driver in use: wl
BLUETOOTH INFO
/>$ usb-devices
T: Bus=03 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0b05 ProdID=17cf Rev=01.12
S: Manufacturer=Broadcom Corp
S: Product=BCM20702A0
S: SerialNumber=54271E328D4F
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
As you can see, my vendor id is 0b05 and my product id is 17cf.
I'm on Kubuntu 14.04, so I followed the instructions posted at:
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
to get kernel sources, edit btusb, recompile, and reinstall. The *CRUX* of this step is pretty distribution agnostic, so just follow the download / edit / recompile / install documentation for your own distro to edit btusb.c and things should go swimmingly; below are ubuntu-specific steps. The change I made was simple, and probably not worth it, but basically I just did
mkdir ~/LINUX_SOURCE
cd ~/LINUX_SOURCE
sudo apt-get build-dep linux-image-$(uname -r)
apt-get source linux-image-$(uname -r)
cd linux-3.13.0/drivers/bluetooth/
I then navigated to ~/LINUX_SOURCE/linux-3.13.0/drivers/bluetooth/btusb.c, and found the section with the comment heading:
/* Broadcom BCM20702A0 */
which looked like:
/* Broadcom BCM20702A0 */
{ USB_DEVICE(0x0b05, 0x17b5) },
{ USB_DEVICE(0x0b05, 0x17cb) },
{ USB_DEVICE(0x04ca, 0x2003) },
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8143), .driver_info = BTUSB_BCM_PATCHRAM },
and I changed it to:
/* Broadcom BCM20702A0 */
{ USB_DEVICE(0x0b05, 0x17b5) },
{ USB_DEVICE(0x0b05, 0x17cb) },
{ USB_DEVICE(0x0b05, 0x17cf) },
{ USB_DEVICE(0x04ca, 0x2003) },
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8143), .driver_info = BTUSB_BCM_PATCHRAM },
Then:
cd ~/LINUX_SOURCE/linux-3.13.0
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic
cd ~/LINUX_SOURCE
sudo dpkg -i linux*.deb
sudo reboot
This alone wasn't enough to get things working, and shortly after getting to this point, I found this topic. After reading through it I headed over to:
http://support.asus.com/download.aspx?S … Jz1yusKO7u
Downloaded the latest bluetooth drivers, opened up bcbtums-win7x64-brcm.inf, searched for '17cf', found the relevant section, which referenced the file:
BCM20702A1_001.002.014.1443.1469.hex
I found this file in the bluetooth drivers for Windows that I just downloaded from support.asus.com, the contents were:
:020000040009F1
:280000000108006999994204204EB1FD0400FFFFFFFF4006000000A0027020020A00280009000000000000001D
:FB002800411A0042726F6164636F6D20426C7565746F6F74682044657669636500980100035C0100017206000300000800019304002400000068040012000C006A3600030011000000B0000000A0000000420000005310080480000000900000006200000072000000C0000000D000000022000000320000007C04000100000209080068000F00030000006F210002331F05CF000000AA147F8C00AA00800A9200000000140000000000006C584E6CA1040000000080690200BD055D0C000A64E6B000008898425A33435F09003C280100040004F70C0A6F0098160800C600F3025D0066033000C900E10268005C033600C300E2026A0053033C00C200E10254
:FB0123006C004E034100C500D60272004A034300C300CE02790042034800C500C00283003A034E00C800BF0282003B034E00C900BC028400370352000808070707070707060606060505050502C05C0194FC0E00FFFF00005E02000030FC0E00FFFF0F006304000000FD0E00FFFF0F006802000088FC0E00FFFF0000000200002CFC0E00FFFF00004904000070FC0E00FFFF00000B09000074FC0E00FFFF00002E010000D8FF0E00FFFF000062190000D0FC0E00FFFF000020C90000C8FC0E00FFFF000038850000DCFC0E00FFFF00001CC80000CCFD0E00FFFF0000048000005CFC0E00FFFF00000200000020FC0E00FFFF000019210000E0FC0E00008000EE
:FB021E000000000000C0FC0E00FFFF000022000000948F0800FFFFFFFF00100010988F0800FFFF0000001000009C8F080000FFFFFF00040404CCFC0E00FFFF00002B45000078000F00FF0000FF0500000030010F00FF000000050000008C000F0000F0FF0F0000800034010F000F000000070000001C010F000000FF000000250074000F00000000FF000000300C010F00000000FF00000030B0010800FF0000000500000068000F00FFFF000003000000D07B0001040A08FC0E00FFFF00002E3600000CFC0E00FFFF00002CAE000010FC0E00FFFF00002AAC000014FC0E00FFFF0000A222000018FC0E00FFFF00001D2000001CFC0E00FFFF00000D15000007
:FB03190020FC0E00FFFF0000858D000024FC0E00FFFF00008311000028FC0E00FFFF00000001000098FF0E00FFFF00003E410000C3180012691418310870047836047430607180764A3108290B7E07CF0900100F0C6EF0B009F060D10900010403036B1420206B1A2400FF0108080410000EFC0CF80AF408F006EC04E8020410000EFC0CF80AF408F006EC04E8020301000182D600040602020A233C5A6E7D80008000800080008000800080028002800280028002800214FF18880AFF610000000000000000000000000014FF18820AFF610000000000000000000000000014FF18000AFF610000000000000000000000000014FF18080AFF610000000000D2
:FB041400000000000000000014FF180B0AFF610000000000000000000000000014FF18100AFF610000000000000000000000000040FFFF68027B0000000040FFFF68027B0000000040FFFF68027B0000000040FFFF68027B0000000040FFFF69027B0000000040FFFF69027B0000000082D600FF0602020A233C5A6E7D80008000800080008000800080028002800280028002800214FF18880AFF200000000000000000000000000014FF18820AFF430000000000000000000000000014FF18000AFF660000000000000000000000000014FF18080AFF660000000000000000000000000014FF180B0AFF430000000000000000000000000014FF18100AFFE2
:FB050F00200000000000000000000000000041000000007B0000000041000000007B0000000041000000007B0000000041000000007B0000000041000000007B0000000041000000007B000000008612000413004008000040130001000180FF000113C15E0044041422A244041422A23B04B104B204B304B404B504B604B704B804B904BA04BB04BC04BD04BE04BF04C004C104C204C304C404C504C604C704C804C904CA04CB04CC04CD04CE04CF04D004D104D204D304D404D504D604D704D8280C000B0400143A09000B0400043B09000B04004C3D0900081D00005018010082F002FD0E005842090030B4201CFFF7C8FF30BC7DF704FB0819000108658F
:FB060A0001007DF0ADFE0A0066420900FFF7A7FF82F767F9000008250002B0DB010077F03AFD160028560900281CFEF72BFE281C5F3000210170391C321D88F7BBFA080F000384E0000030BD00B50000000000000817000488E0000086F0AEF90800E843090000F002F800BD0000081D0005C46200008EF0BFFB0E00464A090001B4FFF769FF01BC71F743FC000008150006586600008EF0F2F90600404A0900FFF796FF30BD0B0400E64B0900081F00074848000090F07EFD100048530900A56498231D53201C00F002F86FF77BFA0B0400104C090008150008C08400008CF000FF0600C4520900FFF7A6FF30BD08350009B47702006DF089FD2600CA5209DA
:FB0705000002B421684907002905D061684907C90F301C92F7F1FB02BC002902D0F06992F766FA92F768FA080F000A24B500000FE0C046000000000000080F000BC44F000010E0C0460000000000000867000C1CF0030056F068F95800F052090070B5061C0C1C151C002B21D104A8008840281DD105A80088202819D15A2917D8081C15D005F0CAFC002811D1032D0FD02204121408210748002305F0C7FC002806D1221C291C301CA9F72FFF012000E0002070BD18650800080F000D988000005808042B0000000000000817000E680C040054F086FB08007853090000F002F870BD00000819000F64D4000088F00AF80A007C540900281CFEF77FFE78F7C9
:FB08000004F80813001008D6000087F03DFF04008654090078F7C2F8080F001180DA0000C046C046000000000000081500122452000090F031F906008A54090000F001F8F0BD0B0400EC55090008190013845C02006FF0DBFC0A003E5609009B005859EF1890F720FB0817001464F8000085F0F0FE08004856090000F002F8F0BD0000081700153CF5000086F0F0F808002057090000F002F830BD0000082F0016C4F6010076F06AF820009C570900054B30B4054CE57949190C06211630BC195489F78BFFC046903408008C03080008170017487C02006DF0B8FD0800BC57090000F002F870BD0000082B0018D4BA000089F0AEFE1C00345809000AB4201C02
:FB08FB00311C00F009F80ABC012803D0042B01D176F746F976F747F9081F00192CF0000086F01DFC10006A58090001B484F723FB01BC00F024F879F7DBFB0825001AE4A203005BF0C9FA16007A580900002803D000F007F8002802D10120A4F758FDA4F72EFD0817001BC06A02006EF006FF0800D058090000F002F830BD00000823001CC47202006EF0A4FB1400105A090008B4301C0122012300F004F808BC91F755FC00000817001D2C6A01007FF0CEF80800CC5B0900FFF7DDFF00BD0000080F001E587B02006EF050F80000FC5B0900087B001F0C7702006EF098FA6C00405C0900F0B5061C0F1C93300078002803D00B795B08072B24D17CF7F8FE049C
:FB09F6001C0C301422391D051CBEF78EFE7268002A03D0291C301CC5F71DFE3368E3770023A37709490868002804D00368236004600C6001E00C6024600121890403480022B7F7F0FDF0BDC046ECC40800FC4408000815002098AE02006AF008FF0600AC5C090000F00AF870BD081700210C13010084F0D1FC0800B25C090000F035F87BF72CFB08190022FCBE020069F0DDFE0A00BA5C0900281C00F03BF896F721F908230023B47102006EF0CAFD14004C5D090002D0E86991F732FA281C211C00F002F891F744FA081F00249C6E02006EF074FF1000885D09000FB4201C00F004F80FBC91F787F80000081300251CF0000086F0C8FE0400B05D090079F73F
:FB0AF1003BF9081700262453000090F0F0FD0800085F0900FFF75AFF30BD0000920600A3008000141908270027A06D020071F0FAFB1800988509000198311C3A1CFFF7C1FFFF2801D18EF713FC8EF7A8FC0000080F002834C40100C046201C000000000000081700295845020073F0FCFE080054830900FDF73BFF8CF739F90817002A6847020071F057FC08001A60090000F0AFFB8EF7B2FB0817002B7854020072F058FF08002C830900FFF737FA8DF7B3F80817002C0C57020072F012FE080034830900FFF760FA8DF736FA0817002D4C58020072F076FD08003C830900FFF706FF8DF79DFB0817002E5C46020073F07EFE08005C830900FDF7E6FE8CF744
:FB0BEC008BF90817002F34AE01007DF04AFB0800CC84090002B0FFF757FF70BD08170030086E000091F09CFA080044830900FFF7D3FB6EF79AFD08170031B8AC02006DF022FC080000850900FEF790F892F710FC08170032884B020071F04BFA08002260090000F04FFC8EF7DDFD08170033C449020071F031FB08002A60090000F06FFD8EF7CFFC08170034202E010083F007F908003260090002F0D3F87CF716FF08230035BC65010082F02CF81400188609000FB5201CFFF7D4FF0FBD37490B687DF7CBFF0000082B00363CBB02006CF0E4FC1C00088509000FB4201C311CFEF7E4F8002802D00FBC93F71AFB0FBC93F71AFB000008170037A46301007FF2
:FB0CE700F035FE08001260090000F0EAFE80F7D2F9081D003808F0000086F0F4FF0E00F45F09000FB4201C00F0A8FD0FBC79F70CF8081F00396CE8000087F0C9FB1000026009000FB4381C00F0A1FD0FBC3C1C78F737FC0817003AB473020070F0CAFF08004C830900FFF701FD8FF7C1F80815003B2C6B01007FF085FA06003A60090002F0F8F830BD0817003CD0ED000087F036F908004060090002F011F978F708FF082B003D1871010081F024F91C00648309000FB4FFF7D2FF002803D00FBC00207EF71EFF0FBC041C436B7EF7CEFE087F013EA444000094F0CAF970013C88090000B528490B6826490B6024490B6822490B601E490B682D490B60434B79
:FB0DE20043490B6034490B680120C00303430B6040490B78002B04D02F490B68400303430B602D4A13685B085B0013603A4B3B4A1360B0F766FDB1F78FF9B1F7DEFCB1F784FE0D21364802F02DFA364A9068002803D098F78FFEB0F72BFC2448244A11684160244A60E0C046C0B00800FFF2011AA8AF0900848FB002D08B0E00A0800E00A8B00900148B0E00ACB009006CE50500B0B009008C15080023870900538709002D880900A9870900158809005C000F0094830E00FF00FFFF608B0E0040230001E08A0E00E02C0800A4860E0088B2080005000080850000801C800E0014800E00848F080004830E00108B0E00C8FC0E00C42C0800CC2C0800D02C0825
:FB0EDD0000C82C0800D42C0800D4FF0E00BC8B0E00AD020000CC8B0E001CCD080010325476D48B0E00009D0800ECCC080011684161054A11688160054A13680360044A1368044A136000BDC046D02C0800C82C0800D42C0800D4FF0E000861003F0044000094F014F952002C86090010B5A448002383700423437001230370A14BA2480360A24BA24C2360A24C2368A24C2360A24C2368A24C23602C22A249A248BCF791F9A148A14C2060A149C160A1494162A1490161A14B8361A14BC36110BD080F0040D0B80400A5F809E00000000000000817004120BA04004DF084FA08002C8F0900FFF7D4FF30BD0000081700423069040052F008FC08004491090054
:FB0FD800FFF7C4FFADF710FC08190043545D040053F0FAF90A004C910900B3F788FEFFF7B2FF30BD08190044E0A504004EF0B9FD0A005691090000F003F803B0F0BD000008170045E882040050F088FF0800FC91090000F002F830BD000008170046B0B104004EF0A2F80800F892090000F002F830BD0000082B0047DCC004004DF06EF91C00BC930900FF233D3343430448C0189F300078002800D101207047C046349D0800081B004894AC04004EF0AAFB0C00EC930900201C00F003F8B1F752FC0000081B0049ACAC04004EF0EAFB0C0084940900201C00F003F8B1F712FC00000823004A3CC104004DF04CF91400D893090029187F231B02FF339D42003B
:FB10D300D35D1EFF23B2F7AAFE0817004B981B030067F0ECFC080074950900FFF7D2FF30BD0000082B004C1C7B040051F046FD1C00AC95090004910FB4301CFFF7E3FF012802D10FBC05B0F0BD0FBC062DAEF7ACFA081F004D18AC04004EF012FD10004096090003D1FFF7C1FFB1F7EAFAB1F7E9FA0000080F004E1C730400C046C0460000000000000817004F807A040051F0ACFE0800DC9709000420AEF75AFD10BD081700509882040051F0A4FA0800E4970900FFF7CAFF30BD0000081700516CA804004FF072F8080054990900FFF74AFFF0BD00000815005294A304004FF07EFC0600949C0900FFF7E8FF10BD080F00530CA3040000F01DF80000000030
:FB11CE000000082300544894000090F027FC14009A9C0900012B02D10020287001E06FF7DCFB62686FF718FC081D0055A4CC04004DF003F80E00AE9C09002878B1F779FF201C00F001F830BD080F0056C4A904005E4A2068000000000000080F0057A4630400FE23F533000000000000081F0058D472000092F0FCFC1000D09C0900301C049900F004F8009988426DF7FCFA081700599897040050F0C8FA08002C9D0900FFF79FFEF0BD00000817005AE49D040050F088F90800F8A0090000F002F8F0BD00000815005BD099010080F0DCFC06008CA30900FFF7B2FF00BD0815005C68E901007BF013FD060092A30900FFF7C2FF00BD0821005DA4E901007B1E
:FB12C900F0F8FC120098A309000FB4301CFFF7C6FF0FBC0A22311C84F7FFFA0825005EE896040050F05FFE1600AAA30900281C00F008F8237E002B01D0AFF79AF9AFF7AAF900000817005F70EF00008BF07CFA08006CA40900FFF7C2FF74F784FD081D0060645F040054F086FA0E0074A40900607D01386075FFF7C7FFABF774FD0817006114FF00008AF0B5FA080082A40900FFF7E2FF75F74AFD08290062D07E000092F0DBFA1A008AA4090009D5281C112806D0082804D0002087F712FD6BF726FF30BD000008170063EC6B040053F09CFC080028A50900FFF7BCFF10BD0000087700647461030064F0DCF9680030A5090010B500248BF7C4FD012803D3B5
:FB13C40009D0022820D102E09EF70EFA01E0A3F776FD041C18E00D490B78002B14D00C4A106803680B4A13600B4A1378002B0BD08B784978002B03D04B00FF21013101E04B00802199400160201C10BD481B0800E40A0800AC5808003A010800080F00657C640200131C036000000000000008570066B462020074F070F9480098A5090000B50D490868002804D003280FD0052811D104E009480378002B0CD007E0084B18680122002199F7E0F89BF7B2FC05490B680120186000BDB0C80800D1CA0800F40A0800E40A0800081B0067C0B903005EF00EFE0C00E0A50900211C00F00BF8061CA1F7EEF9081F0068B49D030060F01AFC1000ECA5090002B40008
:FB14BF00F015F802BC0C68E3069FF7DEFB081900697847000096F0EAF80A0050A90900381CF9F711FA69F712FF0819006AAC47000096F0D5F80A005AA90900281CF9F72AFA69F72BFF081B006B3CDB00008CF012FF0C0064A9090081B000F003F873F74CF900000827006C405B010084F086FD180050A60900002E02D00020E05504E0E35D002B01D0013BE3557BF785FA081B006D50A704004FF00AF80C0068970900381CFFF7E7F902B0B0F7F0FF0817006E58A704004FF00CF8080074970900FFF705FAB0F7FDFF0821006FB03C010086F0D4FE12005CAA090001B4301C00F010F801BC74F72DFB79F723F9081D00705CB503005FF087FA0E006EAA0900E3
:FB15BA0001B400F00FF820BC6B01A0F772FD08170071A8A0030060F0E8FC08007CAA090000F015F89FF72EFB082B0072CCB203005FF004FC1C00D8AA09001378002B07D103B400F008F8012803BC01D1A0F7F2FBA0F7FCFB0000081B007374B403005FF04AFB0C000CAB090000232B7500F02CF8A0F7B0FC081D00741C69020074F0FCF80E0018AB090003D100F027F8A1F763FE8BF7FEFE0827007530BB03005EF0F9FF180026AB0900012D03D1002E01D100F05BF8A068A1F77EFD0021A0F7FCFF082700760862020074F099FC18003EAB0900201C08B4019900F01BF808BC9C4201D08BF75DFB8BF767FB082500779CBC03005EF05BFF160056AB09001B9D
:6416B5000705D400F049F8002801D1A1F79DF8A1F7C8F800000A05002DCB080001081B007830AB030060F068F80C0004AC090005B400F003F805BC9FF792FF0817007998C803005EF0CCF9080034AC090000F002F8A1F756FE5B0900FD0344042804080803FE0000F9
:FB38E000F0B5514C514B52480360524B52480360524B5348036002F00BFBFF232D335148038000F0B5FC00F069FA00F019FC00234D48037000F074FB00F086FB05F0FEF84A4A151CE4354A4B2B604A4E336802263343484E33604848036880218B4303600023464E337046490B1C2333454E3360454B464E3360464B464E33600B1C1233454E3360454B464E33604648464B474E3360031C0E33464E33601223454E33700B1C1133444E3360444B454E3360454B454E3360454E3160454B464E3360464E3368464E3360464B464E3360464B6B67464B061C071DC8C40E36454FC8C4991C0E30061CC2C4434BD3620023424E336006F03AF9414B6B65E4209F4C
:FB39DB00F743FC0007000F042805D13F20C0433D4A5073000A907300233B490B703B48E8623B490B683B490B6002F0F0F800233A490B70F0BC08BC184700B538483849086038480B49C86400F0A1F900BD2CAE0900BD420900BCC80800D1420900F0C40800B94209000CC508008002080081B10900A0190800114409006C010F0040150800FD0708001E45000098AE090020C900009CAE09001CC80000A0AE0900A4AE090038850000A8AE09005E04000044050000881308008C13080090130800781308000EC90000801308000AC800007C130800841308002685000074130800D8FF0E00ACAE090062160000B0AE0900C54909004205000062190000519683
:FB3AD600090094AE090085570900B813080020B1090041A2090028FC0E00E803080021B10900E138090090000800B155090070B500200F49104B4B6114E06B099C00EB06DB0E01259D400B592B430B5143004C69C50052195268012632432725AD03AA1A1A530130054AC3009D58922DE5D370BDC0464C1B08000CB109001CAD0900002070470020704700B5002812D0AC231A581204D20E0F290ED1012A03D0042A01D0062A02D178F70BF803E0002A01D0032A01D1012000E0002008BC184700000020704710B5037814490B700620AAF739FE041E10D00E230370042343700023437101238370F723C370FC230371AAF753FE201CAAF72AFE012010BC089E
:FB3BD100BC18478105890D030AFC201840FC2803D1F72901D1034800E000207047C04620B10900993B090004280AD106480378002B06D0054803785B065B0E0370012000E000207047C04620B1090039C3080030B582781202437813439A05920D1B0AFC252B400C2B0CD1032A03D01A2A00D080E003E006F045FD01207CE002F078FC78E00124FC2B63D1342A49D0B52A20D0B62A21D0C22A22D0C32A23D0C62A66D32CD0C82A2DD32FD0CB2A30D9D02A1FD0E62A0BD0F52A18D0FA2A1CD0FF2302339A4227D003339A4251D126E004F086FE4EE002F0BFFACFE702F0F6FACCE702F032FBC9E702F072FBC6E702F0DBFBC3E702F09AFBC0E702F000FCBDE7D4
:FB3CCC0006F037FDBAE706F071FDB7E706F0AEFDB4E797F7A7FDB1E704F064FCAEE702F02AFCABE718490869C00122D5174A106920431061101C117D8B0706D5FD231940017500207EF74BF813E0002103207DF7A8FF0EE0202B0FD0042B0DD1132A02D0192A06D102E002F025FC03E002F03AFC00E00024201C00E0002030BC08BC1847034804490860704754200800CC2F0800213C090018C90800002070470148024988607047653D0900201A080030B5051C7BF7A2F9041C281C8BF731FA8749201C2830062206F07CFF00280BD1844C2560012363717F21C943A01D072206F078FF00232371002030BD10B5041C0120A040C1437C4803680B4003608A80
:FB3DC700F765F978480368A34203D1FF2303600023437110BD75487649C8607047F0B583B0041C012906D164300023C372251C9435AB73EB736F4803689B079B0F032B02D072F770FAC8E00023A381E07B484000D1B6E071F70BFD002803D1674803691B0101D5012100E00021271C64373E1CFB6880208343C8010343F3600C365F4A1078431006D0C3071B0E31688020814319433160594803691B0102D4381C95F7E8F9BB69002B02D03B681B063BD4338868460380E37B012B0DD0251C94356B7B002B10D02B88042B0DD3EB7C022B0AD3AB7D002B07D1A72303201855009B78208343002106E00121E974009B78208343082003431F2080028343880236
:FB3EC200034300931B041B0C3F4A1360012030723B4A13691B0152D400984006010F00231A1C012095F7C8FB45E0E07B002802D1A72301221A55012804D1E37C042B01D073F7BBFCF37A002B06D00023F372336801204002434033600121B172251C9435A97326480369DB0002D5201C88F7CBFD338824490B60B0884860381C71F7EBFC30684006030F2048C05C3072431EA381E37B002B0FD10121387F81401C4A1068084008D1E37C042B05D019480378AB7519480378EB75114803691B010FD5201C95F721FF0BE0271C64373B727B7271F779FC636C002B02D05A231B5BA38103B0F0BC08BC184709C10800B4AE090000040800E53D090000020800181E
:FB3FBD008B0E0054200800DCC80800CC8A0E009EBB0500B4010800F5010800F601080030B50D1C041C76F7BFFE6B075B0F012B05D1E37B002B02D1A07B9DF7FEFD30BC08BC184700B52C2204490548C0F7BCFC034804494161044B186000BD0CBD0500C4AE0900DD3F0900E402080010B53F4C3F4B1C602C223F49201CC0F7A5FC3E48606210BDF0B5041C051C876A28353B4B42331878002866D1201C012173F719FA061E4BDD022804DB201C78F793FA002859D1618C8B1F9E4223DA304A13689C420BD0391CAB310878013800D30870731C5910201C78F720F830E0731C5810E37B002B05D07B6C002B02D06B7F002B25D02F89B84222D36A89002A06D1AE
:FB40B800A389002B03D1201C72F727FE18E0BA4200DA3A1C904201D90C2310E04B23A27C1B5D9A420CD102280AD36B7F002B05D014480378994201D9282300E03823A374211C4D31087800280FD00238087000060BD1E37B012B02D0237D0C2B05D0321C201C0523022178F77CF9F0BC08BC1847F0AE09000003080074BD0500414009006C210800F402080000B52C2216491748C0F71CFC1548164B18601649016100BD30B50D1C041C79F764F8022D09D16B23185D002805D0201C88F74DFB201C88F785FB30BC08BC184700B5011C6831CB78002B07D04B7A002B04D18B78002B01D088F75CFB00BDC0462CBE05001CAF0900300308005941090000B57D73
:A541B300F79AFA00BD10B5041C031C9A3313201870E3691B06DB0E0A2B03D10A21201C7CF774FA201C82F749FA201C82F774FB201C82F760FA20687AF7BCFE10BD30B5011C2831041C7AF7CBFC051C1ED0F82043595B0703D5281C02F06CFC06E0EB699B021AD40E490B681B0403D5281CFFF7CAFF12E0E369834310200343E36199230B201855201C82F751F906E05023044988881853201C93F7C6FB30BDC0468C070800D420080027
:FB42700000B52C220B490C48C0F784FB0A4B0B48036000BD0A49CB6ADB0007D5094AD3885B00418C8B4201DC012100E000215A3001707047B0CB050048AF0900F4030800542008009420080000207047087B4008072801D10148886000207047355B090030B5041C002964D0012953D140051BD421E0344D291C3448B8F7A9FF2988281C262902D104F015FF0EE0042902D17DF7F4F909E00F2902D105F014FD04E089002A4A8958C7F7CFFA2748B8F7A8FF0028DFD0274B1C4020020AD57BF7D1FE0121C905244800230122B8F769FF224B1C4020042ED521490868037921490B7000230371B3F710FF7AF79DFE002803D11D48437D002B09D01C487BF7CF36
:7D436B00FE82F718F81321162006F056F801E07BF786FE174B1C400EE002290CD1C00308D510490878012804D10D490B681871B3F7E1FE7CF774FF201C30BC08BC18470D480D4908607047C046F4440800284508009CBE0500FFFBFFFFFC440800FFFF7FFFC04F080021B10900E44E08001C450800FF7FFFFFD1420900F0C4080009
:FB43F00000B5431E04490B6004490B78032B01D1C0F782FF00BDC046E08A0E0038080800F0B587B0061C0491081C00210391A34C2064211C4431009100238B70A0488568002D00D16EE2AB7D002B09D0012203920023AB756361237810208343237006E06069002803D0012E01D971F79BFE22691D27FF03002A50D0607A012803D19389002B4AD047E08F4B1B5C002B43D1BB68DB0742D4137D092B3DD204281AD1012E18D196756261237810200343237023683B6085490B687233187802282DD0002382490B608249086882490B6803600B68036022E002280AD1012E08D196756261237810200343237023683B6015E0032803D179498B78022B0FD0067A
:FB44EB002801D0032805D1012E03D1BB689B0600D5C0E1122803D0102801D071F7C5FD6A4B985D029000287DD00123DB07334301936B4B6C490868986301236B490B606B490B689B0C9B040B600B6869490868034366490B6001230099CB7066490B6866490B6066490B6866490B60287C1A281DD164490B6864490B6064490B6864490B6064490B6864490B6064490B6864490B6064490B6864490B6064490B6850490B60634908686349086063492DE063490B6855490B6062490B6855490B6061490B6855490B6060490B6855490B605F490B6855490B6019280ED1FF2017302B562A3309DD5B490B683E490B605A49086851490860594908E059490B688A
:FB45E60039490B60584908684C4908605749086857490860A87B2318042801D3187800E0205C6F2290431870C2E0A87B225C0F218A433107090F0A43225423180428049802D38107101C01E081071878490E6022904308431870234B464908689863009AD378002B00D1A1E022490B689B0C9B040B600B684049086803431D490B600023D3703D490B681D490B603C490B681D490B603B490B681D490B603A490B6821490B6039490B681B490B6038490B681B490B6037490B681D490B6036490B6809490B6035496BE0642C08006C210800ECBB0500DC02080060000F00AC2C080044020800882B08002CFC0E0060020800E08A0E00B88A0E005C0208006CBE
:FB46E100130800D8FC0E0070130800E0FC0E0098AE0900CCFC0E00A0AE0900DCFC0E009CAE0900D0FC0E00A8AE0900C8FC0E00A4AE0900D4FF0E0044AE090048AE090030FC0E004CAE0900781308007C1308008013080074130800841308002CAE090030AE090034AE090038AE09003CAE090040AE0900D8FF0E00B82C080048020800BC2C0800C02C0800C42C0800C82C0800CC2C0800D02C0800D42C0800D82C0800DC2C080008689349086093490B6893490B60002101912868826A281C0021C7F787F8002810D026231A5C002A0CD08368002B09D00298002804D0802301981843019001E0012200E00022237880208343D001034323702020049908402A
:FB47DC0001D00120C0037F4908600499090704D47D490B68802083430B600499880801214140A27880208243C8010243A2702868826A281C0321C7F74DF874490B78012B01D077F7EDFF05A9714A13687020034018099DF73AF82369002B14D0637A032B11D189F79BFB002806D16A480368032B02D00368062B06D12B7C122B03D101230098837058E005988007800F06D003280ED1069B60490888834209D30398012800D1656171F708FC012300994B7043E00820B860A87B786223683B603B1C1833221D03929207920F02D1039909680FE00399891A0391D2000968D140049120218A1A03994968914001B40598014301BC1960BA69331C103B042B0D41
:FB48D700D2474B1340FF22013282401343BB61102E07D1444908684449086002E040481040B8610198002800D07861E5602672002300990B704B70281C8DF74FFC012007B0F0BC08BC1847394B3949087A185C39490B68002814D00120800303430B60364A136836480340364A117849020B43354A1360354A1368302083431020184308E0324803400B602C490B682E490B602E4908682F490860704710B5254C234B607A185C002802D071F7F9FE15E06069002801D071F703FC27490868637A012B01D1254A00E0254A13680360116801600023234A136071F70EFE002322490B60E3602361637244340120207010BD002803D10348036803480360002028
:6E49D200704730FC0E00ACAE0900D8FF0E00648B0E00A4860E00D4C1080024860E001C840E00E4B60800FFF0FFFF9406080064FC0E00ECBB0500642C0800808B0E00B02C0800FFC1FFFF9013080088FC0E00B42C0800FFBFFFFFCCFD0E00AC2C0800400208004402080060000F0018800E0023
:FB4A540070B582B0061C65480168890602D5022073F7B9FB624C2568A3682360002D26D0002E18D19FF78EF9002814D0C30703D52A68916900290BD1430703D52A68D169002905D1830706D52A68116A002902D0281CC6F706FF9FF792F9011C2A685269002A04D0002802D0281CC6F7F7FEA0680026A84218D0002D21D02A681269002A03D0281C0521C6F7E9FEAE8123699D4200D126612B7D092B11D3281C74F782FD281C74F707F90AE0002808D06369984205D166613B4800220121B8F7B7FE3A48C16E002904D0A368002B01D1C6F7C9FE71F750FBA06800284BD08681037D092B20D26369984205D166612E4800220121B8F79CFEA068A84206D101E8
:FB4B4F00684968002902D00523037508E0017D032901D0042905D101684968002901D0C6F7A2FEA0680223037501680A69002A02D00221C6F795FEA068807B1D4A136870210B401909884216D169469CF784FE71F7FAFB002801D0174800E01748028800998907890F04D0032905D1019B934202D33F2301201855A0688DF77AF901208DF78AF9A66066603C3426716671012002B070BC08BC18470948044988617047C046C4C408006C2108000C2D0800201A080024860E006602080064020800554A0900A248A3498865704700B5A24A9007800F01D1116808E0121AC0001368C3402021081A516881401943C90F9B4801709B4A1068002817D09A4A02603B
:FB4C4A009A4A82609A4AC2600123994A13700023994A1360994A1360994A1360012902D100F007F802E04068C6F71FFE08BC1847000000B500F003F808BC1847000010B564238F48037000238F4803608F4803608F4C236000F04FF8804A9007800F01D1116808E0121AC0001368C3402021081A51688140194301204007014015D084490B68001403430B6083490B68834803400B6004390B680120800303430B607F4B80490B6003037F490B606B4A9007800F01D1116808E0121AC0001368C3402021081A516881401943C90011D5774C2368002B02D0201CB8F79FFB7449201C00231A1CB8F77AFB72480168201CB8F780FB8FF7FCF910BD10B56F4C2395
:FB4D450068012423436D4C236001239B036C4C2360534A9007800F01D1116808E0121AC0001368C3402021081A516881401943090105D561480368022003435F480360604800218160F421C16020210161E8218161E9214161102141624021C161016205239B04036010BDF0B585B0061C0C1C554D021C002100910190031C02AF19C70F1C01235B02514C23604E4C2068000C000468602960049C242C02D0252C1FD102E008240A230AE070321278022A02D10824474A01E00124464A1178012322011B031A432A600B071B0D18436860F37B002B00D139E10122D20302436A6034E1049B5B003C481C5A3C498C4211D180239A5D3B48135C1B013A48181858
:FB4E40008388002B07D0364C1034837A012B06D1334C203403E0002C01D12C6017E1301C8DF72CFB002800D0402430480368002B07D0602C01D1E024B0E0702C0BD1D024ACE00498042801D0022804D12B680120000403432B60302C51D149E0194C0900A0190800C005080030C80800440608007D4C0900AD4D0900A1500900B805080034C8080038C808003CC80800D005080040C8080048C808004CC808009C800E0010800E00FFBFFFFFFF030000BC820E0010000C0068500800673D0200D405080070010F005C000F0074820E0034B109000C800E009806080090060800D8050800100100009005080024500800D4C408007023985D002802D0A74C70E3
:FB4F3B00344EE0502C0BD1336FDB052B6804D50120400403432B6043E0A1480340FAE79F4B30339C420DD101992031C87A002801D1071C31E00128FBD00228F9D003282BD1F6E7964B60339C4213D1039880304278002A01D1171C02E0022A00D10127837E012B00D10227437E012B00D103273B06D0E78A4B40339C4212D1029B28335879012801D0002800D1071C02990B8D58107F2801DC43062B603B062868184328602A6822437D4B70339C4203D023097D48C15C0091302C0BD17023985D002807D1301C2830037D807A19180906090E0091009803031A432A60F37B002B04D06B680120C00303436B60F37C032B06D1708CC306180F03026868184355
:FB5036006860402C28D169480378002B08D0301C8EF7B3FD03071A0A2B6813432B601BE00120C00410432860B07B9CF73BFC400860490860604A11689CF7CFFB5F4908605F490B68984204D2301C8EF776FD002802D00123564803702B68594803606B68436005B0F0BC08BC1847F0B582B00F1C051C0022009201908DF705FA514E002844D034684A48017800291AD1A87B9CF709FC4008474A1060474A11689CF79DFB464A1060464A1368984204D2281C8EF744FD00281BD001233D480370424B1C4015E06B6E1B0612D4012910D1281C8EF734FD00280BD1A87B9CF7E4FB4108354A11600023324A13700123DB041C432F480378002B03D001988DF76E56
:FB513100FE0090324B1C40009803071B0A1C433460042F01D0022F05D13368012109040B43012107E02B480378002B06D0336829490B40002133602648017002B0F0BC08BC18472549C37B002B04D1FF220632805C012806D108680002000A0122920602430A600B681848036070471C480378002B18D01448C16BCB0714D581691022114381610521C26BD20708D503680822134303600368934303600139F3D18169102291438161704710010000FFFFFDFF24060800B805080038C8080034C808003CC80800CC05080070820E00FFFFF7FFFFFF0FFF45C80800FFFFFEFF34B1090030C8080030B5041CC37C032B27D1037D0C2B24D11830437B002B20D1F5
:98522C0021490B699C4202D18B68002B13D0418900680B1858010509A07B9CF748FB854201D3281A03E0431B01200007C01A831F1648834205D3201C74F7C8F9201C73F756FE237D022B03D0032B01D0042B07D10F480379002B16D0201C71F79FFC12E00C480369002B02D0201C70F734FF06494123585C012804D0002804D10B689C4201D173F7C2F930BD6C210800FBFFFF07A42C0800642C0800A5
:20535800A823195C002903D0011C64318B8ECB86011CC36F6431002B01D08B8E0B8770479B
:FB53800070B5041C00253848436912219B0708D5364A1068364A106050304079122800D8011C43209DF750FF324BA360324B2361201C0830ABF7F1FD2168086063681D60ABF75AFE201C1030ABF7E7FD216808600420ABF769FE6061062801DAABF74CFE201C0830ABF7D9FD216808606368002018600420ABF758FEE060201C1030ABF7CCFD216808606368002018600420ABF74BFE6061E368C61A301CABF79BFE042817DD01350C2D14D0301C042E08DDABF791FE8100081A2169081802382061CFE7ABF788FE8100081AA168081A0230A060C6E7A16820690B1AE3614018C30F18184310236270BDC046181B0800D4CC08003CB10900FF03000001FCFF9C
:01547B00FF31
:FB549000F0B5444D2B68987B9CF71FFA46082B68996C301C9CF7B4F9041C2868011C94314A88002A10D094420ED9037D0B2B0BD00D2B09D071F783FA2B686433197F012000037BF755FF64E00B7D002B06D0CB88F31A1B041B0C9C4200D81C1CC36F6430002B06D00B89F31A1B041B0C9C4200D81C1C8A88B31A1A04120C944200D8141C0B881F1FBA4204D3CB7C022B01D30023CB74214E33889C4204D80020BA422ED303202CE073889C4201D8042228E0B3889C420BD9007F75F7A5FD002814D0037C112B11D115494B889C4203D829689431052215E08B889C420DD82968943106224A745E2383740CE0F3889C4203D829689431062204E029689431077D
:9D558B002200E0021C4A740B7E012B04D1531F012B01D804234B74F0BDB421080034020800EC02080010B5A4F7B7FA0B494B699B070FD50A48036801200343084803600A249CF734FC013CFBD1044803685B085B00036010BC08BC1847181B0800F0FC0E0010B5094C2C220949201CBFF7C5F90849E160084B1C6010BDC27B4A4002D0838C05490B607047C04640B1090034CC05000556090010040800CC8A0E00FB
:D0565000F0B581B0041C00210091C56D8726F600002D04D1301C9BF78AFF051E03D0301C9BF785FF0090264F3B68002B08D1301C08309BF77CFF3860311C0831BFF79CFC20480368002B0DD1301C08309BF76FFF1C4A1060311C0831BFF78EFC19480368002B07D03B68002B04D0002D02D00098002817D1E02300201851E565E4210B59DB0208D46358104803430B515022206807217EF7BAF90D480368002B0DD19BF752FF0AE0E5656060E4221359064883431351206807217EF7C9F9002001B0F0BD444408009C4408000000100060030800B7
:7457280030B5E4221358012109058B431350051C7AF70EF90024002800D0EC65E86D002802D09BF73FFFEC656868002802D09BF739FF6C60074D2868002802D09BF732FF2C60054D2868002802D09BF72BFF2C6030BDC046444408009C44080000231360012805D10123DB040B6007239B03136070470000CF
:7057C400B0B503685B011948C21880270F404906490E9068002827D00568281C041C002F06D0437B8B4201D0002300E0012306E0037B5B088B4201D0002300E00123002B0FD0A84205D1137C002B02D1D37F022B0AD0111C08319CF7A0FC201C9BF78EFE02E00068A842D9D1B0BDC0467C290800D9
:1A58500010B5002907D0041C71F77CF8201C6EF7E7FF012000E0081C10BD04
:4058900000B50D48B7F7EBFC00BD30B5051C00240A49A300C818C378AB4204D1A300C8180421BFF789FB0134082CF1D330BD00B50068FFF7EAFF00BDB85208005047080019
:FB58D80030B5104D0D24281C0022111C91F704F9281C91F7F7F82035013CF4D130236343094818182C23195C022904D1406A002801D09BF75FFE0134022CEFD391F7ACF830BDC0467C29080080590800F0B582B0051C0E1C041CB0346946207B9BF7B7FF2C482D4A1178431AF6000198991940182A4B984201D3032005E00121284B984200D30221081C009943185808031D5808860176092188301C9BF74EFF6788391C78F7CAF9381A4308AB80831958014009A0601422291C1B4805F09CF902B0F0BD10B5041C184908680007000F01280BD80B683F2000020340190A144A906EFFF7B5FF134A9378A37410BC08BC184710B5041CB3F79BFF0F498B7800C5
:3D59D3002B07D1A37C0B498878834202D0201CB4F76BFD10BC08BC18470E02000050AE0900A90300007102000000980E00A88B0E0038B0080074150800AC210800D9
:FB5A2400F0B584B0061C181C01AB07C300252C1C05F052F900902F1C0199002918D0F37F022B15D1337C351C002B01D00C3500E008352A68101E00D01068002A07D01168914201D12C6001E00B6813600C6014E0357412E00A6801928A4201D1F76001E013680B6001990F60002C04D0236813602260141C01E0141C1260F1680029E9D115E01A680193111C9A4201D1B76004E0136801B40298036001BC0F60002C04D0236813602260141C01E0141C1260B368002BE6D1002D0BD02A68002A05D0136803602B681860286007E02860006004E0F37F022B01D10323F377009805F0F4F812E02068051CA04201D1002401E0036823602F600399002904D00215
:AD5B1F009900229DF715FD01E09BF70AFD002CEAD104B0F0BD00B591F719FF08BC1847000070B5C369DB021AD5061C041C9034E278002A16D1002914D180F737FE051CB66C002E0BD0A0880C214843124941431248BFF744FB011C301CB7F75FFCE570012000E0002070BC08BC184700B50B48072105F0B4F80A48B7F764FC0A4A1368002B00D00123002B01D075F772F88B230648036000BD71020000D43000002C2D080020C50800EC2F0800EC8A0E00EC
:6C5BD40000B50121C90505480022B7F74FFE08BC184700000248034948607047FC440800D55B09009C45080000F002F891F7C3FF10B5041C8168002917D00868002814D0037B5B08132B10D1E37F022B0DD10A688A4202D10023A36001E013680B60002313609BF783FC0323E37710BDE7
:885CC40070B5041C0E1CEC300068002807D5E069C00104D5211C3C31201C95F793FCE06940021AD5656C07232B70FF236B70AE70211C2831E81C0622BEF742FE00236364E069012189058843E061EC210859400040080851281C94F7DFFE70BDC169012292051143C161EC2319585A07114319507047C169032252051143C161EC2319585A0711431950704764
:285D600010B50C1C0368002B0AD190F749FF002806D00121207F8140024803688B43036010BDC0467429080010
:185D980010B5041C04F09EFFE369012189048B43E36104F09FFF10BD11
:FB5DB40000B5FFF7F1F908BC18470000F0B5464A464C21685368994203D000231370537051604348434DAB78022B0DD1CB7B012B0AD180235B5C5B013F4D5B19DB699B059B0F01D05B252AE065683C4E33682B4021D03B4F3B683B4F3E6833432B4003D1A5235B5C002B09D04B6E1B0606D51378082B03D201331370857810E0304F3B68304F3E6833432B4005D05378013353705378042B02D300231370537045780A1CA4325378002B03D0C35CAB4200D91D1C5379002B02D183799D4201D1042209E083789D4201D1132204E0012203799D4200D103220A741C4A13681B0700D5C57890235858013015D0887B9BF71CFD40082368903319689BF7B8FC00F8
:595EAF002805DB236890330021C943196004E010490878854200D2051C291C206871F70FFF0C4803782B200355F0BDC0466CB10900B42108002C020800882B08007C290800B4010800B8C40800742908008C070800F4010800FC0108009B
:E45F100000231C490B701C490B70FF2341331B490B601B481B4908601B481C4908601C481C4908601C4B1D490B601D4B1D490B601D4B1E490B601E4B1E494B601E4B1F490B601F4B1F490B601F4B20490B6000231F490B700323DB021E490B800123DB021D490B805A231D490B6000231C490B707047C04684AE090085AE09008CAE09008369090064C808008F67090068C80800AF60090054C808002B67090070C80800DD74090078C808007CAD0900B0060800D584090000020800FF6A090060C80800A8AD0900AC060800777109007CC8080077B1090064AE090066AE090074AF090022B1090066
:FB60480030B5041C7CF7FDFC011C021CE0690004C00F1073032353730C32664B186800090225800704D5F42003599B0700D5957000234B60201C91F798F930BD30B5041C0D1C7CF7DEFC5C494B681A7BD207D20F0273052343738573584A4260011C201C91F783F930BD10B5041C0321FFF7E6FF201C00F028FD10BC08BC184770B5041C7CF7BFFC011CE2691204D20F027304234373F8231D59837B0126B34335402B438373F8263559AD07ED0F0226B3436D002B4383730C30002A0CD1414A537815785B199578EB18D578EB181579EB185279D31800E00023C3703A484860201C91F744F970BDF0B5041C374D00232B70C0690004314A51683DD534484211
:FB614300780378D3188278D218C3789B180279D218407983181806000ECB7B834220D020686EF73EFB071C04F0B7FD061C381C6FF7C6FF012120688140264803688B430360301C04F0B1FD20686EF7FAFA2878224A1378984218D2013028708FF77DF913E08B7BD807C00F9B07DB0F590001436970201CFFF785FF07E0897B8B07DA0FC907C90F201C8EF740FCF0BD00B5406800280ED0F82319580A04520ED30708D50F4B13407F22520291435A021143F82211508EF776FB00BDC046641B0800F4440800B36A0900E85008007B6B090074B1090064000800B4C4080051AE0900FEFF000010B5041CB34A1068C00702D4112323702FE00123B04A137008792C
:FB623E000002C9780843191C78F7C6FC002810D0F82319580A04520ED30716D4012313437F22520291435A021143F8221150490701D51223DEE7A04B19684906490FF42212589207920F914201D00C23D2E7283401212170FFF7D9FE10BD70B5051C0C1C0123964A1370031C283301201870924A10684006400F02281FD101F07DFC00281BD020790002E1780843012178F784FC061E12D0F830006840070ED5002388480370FF2388480360611D87480622BEF74AFB8FF7D4F8002802D10C232B700AE0F82290590122920210430821884303221043F822905170BD30B50123784A13708B7B002B01D1122337E00C1C734DCB782868002B05D00121084328BA
:FB6339006000F0EFF907E00122904328607148036871490B40036070482379037063794370A3798370607A0002217A084340106B4A1060C0006880E07A0002A17A0843684A1080607B0002217B0843664A1080A37B664A1380E37B654A1370237C6548037030BD0123574A1370554A1168194081735A490B78C3734B7803748B7843745D4A1168090A8174554A11684900C174090A0175534A11884175090A8175524A1188C175090A017650490B88437650490B7883764F490B78C3760E23C370704730B5051C0C1C01233E4A1370031C28330120187001F0D3FB002818D0E01C78F77DFB002801D00B2312E0FF2337480360E11C37480622BEF7A9FA3149FB
:FB64340008684006400F022819D18FF72DF8002802D10C232B7012E0E01C78F761FBF82319588822114303239943F8231950A17A0902627A1143324A51405E30018030BD30B5051C041C01231F4A137008790002C9780843191C78F7A4FB002802D112232B7017E05C21095AA173090AE1730834F4300068211C08318A07920F01D1086006E00870000A4870000A8870000AC8700623EB7030BD00B501230B4A1370C878002806D0174A1370022100208EF75EFA06E014490870002313490B708FF70BF900BDC046641B080022B10900BDC1080088060800B7C10800301B0800CDFEFFFFA8060800900608007EAE09007CAE090068AE090084AE090085AE0936
:FB652F0000940608000633000078B10900BFC10800704730B5051C041C0123234A137008790002C9780843191C78F73DFB002802D112232B700BE05C21095AA173090AE173F83000684007C00F20740323EB7030BD30B5051C0C1C08790002C9780843012178F721FB002806D0F8300068400702D50C232B7003E0211C281C95F7DFFB30BD30B5041C0D1CC81C78F7ACFA002806D0F8210A58520702D50C23237003E0291C201C95F724FC30BD22B1090030B5041C0D1CFF20062194F7EEFA002807D016238370C470210A0171457194F76FFA30BD30B5041C0D1CFF20062194F7DCFA002807D018238370C470210A0171457194F75DFA30BDF0B582B0041CFC
:FB662A000F1C00230193081C78F747FD061CC069400409D56B4601AA311C4C31301C283097F7C4FD002831D0032094F7C3FA051E2CD0381C78F72AFEE8725C239F5B311C2831681D0622BEF788F92006000EA870EF703F0A2F7198218959C900C90F2973011C301C00F089FA012803D1281C9AF752FF0BE0281C94F71CFAAB78002B05D1194A506F012109048843506702B0F0BD10B5041CFF20052194F780FA002806D039238370C470210A017194F702FA10BD10B583B00C1C417AE0690004C00F88420DD0094B684603800723837002A84170074A6946201C82F71CFE002000E0012003B010BDC046D42008000B0800009B6A0100B6480368FF2103310B1C
:FB672500430360704710B5B34CB4490A68D00705D55006400F022801D1FFF7EDFFAF494888C310AE490B600023AE490B706378002B08D101236370AB49AC4800231A1CB6F75EFE02E0A948B6F779FE0023A848037010BC08BC1847704700B513225C300188002094F759FB00BDF0B583B00E1CA04D041C00F0E6F9F8210859C0075DD5002E55D0201C6EF79BF8E069F822904340221043E061F821085904218843F8210851201C91F755F9206800216EF7C3F82068002101F010FA8A480378002B0AD0E069000430D48C4A90798C4A1178014001D1002826D1F821085900050CD5E069000418D4864B69460B8007238B70854A201C82F791FD0EE0261C5C3616
:FB682000318800231A1C181C94F765FC30880021FFF7E6FE201C00F008FA00232B70724803707748037038E001232B70201C00F0FCF932E00859400502D4201CFFF78FFF201C78F77CFDE269012000068243E261E06C40004008F8210B596C4F3B40EC273D5901263607B5433D5108210B43F8273B5198273B59B3433B5103239B069843E0641204D20F301C002A01D1331500E080235F490B6079F701FA012003B0F0BC08BC184710B5041CF830006859490840F8210851400626D5E06900040CD48DF742FF206801218140CA4353490B6813400B606DF747FF19E050490B7850490878834210D2206801218140CA434A490B6813400B606DF736FF48480317
:FB691B0078013303708EF7BCFD2CE0002344480370E069000426D5211CF8310A6810060ED5101C0C218843F82210513F4A1168042094F7B2F9FF21201C00F062F912E0101C3A4A1040086008215C23185BFFF74AFEF822105904221043F82210510821201C7FF738FD10BD70B5041C244D03685B012F48C618E069000403D4201C00218EF79DF920687DF754F8201C00F0D1F8E0690006C00E0A2817D1012120688140254803688B430360201C75F766F8E069F821884340210843E061206884F789FB201CA030042104F08CF9E069F821884318210843E061F821085907212DE0301B080076B10900641B08009006080084AE0900F345020080AF090022B1C4
:FB6A1600090076B1090078AF090085AE09000B0800009B6A0100FFF5FFFFD4500800FFF7FFFFB4C4080074B1090051AE090088060800FFFBFFFF7C290800E4C70800084340218843F8210851206801218140CA439F490B6813400B606DF789FE211C301C012290F73AF8E069000402D42B78012B05D05C23185B0021FFF7A5FD01E000232B70F821085992490840F8210851201C82F764FD012070BC08BC184700B5011C1D2079F774F908BC1847000030B5051C89480378002B0AD0884C884A11688848BEF791FB011C201CB6F7ACFCA56030BD002808D0F8221158490704D5C169914340221143C161704700B58EF79BFD012008BC18470000704770B5063A
:FB6B11001C051CFC352C68002C0DD114209AF7F9FC2860002810D07449321C0023B6F779FC2C68002C08D0714A11686E48BEF75DFB011C201CB6F778FC70BD10B5041CFC342068002806D0B6F783FC20689AF7EFFC0023236010BD00B560480378002B02D05F48B6F775FC00BD10B5041CC16909040CD50068002101F038F85D4908788307DA0FC107C90F201C8DF757FF10BC08BC184710B5041C002935D1F830006880218843F8221051011C0007800F15D0081C0C218843504A1040F8221051400503D4201C002194F778FAE069000405D4201C28308EF7C9F88DF7BDFDF82210590104490E8B070FD5444A0A407F214902884351020843F82318511321A2
:FB6C0C005C342088FFF7F6FC012000E0002010BD10B5041C9A231954C0690006C00E0A2803D10B21201C79F744FD201C7FF747FE201C7FF733FD206878F78FF910BD10B582B0041CF83000682E490840F8210851E06900041CD48DF780FD98210859C00020D5E06C28498843E064284B69460B8003238B705C23185BC870000A01A9087001234B70224A6946201C82F751FB09E098210859C00003D5E06C1B498843E0648DF789FEA36B1B070AD5E069000407D418494B681B0503D5201C01218EF706F8E069012189058843C9018843E0619C340020207002B010BDB4C40800FFFDFFFF77B1090080AF090054AE0900D4300000D345020058AE090075B109F3
:FB6D070000FFF7FFFFFDFF0000FFFBFFFF0000000C13040000AB750100181B080070B5041E3CD0F83000680104490E4B0736D5000734D43448437E002B18D08069C0032DD58B070ED530480A1C0240F82319592F48814350020143195108215C23185BFFF74BFC0821201C7FF73FFB17E028480A1C0240F826315925488143500201433151251C5C3529880022101C94F7B0F928880021FFF731FC201CFFF753FF70BD10B582B0041C00230193C069C00819490840042814D16B4601AA211C4C31201C283097F705FA002806D0019B002B03D0201C7BF764FE03E0211C002078F7DFFF02B010BD10B50124201C78F768F9C1690906C90E022902D313217FF778
:FB6E0200F6FA01340B2CF1D910BD2C2D0800FDFF000000FE0000FBFF00001F10000070B5041C061C037D022B36D1807B9AF754FD251C1835A74A13685900884201D2091AA548401AA54A1368618C49005918884206D90123DB06984202D23723A3741BE0201C72F7EBFB002816D170363078042812D0A07B9AF730FD2B685900884201D2091A9448401A431F9548834204D201236B73201C6FF73CFF70BC08BC184730B5904A9049006843075B0D1078C407240D2343181C8D4D2B681B0418430860686800042B681B0C18434860507888600020C860012030BDB0B5041C837B844A13600123834A1360834D844A106878F761F92860686880210843686080F1
:FB6EFD00480168C94361674368A3672964A06F6904084368647C4AD07828627023185D022829D0042844D1784A1368180A4300D91C774A1160031F764A1360764A1160744A1368754A13600023754A1360606FA861A06FE86173484178CB0101781943807883030B4351070B436F4A13601021081C6EF716FE1CE04923684A13606B4A136880200343664A1360282112206EF708FE674A1368674803401360634A13685B065B0E802018430302614A106818431060614C0027E0577EF752FF03061B0E5E4D2868000A000218432860E0577EF747FF0006010C2868564A104008432860B0BD10B5041C00290AD1FFF777FF7034207804281ED152484379012B3F
:FB6FF8001AD115E002290DD1807B9AF76AFC80084000324908606D23185D77F738F80023A38109E0052907D100F0B1FB002803D18DF7D4FE00F04CFE10BC08BC184700B53049086878F742F8C2693F4B1968072399431A4011433C4A11602A490B680360C16901221205114352119143C161F822115804221143F822115000BD3348C3890360704710B5324C208A2189884203D36068884200D9081C208020882D4941431B4A1068000A0430BEF7ACF8E1690818294A10609FF7FCF9011C0320BEF7BEF8638A21898B4206D9E368984203D1411C0320BEF7B3F8E06010BDC04680AE0900000000108CAE0900FBFFFF0784AE0900B8890E0038800E0000830EF7
:FB70F3000098830E0000820E008C0608000C47080064000800940608009C060800A0060800108B0E00148B0E00A4860E00A8060800009A0E00E4500800648B0E00FF00FFFF9203080004830E00A42C0800ACAF090070AE09006CAE0900710200009C830E0002234377C368012149020B4380210B43C3600023C37503680B430360012383777047F0B5B24CB34E301C77F7C9FCB24D002802D0C16909040AD4012077F752FD2860FF2801D1002050E077F791FF01E003682B60C169F822914318221143C161F822115804221143F8221150311C28300622BDF7DDFB0123A0480360A0480370FFF74EFF0123E3749E4F3968201C6FF776FB2423237402236374A0
:FB71EE003523A374201C60300023037001234370002383702362286877F7D5FFA0730123E373211C6431301C8DF728FE286877F7CAFF211C64316FF7CAF9201C4030FFF792FF3968201C6FF75CFB002000F0CFFC0120F0BC08BC184710B5037D092B0ED1834C7E4A106877F7AEFF20606068802188436060794AD0782062FFF708FF10BC08BC184700B5002902D100F045FB16E0022907D1012376490B604030407F76F7FBFE0CE005290AD1002371490B6000F073FA002803D18DF796FD00F00EFD08BC1847000030B5041C051C61352878012803D102232B7051230FE002281ED165490B680120C004186064490B68002B09D0FFF7CDFE01232B703523A339
:FB72E90074201C6FF711FD0BE0201C6FF76BFB042355490B60980678F7DCFC012000F069FC30BC08BC184710B585B0041C1422E92109036846BDF731FB00984207520F21680723994311432160010A6170010CA170039B1B0609D4030EE37001982071010A6171000CA071062200E00222611C3B4803F097FC002801D0002000E0012005B010BD30B5041C6034A3780133A370051C6EF7C2FEA378281C032B13D90023A37037490B68002B08D16FF71CFB04232D490B60980678F78DFC08E0012363706FF7B3FC03E0022363706FF709FC30BD30B5051C041C60346378022B24D1294A1168043A1068CB0719D4430317D54A0315D50722D2040A4011D14306D5
:FB73E400180F03280FD18B05D80E11280BD11F48FFF78CFF002806D00023A3700323637004E0CB0702D4281CFFF7AEFF30BC08BC184710B5041C011C6131087803283ED10949086877F74CFE002821D00F4B1A68C169072399431A401143C16118E0C046C0AF0900B7C1080088060800D4500800BEC10800AC06080000820E00F0FC0E00AC2C080070AE09002C8B0E00ACAF09000223B04A1360D80678F71EFC211C6431AD487CF715F9AD4A106877F791FE211C64316FF791F8201C6FF797FA0CE0A84A1388002B08D1012806D102230B705123A374201C6FF72BFC10BC08BC1847A049037D022B07D14868431E00D34B600888013800D30880704730B59A92
:FB74DF004C9A4D2B68FF2B49D1002077F7A5FB2860FF2843D00123904A1360954A13700323E374944A1168201C6FF7E3F925232374022363743323A374201C70300423037000234380236323848B4A13685B006384242000230355286877F73CFEA0730023E373FFF778FD286877F7BCFD6C2103680B55C169E06D0722904311400843E065201C5030FFF7F6FD211C74317B488DF77CFC784A1168201C6FF7BAF9012030BC08BC1847F0B5021C73490D6874490B8859088D4200D8291C724F3B68C918041C7034668873438B4213D96B005384252101230B540423237033239374002363806FF7A7FB20235C480360D80578F776FB01E06FF79EFBF0BD30B539
:FB75DA00051C041C5B49086877F76FFD002808D0C1695E4A106807229043114008435B4A10605B490868430E5B490B605848FFF74AFC7023022058554823A37453490B685B006384183401236373281C6FF774FB30BD70B5444D2B68FF2B1FD04F4E4049301C062203F025FB002817D1286877F73CFD041E0DD0C069C0020AD5301C77F75CFA002805D0844203D0FF21201CFFF7D8FAFF232B6041486FF76FF970BD10B5041C10232E4A1360180678F71AFB334A13685B006384252001230355211C703104230B7000234B80201C6FF793F910BD70B5051C041C324A1368324803401360254A1378002B06D140231C490B60980578F7F7FA2FE04B0711D5702C
:FB76D50023585D042829D1332600F06AFA002800D13126A674183401236373281C6FF70EFB1BE08B0704D570342078022815D10DE0CB0712D57034207802280ED306D0042808D30AD1281CFFF75CFF06E0281CFFF72EFF02E0281CFFF7A4FF70BC08BC1847C046D4500800B7C10800880608006CAE09002CB009008C060800BEC10800B0060800900608006400080074AE090098060800ACAF090098830E00E4500800E8500800C0AF090018800E00FFF0FFFF70479F498868002805D0007C2438012801D8012000E00020704700B51F21994803F0AAFA1B21984803F0A6FAFF23974A1360974A13600023964A13708DF708FB00F080FA00BD10B583B0041CD7
:FB77D0000C22E92109036846BDF7D4F8694600200A78013122548D4B1A5401300628F7D34B78A37103B010BD00B5002388490B7081486FF723F983490868FF2804D077F7AAFBFF237F490B600123824803607E480378012B04D18DF708FF00237A490B7000BD10B5041C70342378022B27D17A4B1968043B1A68CB0717D4530315D54B0313D50723DB040B400FD153061A0F032A0BD18B05DA0E082A01D00C2A05D16F48FFF7ABFF0323237009E0CB07638804D4013363806FF745FA01E00133638010BC08BC1847664A13681802664A1060664A13681802043A11680B0E1843634A1060704710B562480368180A62490143624C216003021918614A8B1861A1
:FB78CB004C2360614C236861490B4023602368032189040B43236000235D4C236003040B2109045918FD221202114303242143594C21600F30584C206010BDF0B5041C574D574F404A106877F74FFC38607868802188437860534AD0783862A37B524A13602B68524AD05C0843514A1060261C606E3864A06E60361521890608437864707801281BD12C48416A002902D1836A022B09D9032904D1836AFF203630834202D2201C6FF789FA301DFFF79DFF0023414A1360082113206EF70CF999E0022800D096E03D4B2F4A13603C4B2C4A13600123304A1360201C002170F7F7F8384A106838490B1C4343591821624300581CA081E36C7820834318200343F4
:FB79C6001F2080028343032080020343E364236D2F4883436322134323654034A3892C4A1360238A5360EB23DB00234A1360FFF74EFF282101206EF7CFF8264A4DE06C2108002CB00900C0AF0900880608008C060800BFC10800E8500800BEC10800D45008002C8B0E0078AF090038800E00B8890E003C800E00BC890E009406080000D07DC0D4890E00043E00008C800E00B88A0E00FFFFC3FF94830E0098830E00C8890E0078AE090000820E00B7C1080000830E00A8060800A4860E00F8800E00447E000040C07DC098060800E2040000F81F0000CC8A0E00648B0E0013688C48034013602B688B4AD05C802101430902894A13680B431360884C002020CB
:FB7AC100567EF7CBF903061B0E864E3068000A000218433060002020567EF7BFF90006010C30687B4A104008433060F0BD30B582B0041C7C490B7E002B5AD17B490B68702003401D09A37BAB4252D078490B68FE20034000D00123002B47D10020B2F72BFE002842D173490B689B063ED48BF761FD00283AD16946281C99F7C6FF68466FF74DFE684699F7F3FF00209AF753F86948002343628362009B9B089B00416B59180B011B0943636448016819E0251F237B212B15D1281C71F73EFD00984308606918184308990149096161E08BBDF751FBA083281C71F78DFB281C71F7FAF807E00C1C09688442E1D102E0A07B9AF722F802B030BD52480368002BCB
:FB7BBC0000D00123002B09D0007D002806D0072801D0002000E00120002800D0012070473121002800D0332147488174704700B59AF758F8430818335B089B01580900BD30B50D1C6CF7DCFD041E14D0002D0BD05C23A3743D4A1370807BFFF7E8FF011C201C6CF7BDFE06E090340021C9432160362336490B7030BD00B532486EF708FF00BD334A1368180A32490143324A11600023324A1360704710B5041C304B2E490B603048FFF71EF90723DB012B490B60E36D7F208343182003431F2080028343032080020343E365236E274883438820034323665034A38924490B60238A4B6010BD00B5C37B4B400BD07022115C022904D0042907D1FFF7C4FF04E6
:FB7CB700E0FFF7CCFF01E08DF769FA08BC1847000018480368184803607047C046FF00FFFFA8060800648B0E009203080004830E002C2D080024860E00B4C4080008800E006C210800A8020800C0AF09002CB00900F40108009406080000D07DC0D4890E00F8800E0040C07DC0ACAF0900F81F0000CC8A0E00A8AF090094830E00037B0C30FF2B02D14378202B05D0F8225058400A0422104000D001207047F0B582B00C1C01D1042097E0051C4C480268002A08D0281CC3F7A1FD002803D0FF300006000E89E0F82148590007800F012821D1237B5B081ED0291C201CFFF7D0FF002818D13F490B78201C002B06D099F7CDFB5C352888FEF786FC6DE0F8220C
:FB7DB200515902229143F822515199F7C0FB0821281C7EF714FBC7E72F687B0133481E18F37F012B55D0237B5B080ED1637B052B02D12E4900910DE02E490091042B09D0DB002C48C218009204E0201C0C307AF7F2FB009000990B7963770023236002F064FF01900099486840010BD4B068002805D003682360B3681C60B46011E0B46024600EE0F068002805D003682360F3681C60F46001E0F4602460211C281C8FF724FF0123BB401449086818430860019802F043FFE8690006C00E0A2803D1381C73F73DFE09E0082807D1381C6CF7F0FC03E0201C99F75BFB66E7002002B0F0BDC046BCC8080022B109007C2908006CAD090074AD09006CCF050074BA
:FB7EAD0029080070B5041C0D1CF82253580122D2021343F8225350C3699343E361061C5C36308876F7F1FF20233380291C201C76F776FF291C201C8FF707FE286877F73CF870BD70B5FFF79FFEB04E30687BF7A7FDAF4876F708FE041C306877F7DCF8051C002C0AD0F8210B5904210B4340208343F8210B51201C8CF72EFE002D07D0002C05D0A54203D0FF21281CFEF770FEFF23336070BD30B59D4876F7E5FD9B4D041E09D0C3691B0406D4286877F7B4F8211CFFF7A7FF05E0F820035995480340F8200351286877F7A7F8041C2B682360FF232B6002F0ACFE012321688B408E4A11681943116002F0ABFE20686CF771FB20686CF70DFC9423195B6CF71D
:607FA8000DFD20680121FFF725FEE369F820834310200343E361206801216CF7CAFC201C8FF706FD201CFEF778FDFFF72FFE30BDF0B581B00026FFF725FB7949086877F76DF8051C774F381C76F790FD041E3FD0C3691B06DB0E083B062B02D2FCF7D8F8BC
:FB80080036E0F82003595B0732D50126235803200343F8200351E3691B0405D5211C281CFFF742FF2C1C36E05C23585B195B884201D076F73CFF2F68E8690090FF221132211C281CBCF79AFC2F60EB690720834300984007400F0343EB61381C8FF7E2F8206876F77CFF2C1C281C8FF7B1FC12E05349086877F722F8391C041C28300622BCF77CFCF820035903208343F820035120688FF7C7F8201CFEF70FFD201CFEF70DF802F017FE012321688B40434A11681943116002F016FE20686CF7DCFA20686CF778FB9423195B6CF778FC20680121FFF790FD002E05D1E369F820834310200343E361206801216CF733FCFF23344A1360354A1378012B03D1021E
:FB8103002100208CF74BFC01B0F0BD10B52E4876F7FFFC041E17D0C369F8218B4320210B43C36100217BF7F2F9201C00217BF749FA274A1368012B06D1E3691B0403D40021081C8CF72BFC10BD00B522490868042802D1FFF7CBFE2BE0022802D1FFF7EFFE26E080280BD1144876F7D2FC00281FD0C369F8218B4328210B43C36118E0202816D0102802D1FFF725FF11E0FF230133984202D1FFF7B9FF0AE0402802D18DF7B2FA05E001235B02984201D18DF743FA012000BD88060800B7C10800FFF7FFFFB4C408008C060800E850080078B1090088C80800D450080010B5C1698B0203D500217BF7D1F91FE0041C0806C00E08281AD2F8210B591B0703D59E
:FB81FE00201CFEF7D1FD12E0E3691B0409D4201C7AF7E2FDE369F820834328200343E36105E0042803D1211C002077F7BCFD10BD30B5051C3A4CF82043591B0709D4A369DB0302D4637E002B03D1617E281C92F73DFFA369DB03D90F281C012281F75AF9281CFEF760FD30BDF0B502232D4A1360C7690568F12301221A541A1C0E1C041CBCF781FB1E22311CF231201CF230BCF77AFB201C0023836448302560E36907218B437907490F1943E161F369DB135A1C0B1C0121C9038B43D107090C0B43E361F82109590B0507D4174A1188818101829423154A10881853E3693F2000028343092000020343E361EC2213590720000683430120000603431351984D
:3382F900221059400F0021002800D10121281C81F7F8FFF0BDF8300068430A04201840800870472C2D080040440800560308005803080093
:FB83800070B582B0051C0024200123181B0145481E18F821885940071AD4306876F70AFF6968884214D1301C77F730F800280FD03D4B69460B8002238B705C23985BC870000A01A90870394A6946301C80F7B6FF01340B2CD8D30123354A1376686872F75EFD686873F772FA6868B2F79FF8696830486EF754FD69682F486EF750FD69682E486EF74CFD69682D486EF748FD6C68002C45D10C2363432A481D18A87A022831D304280ED32ED1281C82F730FE061C288000236B72E87976F744FEA03006810C3028E0281C82F722FE288000236B72EB7999005B189B011B495E18311CB831487100230B71C436B379002B15D073792B80B3796B8033796B7228DC
:51847B001C82F707FE7071301D07E0002807D0281C82F7FFFD2880281C09300023037001340E2CB9D302B070BD88380800530C000043720100CC2F0800B42E0800682E08001C2E0800D037080040490800140B080033
:2C84D40010B5041C6CF7C0FC237D072B01D0082B06D190340021C9432160362302490B7010BC08BC1847C046F401080048
:7485240070B5061C0C1C151CF82043585B0728D5CB691B0425D4144803689B0721D513480378002B09D01104090C301C8EF7D8FC281CFEF7B0F8002014E0081C28308CF7ECFB2904090C301C8EF7CAFC0821201C7DF73CFF8CF723FA0123054A1370042000E0FF2070BDC046641B080022B10900BFC108003E
:6885B000044A137883730123C3702830022101707047C04678B1090010B5041CF8210B581804400E83071BD50E4B011C1940F82213597F204002834348020343135122215C23185BFEF704F8E369F820834340200343E361F822135904229343F822135110BDC046FDFF000024
:FB867E00F0B5051C13235B049F4F3B60082105206DF786FA9D4F3B689D4803403B603B68C00703433B608B4F3B6802273B43894F3B60974C984820620123974F3B60974FB868606278686065A8692430C17880220A43934F3A60934E8378B07B002B0ED1924D0021AFF7AFFFB169081C243042781302007B18430022B0F7BCF909E00121AFF7A1FF8A4D8A4A13680120400603431360884805608848838A8848036000232360F0BD0523838183692633187801280FD10021CB4382490B6000234B607D490B68802003430B607A490B68800403430B60704700B5C369002B23D013235B04694A13605F4A13685D4A13605B4A1368594A1360554A1368644A131C
:C3877900607248724A11684160724A11684161714A11688160714A13680360704A1368704A136061486EF78FF908BC1847000030B5052383816C4A116806220A40062A02D181692A3108E08B0702D481692C3103E04B0704D481692E310B8801330B8013235B0449490B605049CB69002B12D1524C2568C37B012B0CD12368802083432360022099F7C7FA80231D43A06899040843A060256030BC08BC184713235B043A4803604148C369002B02D1434803680360704700B5002901D1FFF724FF08BC18470000FE
:FB89AC00F0B581B0051C0C1C08790002C978084352D00020ADF718FAFF2801D109234CE0071CADF7D2F90023038121790902E27811438186C186051C82F71BFF2E1CB03673885808E8806379252B0ED2394800900521BCF7E3FA6179C8084907490F01228A40009B195C11431954B07BFF233D334343314819180091281CAFF7CEFB2F4885662521281CFCF777FF307B0021AFF703FE0523AB80381CAFF74EFC00999E3101200870381C002100F035F8A279E179381C00F005F801E012232B7001B0F0BDF0B50C1C171CADF780F9061C201DB4F75FFA051E1ED0B18D0B051B0D012040031843210408432B1CA907890F01D1186006E01870000A5870000A981C
:FB8AA70070000AD8703A06120E2104090C281D90F7DBFF281CB2F7CAFDF0BD30B50C1CFF233D3343430548C51802F004F9A2352C8002F008F930BDC046F44E0800349D080038B0080000B5FCF741FB00BD10B5041CC37B012B05D1A9480378002B01D101230370201CB2F7D3F8201CFFF7EBFF10BC08BC184700B52C22A149A248BBF72EFFA048A14B1860A1494160A1498161A149C16100BD30B5041CBE342178FF233D334B439D495918FF2208328B18FF2119709A493C30062202F095F800280CD1984D23782B6002236B717F21C943A81D072202F090F800232B7130BD30B5041CBE342078FF233D3343438B495D18203082F7A9FA281C6DF756FF85F7CA
:FB8BA20078FA8848036821788B4203D1FF2303600023437130BD00B5017D032901D0042902D1B2F7DBF809E0037D062B02D100F008F803E0092B01D1B2F701F908BC1847000070B582B0051C041C8034E37A002B08D0036DBE3319780820AEF740FB0023A376E3726378032B28D0A87B98F764FE4008218C431A1E04360C618C00291DD08E421BD36078012806D1688CBCF70DFB062803D13E2002E0042803D008202B6DAF33187003236370281C6DF7BFFE2B6DBE3319780520AEF712FB31E06068002808D00090002301936946A87B98F786FF002363606378032B11D0FF201930285A864209D8A87B85F7A6F9002804D1281CB2F7E0FB002802D04C49C829
:FB8C9D00780CE06378002B07D14A4BA87B185C032802D24649887801E045494878A874281CB2F7BCFA02B070BD70B5041C0E1C354D2878002802D0013828702878012804D83D4A13683D490B401360002816D0201C9830C378002B02D18188CA060ED58379002B11D0311C201CB0F70AF82B78012B0AD9311C201CAFF7D6FF05E0201CAFF79BFC201CB2F744FA70BDF0B581B0041C051C80350027AF81EF76FF230533C618F37D0133F375C37B012B13D17378002B19D1224803689B0715D5A07B98F7BEFD80084100A06981420DD098F752FD4000686008E00123737015480378A3740123DB07B361B77015480068009083075CD514490B685B0602D4009821
:FB8D9800430731D5A07B98F79CFD1FE0FDCC080078E40500DCB0090078150800B98B0900298D0900F58A0900349D080009C10800B4AE090074150800E3C008001C800E00FFBFFFFFBC8B0E0040150800400828846B78012B08D102236B70236D588900016884201CB2F7C2F8F37D012B07D17DF721F8011C201CAEF7B8FA01F0F1F92C484379022B14D1236DBE330068197888420ED17DF70FF8264B991D1A7988541879411C0720BCF71AFA214B1871214B1F707DF700F8B074009906220A40062A1ED1236DBE33187885F7ECF8201C00F0A6F8F078012804D8184980000B5C01330B54E37B0099201C002B02D1FFF720FF01E000F054F8201CAFF7E2FBAF3F
:998E93007214E0B7758B070AD5A87A0D490B78984205D2E37B002B02D00130A87206E02B7E002B00D02F76201CB2F777F901B0F0BC08BC1847B4AE090086030800ECB008001CCD0800F0B5061E20D00768002F1DD0407CACF746FF051C707C182141430C484418786890F7E5FB98F766FB381C98F71DFB00233360217A01312172217A05480278A88D90F71AFB00232372F0BDC046F4B008007C150800CF
:FB8F340070B5051C0E1C041C8034A37F002B1ED0AFF7EBFE184A537C012B09D9E37E002B02D1A08BC10603D5311C281CAFF7B0FECD23585D00280AD0FF230533E818837D002B04D04378002B01D1012383700B490B681B070FD56378022B0CD1FF201630285C002807D0A0898004800E0023002800D10123237670BDECCC0800E02C0800F0B5041C051C3A4806689835A8880712F306D90FE9707307D90F0307DA0F002F04D0344803685B0300D5111CFF231533E0184378002B03D1002901D0012343708A4216D0AB79002B15D1002F08D0D0231859C168C91BC16002D48368DB1983600122AA71201CB2F705FA201CAFF7F8F901E0002383713307DA0FA8E7
:FB902F00884307D90F8A4234D11C4F397C0A0702D5B304990E2DD1184A13689B0303D5B3079B0F032B25D004214840A880251C5035AE87B304980E1CD020221149BB68181D01F02CFECC342078800712D50D490B68012080030340580B0BD02B68BE331878ACF771FEAF303D210170012028870023AB87F0BDA88B0E00E02C0800ECCC080080980E00BC8B0E0010B51F4C2068002805D08008800098F73BFA0023236010BDF0B5051CC668B469002C16D0AFF7AFFF002812D1154F3A1C211C1331E01CAFF787FE381C00F00AF80023AB60EB60A008800098F71DFA0023B361F0BD00B582B0262369460B800190081C76F7A1FD02B000BD00B54368002B04D0EA
:1A912A0010220448002191F780FF00BDC046E49C080023B109001720000026
:9C916000F0B583B00291FF233D3343432248C618356D01F0B3FD371C90372C1CB0348E239A5B02998A1A1204120C638853433A6FD21851014909019101F0A8FDF37B012B0ED16B8B5B000093288B4000019A101841014909181CBCF73DF8A0800098E080281C82F72CFBF37B002B0ED1E68870086883A188019898F71BFBE288011C101CBCF728F8301A400828830298431E3B800123BB7203B0F0BD349D0800B4
:F4920400F0B581B00090ACF7B4FD041C0027364E336BDB071FD5B4421DD0251C2C354223A97D9A5D914216D1291C1031301C3C30062201F029FD00280DD101F04DFD051CBE36307800F036F8281C01F04DFD3078AFF76AF803E0C03601370F2FD8DB0098B2F7BBF9251C0123EB852C35201C80F7A3FC00980021ADF7A3FE1C4A13681021DB0603D5A971201CB3F72FF8201CB1F7EDF9BE342178FF223D325143144BC9187F23FF2023300B54A623FF2017300B5401B0F0BD10B5FF233D3343430C48C418201C80304178012907D1418C608CBBF7BBFF062803D13E2002E0042903D00820236DAF33187010BD2890080040150800349D08006D
:BC930000F0B5061C046D2B4803689E4201D1AFF703FF301CAFF73FFD351C8035288901380ED32881288904236B70002808D1301C6DF74DFBBE3421780520ADF7A1FF38E0687800281FD1B07B98F7C7FA4008B034A16898F75DFA01239B0698420CD267883B1859014909381CBBF748FF7843A168081840014009A060A06800236B700223F374B06112E0022810D1AB7E002B0DD0E889298A431A1804000C074B984205D2EB7A002B02D1301CB1F797FE301C6DF7B0FCF0BD6C210800FF7F0000A8
:8C93F800F0B5051C1F49FF230533C418E378980000230B544318581C00230370AF692B6D1889421C267C688C5043B04063681B1858014009381A01239B06984220D2B31D20789840A368D901EB7B002B00D15143E268824200D3101CBBF7D4FE011C802800D980219F352970074803789E4202D2701C207404E000230434191C381C0BC4F0BDC046ECB008006F150800F0
:E4949000F0B5061C071C9C373888102101401D490BD01D4BF518EB7898000A5C9301AA68D218AA604318597811E0174BF518EB7898004118487800280DD08C78097861438901BBF793FEA9680918A960211C8B01E868C018E8602B7C002B11D1E86800280ED0AB68D901F37B002B03D1336D1A8901325143BBF77AFE802800D98020F870F0BDC046ECB0080004010000F0B50D1C114C20600B68DB0701D598F770F90F4E0020706637680E483840306098F77CFC98F77AFC2868E0606868A0600220706698F772FC98F770FC98F76EFC37600020E060A060F0BDC04600820E001C800E00FFFFFFFD3B
:30957C0000B54068084A13681979002909D1074A13681B0605D4002801D097F7D3FF012000E0002000BDC046C04F0800E02C0800D2
:7895C80030B5041C80304378002B1BD10323E374252101230B55837E002B07D0236DD98B09014184A36903840123C372618CA06974F78AFB238C984204D02084216DB03188800880FF230133E158E518A06998F7FBF8216DB2310A88011C101CBBF7EAFD011C201CB1F73EFEA3692B60201CAFF74CFD00236B7130BDDE
:FB965000F0B581B0344806683448056834480378002B5CD133480368AB4209D132480368B34205D131490B683149086883424ED0304C314FFE20284007D1002D03D02F480368DB0301D5002E1CD063681B071B0F022B02D0022098F74BFC29480078606328480078A06366F7C9FD01F027FB822141432068642250436430BBF797FD431C3B6018E063681B0702D0002098F730FC00206063A0631C4A136800931B4A1088392109014143181CBBF780FD386018490098BBF77BFD174908603868A06109490D6009490E600A490B6808490B6001B0F0BC08BC1847C04614CD0800B4C4080008C30800B8CA080094AE090074AF09008C0608000C000F00DC5E087C
:91974B0000FC0A080009C308000AC30800C02D0800E80A080020CF01009C000F00381CFFF7E7F902B0B0F7F0FFFFF705FAB0F7FDFF30B5041C13490B685D78B0F75DFD022C01D0042C16D1281C203081F7A9FC042C07D10D4800231A1C191C91F745FC022102E0022C03D10821281CADF705FC281CACF782FB05490B689879012801D1ACF7E4FB30BDC49C08000E200000C89C080062
:FB97EC00F0B5041C00216DF74CFE002803DA01234E4843716FE0061C251C7835687A00280DD1A07B98F763F84008236DB833196897F7FFFF002804DC687A002805D0002E03DD201CB1F7BDFC55E0E37B012B03D1002801D101236B72A878802101433C4A1160082105206CF7A4F9384A5379002B41D1AFF75BFC374F381C052101F048FA03233B74201C00F037F8AFF70CFCEB8A002B0AD1FF201630205C002805D1AFF745FC3B7C082003433B740023AB74FF230533E6180023F375201CB1F788FD264A13780021002B00D101211170F078FF2806D16B7A022B03D1081CF070A3697360012805D8F1708B001C48C0187B7C8370201CAEF7ADFDF0BD30B58496
:6D98E7007C18490B788374051C012200216DF769FCAC742C6DB223195B0239884200DB081C11494143E5208000BBF774FCFF210531695C884200D3081C32342178490701D5012801D8002800D101200349487430BDA42C0800A4860E00ECCC08006C150800ECB008007415080071020000F1
:FB995C00F0B583B0012100910027C0237B431A481C18206BC00729D5251CBC356B78002B24D1261CE38D2C36002B1FD0B379002B02D00021009119E0211C0C310F48052201F076F9002811D00223B371201CB2F72AFC01A9201CB2F712FC01A9A878B1F7ACFC082201A9A878B2F72EFD01370F2FCBD3009803B0F0BD28900800004F080010B5002912D140498B79002B0BD03F490B69834207D13E4C2368DB0603D54631012008700EE0AFF751FD0BE0022909D1011C48318A880B7E9B18013383814B889B1A4B8010BC08BC184730B5314A11680B06D90F884218D12F4D2C68ACF798FAC1780B02817819430279130419434279130619438C4208D12A1F13B8
:FB9A5700681A0C41780B0200781843824201D0002000E0012030BDF0B583B0051C00910026041C58342379002B2CD0012601A8B0F723F8071C6379002B13D0E378012B07D13023585DFFF7C3FF002801D1061C19E02835AB79012B04D101A9381CAFF7C1FE061C0F480378002B0CD0012F0AD1029B03208003034001208003834202D1012300980360301C03B0F0BDC046AC210800642C080008800E00A88B0E0088980E006C9C0800F0B50D1C041C002D14D14B488379002B0CD04A480369A34208D1494A1368DB0604D5031C46330120187036E0201CB0F7B5FB32E0FFF754FF022D2ED1414A131C5421085B0004271C52373988084318644433251C56359E
:FB9B5200A807800F01D12E6808E02D1AC0002968C1402026301A6E6886400E431E60A36B002B0CD1A06EC16B91603C30457908212D0200792843D06013680B431360A06E806A9064F0BC08BC1847F0B582B0041C051CAFF75BFE58352B79002B31D0EB78012B10D1201C28308379012B0BD16B79002B08D1007AFFF72DFF002803D1201C6CF796FA1DE0EB78012B1AD8A66E6846AFF775FF6B79002B0CD1071C6946301C3C300622BAF7C5FE423637706C340120207012E02E231B5D012B02D16946AFF713FEA37C0B498878834202D1201CB0F768FC201C0121AFF712FD02B0F0BC08BC1847AC210800642C080008800E00808B0E0074150800034B044803D1
:479C4D0060044B044803607047C046D4AD09005015080000AE09006415080010B5041C6CF749FA201C6CF7ACFE4A23002018536523195D0220ADF7FDFAA36EBC3318780021AEF7D9FC10BD07
:149CBC0000B5011C32310B78FB2213400B70ADF7E5FE00BDAD
:4C9CE000F0B5061C0F1C104D2C68A07B97F7F5FD80084300991C608CA26983185801400997F786FD041C002F0BD0B17B2B68987B6DF7BBFD002804D1032C01D8002400E0033C201CF0BDC0466C21080011
:FB9D3400F0B586B0061C4568039581780A07120F0092C07802908F0943191A79059200200490C74A13681879002804D1C5490B681B0600D4BCE10098062800D9BDE10598002808D0122806D0301CAEF783F8002800D1ADE1B1E1BC4C2378BC490879834202D3201CADF772F8B8484188002923D00378002B10D06378002B04D0B44898F75DF9002818D000236370A370AF4A508850214143AE4805E02378AD48002B04D15022514398F7FFF806E098F747F9002802D0201CADF74AF820782923191C41430191E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A4301989C4B0099C95C815480180099032901D0052957D1934A13681B0D
:FB9E2F000600D441E1477002998B1F0372291C09300622BAF79FFD0635E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A43019880180230291C0622BAF788FD0098052817D10635E11C8807800F01D10B6808E0091AC0000A68C2402023181A4B68834013430199C8180F30029A0C3A291CBAF76DFDE11C8807800F01D10B6808E0091AC0000A68C2402023181A4B68834013430199C8182830F17872688918C9780170F1E0FF07FF0F0098042806D0634A1368F07871684018C078587260490868C379012B18D1391C281CADF7F0FA009A042A05D1ADF70DFB002800D1D7E03BE0FF2803D1391C281CADF736FBADF716FB002800D1B0
:FB9F2A00CBE02FE057490B78002B2BD0009A042A18D1291C54481030062200F0A2FE002800D0BAE05049887D03071B0FBB4200D0B3E08023034000D1AFE04006400E494988750FE00922835601200856834200DAA3E0291C45480622BAF7FFFC80233B434148837501210491E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A43019880184770291C02300622BAF7E2FC2F480378002B19D0E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A4301998818F17872688918ADF7E8FB0006000EFF2863D106350298FA300006000E02900098E11C012812D18807800F01D10B6808E0091AC0000A68C240202318C2
:D3A025001A4B68834013430199C8180021017215E08807800F01D10B6808E0091AC0000A68C2402023181A4B68834013430199C818029A0272291C0930BAF791FCE11C8807800F01D10B681CE0091A12E0C046C04F0800E02C08005DC30800BC9C080093C3080014E3050068C30800B8AF0800C8AF0800C0000A68C2402023181A4B68834013430199C8182830F17872688918C97801700498002802D023780133237023780B490879834202D3201CACF7D6FE0598122804D1ADF78EFFADF7C3FF04E00398002801D097F729FA06B0F0BDC046BC9C0800EA
:FBA10000F0B586B0041C012203920292002200923249051C08682035EB7A012B02D1304A117801E02E4A5178A17406220240062A51D12C4A16683207120F019201070BD529490B68987B002805D0301CAFF7FCFD0090029000E00390244F019805282BD1EB7A012B28D83306D90F287B414023D1ABF7FCFE79680491B968059104A90231062200F083FD002816D10398002813D00298002810D0201CAFF7C1FE009900290AD0201C6BF7ADFF11490B68DB0703D4201C0021AFF76AFD0E490B681B060AD50198052801D0032805D1391C3004000C0022ADF700F906B0F0BDC046BC8B0E005C150800A88B0E00B89C080080980E0008800E00E02C080010B556ED
:FBA1FB004C822099F731F8000600160022A15600290ED0CB10CA1AC310D2187F23DB439A4201DA181C04E07F207F2A01DC10060016010609162170494A1368002B01D14848C17710BD70B5002644480368002B01D184F790FB434C4449201C0F300522BAF793FB00252819C07B97F756FD36180135052DF7D33D48C36A5B011CD53C4803685B0518D400253B4803789E4213D001200A2D00D9022040194100374885F7E0FA002805D0291C201C0F3085F7EBFA013E0135252DE7D3211C0F313048052200F0E7FC002809D0211C0F312C480522BAF75BFB63690120834363616369DB0707D4FFF73EFB616901229143104001436161002070BC08BC184700B595
:96A2F60075F70FF900280BD11F480368002B07D114490B681D490868834201D1012000E0002000BD00B5B821194800F0ECFC00230B4A137000BD10B5041C15480368002B0BD0201C002185F7A0FA1821201C85F79CFA4E21201C85F798FA10BDC04680B10900B4C4080050370800F4460800F44E08005420080020040800A4030800E0340800004F080010CD0800E4C708009034080014CD0800C6
:ACA3C00030B5041C0A4D2B78002B0FD07BF73EFD01216956884209DA251C5C356B78002B04D1201C6BF78DFE00232B7030BDC04668C3080000B574F74DFE002805D11848437D002B01D175F78CFE00BD00B574F741FE002805D11248437D002B01D175F780FE00BD70B5051C0E1C0024C02363430C481818036BDB0703D5321C291CB1F725FE01340F2CF1D370BD00B5064875F75CFE7BF7A5FF13211620FFF7E3FF00BDE44E0800289008009C4508004E
:84A4A40070B5041C08790002C9780843ABF786FC051C01D1122331E0006BC0051ED40026281C3030817810220A40296B09D0890502D50C23237012E0286B1149084328630DE00F4A1143402211432963C37810210B43C370281CADF7CDFA00E00126A078000261780843217890F7B5FD002E03D0281C0021ACF718FE28340023237070BD00020000EA
:FBA5FC00002809D1104A1068104A1368984201D1012801D1002002E08800411AC81E70470B4A1068C306990F01290BD14007400F052801D8002801D1002001E002490868024908607047C046901C080008B1090004300E00002E02D00020E05504E0E35D002B01D0013BE3557BF785FA10B5A44C201C042100F044FB7F21C943A01D072200F00EFBFF23236000239E4803709E4803709E4803709E4803709E4803709E4B9E4803600123DB029D48038080239D48037000239C4803709C4803709C480621BAF784FC14219B48BAF780FC14219A48BAF77CFC10BD30B5041C98480368002B04D000230360282300201855944D00216962A96277F75DF99248038A
:FBA6F70068002B07D174F7CAFC002807D18F48437D002B03D1012090F793F904E075F7F9FB2834042020700023894A137089480378012213430370FFF79BFF281C8A300621BAF746FC30BDF0B5061C051C081C08356C4C2368FF2B20D076490330062200F099FA002819D16079022807D12068ABF706FBC38D012B10D1002711E001280FD1206874F7A3FCC1690906C90E0839062903D2FF210931475C02E0122333700EE0A11DE81D0722BAF7F1F88021A01D072200F078FA00232371AF710823F370F0BD30B50C1C5B4D0331281C0622BAF7DEF8637A564803701422211C0A315648BAF7D5F81422211C1E315448BAF7CFF8002347480370434CFF232360BF
:FBA7F200281C0021ABF7C7FA002803D1281C0121ABF7C1FA002806D0C38D012B12D1BE30007802210CE0281C74F77BF9002809D0C2691206D20E083A062A03D2006801212060617130BD0B7935480370CB78304803707047F0B5052630480378002B50D12A4C2768FF2F4CD02079811D0720BAF708FD05062D0E607902280CD1381CABF781FAC38D012B3CD1A31DEA560024012622490E7016E0012833D1381C74F719FCC1690906C90E0B1C083B062B29D2A31DEA56FF230933C45C0123174803700A2900D10326144800211D4B1B579A420DDA0278013202700278B24212D301700F4A1378002B0DD090F71FFF0AE0154B1B5701709A4205DD06480378001D
:FBA8ED002B01D090F7F8FE0120F0BC08BC1847B4AE090002C108000FC10800840308008603080010C10800C05D00009C070800A007080099070800D8C20800ADC9080009C1080011C1080025C1080024C9080054200800DCCC0800E44E0800EEC00800E00A0800381CF9F711FA69F712FF281CF9F72AFA69F72BFF81B000F003F873F74CF90000F0B5041C0D1C7BF769FA324E7379012B12D180213368095D8B420DD1A02210553179891988713079411C0720BAF76AFC30710023284A1370271C261C6436317F9F2038569F377BF7F8F93870371CB37D0C37002B15D03368DB0508D41F4803691B010ED5301C8FF7D3F9002809D00023B3610123FB7200233D
:74A9E800BB727B72301C8DF7F8F933685806000F295C002904D0144B185CB072431E0DE010490B69DB000BD5104A11680A6853031B0F984204D193025B0F013BA3810CE0012333723B68FF20013083433B600D2307490B70301C73F775F9F0BDB4AE090086030800542008009EBB05001C2B0800E8C008004E
:54AA840083780F2B02D1032311480360704700B50F480368002B05D0002303600F21181C78F7FAFF00BD00B5094902060CD40868012807D102230B6018220F21002078F7CAFF03E0032801D1022000E0002000BD90AE09009F
:18AAF400044A1088012149020140480A012250407047C046E8C4080040
:98AB6C0000B500F0B5F8002320490B7000F0B8F800BD00B51E4B984202D1081C00F001F800BD00B5012100F006F800BD00B5002100F001F800BD30B50C1C144D15490B78012B1AD10178032901D0082915D18378002B12D100F08CF8002C03D02B7801332B7008E0041C2878013803D3287002208BF7C5FD201C00F083F830BD00B5FFF7D5FF00BD014908787047C04681B10900B85208005400080072
:24AC10000F2304480360044803600448036004480360704730300E0030340E0030380E000C200E00EB
:FBAC3C0010B5041C10480368052B02D19BF7B2F903E09FF7FFF9022801D0012012E0201CA1F74FF9041C9FF71FFC9FF73AFC204007D006490B7823430B70012080028BF776FD002010BDC046B0C808003BC308007847000000C09FE51CFF2FE1FC4005007847000000C09FE51CFF2FE1CC4805007847000000C09FE51CFF2FE1E05105007847000000C09FE51CFF2FE1741005007847000000C09FE51CFF2FE160E801007847000000C09FE51CFF2FE17CD704007847000000C09FE51CFF2FE190D704007847000000C09FE51CFF2FE1304F05007847000000C09FE51CFF2FE1CC51050023000000593B090024000000553B0900250000005D3B09002800002F
:FBAD370000415B09002E000000B55D090035000000953B090088000000D53B09008D000000F93B09009100000047A809009200000000000000000000000300000259460200040001040000000085770900000000009F7C0900DF6F0900AB760900337809000000000000000000216E0900675402000000000047720900000000000000000073720900B3720900B97309001774090000000000C3740900875102009F9504006D9904007F93040000000000DD99090000000000A7960400000000000000000005990400C39304009F9504006D99040091A2040000000000FD9A0900000000009D9B090093A3040099590900C7590900C3930400420500005E04AD
:62AE3200000062040000420500006C04000062190000440500006C040000621900000A060000A0860100C47A0200A861000021000C0000180008010000003C000000001800003C000000000000000008001800000000000000001E000000400100000100000014
:00000001FF
so I placed the hex file in the folder with bcmfwup.py, and edited bcmfwup.py to:
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import sys
import usb.core
import usb.util
import threading
import time
ID_VENDOR = 0x0b05
ID_PRODUCT = 0x17cf
class bcm_fw_up:
def __init__(self):
self.dev = usb.core.find(idVendor = ID_VENDOR, idProduct = ID_PRODUCT)
if self.dev is None:
raise ValueError('Device not found')
self.cfg = self.dev.get_active_configuration()
self.detach_drivers()
def detach_drivers(self):
for intf in self.cfg:
if self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
self.dev.detach_kernel_driver(intf.bInterfaceNumber)
def attach_drivers(self):
for intf in self.cfg:
if not self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
self.dev.attach_kernel_driver(intf.bInterfaceNumber)
def init_upload(self):
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
re.join()
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x2e, 0xfc, 0x00])
re.join()
def finish_upload(self):
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x4e, 0xfc, 0x04, 0xff, 0xff, 0xff, 0xff])
re.join()
re = read_event_thread(self.dev)
re.read()
re.join()
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
re.join()
re = read_event_thread(self.dev)
re.read()
#re2 = read_event_thread(self.dev, 0x82)
#re2.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x53, 0xfc, 0x01, 0x13])
re.join()
#re2.join()
def upload(self, address, data):
re = read_event_thread(self.dev)
re.read()
self.dev.write(2, '\x4c\xfc' + chr(len(data) + 4) + chr(address & 0xFF) +
chr((address >> 8) & 0xFF) + chr((address >> 16) & 0xFF) + chr((address >> 24) & 0xFF) + data)
re.join()
def reset(self):
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x03, 0x0c, 0x00])
re.join()
usb.util.dispose_resources(self.dev)
self.cfg = self.dev.get_active_configuration()
class read_event_thread(threading.Thread):
def __init__(self, dev, endpoint = 0x81):
super(read_event_thread, self).__init__()
self.daemon = True
self.dev = dev
self.endpoint = endpoint
def run(self):
try:
self.result = self.dev.read(self.endpoint, 0xff)
except usb.core.USBError as (errno, strerror):
print "read event error({0}): {1}".format(errno, strerror)
print 'event:', self.result
def read(self):
self.start()
time.sleep(0.1)
class intelhex:
data = []
def __init__(self, filename = None):
self.offset = 0
if filename is None:
return
self.load_from_file(filename)
def load_from_file(self, filename):
for line in open(filename):
self.append(line)
def append(self, line):
if not line[0] == ':':
return
line = line.rstrip()
length = int(line[1:3], 16)
address = int(line[3:7], 16)
rectype = int(line[7:9], 16)
checksum = int(line[-2:], 16)
if rectype == 1:
return
if rectype == 4:
self.offset = int(line[9:13], 16) * 0x10000
return
self.data.append((length, address + self.offset, line[9:-2].decode('hex'), checksum))
def main():
#hex = intelhex('BCM20702A0_001.001.024.0156.0204.hex')
hex = intelhex('BCM20702A1_001.002.014.1443.1469.hex')
up = bcm_fw_up()
up.init_upload()
for line in hex.data:
up.upload(line[1], line[2])
up.finish_upload()
up.reset()
#up.attach_drivers()
return 0
if __name__ == '__main__':
sys.exit(main())
NOTE: the version of pyusb in the ubuntu repos is too old in 14.04, since removing it would break other packages that depend on it, I did the following:
cd ~
git clone https://github.com/walac/pyusb.git
cd pyusb
sudo python setup.py install
Which overwrote the pyusb installed by the package python-usb using apt-get without causing dependency errors.
I then went back to the directory containing BCM20702A1_001.002.014.1443.1469.hex AND bcmfwup.py and ran:
./bcmfwup.py
Which printed a bunch of python lists to my terminal, just as it did for others in this topic, only it exited without generating any exceptions. I was then able to pair both my HTC One cellphone and a bluetooth beatbox, and played music on Amarok through the beatbox.
EDIT: Though it appears that I'm able to pair my phone with this chip, that's about where the usefulness ends. I've tried transferring numerous small files with no success at all. On the plus side of things, I can at least pair to my bluetooth speakers, but I have no other devices to test with ATM.
]]>To determine which of the driver files corresponds to a given device,
look at the ProdID entry in the 'usb-devices' output.
For instance, mine is
P: Vendor=0489 ProdID=e032 Rev=01.12
The vendor's driver directory has an 'inf' file, in this case
bcbtums-win7x64-brcm.inf
with a section labelled according to the ProdID:
RAMUSBE032
In this section is a reference to the file for the device:
BCM20702A1_001.002.014.0187.0194.hex
Harvey
]]>I'm probably just going to find another BT adapter that's got firmware already provided w/ the kernel or doesn't need the firmware loaded into it like this.
Edit: I should probably just create a new thread for this as it seems my case is sufficiently different. It's still listed as a BCM20702A0 though.
usb-devices is similar
T: Bus=06 Lev=02 Prnt=02 Port=05 Cnt=04 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0b05 ProdID=17cb Rev=01.12
S: Manufacturer=Broadcom Corp
S: Product=BCM20702A0
S: SerialNumber=000272C698E7
C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
Strangely, after running hciconfig hci0 up it's working... should this be necessary? hcitool dev still only shows its MAC/Serial number but it did attach to my phone now.
Edit: Though it also seems I need to echo my vendor/productID into /sys/bus/usb/drivers/btusb/new_id on every boot also and run hciconfig hci0 up...
Edit3 (i promise this is the last edit):
Looks like this may be a good time for it. Seems my device just hit the kernel. http://lkml.indiana.edu/hypermail/linux … 01887.html
]]>Harvey
]]>Upgraded to Ubuntu 13.04 pre ... stopped working .... BUT your script still does the trick .
Greetings
Ephraim
Ok, I actually found it! w00t.
P: Vendor=0b05 ProdID=17b5 Rev=01.12
This is all you need
I use this script in rc.d (which will not work with pure systemd systems - but it gives you the idea)
#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
#
# BCM20702A0 BT Adapter upload rampatch
#
stat_busy "applying Rampatch to BCM20702A0 Bluetooth adapter"
# put your path in here!Put the hexfile in same folder!
cd /path/to/bcmfwup
./bcmfwup.py
modprobe btusb
# adapted for BCM43228:
echo "0b05 17b5" >> /sys/bus/usb/drivers/btusb/new_id
stat_done
The bcmfwup python script for you should look like this:
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import sys
import usb.core
import usb.util
import threading
import time
ID_VENDOR = 0x0b05
ID_PRODUCT = 0x17b5
class bcm_fw_up:
def __init__(self):
self.dev = usb.core.find(idVendor = ID_VENDOR, idProduct = ID_PRODUCT)
if self.dev is None:
raise ValueError('Device not found')
self.cfg = self.dev.get_active_configuration()
self.detach_drivers()
def detach_drivers(self):
for intf in self.cfg:
if self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
self.dev.detach_kernel_driver(intf.bInterfaceNumber)
def attach_drivers(self):
for intf in self.cfg:
if not self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
self.dev.attach_kernel_driver(intf.bInterfaceNumber)
def init_upload(self):
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
re.join()
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x2e, 0xfc, 0x00])
re.join()
def finish_upload(self):
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x4e, 0xfc, 0x04, 0xff, 0xff, 0xff, 0xff])
re.join()
re = read_event_thread(self.dev)
re.read()
re.join()
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
re.join()
re = read_event_thread(self.dev)
re.read()
#re2 = read_event_thread(self.dev, 0x82)
#re2.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x53, 0xfc, 0x01, 0x13])
re.join()
#re2.join()
def upload(self, address, data):
re = read_event_thread(self.dev)
re.read()
self.dev.write(2, '\x4c\xfc' + chr(len(data) + 4) + chr(address & 0xFF) +
chr((address >> 8) & 0xFF) + chr((address >> 16) & 0xFF) + chr((address >> 24) & 0xFF) + data)
re.join()
def reset(self):
re = read_event_thread(self.dev)
re.read()
self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x03, 0x0c, 0x00])
re.join()
usb.util.dispose_resources(self.dev)
self.cfg = self.dev.get_active_configuration()
class read_event_thread(threading.Thread):
def __init__(self, dev, endpoint = 0x81):
super(read_event_thread, self).__init__()
self.daemon = True
self.dev = dev
self.endpoint = endpoint
def run(self):
try:
self.result = self.dev.read(self.endpoint, 0xff)
except usb.core.USBError as (errno, strerror):
print "read event error({0}): {1}".format(errno, strerror)
print 'event:', self.result
def read(self):
self.start()
time.sleep(0.1)
class intelhex:
data = []
def __init__(self, filename = None):
self.offset = 0
if filename is None:
return
self.load_from_file(filename)
def load_from_file(self, filename):
for line in open(filename):
self.append(line)
def append(self, line):
if not line[0] == ':':
return
line = line.rstrip()
length = int(line[1:3], 16)
address = int(line[3:7], 16)
rectype = int(line[7:9], 16)
checksum = int(line[-2:], 16)
if rectype == 1:
return
if rectype == 4:
self.offset = int(line[9:13], 16) * 0x10000
return
self.data.append((length, address + self.offset, line[9:-2].decode('hex'), checksum))
def main():
hex = intelhex('Yourhexfilenamehere.hex')
up = bcm_fw_up()
up.init_upload()
for line in hex.data:
up.upload(line[1], line[2])
up.finish_upload()
up.reset()
#up.attach_drivers()
return 0
if __name__ == '__main__':
sys.exit(main())
You need python2 and your firmware hex file from the windows driver. Rename in def main() hex = intelhex('Yourhexfilenamehere.hex') to the name of your hexfile and give it a try. This should be done before the initialization of bluetooth.
This is the way I do this. But keep in mind: this doesn't survice any suspend to disk/ram. You would have to do it again to resurrect it. I still hope for the bluez guys to accept the patch for my hardware
Hope this helps
Harvey
]]>The chip is fairly new and a completely different beast. Maybe it's better to open a different thread. Is your wlan working? You could try
usb-devices
for more information. I guess it has some kind of pci-usb bridge integrated. The easiest way to circumvent this is to buy a cheap separate bluetooth usb-adapter. I know that this is not what you wanted to hear. But think of the following: even if your chip would be supported both for wlan and bluetooth I don't think that they could be switched on and off separately...
Harvey
Ok, I actually found it! w00t.
T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0b05 ProdID=17b5 Rev=01.12
S: Manufacturer=Broadcom Corp
S: Product=BCM20702A0
S: SerialNumber=############
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
If it's there, can I use the firmware injection tool mentioned above to inject the firmware and power it on? What do I need to do in order to make that happen? I don't fear any bash work
]]>Any news about this regarding Kernel integration of the firmware stuff?
Not from my side. But the ubuntu guys seem to be working on this:
https://bugs.launchpad.net/ubuntu/+sour … ug/1065400
Harvey
]]>usb-devices
for more information. I guess it has some kind of pci-usb bridge integrated. The easiest way to circumvent this is to buy a cheap separate bluetooth usb-adapter. I know that this is not what you wanted to hear. But think of the following: even if your chip would be supported both for wlan and bluetooth I don't think that they could be switched on and off separately...
Harvey
]]>My situation is a bit different. My Bluetooth adapter is a part of a BCM43228 mPCIe chip which was included with my motherboard (ROG Maximus V Extreme). In Windows, it actually shows up as a USB(!) device, but on Linux, I can't see the device at all.
$ rfkill list all
Output: http://pastebin.com/err9T5WS
$ lspci
Output: http://pastebin.com/aSJccW7N
$ lsusb
Output: http://pastebin.com/ZWFc82Tp
$ dmesg
Output: http://pastebin.com/pR18nL1F
Windows Driver INF file: http://pastebin.com/inV15jqd
Any ideas on where to get started here? I'd try the patch, but I'm not even seeing the device at all at this point. Any ideas?
]]>